@cat-kit/agent-context 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -0
- package/dist/adapters/tool-targets.js +1 -1
- package/dist/adapters/tool-targets.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/setup.js +2 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/shared.js +4 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/update.js +2 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/stats.html +1 -1
- package/package.json +4 -10
- package/src/cli.ts +2 -2
- package/dist/adapters/tool-targets.d.ts +0 -18
- package/dist/domain/types.d.ts +0 -37
- package/dist/domain/workflow-content.d.ts +0 -7
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -1
- package/dist/runtime/execute.d.ts +0 -8
- package/src/index.ts +0 -11
package/README.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Agent Context
|
|
2
|
+
|
|
3
|
+
`@cat-kit/agent-context` 为主流 AI 编程助手生成统一的 `ac` 前缀工作流命令,让你用一套固定流程驱动 AI 完成从需求到交付的全过程。
|
|
4
|
+
|
|
5
|
+
## 它解决什么问题
|
|
6
|
+
|
|
7
|
+
不同 AI 编程工具(Claude、Codex、Cursor、Copilot……)各有自己的命令格式和目录约定。当你同时使用多个工具时,需要为每个工具分别编写和维护工作流命令,内容重复且容易不一致。
|
|
8
|
+
|
|
9
|
+
`agent-context` 只需一条命令,就能为你选择的所有工具生成格式正确、内容统一的工作流命令文件。
|
|
10
|
+
|
|
11
|
+
## 安装
|
|
12
|
+
|
|
13
|
+
推荐全局安装:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g @cat-kit/agent-context
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 快速开始
|
|
20
|
+
|
|
21
|
+
在项目根目录执行:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
agent-context setup
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
交互式选择你使用的 AI 工具后,工具会自动在项目中生成对应的命令文件。之后你就可以在 AI 助手中直接调用这些命令了。
|
|
28
|
+
|
|
29
|
+
## 工作流
|
|
30
|
+
|
|
31
|
+
Agent Context 定义了 6 个命令,覆盖一个计划从创建到归档的完整生命周期:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
init → plan → replan → implement → patch → done
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
| 命令 | 作用 | 典型场景 |
|
|
38
|
+
| ----------- | ---------------- | ---------------------------------- |
|
|
39
|
+
| `init` | 初始化项目上下文 | 当你第一次在这个项目使用时 |
|
|
40
|
+
| `plan` | 创建新计划 | 开始一个新需求或任务 |
|
|
41
|
+
| `replan` | 重新规划 | 计划不合理或需求变更时调整 |
|
|
42
|
+
| `implement` | 实施计划 | 让 AI 按计划逐步编码 |
|
|
43
|
+
| `patch` | 补丁修复 | 实施完成后发现需要小幅修改 |
|
|
44
|
+
| `done` | 归档计划 | 任务彻底完成,归档并进入下一个计划 |
|
|
45
|
+
|
|
46
|
+
### 典型工作流示例
|
|
47
|
+
|
|
48
|
+
**场景:为项目添加一个新功能**
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
1. /ac-init ← 首次使用,初始化项目上下文
|
|
52
|
+
2. /ac-plan ← 描述需求,AI 生成实施计划
|
|
53
|
+
3. /ac-implement ← AI 按计划编码实施
|
|
54
|
+
4. /ac-patch ← 修复实施中遗漏的细节
|
|
55
|
+
5. /ac-done ← 确认完成,归档计划
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**场景:计划不满意,需要调整**
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
1. /ac-plan ← 创建计划
|
|
62
|
+
2. /ac-replan ← 描述调整方向,AI 重新规划
|
|
63
|
+
3. /ac-implement ← 按新计划实施
|
|
64
|
+
4. /ac-done ← 归档
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 支持的工具
|
|
68
|
+
|
|
69
|
+
| 工具 | 命令文件目录 | 调用方式示例 |
|
|
70
|
+
| -------------- | ------------------- | ------------ |
|
|
71
|
+
| Claude | `.claude/commands/` | `/ac:init` |
|
|
72
|
+
| Codex | `.codex/commands/` | `/ac-init` |
|
|
73
|
+
| Cursor | `.cursor/commands/` | `/ac-init` |
|
|
74
|
+
| Antigravity | `.agents/` | `/ac-init` |
|
|
75
|
+
| GitHub Copilot | `.github/prompts/` | `#ac-init` |
|
|
76
|
+
|
|
77
|
+
## 命令参考
|
|
78
|
+
|
|
79
|
+
### `agent-context setup`
|
|
80
|
+
|
|
81
|
+
初始化工作流命令。交互式选择目标工具后,在项目中生成对应的命令文件。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# 交互式
|
|
85
|
+
agent-context setup
|
|
86
|
+
|
|
87
|
+
# 直接指定工具,跳过选择
|
|
88
|
+
agent-context setup --tools claude,cursor,copilot
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### `agent-context update`
|
|
92
|
+
|
|
93
|
+
更新已有的工作流命令文件(仅更新已安装的工具,不新增)。适用于升级 `@cat-kit/agent-context` 版本后同步最新模板。
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
agent-context update
|
|
97
|
+
|
|
98
|
+
# 仅检查是否有待更新内容,不实际写入
|
|
99
|
+
agent-context update --check
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 通用选项
|
|
103
|
+
|
|
104
|
+
| 选项 | 说明 |
|
|
105
|
+
| ----------------- | ---------------------- |
|
|
106
|
+
| `--tools <tools>` | 指定目标工具,逗号分隔 |
|
|
107
|
+
| `--yes` | 非交互模式 |
|
|
108
|
+
| `--check` | 仅检查,不写入文件 |
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
MIT
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as e}from"node:path";import"node:fs";const
|
|
1
|
+
import{resolve as e}from"node:path";import{existsSync as t}from"node:fs";const n={claude:{id:`claude`,name:`Claude Code`,rootDir:`.claude/commands`,fileExtension:`.md`,supportsFrontmatter:!0,commandSeparator:`:`,commandPrefix:`/`},codex:{id:`codex`,name:`Codex`,rootDir:`.codex/commands`,fileExtension:`.md`,supportsFrontmatter:!0,commandSeparator:`-`,commandPrefix:`/`},cursor:{id:`cursor`,name:`Cursor`,rootDir:`.cursor/commands`,fileExtension:`.md`,supportsFrontmatter:!1,commandSeparator:`-`,commandPrefix:`/`},antigravity:{id:`antigravity`,name:`Antigravity`,rootDir:`.agents`,fileExtension:`.md`,supportsFrontmatter:!0,commandSeparator:`-`,commandPrefix:`/`},copilot:{id:`copilot`,name:`GitHub Copilot`,rootDir:`.github/prompts`,fileExtension:`.prompt.md`,supportsFrontmatter:!0,commandSeparator:`-`,commandPrefix:`#`}},r=[`claude`,`codex`,`cursor`,`antigravity`,`copilot`],i=[`init`,`plan`,`replan`,`implement`,`patch`,`done`];function a(){return r.map(e=>({id:e,name:n[e].name}))}function o(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return[...r];let n=[];for(let e of t){if(!u(e))throw Error(`不支持的工具标识: ${e}。可选值: ${r.join(`, `)}`);n.includes(e)||n.push(e)}return n}function s(e){return(e&&e.length>0?e:r).map(e=>({...n[e]}))}function c(e){return r.filter(r=>{let a=n[r],o=l(a,e);return i.some(e=>t(o.commandFile(e)))})}function l(t,n){let r=e(n,t.rootDir),i=t.fileExtension;if(t.commandSeparator===`:`){let t=e(r,`ac`);return{commandFile:n=>e(t,`${n}${i}`)}}return{commandFile:t=>e(r,`ac-${t}${i}`)}}function u(e){return Object.hasOwn(n,e)}export{r as DEFAULT_TOOL_ORDER,c as detectConfiguredToolIds,a as getToolChoices,o as parseToolIds,s as resolveToolTargets,l as resolveWorkflowPaths};
|
|
2
2
|
//# sourceMappingURL=tool-targets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-targets.js","names":[],"sources":["../../src/adapters/tool-targets.ts"],"sourcesContent":["import { resolve } from 'node:path'\nimport { existsSync } from 'node:fs'\n\nimport type { ToolId, ToolTarget, WorkflowCommandName } from '../domain/types'\n\nconst TOOL_TARGET_MAP: Record<ToolId, ToolTarget> = {\n claude: {\n id: 'claude',\n name: 'Claude Code',\n rootDir: '.claude/commands',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: ':',\n commandPrefix: '/'\n },\n codex: {\n id: 'codex',\n name: 'Codex',\n rootDir: '.codex/commands',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n cursor: {\n id: 'cursor',\n name: 'Cursor',\n rootDir: '.cursor/commands',\n fileExtension: '.md',\n supportsFrontmatter: false,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n antigravity: {\n id: 'antigravity',\n name: 'Antigravity',\n rootDir: '.agents',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n copilot: {\n id: 'copilot',\n name: 'GitHub Copilot',\n rootDir: '.github/prompts',\n fileExtension: '.prompt.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '#'\n }\n}\n\nexport const DEFAULT_TOOL_ORDER: ToolId[] = [\n 'claude',\n 'codex',\n 'cursor',\n 'antigravity',\n 'copilot'\n]\n\nconst WORKFLOW_COMMAND_ORDER: WorkflowCommandName[] = [\n 'init',\n 'plan',\n 'replan',\n 'implement',\n 'patch',\n 'done'\n]\n\nexport interface ToolChoice {\n id: ToolId\n name: string\n}\n\nexport function getToolChoices(): ToolChoice[] {\n return DEFAULT_TOOL_ORDER.map(id => ({\n id,\n name: TOOL_TARGET_MAP[id].name\n }))\n}\n\nexport function parseToolIds(toolsText: string): ToolId[] {\n const parsed = toolsText\n .split(',')\n .map(item => item.trim().toLowerCase())\n .filter(Boolean)\n\n if (parsed.length === 0) {\n return [...DEFAULT_TOOL_ORDER]\n }\n\n const uniqueIds: ToolId[] = []\n\n for (const value of parsed) {\n if (!isToolId(value)) {\n throw new Error(\n `不支持的工具标识: ${value}。可选值: ${DEFAULT_TOOL_ORDER.join(', ')}`\n )\n }\n\n if (!uniqueIds.includes(value)) {\n uniqueIds.push(value)\n }\n }\n\n return uniqueIds\n}\n\nexport function resolveToolTargets(tools?: ToolId[]): ToolTarget[] {\n const selected = tools && tools.length > 0 ? tools : DEFAULT_TOOL_ORDER\n return selected.map(id => ({ ...TOOL_TARGET_MAP[id] }))\n}\n\nexport function detectConfiguredToolIds(cwd: string): ToolId[] {\n return DEFAULT_TOOL_ORDER.filter((toolId) => {\n const target = TOOL_TARGET_MAP[toolId]\n const workflowPaths = resolveWorkflowPaths(target, cwd)\n\n return WORKFLOW_COMMAND_ORDER.some(command =>\n existsSync(workflowPaths.commandFile(command))\n )\n })\n}\n\n// ── 工作流路径解析 ────────────────────────────────────\n\nexport interface WorkflowPaths {\n commandFile(name: WorkflowCommandName): string\n}\n\n/**\n * 根据工具约束计算工作流文件输出路径\n *\n * - separator=':' (Claude) → 嵌套: .claude/commands/ac/init.md → /ac:init\n * - separator='-' (其他) → 扁平: .cursor/commands/ac-init.md → /ac-init\n */\nexport function resolveWorkflowPaths(target: ToolTarget, cwd: string): WorkflowPaths {\n const root = resolve(cwd, target.rootDir)\n const ext = target.fileExtension\n const nested = target.commandSeparator === ':'\n\n if (nested) {\n const nsDir = resolve(root, 'ac')\n return {\n commandFile: name => resolve(nsDir, `${name}${ext}`)\n }\n }\n\n return {\n commandFile: name => resolve(root, `ac-${name}${ext}`)\n }\n}\n\nfunction isToolId(value: string): value is ToolId {\n return Object.hasOwn(TOOL_TARGET_MAP, value)\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-targets.js","names":[],"sources":["../../src/adapters/tool-targets.ts"],"sourcesContent":["import { resolve } from 'node:path'\nimport { existsSync } from 'node:fs'\n\nimport type { ToolId, ToolTarget, WorkflowCommandName } from '../domain/types'\n\nconst TOOL_TARGET_MAP: Record<ToolId, ToolTarget> = {\n claude: {\n id: 'claude',\n name: 'Claude Code',\n rootDir: '.claude/commands',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: ':',\n commandPrefix: '/'\n },\n codex: {\n id: 'codex',\n name: 'Codex',\n rootDir: '.codex/commands',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n cursor: {\n id: 'cursor',\n name: 'Cursor',\n rootDir: '.cursor/commands',\n fileExtension: '.md',\n supportsFrontmatter: false,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n antigravity: {\n id: 'antigravity',\n name: 'Antigravity',\n rootDir: '.agents',\n fileExtension: '.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '/'\n },\n copilot: {\n id: 'copilot',\n name: 'GitHub Copilot',\n rootDir: '.github/prompts',\n fileExtension: '.prompt.md',\n supportsFrontmatter: true,\n commandSeparator: '-',\n commandPrefix: '#'\n }\n}\n\nexport const DEFAULT_TOOL_ORDER: ToolId[] = [\n 'claude',\n 'codex',\n 'cursor',\n 'antigravity',\n 'copilot'\n]\n\nconst WORKFLOW_COMMAND_ORDER: WorkflowCommandName[] = [\n 'init',\n 'plan',\n 'replan',\n 'implement',\n 'patch',\n 'done'\n]\n\nexport interface ToolChoice {\n id: ToolId\n name: string\n}\n\nexport function getToolChoices(): ToolChoice[] {\n return DEFAULT_TOOL_ORDER.map(id => ({\n id,\n name: TOOL_TARGET_MAP[id].name\n }))\n}\n\nexport function parseToolIds(toolsText: string): ToolId[] {\n const parsed = toolsText\n .split(',')\n .map(item => item.trim().toLowerCase())\n .filter(Boolean)\n\n if (parsed.length === 0) {\n return [...DEFAULT_TOOL_ORDER]\n }\n\n const uniqueIds: ToolId[] = []\n\n for (const value of parsed) {\n if (!isToolId(value)) {\n throw new Error(\n `不支持的工具标识: ${value}。可选值: ${DEFAULT_TOOL_ORDER.join(', ')}`\n )\n }\n\n if (!uniqueIds.includes(value)) {\n uniqueIds.push(value)\n }\n }\n\n return uniqueIds\n}\n\nexport function resolveToolTargets(tools?: ToolId[]): ToolTarget[] {\n const selected = tools && tools.length > 0 ? tools : DEFAULT_TOOL_ORDER\n return selected.map(id => ({ ...TOOL_TARGET_MAP[id] }))\n}\n\nexport function detectConfiguredToolIds(cwd: string): ToolId[] {\n return DEFAULT_TOOL_ORDER.filter((toolId) => {\n const target = TOOL_TARGET_MAP[toolId]\n const workflowPaths = resolveWorkflowPaths(target, cwd)\n\n return WORKFLOW_COMMAND_ORDER.some(command =>\n existsSync(workflowPaths.commandFile(command))\n )\n })\n}\n\n// ── 工作流路径解析 ────────────────────────────────────\n\nexport interface WorkflowPaths {\n commandFile(name: WorkflowCommandName): string\n}\n\n/**\n * 根据工具约束计算工作流文件输出路径\n *\n * - separator=':' (Claude) → 嵌套: .claude/commands/ac/init.md → /ac:init\n * - separator='-' (其他) → 扁平: .cursor/commands/ac-init.md → /ac-init\n */\nexport function resolveWorkflowPaths(target: ToolTarget, cwd: string): WorkflowPaths {\n const root = resolve(cwd, target.rootDir)\n const ext = target.fileExtension\n const nested = target.commandSeparator === ':'\n\n if (nested) {\n const nsDir = resolve(root, 'ac')\n return {\n commandFile: name => resolve(nsDir, `${name}${ext}`)\n }\n }\n\n return {\n commandFile: name => resolve(root, `ac-${name}${ext}`)\n }\n}\n\nfunction isToolId(value: string): value is ToolId {\n return Object.hasOwn(TOOL_TARGET_MAP, value)\n}\n"],"mappings":"yEAKA,MAAM,EAA8C,CAClD,OAAQ,CACN,GAAI,SACJ,KAAM,cACN,QAAS,mBACT,cAAe,MACf,oBAAqB,GACrB,iBAAkB,IAClB,cAAe,IAChB,CACD,MAAO,CACL,GAAI,QACJ,KAAM,QACN,QAAS,kBACT,cAAe,MACf,oBAAqB,GACrB,iBAAkB,IAClB,cAAe,IAChB,CACD,OAAQ,CACN,GAAI,SACJ,KAAM,SACN,QAAS,mBACT,cAAe,MACf,oBAAqB,GACrB,iBAAkB,IAClB,cAAe,IAChB,CACD,YAAa,CACX,GAAI,cACJ,KAAM,cACN,QAAS,UACT,cAAe,MACf,oBAAqB,GACrB,iBAAkB,IAClB,cAAe,IAChB,CACD,QAAS,CACP,GAAI,UACJ,KAAM,iBACN,QAAS,kBACT,cAAe,aACf,oBAAqB,GACrB,iBAAkB,IAClB,cAAe,IAChB,CACF,CAEY,EAA+B,CAC1C,SACA,QACA,SACA,cACA,UACD,CAEK,EAAgD,CACpD,OACA,OACA,SACA,YACA,QACA,OACD,CAOD,SAAgB,GAA+B,CAC7C,OAAO,EAAmB,IAAI,IAAO,CACnC,KACA,KAAM,EAAgB,GAAI,KAC3B,EAAE,CAGL,SAAgB,EAAa,EAA6B,CACxD,IAAM,EAAS,EACZ,MAAM,IAAI,CACV,IAAI,GAAQ,EAAK,MAAM,CAAC,aAAa,CAAC,CACtC,OAAO,QAAQ,CAElB,GAAI,EAAO,SAAW,EACpB,MAAO,CAAC,GAAG,EAAmB,CAGhC,IAAM,EAAsB,EAAE,CAE9B,IAAK,IAAM,KAAS,EAAQ,CAC1B,GAAI,CAAC,EAAS,EAAM,CAClB,MAAU,MACR,aAAa,EAAM,QAAQ,EAAmB,KAAK,KAAK,GACzD,CAGE,EAAU,SAAS,EAAM,EAC5B,EAAU,KAAK,EAAM,CAIzB,OAAO,EAGT,SAAgB,EAAmB,EAAgC,CAEjE,OADiB,GAAS,EAAM,OAAS,EAAI,EAAQ,GACrC,IAAI,IAAO,CAAE,GAAG,EAAgB,GAAK,EAAE,CAGzD,SAAgB,EAAwB,EAAuB,CAC7D,OAAO,EAAmB,OAAQ,GAAW,CAC3C,IAAM,EAAS,EAAgB,GACzB,EAAgB,EAAqB,EAAQ,EAAI,CAEvD,OAAO,EAAuB,KAAK,GACjC,EAAW,EAAc,YAAY,EAAQ,CAAC,CAC/C,EACD,CAeJ,SAAgB,EAAqB,EAAoB,EAA4B,CACnF,IAAM,EAAO,EAAQ,EAAK,EAAO,QAAQ,CACnC,EAAM,EAAO,cAGnB,GAFe,EAAO,mBAAqB,IAE/B,CACV,IAAM,EAAQ,EAAQ,EAAM,KAAK,CACjC,MAAO,CACL,YAAa,GAAQ,EAAQ,EAAO,GAAG,IAAO,IAAM,CACrD,CAGH,MAAO,CACL,YAAa,GAAQ,EAAQ,EAAM,MAAM,IAAO,IAAM,CACvD,CAGH,SAAS,EAAS,EAAgC,CAChD,OAAO,OAAO,OAAO,EAAiB,EAAM"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{setupCommand as e}from"./commands/setup.js";import{updateCommand as t}from"./commands/update.js";import{Command as n}from"commander";const r=new n;r.name(`agent-context`).description(`Agent Context 工作流生成工具`).version(`2.0.0`),r.command(`setup`).description(`初始化工作流命令`).option(`--tools <tools>`,`指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot`).option(`--yes`,`非交互模式预留参数(当前版本无需确认)`).option(`--check`,`仅检查是否存在待更新内容,不写入文件`).action(e),r.command(`update`).description(`更新工作流命令`).option(`--tools <tools>`,`指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot`).option(`--yes`,`非交互模式预留参数(当前版本无需确认)`).option(`--check`,`仅检查是否存在待更新内容,不写入文件`).action(t),r.parseAsync().catch(e=>{let t=e instanceof Error?e.message:String(e);console.error(`\n❌ ${t}`),process.exitCode=1});export{};
|
|
3
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander'\n\nimport { setupCommand } from './commands/setup'\nimport { updateCommand } from './commands/update'\n\nconst program = new Command()\n\nprogram.name('agent-context').description('Agent Context 工作流生成工具').version('2.0.0')\n\nprogram\n .command('setup')\n .description('初始化工作流命令')\n .option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')\n .option('--yes', '非交互模式预留参数(当前版本无需确认)')\n .option('--check', '仅检查是否存在待更新内容,不写入文件')\n .action(setupCommand)\n\nprogram\n .command('update')\n .description('更新工作流命令')\n .option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')\n .option('--yes', '非交互模式预留参数(当前版本无需确认)')\n .option('--check', '仅检查是否存在待更新内容,不写入文件')\n .action(updateCommand)\n\nprogram.parseAsync().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`\\n❌ ${message}`) // eslint-disable-line no-console\n process.exitCode = 1\n})\n"],"mappings":";4IAOA,MAAM,EAAU,IAAI,EAEpB,EAAQ,KAAK,gBAAgB,CAAC,YAAY,wBAAwB,CAAC,QAAQ,QAAQ,CAEnF,EACG,QAAQ,QAAQ,CAChB,YAAY,WAAW,CACvB,OAAO,kBAAmB,sDAAsD,CAChF,OAAO,QAAS,sBAAsB,CACtC,OAAO,UAAW,qBAAqB,CACvC,OAAO,EAAa,CAEvB,EACG,QAAQ,SAAS,CACjB,YAAY,UAAU,CACtB,OAAO,kBAAmB,sDAAsD,CAChF,OAAO,QAAS,sBAAsB,CACtC,OAAO,UAAW,qBAAqB,CACvC,OAAO,EAAc,CAExB,EAAQ,YAAY,CAAC,MAAO,GAAmB,CAC7C,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACtE,QAAQ,MAAM,OAAO,IAAU,CAC/B,QAAQ,SAAW,GACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DEFAULT_TOOL_ORDER as e,detectConfiguredToolIds as t,getToolChoices as n,parseToolIds as r}from"../adapters/tool-targets.js";import{runSetup as i}from"../runtime/execute.js";import{printCheckResult as a,printRunSummary as o}from"./shared.js";import{checkbox as s}from"@inquirer/prompts";async function c(e={}){let t=process.cwd(),n=await l(t,e),r=e.check??!1,s=await i({cwd:t,tools:n,check:r});if(r){a(s,t),s.changed.length>0&&(process.exitCode=1);return}o(s,t)}async function l(i,a){let o=a.tools;if(!o||o.trim().length===0){let r=t(i);return a.yes?r.length>0?r:[...e]:await s({message:`请选择要生成工作流命令的工具(可多选):`,choices:n().map(e=>({name:e.name,value:e.id,checked:r.includes(e.id)})),required:!0})}return r(o)}export{c as setupCommand};
|
|
2
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","names":[],"sources":["../../src/commands/setup.ts"],"sourcesContent":["import { checkbox } from '@inquirer/prompts'\n\nimport {\n DEFAULT_TOOL_ORDER,\n detectConfiguredToolIds,\n getToolChoices,\n parseToolIds\n} from '../adapters/tool-targets'\nimport type { ToolId } from '../domain/types'\nimport { runSetup } from '../runtime/execute'\nimport { printCheckResult, printRunSummary } from './shared'\n\nexport interface SetupCommandOptions {\n tools?: string\n check?: boolean\n yes?: boolean\n}\n\nexport async function setupCommand(options: SetupCommandOptions = {}): Promise<void> {\n const cwd = process.cwd()\n const tools = await resolveTools(cwd, options)\n const check = options.check ?? false\n\n const result = await runSetup({ cwd, tools, check })\n\n if (check) {\n printCheckResult(result, cwd)\n if (result.changed.length > 0) {\n process.exitCode = 1\n }\n return\n }\n\n printRunSummary(result, cwd)\n}\n\nasync function resolveTools(cwd: string, options: SetupCommandOptions): Promise<ToolId[] | undefined> {\n const raw = options.tools\n\n if (!raw || raw.trim().length === 0) {\n const configuredTools = detectConfiguredToolIds(cwd)\n\n if (options.yes) {\n if (configuredTools.length > 0) {\n return configuredTools\n }\n return [...DEFAULT_TOOL_ORDER]\n }\n\n const selectedTools = await checkbox<ToolId>({\n message: '请选择要生成工作流命令的工具(可多选):',\n choices: getToolChoices().map((tool) => ({\n name: tool.name,\n value: tool.id,\n checked: configuredTools.includes(tool.id)\n })),\n required: true\n })\n\n return selectedTools\n }\n\n return parseToolIds(raw)\n}\n"],"mappings":"sSAkBA,eAAsB,EAAa,EAA+B,EAAE,CAAiB,CACnF,IAAM,EAAM,QAAQ,KAAK,CACnB,EAAQ,MAAM,EAAa,EAAK,EAAQ,CACxC,EAAQ,EAAQ,OAAS,GAEzB,EAAS,MAAM,EAAS,CAAE,MAAK,QAAO,QAAO,CAAC,CAEpD,GAAI,EAAO,CACT,EAAiB,EAAQ,EAAI,CACzB,EAAO,QAAQ,OAAS,IAC1B,QAAQ,SAAW,GAErB,OAGF,EAAgB,EAAQ,EAAI,CAG9B,eAAe,EAAa,EAAa,EAA6D,CACpG,IAAM,EAAM,EAAQ,MAEpB,GAAI,CAAC,GAAO,EAAI,MAAM,CAAC,SAAW,EAAG,CACnC,IAAM,EAAkB,EAAwB,EAAI,CAmBpD,OAjBI,EAAQ,IACN,EAAgB,OAAS,EACpB,EAEF,CAAC,GAAG,EAAmB,CAGV,MAAM,EAAiB,CAC3C,QAAS,uBACT,QAAS,GAAgB,CAAC,IAAK,IAAU,CACvC,KAAM,EAAK,KACX,MAAO,EAAK,GACZ,QAAS,EAAgB,SAAS,EAAK,GAAG,CAC3C,EAAE,CACH,SAAU,GACX,CAAC,CAKJ,OAAO,EAAa,EAAI"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{relative as e}from"node:path";function t(t,n){let r=t.mode===`setup`?`setup`:`update`;if(console.log(`\n✅ agent-context ${r} 完成`),t.created.length>0){console.log(`\n新增 ${t.created.length} 个文件:`);for(let r of t.created)console.log(`- ${e(n,r)}`)}if(t.updated.length>0){console.log(`\n更新 ${t.updated.length} 个文件:`);for(let r of t.updated)console.log(`- ${e(n,r)}`)}t.unchanged.length>0&&console.log(`\n无变更 ${t.unchanged.length} 个文件`)}function n(t,n){if(t.changed.length===0){console.log(`
|
|
2
|
+
✅ 检查通过:无需更新`);return}console.log(`
|
|
3
|
+
❌ 检查失败:以下文件需要更新`);for(let r of t.changed)console.log(`- ${e(n,r)}`)}export{n as printCheckResult,t as printRunSummary};
|
|
4
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","names":[],"sources":["../../src/commands/shared.ts"],"sourcesContent":["import { relative } from 'node:path'\n\nimport type { RunResult } from '../domain/types'\n\nexport function printRunSummary(result: RunResult, cwd: string): void {\n const modeTitle = result.mode === 'setup' ? 'setup' : 'update'\n console.log(`\\n✅ agent-context ${modeTitle} 完成`) // eslint-disable-line no-console\n\n if (result.created.length > 0) {\n console.log(`\\n新增 ${result.created.length} 个文件:`) // eslint-disable-line no-console\n for (const filePath of result.created) {\n console.log(`- ${relative(cwd, filePath)}`) // eslint-disable-line no-console\n }\n }\n\n if (result.updated.length > 0) {\n console.log(`\\n更新 ${result.updated.length} 个文件:`) // eslint-disable-line no-console\n for (const filePath of result.updated) {\n console.log(`- ${relative(cwd, filePath)}`) // eslint-disable-line no-console\n }\n }\n\n if (result.unchanged.length > 0) {\n console.log(`\\n无变更 ${result.unchanged.length} 个文件`) // eslint-disable-line no-console\n }\n}\n\nexport function printCheckResult(result: RunResult, cwd: string): void {\n if (result.changed.length === 0) {\n console.log('\\n✅ 检查通过:无需更新') // eslint-disable-line no-console\n return\n }\n\n console.log('\\n❌ 检查失败:以下文件需要更新') // eslint-disable-line no-console\n for (const filePath of result.changed) {\n console.log(`- ${relative(cwd, filePath)}`) // eslint-disable-line no-console\n }\n}\n"],"mappings":"qCAIA,SAAgB,EAAgB,EAAmB,EAAmB,CACpE,IAAM,EAAY,EAAO,OAAS,QAAU,QAAU,SAGtD,GAFA,QAAQ,IAAI,qBAAqB,EAAU,KAAK,CAE5C,EAAO,QAAQ,OAAS,EAAG,CAC7B,QAAQ,IAAI,QAAQ,EAAO,QAAQ,OAAO,OAAO,CACjD,IAAK,IAAM,KAAY,EAAO,QAC5B,QAAQ,IAAI,KAAK,EAAS,EAAK,EAAS,GAAG,CAI/C,GAAI,EAAO,QAAQ,OAAS,EAAG,CAC7B,QAAQ,IAAI,QAAQ,EAAO,QAAQ,OAAO,OAAO,CACjD,IAAK,IAAM,KAAY,EAAO,QAC5B,QAAQ,IAAI,KAAK,EAAS,EAAK,EAAS,GAAG,CAI3C,EAAO,UAAU,OAAS,GAC5B,QAAQ,IAAI,SAAS,EAAO,UAAU,OAAO,MAAM,CAIvD,SAAgB,EAAiB,EAAmB,EAAmB,CACrE,GAAI,EAAO,QAAQ,SAAW,EAAG,CAC/B,QAAQ,IAAI;aAAgB,CAC5B,OAGF,QAAQ,IAAI;iBAAoB,CAChC,IAAK,IAAM,KAAY,EAAO,QAC5B,QAAQ,IAAI,KAAK,EAAS,EAAK,EAAS,GAAG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{detectConfiguredToolIds as e,parseToolIds as t}from"../adapters/tool-targets.js";import{runUpdate as n}from"../runtime/execute.js";import{printCheckResult as r,printRunSummary as i}from"./shared.js";async function a(e={}){let t=process.cwd(),a=o(t,e.tools),s=e.check??!1,c=await n({cwd:t,tools:a,check:s});if(s){r(c,t),c.changed.length>0&&(process.exitCode=1);return}i(c,t)}function o(n,r){if(!r||r.trim().length===0){let t=e(n);if(t.length===0)throw Error(`未检测到已 setup 的工具,请先执行 setup 或通过 --tools 显式指定工具`);return t}return t(r)}export{a as updateCommand};
|
|
2
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","names":[],"sources":["../../src/commands/update.ts"],"sourcesContent":["import { detectConfiguredToolIds, parseToolIds } from '../adapters/tool-targets'\nimport type { ToolId } from '../domain/types'\nimport { runUpdate } from '../runtime/execute'\nimport { printCheckResult, printRunSummary } from './shared'\n\nexport interface UpdateCommandOptions {\n tools?: string\n check?: boolean\n yes?: boolean\n}\n\nexport async function updateCommand(options: UpdateCommandOptions = {}): Promise<void> {\n const cwd = process.cwd()\n const tools = resolveTools(cwd, options.tools)\n const check = options.check ?? false\n\n const result = await runUpdate({\n cwd,\n tools,\n check\n })\n\n if (check) {\n printCheckResult(result, cwd)\n if (result.changed.length > 0) {\n process.exitCode = 1\n }\n return\n }\n\n printRunSummary(result, cwd)\n}\n\nfunction resolveTools(cwd: string, raw?: string): ToolId[] | undefined {\n if (!raw || raw.trim().length === 0) {\n const configuredTools = detectConfiguredToolIds(cwd)\n\n if (configuredTools.length === 0) {\n throw new Error('未检测到已 setup 的工具,请先执行 setup 或通过 --tools 显式指定工具')\n }\n\n return configuredTools\n }\n\n return parseToolIds(raw)\n}\n"],"mappings":"8MAWA,eAAsB,EAAc,EAAgC,EAAE,CAAiB,CACrF,IAAM,EAAM,QAAQ,KAAK,CACnB,EAAQ,EAAa,EAAK,EAAQ,MAAM,CACxC,EAAQ,EAAQ,OAAS,GAEzB,EAAS,MAAM,EAAU,CAC7B,MACA,QACA,QACD,CAAC,CAEF,GAAI,EAAO,CACT,EAAiB,EAAQ,EAAI,CACzB,EAAO,QAAQ,OAAS,IAC1B,QAAQ,SAAW,GAErB,OAGF,EAAgB,EAAQ,EAAI,CAG9B,SAAS,EAAa,EAAa,EAAoC,CACrE,GAAI,CAAC,GAAO,EAAI,MAAM,CAAC,SAAW,EAAG,CACnC,IAAM,EAAkB,EAAwB,EAAI,CAEpD,GAAI,EAAgB,SAAW,EAC7B,MAAU,MAAM,gDAAgD,CAGlE,OAAO,EAGT,OAAO,EAAa,EAAI"}
|
package/dist/stats.html
CHANGED
|
@@ -4930,7 +4930,7 @@ var drawChart = (function (exports) {
|
|
|
4930
4930
|
</script>
|
|
4931
4931
|
<script>
|
|
4932
4932
|
/*<!--*/
|
|
4933
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"
|
|
4933
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"cli.d.ts","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/cli.d.ts","uid":"892e0f80-1"}]},{"name":"cli.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","uid":"892e0f80-3"}]},{"name":"adapters/tool-targets.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/adapters/tool-targets.ts","uid":"892e0f80-5"}]},{"name":"commands/setup.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/setup.ts","uid":"892e0f80-7"}]},{"name":"commands/shared.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/shared.ts","uid":"892e0f80-9"}]},{"name":"commands/update.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/update.ts","uid":"892e0f80-11"}]},{"name":"domain/workflow-content.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-content.ts","uid":"892e0f80-13"}]},{"name":"domain/workflow-context.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-context.ts","uid":"892e0f80-15"}]},{"name":"domain/workflow-templates/done.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/done.ts","uid":"892e0f80-17"}]},{"name":"domain/workflow-templates/implement.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/implement.ts","uid":"892e0f80-19"}]},{"name":"domain/workflow-templates/init.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/init.ts","uid":"892e0f80-21"}]},{"name":"domain/workflow-templates/patch.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/patch.ts","uid":"892e0f80-23"}]},{"name":"domain/workflow-templates/plan.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/plan.ts","uid":"892e0f80-25"}]},{"name":"domain/workflow-templates/replan.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/replan.ts","uid":"892e0f80-27"}]},{"name":"generators/workflow.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/generators/workflow.ts","uid":"892e0f80-29"}]},{"name":"runtime/execute.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/runtime/execute.ts","uid":"892e0f80-31"}]},{"name":"shared/fs.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/shared/fs.ts","uid":"892e0f80-33"}]}],"isRoot":true},"nodeParts":{"892e0f80-1":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-0"},"892e0f80-3":{"renderedLength":1029,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-2"},"892e0f80-5":{"renderedLength":2841,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-4"},"892e0f80-7":{"renderedLength":1002,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-6"},"892e0f80-9":{"renderedLength":973,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-8"},"892e0f80-11":{"renderedLength":752,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-10"},"892e0f80-13":{"renderedLength":340,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-12"},"892e0f80-15":{"renderedLength":926,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-14"},"892e0f80-17":{"renderedLength":1638,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-16"},"892e0f80-19":{"renderedLength":2036,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-18"},"892e0f80-21":{"renderedLength":2170,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-20"},"892e0f80-23":{"renderedLength":1811,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-22"},"892e0f80-25":{"renderedLength":2476,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-24"},"892e0f80-27":{"renderedLength":1720,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-26"},"892e0f80-29":{"renderedLength":468,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-28"},"892e0f80-31":{"renderedLength":750,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-30"},"892e0f80-33":{"renderedLength":1128,"gzipLength":0,"brotliLength":0,"metaUid":"892e0f80-32"}},"nodeMetas":{"892e0f80-0":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.d.ts","moduleParts":{"cli.d.ts":"892e0f80-1"},"imported":[],"importedBy":[],"isEntry":true},"892e0f80-2":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","moduleParts":{"cli.js":"892e0f80-3"},"imported":[{"uid":"892e0f80-34"},{"uid":"892e0f80-6"},{"uid":"892e0f80-10"}],"importedBy":[],"isEntry":true},"892e0f80-4":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/adapters/tool-targets.ts","moduleParts":{"adapters/tool-targets.js":"892e0f80-5"},"imported":[{"uid":"892e0f80-36"},{"uid":"892e0f80-37"}],"importedBy":[{"uid":"892e0f80-6"},{"uid":"892e0f80-10"},{"uid":"892e0f80-30"},{"uid":"892e0f80-28"}]},"892e0f80-6":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/setup.ts","moduleParts":{"commands/setup.js":"892e0f80-7"},"imported":[{"uid":"892e0f80-35"},{"uid":"892e0f80-4"},{"uid":"892e0f80-30"},{"uid":"892e0f80-8"}],"importedBy":[{"uid":"892e0f80-2"}]},"892e0f80-8":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/shared.ts","moduleParts":{"commands/shared.js":"892e0f80-9"},"imported":[{"uid":"892e0f80-36"}],"importedBy":[{"uid":"892e0f80-6"},{"uid":"892e0f80-10"}]},"892e0f80-10":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/update.ts","moduleParts":{"commands/update.js":"892e0f80-11"},"imported":[{"uid":"892e0f80-4"},{"uid":"892e0f80-30"},{"uid":"892e0f80-8"}],"importedBy":[{"uid":"892e0f80-2"}]},"892e0f80-12":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-content.ts","moduleParts":{"domain/workflow-content.js":"892e0f80-13"},"imported":[{"uid":"892e0f80-39"}],"importedBy":[{"uid":"892e0f80-28"}]},"892e0f80-14":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-context.ts","moduleParts":{"domain/workflow-context.js":"892e0f80-15"},"imported":[],"importedBy":[{"uid":"892e0f80-39"},{"uid":"892e0f80-20"},{"uid":"892e0f80-24"},{"uid":"892e0f80-26"},{"uid":"892e0f80-18"},{"uid":"892e0f80-22"},{"uid":"892e0f80-16"}]},"892e0f80-16":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/done.ts","moduleParts":{"domain/workflow-templates/done.js":"892e0f80-17"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-18":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/implement.ts","moduleParts":{"domain/workflow-templates/implement.js":"892e0f80-19"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-20":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/init.ts","moduleParts":{"domain/workflow-templates/init.js":"892e0f80-21"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-22":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/patch.ts","moduleParts":{"domain/workflow-templates/patch.js":"892e0f80-23"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-24":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/plan.ts","moduleParts":{"domain/workflow-templates/plan.js":"892e0f80-25"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-26":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/replan.ts","moduleParts":{"domain/workflow-templates/replan.js":"892e0f80-27"},"imported":[{"uid":"892e0f80-14"}],"importedBy":[{"uid":"892e0f80-39"}]},"892e0f80-28":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/generators/workflow.ts","moduleParts":{"generators/workflow.js":"892e0f80-29"},"imported":[{"uid":"892e0f80-4"},{"uid":"892e0f80-12"}],"importedBy":[{"uid":"892e0f80-30"}]},"892e0f80-30":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/runtime/execute.ts","moduleParts":{"runtime/execute.js":"892e0f80-31"},"imported":[{"uid":"892e0f80-4"},{"uid":"892e0f80-28"},{"uid":"892e0f80-32"}],"importedBy":[{"uid":"892e0f80-6"},{"uid":"892e0f80-10"}]},"892e0f80-32":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/shared/fs.ts","moduleParts":{"shared/fs.js":"892e0f80-33"},"imported":[{"uid":"892e0f80-36"},{"uid":"892e0f80-37"},{"uid":"892e0f80-38"}],"importedBy":[{"uid":"892e0f80-30"}]},"892e0f80-34":{"id":"commander","moduleParts":{},"imported":[],"importedBy":[{"uid":"892e0f80-2"}]},"892e0f80-35":{"id":"@inquirer/prompts","moduleParts":{},"imported":[],"importedBy":[{"uid":"892e0f80-6"}]},"892e0f80-36":{"id":"node:path","moduleParts":{},"imported":[],"importedBy":[{"uid":"892e0f80-4"},{"uid":"892e0f80-8"},{"uid":"892e0f80-32"}]},"892e0f80-37":{"id":"node:fs","moduleParts":{},"imported":[],"importedBy":[{"uid":"892e0f80-4"},{"uid":"892e0f80-32"}]},"892e0f80-38":{"id":"node:fs/promises","moduleParts":{},"imported":[],"importedBy":[{"uid":"892e0f80-32"}]},"892e0f80-39":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/index.ts","moduleParts":{},"imported":[{"uid":"892e0f80-14"},{"uid":"892e0f80-20"},{"uid":"892e0f80-24"},{"uid":"892e0f80-26"},{"uid":"892e0f80-18"},{"uid":"892e0f80-22"},{"uid":"892e0f80-16"}],"importedBy":[{"uid":"892e0f80-12"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":false,"brotli":false,"sourcemap":false}};
|
|
4934
4934
|
|
|
4935
4935
|
const run = () => {
|
|
4936
4936
|
const width = window.innerWidth;
|
package/package.json
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-kit/agent-context",
|
|
3
|
-
"
|
|
4
|
-
"version": "1.0.3",
|
|
3
|
+
"version": "1.0.5",
|
|
5
4
|
"description": "代理上下文管理工具",
|
|
6
5
|
"bin": {
|
|
7
6
|
"agent-context": "./dist/cli.js"
|
|
8
7
|
},
|
|
9
8
|
"files": [
|
|
10
9
|
"dist",
|
|
11
|
-
"src"
|
|
10
|
+
"src",
|
|
11
|
+
"README.md"
|
|
12
12
|
],
|
|
13
|
-
"
|
|
14
|
-
".": {
|
|
15
|
-
"import": "./dist/index.js",
|
|
16
|
-
"types": "./dist/index.d.ts"
|
|
17
|
-
},
|
|
18
|
-
"./src": "./src/index.ts"
|
|
19
|
-
},
|
|
13
|
+
"type": "module",
|
|
20
14
|
"scripts": {
|
|
21
15
|
"build": "tsc -p tsconfig.json",
|
|
22
16
|
"clean": "rm -rf dist"
|
package/src/cli.ts
CHANGED
|
@@ -11,7 +11,7 @@ program.name('agent-context').description('Agent Context 工作流生成工具')
|
|
|
11
11
|
|
|
12
12
|
program
|
|
13
13
|
.command('setup')
|
|
14
|
-
.description('
|
|
14
|
+
.description('初始化工作流命令')
|
|
15
15
|
.option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')
|
|
16
16
|
.option('--yes', '非交互模式预留参数(当前版本无需确认)')
|
|
17
17
|
.option('--check', '仅检查是否存在待更新内容,不写入文件')
|
|
@@ -19,7 +19,7 @@ program
|
|
|
19
19
|
|
|
20
20
|
program
|
|
21
21
|
.command('update')
|
|
22
|
-
.description('
|
|
22
|
+
.description('更新工作流命令')
|
|
23
23
|
.option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')
|
|
24
24
|
.option('--yes', '非交互模式预留参数(当前版本无需确认)')
|
|
25
25
|
.option('--check', '仅检查是否存在待更新内容,不写入文件')
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ToolId, ToolTarget, WorkflowCommandName } from "../domain/types.js";
|
|
2
|
-
|
|
3
|
-
//#region src/adapters/tool-targets.d.ts
|
|
4
|
-
declare function parseToolIds(toolsText: string): ToolId[];
|
|
5
|
-
declare function resolveToolTargets(tools?: ToolId[]): ToolTarget[];
|
|
6
|
-
interface WorkflowPaths {
|
|
7
|
-
commandFile(name: WorkflowCommandName): string;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 根据工具约束计算工作流文件输出路径
|
|
11
|
-
*
|
|
12
|
-
* - separator=':' (Claude) → 嵌套: .claude/commands/ac/init.md → /ac:init
|
|
13
|
-
* - separator='-' (其他) → 扁平: .cursor/commands/ac-init.md → /ac-init
|
|
14
|
-
*/
|
|
15
|
-
declare function resolveWorkflowPaths(target: ToolTarget, cwd: string): WorkflowPaths;
|
|
16
|
-
//#endregion
|
|
17
|
-
export { parseToolIds, resolveToolTargets, resolveWorkflowPaths };
|
|
18
|
-
//# sourceMappingURL=tool-targets.d.ts.map
|
package/dist/domain/types.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
//#region src/domain/types.d.ts
|
|
2
|
-
type ToolId = 'claude' | 'codex' | 'cursor' | 'antigravity' | 'copilot';
|
|
3
|
-
interface ToolTarget {
|
|
4
|
-
id: ToolId;
|
|
5
|
-
name: string;
|
|
6
|
-
rootDir: string;
|
|
7
|
-
/** 工作流文件扩展名:'.md' | '.prompt.md'(Copilot) */
|
|
8
|
-
fileExtension: string;
|
|
9
|
-
/** 是否支持 YAML frontmatter(Cursor 不支持) */
|
|
10
|
-
supportsFrontmatter: boolean;
|
|
11
|
-
/** 命令分隔符:':'(Claude 嵌套目录 ac/init.md → /ac:init)或 '-'(扁平 ac-init.md) */
|
|
12
|
-
commandSeparator: string;
|
|
13
|
-
/** 命令调用前缀:'/'(Claude/Cursor)或 '#'(Copilot) */
|
|
14
|
-
commandPrefix: string;
|
|
15
|
-
}
|
|
16
|
-
type WorkflowCommandName = 'init' | 'plan' | 'replan' | 'implement' | 'patch' | 'done';
|
|
17
|
-
interface WorkflowArtifacts {
|
|
18
|
-
commandFiles: Record<WorkflowCommandName, string>;
|
|
19
|
-
}
|
|
20
|
-
interface ApplyMutationResult {
|
|
21
|
-
created: string[];
|
|
22
|
-
updated: string[];
|
|
23
|
-
unchanged: string[];
|
|
24
|
-
changed: string[];
|
|
25
|
-
}
|
|
26
|
-
interface RunOptions {
|
|
27
|
-
cwd?: string;
|
|
28
|
-
tools?: ToolId[];
|
|
29
|
-
check?: boolean;
|
|
30
|
-
}
|
|
31
|
-
interface RunResult extends ApplyMutationResult {
|
|
32
|
-
mode: 'setup' | 'update';
|
|
33
|
-
check: boolean;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { RunOptions, RunResult, ToolId, ToolTarget, WorkflowArtifacts, WorkflowCommandName };
|
|
37
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ToolTarget, WorkflowArtifacts } from "./types.js";
|
|
2
|
-
|
|
3
|
-
//#region src/domain/workflow-content.d.ts
|
|
4
|
-
declare function renderWorkflowArtifacts(target: ToolTarget): WorkflowArtifacts;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { renderWorkflowArtifacts };
|
|
7
|
-
//# sourceMappingURL=workflow-content.d.ts.map
|
package/dist/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { RunOptions, RunResult, ToolId, ToolTarget, WorkflowArtifacts, WorkflowCommandName } from "./domain/types.js";
|
|
2
|
-
import { parseToolIds, resolveToolTargets, resolveWorkflowPaths } from "./adapters/tool-targets.js";
|
|
3
|
-
import { renderWorkflowArtifacts } from "./domain/workflow-content.js";
|
|
4
|
-
import { runSetup, runUpdate } from "./runtime/execute.js";
|
|
5
|
-
export { type RunOptions, type RunResult, type ToolId, type ToolTarget, type WorkflowArtifacts, type WorkflowCommandName, parseToolIds, renderWorkflowArtifacts, resolveToolTargets, resolveWorkflowPaths, runSetup, runUpdate };
|
package/dist/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{parseToolIds as e,resolveToolTargets as t,resolveWorkflowPaths as n}from"./adapters/tool-targets.js";import{renderWorkflowArtifacts as r}from"./domain/workflow-content.js";import{runSetup as i,runUpdate as a}from"./runtime/execute.js";export{e as parseToolIds,r as renderWorkflowArtifacts,t as resolveToolTargets,n as resolveWorkflowPaths,i as runSetup,a as runUpdate};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { RunOptions, RunResult } from "../domain/types.js";
|
|
2
|
-
|
|
3
|
-
//#region src/runtime/execute.d.ts
|
|
4
|
-
declare function runSetup(options?: RunOptions): Promise<RunResult>;
|
|
5
|
-
declare function runUpdate(options?: RunOptions): Promise<RunResult>;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { runSetup, runUpdate };
|
|
8
|
-
//# sourceMappingURL=execute.d.ts.map
|
package/src/index.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export { resolveToolTargets, parseToolIds, resolveWorkflowPaths } from './adapters/tool-targets'
|
|
2
|
-
export { renderWorkflowArtifacts } from './domain/workflow-content'
|
|
3
|
-
export { runSetup, runUpdate } from './runtime/execute'
|
|
4
|
-
export type {
|
|
5
|
-
ToolId,
|
|
6
|
-
ToolTarget,
|
|
7
|
-
RunOptions,
|
|
8
|
-
RunResult,
|
|
9
|
-
WorkflowArtifacts,
|
|
10
|
-
WorkflowCommandName
|
|
11
|
-
} from './domain/types.js'
|