feat: TS化工作流MCP并加入博客上下文
This commit is contained in:
parent
4b42cb2eb7
commit
344acb5094
10
README.md
10
README.md
@ -1,6 +1,6 @@
|
|||||||
# KT Workflow MCP
|
# KT Workflow MCP
|
||||||
|
|
||||||
`ktWorkflow` 是 KT 工作区的可复用 MCP 能力包,用来把根目录 `AGENTS.md`、`SKILLS.md`、`TASKS.md` 中的协作流程变成可调用工具。
|
`ktWorkflow` 是 KT 工作区的可复用 MCP 能力包,用 TypeScript 封装工具入参、项目别名和返回结构,用来把根目录 `AGENTS.md`、`SKILLS.md`、`TASKS.md` 中的协作流程变成可调用工具。
|
||||||
|
|
||||||
## 能力边界
|
## 能力边界
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
```bash
|
```bash
|
||||||
cd D:/MyFiles/KT/mcp/ktWorkflow
|
cd D:/MyFiles/KT/mcp/ktWorkflow
|
||||||
pnpm install
|
pnpm install
|
||||||
|
pnpm run typecheck
|
||||||
pnpm run self-test
|
pnpm run self-test
|
||||||
pnpm run cleanup-history -- --dry-run
|
pnpm run cleanup-history -- --dry-run
|
||||||
```
|
```
|
||||||
@ -70,9 +71,16 @@ pnpm run cleanup-history -- --dry-run
|
|||||||
| `mcp` | `mcp/ktWorkflow` |
|
| `mcp` | `mcp/ktWorkflow` |
|
||||||
| `api` | `Node/kt-template-online-api` |
|
| `api` | `Node/kt-template-online-api` |
|
||||||
| `admin` | `Vue/kt-template-admin` |
|
| `admin` | `Vue/kt-template-admin` |
|
||||||
|
| `blog` | `Vue/kt-blog-web` |
|
||||||
| `web` | `Vue/kt-template-online-web` |
|
| `web` | `Vue/kt-template-online-web` |
|
||||||
| `playground` | `Vue/kt-template-online-playground` |
|
| `playground` | `Vue/kt-template-online-playground` |
|
||||||
|
|
||||||
|
## 开发说明
|
||||||
|
|
||||||
|
- 主入口是 `src/server.ts`,工具入参类型集中在 `src/types.ts`。
|
||||||
|
- `src/server.mjs` 只做兼容启动,保留给 MCP 客户端继续使用原来的 `node .../src/server.mjs` 配置。
|
||||||
|
- 如果本机默认 `node` 不是 20+,可通过 `KT_WORKFLOW_NODE` 指定 Node 22 路径。
|
||||||
|
|
||||||
## 使用建议
|
## 使用建议
|
||||||
|
|
||||||
- 写代码前先调用 `kt_prepare_task`;只需要单项信息时再调用 `kt_read_context` 或 `kt_inspect_project`。
|
- 写代码前先调用 `kt_prepare_task`;只需要单项信息时再调用 `kt_read_context` 或 `kt_inspect_project`。
|
||||||
|
|||||||
10
package.json
10
package.json
@ -10,7 +10,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"cleanup-history": "node src/server.mjs --cleanup-history",
|
"cleanup-history": "node src/server.mjs --cleanup-history",
|
||||||
"self-test": "node src/server.mjs --self-test",
|
"self-test": "node src/server.mjs --self-test",
|
||||||
"start": "node src/server.mjs"
|
"start": "node src/server.mjs",
|
||||||
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@modelcontextprotocol/sdk": "^1.20.0",
|
"@modelcontextprotocol/sdk": "^1.20.0",
|
||||||
@ -19,5 +20,10 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=20.19.0"
|
"node": ">=20.19.0"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.28.2"
|
"packageManager": "pnpm@10.28.2",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^25.9.1",
|
||||||
|
"tsx": "^4.22.3",
|
||||||
|
"typescript": "^6.0.3"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
316
pnpm-lock.yaml
316
pnpm-lock.yaml
@ -14,9 +14,175 @@ importers:
|
|||||||
zod:
|
zod:
|
||||||
specifier: ^3.25.0
|
specifier: ^3.25.0
|
||||||
version: 3.25.76
|
version: 3.25.76
|
||||||
|
devDependencies:
|
||||||
|
'@types/node':
|
||||||
|
specifier: ^25.9.1
|
||||||
|
version: 25.9.1
|
||||||
|
tsx:
|
||||||
|
specifier: ^4.22.3
|
||||||
|
version: 4.22.3
|
||||||
|
typescript:
|
||||||
|
specifier: ^6.0.3
|
||||||
|
version: 6.0.3
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [aix]
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.28.0':
|
||||||
|
resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.28.0':
|
||||||
|
resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.28.0':
|
||||||
|
resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.28.0':
|
||||||
|
resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [mips64el]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.28.0':
|
||||||
|
resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/netbsd-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [netbsd]
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [netbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/openharmony-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openharmony]
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [sunos]
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.28.0':
|
||||||
|
resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.28.0':
|
||||||
|
resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
'@hono/node-server@1.19.14':
|
'@hono/node-server@1.19.14':
|
||||||
resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==}
|
resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==}
|
||||||
engines: {node: '>=18.14.1'}
|
engines: {node: '>=18.14.1'}
|
||||||
@ -33,6 +199,9 @@ packages:
|
|||||||
'@cfworker/json-schema':
|
'@cfworker/json-schema':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@types/node@25.9.1':
|
||||||
|
resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==}
|
||||||
|
|
||||||
accepts@2.0.0:
|
accepts@2.0.0:
|
||||||
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
|
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@ -128,6 +297,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
|
esbuild@0.28.0:
|
||||||
|
resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
escape-html@1.0.3:
|
escape-html@1.0.3:
|
||||||
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
|
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
|
||||||
|
|
||||||
@ -171,6 +345,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
fsevents@2.3.3:
|
||||||
|
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||||
|
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
function-bind@1.1.2:
|
function-bind@1.1.2:
|
||||||
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
||||||
|
|
||||||
@ -359,10 +538,23 @@ packages:
|
|||||||
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
|
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
|
||||||
engines: {node: '>=0.6'}
|
engines: {node: '>=0.6'}
|
||||||
|
|
||||||
|
tsx@4.22.3:
|
||||||
|
resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
type-is@2.1.0:
|
type-is@2.1.0:
|
||||||
resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==}
|
resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==}
|
||||||
engines: {node: '>= 18'}
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
typescript@6.0.3:
|
||||||
|
resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
|
||||||
|
engines: {node: '>=14.17'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
undici-types@7.24.6:
|
||||||
|
resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
|
||||||
|
|
||||||
unpipe@1.0.0:
|
unpipe@1.0.0:
|
||||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
@ -389,6 +581,84 @@ packages:
|
|||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/netbsd-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openharmony-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.28.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@hono/node-server@1.19.14(hono@4.12.21)':
|
'@hono/node-server@1.19.14(hono@4.12.21)':
|
||||||
dependencies:
|
dependencies:
|
||||||
hono: 4.12.21
|
hono: 4.12.21
|
||||||
@ -415,6 +685,10 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
'@types/node@25.9.1':
|
||||||
|
dependencies:
|
||||||
|
undici-types: 7.24.6
|
||||||
|
|
||||||
accepts@2.0.0:
|
accepts@2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
mime-types: 3.0.2
|
mime-types: 3.0.2
|
||||||
@ -502,6 +776,35 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
es-errors: 1.3.0
|
es-errors: 1.3.0
|
||||||
|
|
||||||
|
esbuild@0.28.0:
|
||||||
|
optionalDependencies:
|
||||||
|
'@esbuild/aix-ppc64': 0.28.0
|
||||||
|
'@esbuild/android-arm': 0.28.0
|
||||||
|
'@esbuild/android-arm64': 0.28.0
|
||||||
|
'@esbuild/android-x64': 0.28.0
|
||||||
|
'@esbuild/darwin-arm64': 0.28.0
|
||||||
|
'@esbuild/darwin-x64': 0.28.0
|
||||||
|
'@esbuild/freebsd-arm64': 0.28.0
|
||||||
|
'@esbuild/freebsd-x64': 0.28.0
|
||||||
|
'@esbuild/linux-arm': 0.28.0
|
||||||
|
'@esbuild/linux-arm64': 0.28.0
|
||||||
|
'@esbuild/linux-ia32': 0.28.0
|
||||||
|
'@esbuild/linux-loong64': 0.28.0
|
||||||
|
'@esbuild/linux-mips64el': 0.28.0
|
||||||
|
'@esbuild/linux-ppc64': 0.28.0
|
||||||
|
'@esbuild/linux-riscv64': 0.28.0
|
||||||
|
'@esbuild/linux-s390x': 0.28.0
|
||||||
|
'@esbuild/linux-x64': 0.28.0
|
||||||
|
'@esbuild/netbsd-arm64': 0.28.0
|
||||||
|
'@esbuild/netbsd-x64': 0.28.0
|
||||||
|
'@esbuild/openbsd-arm64': 0.28.0
|
||||||
|
'@esbuild/openbsd-x64': 0.28.0
|
||||||
|
'@esbuild/openharmony-arm64': 0.28.0
|
||||||
|
'@esbuild/sunos-x64': 0.28.0
|
||||||
|
'@esbuild/win32-arm64': 0.28.0
|
||||||
|
'@esbuild/win32-ia32': 0.28.0
|
||||||
|
'@esbuild/win32-x64': 0.28.0
|
||||||
|
|
||||||
escape-html@1.0.3: {}
|
escape-html@1.0.3: {}
|
||||||
|
|
||||||
etag@1.8.1: {}
|
etag@1.8.1: {}
|
||||||
@ -569,6 +872,9 @@ snapshots:
|
|||||||
|
|
||||||
fresh@2.0.0: {}
|
fresh@2.0.0: {}
|
||||||
|
|
||||||
|
fsevents@2.3.3:
|
||||||
|
optional: true
|
||||||
|
|
||||||
function-bind@1.1.2: {}
|
function-bind@1.1.2: {}
|
||||||
|
|
||||||
get-intrinsic@1.3.0:
|
get-intrinsic@1.3.0:
|
||||||
@ -760,12 +1066,22 @@ snapshots:
|
|||||||
|
|
||||||
toidentifier@1.0.1: {}
|
toidentifier@1.0.1: {}
|
||||||
|
|
||||||
|
tsx@4.22.3:
|
||||||
|
dependencies:
|
||||||
|
esbuild: 0.28.0
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents: 2.3.3
|
||||||
|
|
||||||
type-is@2.1.0:
|
type-is@2.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
content-type: 2.0.0
|
content-type: 2.0.0
|
||||||
media-typer: 1.1.0
|
media-typer: 1.1.0
|
||||||
mime-types: 3.0.2
|
mime-types: 3.0.2
|
||||||
|
|
||||||
|
typescript@6.0.3: {}
|
||||||
|
|
||||||
|
undici-types@7.24.6: {}
|
||||||
|
|
||||||
unpipe@1.0.0: {}
|
unpipe@1.0.0: {}
|
||||||
|
|
||||||
vary@1.1.2: {}
|
vary@1.1.2: {}
|
||||||
|
|||||||
1115
src/server.mjs
1115
src/server.mjs
File diff suppressed because it is too large
Load Diff
1178
src/server.ts
Normal file
1178
src/server.ts
Normal file
File diff suppressed because it is too large
Load Diff
186
src/types.ts
Normal file
186
src/types.ts
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
export type ProjectAlias =
|
||||||
|
| 'admin'
|
||||||
|
| 'api'
|
||||||
|
| 'blog'
|
||||||
|
| 'mcp'
|
||||||
|
| 'playground'
|
||||||
|
| 'root'
|
||||||
|
| 'web';
|
||||||
|
|
||||||
|
export type RepoType = 'git' | 'missing' | 'none' | 'svn';
|
||||||
|
|
||||||
|
export type TaskType =
|
||||||
|
| 'api'
|
||||||
|
| 'backend'
|
||||||
|
| 'commit'
|
||||||
|
| 'database'
|
||||||
|
| 'deploy'
|
||||||
|
| 'docs'
|
||||||
|
| 'frontend'
|
||||||
|
| 'general'
|
||||||
|
| 'mcp'
|
||||||
|
| 'page'
|
||||||
|
| 'style';
|
||||||
|
|
||||||
|
export interface ResolvedProject {
|
||||||
|
alias: ProjectAlias | null;
|
||||||
|
label: string;
|
||||||
|
path: string;
|
||||||
|
relativePath: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ExecResult {
|
||||||
|
ok: boolean;
|
||||||
|
stderr: string;
|
||||||
|
stdout: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PackageJsonLike {
|
||||||
|
engines?: Record<string, string>;
|
||||||
|
packageManager?: string;
|
||||||
|
scripts?: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PackageInfo {
|
||||||
|
engines: Record<string, string>;
|
||||||
|
lockfiles: Record<'npm' | 'pnpm' | 'yarn', boolean>;
|
||||||
|
packageManager: string | null;
|
||||||
|
packageManagerSpec: string | null;
|
||||||
|
scripts: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface InspectProjectInput {
|
||||||
|
includeGit?: boolean;
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface InspectAllProjectsInput {
|
||||||
|
includeGit?: boolean;
|
||||||
|
includeRoot?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface VerificationPlanInput {
|
||||||
|
changeType?: TaskType;
|
||||||
|
includePageTest?: boolean;
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PageTestCaseInput {
|
||||||
|
account?: string;
|
||||||
|
assertions?: string[];
|
||||||
|
entryUrl?: string;
|
||||||
|
project?: string;
|
||||||
|
steps?: string[];
|
||||||
|
title?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PageTestCaseResult {
|
||||||
|
account: string;
|
||||||
|
assertions: string[];
|
||||||
|
cleanup: string[];
|
||||||
|
entryUrl: string;
|
||||||
|
maxRounds: number;
|
||||||
|
project: ResolvedProject;
|
||||||
|
protocol: string[];
|
||||||
|
steps: string[];
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GuardrailsInput {
|
||||||
|
changeType?: TaskType;
|
||||||
|
includePageTest?: boolean;
|
||||||
|
paths?: string[];
|
||||||
|
project?: string;
|
||||||
|
taskType?: TaskType;
|
||||||
|
userRequest?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiTestPlanInput {
|
||||||
|
auth?: 'bearer' | 'none';
|
||||||
|
baseUrl?: string;
|
||||||
|
body?: Record<string, unknown>;
|
||||||
|
contentType?: boolean;
|
||||||
|
endpoint?: string;
|
||||||
|
expectedFields?: string[];
|
||||||
|
method?: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT';
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CleanupProcessPlanInput {
|
||||||
|
ports?: number[];
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CleanupHistoryInput {
|
||||||
|
dryRun?: boolean;
|
||||||
|
keep?: number;
|
||||||
|
roots?: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EnvPolicyInput {
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RiskScanInput {
|
||||||
|
changedFiles?: string[];
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PrepareTaskInput extends GuardrailsInput {
|
||||||
|
changedFiles?: string[];
|
||||||
|
entryUrl?: string;
|
||||||
|
includeGit?: boolean;
|
||||||
|
recordTitle?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TaskRecordInput {
|
||||||
|
content?: string;
|
||||||
|
date?: string;
|
||||||
|
dryRun?: boolean;
|
||||||
|
scope?: string[];
|
||||||
|
testCase?: string;
|
||||||
|
title: string;
|
||||||
|
verification?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CommitChecklistInput {
|
||||||
|
message?: string;
|
||||||
|
project?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkflowContextInput {
|
||||||
|
taskRecordCount?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface VerificationPlanResult {
|
||||||
|
changeType: TaskType;
|
||||||
|
commands: string[];
|
||||||
|
notes: string[];
|
||||||
|
project: ResolvedProject;
|
||||||
|
repoType: RepoType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GuardrailSet {
|
||||||
|
beforeEdit: string[];
|
||||||
|
doNot: string[];
|
||||||
|
duringEdit: string[];
|
||||||
|
verification: VerificationPlanResult & {
|
||||||
|
pageTestCase?: PageTestCaseResult;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GuardrailsResult {
|
||||||
|
guardrails: GuardrailSet;
|
||||||
|
paths: string[];
|
||||||
|
project: ResolvedProject;
|
||||||
|
taskType: TaskType;
|
||||||
|
userRequest: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface McpTextResponse {
|
||||||
|
[key: string]: unknown;
|
||||||
|
content: Array<{
|
||||||
|
text: string;
|
||||||
|
type: 'text';
|
||||||
|
}>;
|
||||||
|
}
|
||||||
17
tsconfig.json
Normal file
17
tsconfig.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"lib": ["ES2024"],
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"noEmit": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": true,
|
||||||
|
"target": "ES2024",
|
||||||
|
"types": ["node"]
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user