@cat-kit/agent-context 1.0.7 → 1.1.1
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 +58 -61
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/done.js +2 -0
- package/dist/commands/done.js.map +1 -0
- package/dist/commands/install.js +2 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/printer.js +4 -0
- package/dist/commands/printer.js.map +1 -0
- package/dist/commands/status.js +2 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.js +2 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/validate.js +2 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/content/actions.js +177 -0
- package/dist/content/actions.js.map +1 -0
- package/dist/content/index.js +48 -0
- package/dist/content/index.js.map +1 -0
- package/dist/context/archiver.js +2 -0
- package/dist/context/archiver.js.map +1 -0
- package/dist/context/reader.js +2 -0
- package/dist/context/reader.js.map +1 -0
- package/dist/context/validator.js +2 -0
- package/dist/context/validator.js.map +1 -0
- package/dist/runner.js +3 -0
- package/dist/runner.js.map +1 -0
- package/dist/stats.html +1 -1
- package/dist/tools.js +2 -0
- package/dist/tools.js.map +1 -0
- package/package.json +2 -2
- package/src/cli.ts +33 -14
- package/src/commands/done.ts +55 -0
- package/src/commands/install.ts +56 -0
- package/src/commands/{shared.ts → printer.ts} +2 -3
- package/src/commands/status.ts +35 -0
- package/src/commands/sync.ts +40 -0
- package/src/commands/validate.ts +28 -0
- package/src/content/actions.ts +238 -0
- package/src/content/index.ts +94 -0
- package/src/context/archiver.ts +45 -0
- package/src/context/index.ts +3 -0
- package/src/context/reader.ts +77 -0
- package/src/context/validator.ts +44 -0
- package/src/runner.ts +113 -0
- package/src/tools.ts +114 -0
- package/src/types.ts +71 -0
- package/dist/adapters/tool-targets.js +0 -2
- package/dist/adapters/tool-targets.js.map +0 -1
- package/dist/commands/setup.js +0 -2
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/shared.js +0 -4
- package/dist/commands/shared.js.map +0 -1
- package/dist/commands/update.js +0 -2
- package/dist/commands/update.js.map +0 -1
- package/dist/domain/workflow-content.js +0 -2
- package/dist/domain/workflow-content.js.map +0 -1
- package/dist/domain/workflow-context.js +0 -2
- package/dist/domain/workflow-context.js.map +0 -1
- package/dist/domain/workflow-templates/done.js +0 -23
- package/dist/domain/workflow-templates/done.js.map +0 -1
- package/dist/domain/workflow-templates/implement.js +0 -35
- package/dist/domain/workflow-templates/implement.js.map +0 -1
- package/dist/domain/workflow-templates/init.js +0 -37
- package/dist/domain/workflow-templates/init.js.map +0 -1
- package/dist/domain/workflow-templates/patch.js +0 -41
- package/dist/domain/workflow-templates/patch.js.map +0 -1
- package/dist/domain/workflow-templates/plan.js +0 -58
- package/dist/domain/workflow-templates/plan.js.map +0 -1
- package/dist/domain/workflow-templates/replan.js +0 -31
- package/dist/domain/workflow-templates/replan.js.map +0 -1
- package/dist/generators/workflow.js +0 -2
- package/dist/generators/workflow.js.map +0 -1
- package/dist/runtime/execute.js +0 -2
- package/dist/runtime/execute.js.map +0 -1
- package/dist/shared/fs.js +0 -3
- package/dist/shared/fs.js.map +0 -1
- package/src/adapters/tool-targets.ts +0 -157
- package/src/commands/setup.ts +0 -64
- package/src/commands/update.ts +0 -46
- package/src/domain/types.ts +0 -50
- package/src/domain/workflow-content.ts +0 -25
- package/src/domain/workflow-context.ts +0 -48
- package/src/domain/workflow-templates/done.ts +0 -28
- package/src/domain/workflow-templates/implement.ts +0 -41
- package/src/domain/workflow-templates/index.ts +0 -7
- package/src/domain/workflow-templates/init.ts +0 -42
- package/src/domain/workflow-templates/patch.ts +0 -47
- package/src/domain/workflow-templates/plan.ts +0 -70
- package/src/domain/workflow-templates/replan.ts +0 -36
- package/src/generators/workflow.ts +0 -25
- package/src/runtime/execute.ts +0 -45
- package/src/shared/fs.ts +0 -66
- package/src/shared/paths.ts +0 -9
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":"cli.d.ts","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/cli.d.ts","uid":"
|
|
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":"43280ddc-1"}]},{"name":"cli.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","uid":"43280ddc-3"}]},{"name":"commands/done.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/done.ts","uid":"43280ddc-5"}]},{"name":"commands/install.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/install.ts","uid":"43280ddc-7"}]},{"name":"commands/printer.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/printer.ts","uid":"43280ddc-9"}]},{"name":"commands/status.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/status.ts","uid":"43280ddc-11"}]},{"name":"commands/sync.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/sync.ts","uid":"43280ddc-13"}]},{"name":"commands/validate.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/validate.ts","uid":"43280ddc-15"}]},{"name":"content/actions.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/content/actions.ts","uid":"43280ddc-17"}]},{"name":"content/index.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/content/index.ts","uid":"43280ddc-19"}]},{"name":"context/archiver.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/context/archiver.ts","uid":"43280ddc-21"}]},{"name":"context/reader.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/context/reader.ts","uid":"43280ddc-23"}]},{"name":"context/validator.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/context/validator.ts","uid":"43280ddc-25"}]},{"name":"runner.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/runner.ts","uid":"43280ddc-27"}]},{"name":"tools.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/tools.ts","uid":"43280ddc-29"}]}],"isRoot":true},"nodeParts":{"43280ddc-1":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-0"},"43280ddc-3":{"renderedLength":1518,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-2"},"43280ddc-5":{"renderedLength":1349,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-4"},"43280ddc-7":{"renderedLength":985,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-6"},"43280ddc-9":{"renderedLength":909,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-8"},"43280ddc-11":{"renderedLength":944,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-10"},"43280ddc-13":{"renderedLength":745,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-12"},"43280ddc-15":{"renderedLength":758,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-14"},"43280ddc-17":{"renderedLength":8890,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-16"},"43280ddc-19":{"renderedLength":2857,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-18"},"43280ddc-21":{"renderedLength":1012,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-20"},"43280ddc-23":{"renderedLength":1573,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-22"},"43280ddc-25":{"renderedLength":1039,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-24"},"43280ddc-27":{"renderedLength":2037,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-26"},"43280ddc-29":{"renderedLength":2174,"gzipLength":0,"brotliLength":0,"metaUid":"43280ddc-28"}},"nodeMetas":{"43280ddc-0":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.d.ts","moduleParts":{"cli.d.ts":"43280ddc-1"},"imported":[],"importedBy":[],"isEntry":true},"43280ddc-2":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","moduleParts":{"cli.js":"43280ddc-3"},"imported":[{"uid":"43280ddc-30"},{"uid":"43280ddc-31"},{"uid":"43280ddc-4"},{"uid":"43280ddc-6"},{"uid":"43280ddc-10"},{"uid":"43280ddc-12"},{"uid":"43280ddc-14"}],"importedBy":[],"isEntry":true},"43280ddc-4":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/done.ts","moduleParts":{"commands/done.js":"43280ddc-5"},"imported":[{"uid":"43280ddc-32"},{"uid":"43280ddc-33"},{"uid":"43280ddc-34"}],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-6":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/install.ts","moduleParts":{"commands/install.js":"43280ddc-7"},"imported":[{"uid":"43280ddc-33"},{"uid":"43280ddc-26"},{"uid":"43280ddc-28"},{"uid":"43280ddc-8"}],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-8":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/printer.ts","moduleParts":{"commands/printer.js":"43280ddc-9"},"imported":[{"uid":"43280ddc-32"}],"importedBy":[{"uid":"43280ddc-6"},{"uid":"43280ddc-12"}]},"43280ddc-10":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/status.ts","moduleParts":{"commands/status.js":"43280ddc-11"},"imported":[{"uid":"43280ddc-34"}],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-12":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/sync.ts","moduleParts":{"commands/sync.js":"43280ddc-13"},"imported":[{"uid":"43280ddc-28"},{"uid":"43280ddc-26"},{"uid":"43280ddc-8"}],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-14":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/validate.ts","moduleParts":{"commands/validate.js":"43280ddc-15"},"imported":[{"uid":"43280ddc-34"}],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-16":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/content/actions.ts","moduleParts":{"content/actions.js":"43280ddc-17"},"imported":[],"importedBy":[{"uid":"43280ddc-18"}]},"43280ddc-18":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/content/index.ts","moduleParts":{"content/index.js":"43280ddc-19"},"imported":[{"uid":"43280ddc-16"}],"importedBy":[{"uid":"43280ddc-26"}]},"43280ddc-20":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/context/archiver.ts","moduleParts":{"context/archiver.js":"43280ddc-21"},"imported":[{"uid":"43280ddc-35"},{"uid":"43280ddc-32"}],"importedBy":[{"uid":"43280ddc-34"}]},"43280ddc-22":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/context/reader.ts","moduleParts":{"context/reader.js":"43280ddc-23"},"imported":[{"uid":"43280ddc-35"},{"uid":"43280ddc-30"},{"uid":"43280ddc-32"}],"importedBy":[{"uid":"43280ddc-34"}]},"43280ddc-24":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/context/validator.ts","moduleParts":{"context/validator.js":"43280ddc-25"},"imported":[{"uid":"43280ddc-30"},{"uid":"43280ddc-32"}],"importedBy":[{"uid":"43280ddc-34"}]},"43280ddc-26":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/runner.ts","moduleParts":{"runner.js":"43280ddc-27"},"imported":[{"uid":"43280ddc-32"},{"uid":"43280ddc-30"},{"uid":"43280ddc-35"},{"uid":"43280ddc-28"},{"uid":"43280ddc-18"}],"importedBy":[{"uid":"43280ddc-6"},{"uid":"43280ddc-12"}]},"43280ddc-28":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/tools.ts","moduleParts":{"tools.js":"43280ddc-29"},"imported":[{"uid":"43280ddc-30"},{"uid":"43280ddc-32"}],"importedBy":[{"uid":"43280ddc-6"},{"uid":"43280ddc-12"},{"uid":"43280ddc-26"}]},"43280ddc-30":{"id":"node:fs","moduleParts":{},"imported":[],"importedBy":[{"uid":"43280ddc-2"},{"uid":"43280ddc-26"},{"uid":"43280ddc-28"},{"uid":"43280ddc-22"},{"uid":"43280ddc-24"}]},"43280ddc-31":{"id":"commander","moduleParts":{},"imported":[],"importedBy":[{"uid":"43280ddc-2"}]},"43280ddc-32":{"id":"node:path","moduleParts":{},"imported":[],"importedBy":[{"uid":"43280ddc-4"},{"uid":"43280ddc-26"},{"uid":"43280ddc-28"},{"uid":"43280ddc-8"},{"uid":"43280ddc-22"},{"uid":"43280ddc-24"},{"uid":"43280ddc-20"}]},"43280ddc-33":{"id":"@inquirer/prompts","moduleParts":{},"imported":[],"importedBy":[{"uid":"43280ddc-4"},{"uid":"43280ddc-6"}]},"43280ddc-34":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/context/index.ts","moduleParts":{},"imported":[{"uid":"43280ddc-22"},{"uid":"43280ddc-24"},{"uid":"43280ddc-20"}],"importedBy":[{"uid":"43280ddc-4"},{"uid":"43280ddc-10"},{"uid":"43280ddc-14"}]},"43280ddc-35":{"id":"node:fs/promises","moduleParts":{},"imported":[],"importedBy":[{"uid":"43280ddc-26"},{"uid":"43280ddc-22"},{"uid":"43280ddc-20"}]}},"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/dist/tools.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{existsSync as e}from"node:fs";import{resolve as t}from"node:path";const n={claude:{id:`claude`,name:`Claude Code`,skillRootDir:`.claude/skills`,frontmatterProfile:`claude`,metadataFiles:[]},codex:{id:`codex`,name:`Codex`,skillRootDir:`.codex/skills`,frontmatterProfile:`standard`,metadataFiles:[`openai`]},cursor:{id:`cursor`,name:`Cursor`,skillRootDir:`.cursor/skills`,frontmatterProfile:`standard`,metadataFiles:[]},antigravity:{id:`antigravity`,name:`Antigravity`,skillRootDir:`.agent/skills`,frontmatterProfile:`standard`,metadataFiles:[]},copilot:{id:`copilot`,name:`GitHub Copilot`,skillRootDir:`.github/skills`,frontmatterProfile:`copilot`,metadataFiles:[]}},r=[`claude`,`codex`,`cursor`,`antigravity`,`copilot`];function i(){return r.map(e=>({id:e,name:n[e].name}))}function a(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(!l(e))throw Error(`不支持的工具标识: ${e}。可选值: ${r.join(`, `)}`);n.includes(e)||n.push(e)}return n}function o(e){return(e&&e.length>0?e:r).map(e=>({...n[e]}))}function s(t){return r.filter(r=>{let i=n[r];return e(c(i,t).skillFile)})}function c(e,n){let r=t(n,e.skillRootDir,`ac-workflow`);return{skillDir:r,skillFile:t(r,`SKILL.md`),openaiMetadataFile:t(r,`agents/openai.yaml`)}}function l(e){return Object.hasOwn(n,e)}export{r as DEFAULT_TOOL_ORDER,s as detectConfiguredToolIds,i as getToolChoices,a as parseToolIds,c as resolveSkillPaths,o as resolveToolTargets};
|
|
2
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","names":[],"sources":["../src/tools.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { ToolId, ToolTarget } from './types.js'\n\nconst SKILL_FILE_NAME = 'SKILL.md'\nconst SKILL_NAME = 'ac-workflow'\n\nconst TOOL_TARGET_MAP: Record<ToolId, ToolTarget> = {\n claude: {\n id: 'claude',\n name: 'Claude Code',\n skillRootDir: '.claude/skills',\n frontmatterProfile: 'claude',\n metadataFiles: []\n },\n codex: {\n id: 'codex',\n name: 'Codex',\n skillRootDir: '.codex/skills',\n frontmatterProfile: 'standard',\n metadataFiles: ['openai']\n },\n cursor: {\n id: 'cursor',\n name: 'Cursor',\n skillRootDir: '.cursor/skills',\n frontmatterProfile: 'standard',\n metadataFiles: []\n },\n antigravity: {\n id: 'antigravity',\n name: 'Antigravity',\n skillRootDir: '.agent/skills',\n frontmatterProfile: 'standard',\n metadataFiles: []\n },\n copilot: {\n id: 'copilot',\n name: 'GitHub Copilot',\n skillRootDir: '.github/skills',\n frontmatterProfile: 'copilot',\n metadataFiles: []\n }\n}\n\nexport const DEFAULT_TOOL_ORDER: ToolId[] = ['claude', 'codex', 'cursor', 'antigravity', 'copilot']\n\nexport interface ToolChoice {\n id: ToolId\n name: string\n}\n\nexport function getToolChoices(): ToolChoice[] {\n return DEFAULT_TOOL_ORDER.map((id) => ({ id, name: TOOL_TARGET_MAP[id].name }))\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(`不支持的工具标识: ${value}。可选值: ${DEFAULT_TOOL_ORDER.join(', ')}`)\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 return existsSync(resolveSkillPaths(target, cwd).skillFile)\n })\n}\n\n// ── Skill 路径解析 ───────────────────────────────────\n\nexport interface SkillPaths {\n skillDir: string\n skillFile: string\n openaiMetadataFile: string\n}\n\nexport function resolveSkillPaths(target: ToolTarget, cwd: string): SkillPaths {\n const skillDir = resolve(cwd, target.skillRootDir, SKILL_NAME)\n return {\n skillDir,\n skillFile: resolve(skillDir, SKILL_FILE_NAME),\n openaiMetadataFile: resolve(skillDir, 'agents/openai.yaml')\n }\n}\n\nfunction isToolId(value: string): value is ToolId {\n return Object.hasOwn(TOOL_TARGET_MAP, value)\n}\n"],"mappings":"yEAKA,MAGM,EAA8C,CAClD,OAAQ,CACN,GAAI,SACJ,KAAM,cACN,aAAc,iBACd,mBAAoB,SACpB,cAAe,EAAE,CAClB,CACD,MAAO,CACL,GAAI,QACJ,KAAM,QACN,aAAc,gBACd,mBAAoB,WACpB,cAAe,CAAC,SAAS,CAC1B,CACD,OAAQ,CACN,GAAI,SACJ,KAAM,SACN,aAAc,iBACd,mBAAoB,WACpB,cAAe,EAAE,CAClB,CACD,YAAa,CACX,GAAI,cACJ,KAAM,cACN,aAAc,gBACd,mBAAoB,WACpB,cAAe,EAAE,CAClB,CACD,QAAS,CACP,GAAI,UACJ,KAAM,iBACN,aAAc,iBACd,mBAAoB,UACpB,cAAe,EAAE,CAClB,CACF,CAEY,EAA+B,CAAC,SAAU,QAAS,SAAU,cAAe,UAAU,CAOnG,SAAgB,GAA+B,CAC7C,OAAO,EAAmB,IAAK,IAAQ,CAAE,KAAI,KAAM,EAAgB,GAAI,KAAM,EAAE,CAGjF,SAAgB,EAAa,EAA6B,CACxD,IAAM,EAAS,EACZ,MAAM,IAAI,CACV,IAAK,GAAS,EAAK,MAAM,CAAC,aAAa,CAAC,CACxC,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,MAAM,aAAa,EAAM,QAAQ,EAAmB,KAAK,KAAK,GAAG,CAGxE,EAAU,SAAS,EAAM,EAC5B,EAAU,KAAK,EAAM,CAIzB,OAAO,EAGT,SAAgB,EAAmB,EAAgC,CAEjE,OADiB,GAAS,EAAM,OAAS,EAAI,EAAQ,GACrC,IAAK,IAAQ,CAAE,GAAG,EAAgB,GAAK,EAAE,CAG3D,SAAgB,EAAwB,EAAuB,CAC7D,OAAO,EAAmB,OAAQ,GAAW,CAC3C,IAAM,EAAS,EAAgB,GAC/B,OAAO,EAAW,EAAkB,EAAQ,EAAI,CAAC,UAAU,EAC3D,CAWJ,SAAgB,EAAkB,EAAoB,EAAyB,CAC7E,IAAM,EAAW,EAAQ,EAAK,EAAO,aAAc,cAAW,CAC9D,MAAO,CACL,WACA,UAAW,EAAQ,EAAU,WAAgB,CAC7C,mBAAoB,EAAQ,EAAU,qBAAqB,CAC5D,CAGH,SAAS,EAAS,EAAgC,CAChD,OAAO,OAAO,OAAO,EAAiB,EAAM"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-kit/agent-context",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "代理上下文管理工具",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-context": "./dist/cli.js"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"type": "module",
|
|
14
14
|
"scripts": {
|
|
15
15
|
"build": "tsc -p tsconfig.json",
|
|
16
|
-
"clean": "rm -rf dist"
|
|
16
|
+
"clean": "rm -rf dist node_modules/.cache/.tsbuildinfo"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@inquirer/prompts": "^8.3.0",
|
package/src/cli.ts
CHANGED
|
@@ -1,35 +1,54 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { readFileSync } from 'node:fs'
|
|
4
|
+
|
|
4
5
|
import { Command } from 'commander'
|
|
5
6
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
7
|
+
import { doneCommand } from './commands/done.js'
|
|
8
|
+
import { installCommand } from './commands/install.js'
|
|
9
|
+
import { statusCommand } from './commands/status.js'
|
|
10
|
+
import { syncCommand } from './commands/sync.js'
|
|
11
|
+
import { validateCommand } from './commands/validate.js'
|
|
8
12
|
|
|
9
|
-
const packageJson = JSON.parse(
|
|
10
|
-
|
|
11
|
-
}
|
|
13
|
+
const packageJson = JSON.parse(
|
|
14
|
+
readFileSync(new URL('../package.json', import.meta.url), 'utf8')
|
|
15
|
+
) as { version?: string }
|
|
12
16
|
const packageVersion = typeof packageJson.version === 'string' ? packageJson.version : '0.0.0'
|
|
13
17
|
|
|
14
18
|
const program = new Command()
|
|
15
19
|
|
|
16
|
-
program.name('agent-context').description('Agent Context
|
|
20
|
+
program.name('agent-context').description('Agent Context Skills 安装工具').version(packageVersion)
|
|
17
21
|
|
|
18
22
|
program
|
|
19
|
-
.command('
|
|
20
|
-
.description('
|
|
23
|
+
.command('install')
|
|
24
|
+
.description('安装 ac-workflow Skill')
|
|
21
25
|
.option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')
|
|
22
|
-
.option('--yes', '
|
|
26
|
+
.option('--yes', '非交互模式:优先复用已安装工具,否则安装全部工具')
|
|
23
27
|
.option('--check', '仅检查是否存在待更新内容,不写入文件')
|
|
24
|
-
.action(
|
|
28
|
+
.action(installCommand)
|
|
25
29
|
|
|
26
30
|
program
|
|
27
|
-
.command('
|
|
28
|
-
.description('
|
|
31
|
+
.command('sync')
|
|
32
|
+
.description('同步已安装的 ac-workflow Skill')
|
|
29
33
|
.option('--tools <tools>', '指定目标工具,逗号分隔:claude,codex,cursor,antigravity,copilot')
|
|
30
|
-
.option('--yes', '非交互模式预留参数(当前版本无需确认)')
|
|
31
34
|
.option('--check', '仅检查是否存在待更新内容,不写入文件')
|
|
32
|
-
.action(
|
|
35
|
+
.action(syncCommand)
|
|
36
|
+
|
|
37
|
+
program
|
|
38
|
+
.command('validate')
|
|
39
|
+
.description('校验 .agent-context 目录结构')
|
|
40
|
+
.action(validateCommand)
|
|
41
|
+
|
|
42
|
+
program
|
|
43
|
+
.command('status')
|
|
44
|
+
.description('查看当前 agent-context 状态')
|
|
45
|
+
.action(statusCommand)
|
|
46
|
+
|
|
47
|
+
program
|
|
48
|
+
.command('done')
|
|
49
|
+
.description('归档当前已执行计划')
|
|
50
|
+
.option('--yes', '跳过确认,直接归档')
|
|
51
|
+
.action(doneCommand)
|
|
33
52
|
|
|
34
53
|
program.parseAsync().catch((error: unknown) => {
|
|
35
54
|
const message = error instanceof Error ? error.message : String(error)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { basename } from 'node:path'
|
|
2
|
+
|
|
3
|
+
import { confirm } from '@inquirer/prompts'
|
|
4
|
+
|
|
5
|
+
import { archive, readRawContext, validate } from '../context/index.js'
|
|
6
|
+
|
|
7
|
+
export async function doneCommand(options: { yes?: boolean }): Promise<void> {
|
|
8
|
+
const { snapshot, currentPlanCount } = await readRawContext(process.cwd())
|
|
9
|
+
const result = validate(snapshot, currentPlanCount)
|
|
10
|
+
|
|
11
|
+
if (!result.valid) {
|
|
12
|
+
for (const error of result.errors) {
|
|
13
|
+
console.log(`❌ ${error}`) // eslint-disable-line no-console
|
|
14
|
+
}
|
|
15
|
+
process.exitCode = 1
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (!snapshot || !snapshot.currentPlan) {
|
|
20
|
+
console.log('❌ 无当前计划') // eslint-disable-line no-console
|
|
21
|
+
process.exitCode = 1
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (snapshot.currentPlan.status !== '已执行') {
|
|
26
|
+
console.log(`❌ 当前计划 plan-${snapshot.currentPlan.number} 尚未执行,无法归档。`) // eslint-disable-line no-console
|
|
27
|
+
process.exitCode = 1
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!options.yes) {
|
|
32
|
+
const confirmed = await confirm({
|
|
33
|
+
message: `确认归档 plan-${snapshot.currentPlan.number}?`
|
|
34
|
+
})
|
|
35
|
+
if (!confirmed) {
|
|
36
|
+
console.log('已取消') // eslint-disable-line no-console
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const archiveResult = await archive(snapshot)
|
|
42
|
+
const archiveName = basename(archiveResult.archivedTo)
|
|
43
|
+
|
|
44
|
+
console.log(`✅ 已归档: plan-${snapshot.currentPlan.number} → done/${archiveName}`) // eslint-disable-line no-console
|
|
45
|
+
|
|
46
|
+
if (archiveResult.promoted !== null) {
|
|
47
|
+
console.log(`📋 已晋升: plan-${archiveResult.promoted} 为新的当前计划`) // eslint-disable-line no-console
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (archiveResult.remainingPreparing > 0) {
|
|
51
|
+
console.log(`📋 待执行队列剩余 ${archiveResult.remainingPreparing} 个计划`) // eslint-disable-line no-console
|
|
52
|
+
} else if (archiveResult.promoted === null) {
|
|
53
|
+
console.log('ℹ 无更多待执行计划') // eslint-disable-line no-console
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { checkbox } from '@inquirer/prompts'
|
|
2
|
+
|
|
3
|
+
import { runInstall } from '../runner.js'
|
|
4
|
+
import { DEFAULT_TOOL_ORDER, detectConfiguredToolIds, getToolChoices, parseToolIds } from '../tools.js'
|
|
5
|
+
import type { ToolId } from '../types.js'
|
|
6
|
+
import { printCheckResult, printRunSummary } from './printer.js'
|
|
7
|
+
|
|
8
|
+
export interface InstallCommandOptions {
|
|
9
|
+
tools?: string
|
|
10
|
+
check?: boolean
|
|
11
|
+
yes?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function installCommand(options: InstallCommandOptions = {}): Promise<void> {
|
|
15
|
+
const cwd = process.cwd()
|
|
16
|
+
const tools = await resolveTools(cwd, options)
|
|
17
|
+
const check = options.check ?? false
|
|
18
|
+
const result = await runInstall({ cwd, tools, check })
|
|
19
|
+
|
|
20
|
+
if (check) {
|
|
21
|
+
printCheckResult(result, cwd)
|
|
22
|
+
if (result.changed.length > 0) {
|
|
23
|
+
process.exitCode = 1
|
|
24
|
+
}
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
printRunSummary(result, cwd)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function resolveTools(
|
|
32
|
+
cwd: string,
|
|
33
|
+
options: InstallCommandOptions
|
|
34
|
+
): Promise<ToolId[] | undefined> {
|
|
35
|
+
const raw = options.tools
|
|
36
|
+
|
|
37
|
+
if (!raw || raw.trim().length === 0) {
|
|
38
|
+
const configuredTools = detectConfiguredToolIds(cwd)
|
|
39
|
+
|
|
40
|
+
if (options.yes) {
|
|
41
|
+
return configuredTools.length > 0 ? configuredTools : [...DEFAULT_TOOL_ORDER]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return checkbox<ToolId>({
|
|
45
|
+
message: '请选择要安装 ac-workflow Skill 的工具(可多选):',
|
|
46
|
+
choices: getToolChoices().map((tool) => ({
|
|
47
|
+
name: tool.name,
|
|
48
|
+
value: tool.id,
|
|
49
|
+
checked: configuredTools.includes(tool.id)
|
|
50
|
+
})),
|
|
51
|
+
required: true
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return parseToolIds(raw)
|
|
56
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { relative } from 'node:path'
|
|
2
2
|
|
|
3
|
-
import type { RunResult } from '../
|
|
3
|
+
import type { RunResult } from '../types.js'
|
|
4
4
|
|
|
5
5
|
export function printRunSummary(result: RunResult, cwd: string): void {
|
|
6
|
-
|
|
7
|
-
console.log(`\n✅ agent-context ${modeTitle} 完成`) // eslint-disable-line no-console
|
|
6
|
+
console.log(`\n✅ ac-workflow ${result.mode} 完成`) // eslint-disable-line no-console
|
|
8
7
|
|
|
9
8
|
if (result.created.length > 0) {
|
|
10
9
|
console.log(`\n新增 ${result.created.length} 个文件:`) // eslint-disable-line no-console
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readRawContext, validate } from '../context/index.js'
|
|
2
|
+
|
|
3
|
+
export async function statusCommand(): Promise<void> {
|
|
4
|
+
const { snapshot, currentPlanCount } = await readRawContext(process.cwd())
|
|
5
|
+
const result = validate(snapshot, currentPlanCount)
|
|
6
|
+
|
|
7
|
+
if (!result.valid) {
|
|
8
|
+
for (const error of result.errors) {
|
|
9
|
+
console.log(`❌ ${error}`) // eslint-disable-line no-console
|
|
10
|
+
}
|
|
11
|
+
process.exitCode = 1
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (result.context === null) {
|
|
16
|
+
console.log('ℹ 无活跃上下文') // eslint-disable-line no-console
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const ctx = result.context
|
|
21
|
+
const current = ctx.currentPlan
|
|
22
|
+
? `plan-${ctx.currentPlan.number} (${ctx.currentPlan.status})`
|
|
23
|
+
: '无'
|
|
24
|
+
const preparing =
|
|
25
|
+
ctx.preparing.length > 0
|
|
26
|
+
? ctx.preparing.map((p) => `plan-${p.number}`).join(', ')
|
|
27
|
+
: '无'
|
|
28
|
+
|
|
29
|
+
console.log('') // eslint-disable-line no-console
|
|
30
|
+
console.log('Agent Context Status') // eslint-disable-line no-console
|
|
31
|
+
console.log('────────────────────') // eslint-disable-line no-console
|
|
32
|
+
console.log(`当前计划: ${current}`) // eslint-disable-line no-console
|
|
33
|
+
console.log(`待执行队列: ${preparing}`) // eslint-disable-line no-console
|
|
34
|
+
console.log(`已归档: ${ctx.doneCount} 个`) // eslint-disable-line no-console
|
|
35
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { detectConfiguredToolIds, parseToolIds } from '../tools.js'
|
|
2
|
+
import type { ToolId } from '../types.js'
|
|
3
|
+
import { runSync } from '../runner.js'
|
|
4
|
+
import { printCheckResult, printRunSummary } from './printer.js'
|
|
5
|
+
|
|
6
|
+
export interface SyncCommandOptions {
|
|
7
|
+
tools?: string
|
|
8
|
+
check?: boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export async function syncCommand(options: SyncCommandOptions = {}): Promise<void> {
|
|
12
|
+
const cwd = process.cwd()
|
|
13
|
+
const tools = resolveTools(cwd, options.tools)
|
|
14
|
+
const check = options.check ?? false
|
|
15
|
+
const result = await runSync({ cwd, tools, check })
|
|
16
|
+
|
|
17
|
+
if (check) {
|
|
18
|
+
printCheckResult(result, cwd)
|
|
19
|
+
if (result.changed.length > 0) {
|
|
20
|
+
process.exitCode = 1
|
|
21
|
+
}
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
printRunSummary(result, cwd)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function resolveTools(cwd: string, raw?: string): ToolId[] | undefined {
|
|
29
|
+
if (!raw || raw.trim().length === 0) {
|
|
30
|
+
const configuredTools = detectConfiguredToolIds(cwd)
|
|
31
|
+
|
|
32
|
+
if (configuredTools.length > 0) {
|
|
33
|
+
return configuredTools
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
throw new Error('未检测到已安装的 Skill,请先执行 install 或通过 --tools 显式指定工具')
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return parseToolIds(raw)
|
|
40
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readRawContext, validate } from '../context/index.js'
|
|
2
|
+
|
|
3
|
+
export async function validateCommand(): Promise<void> {
|
|
4
|
+
const { snapshot, currentPlanCount } = await readRawContext(process.cwd())
|
|
5
|
+
const result = validate(snapshot, currentPlanCount)
|
|
6
|
+
|
|
7
|
+
if (result.context === null) {
|
|
8
|
+
console.log('ℹ 无 .agent-context 目录') // eslint-disable-line no-console
|
|
9
|
+
return
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (result.valid) {
|
|
13
|
+
console.log('✅ 校验通过') // eslint-disable-line no-console
|
|
14
|
+
const ctx = result.context
|
|
15
|
+
const current = ctx.currentPlan
|
|
16
|
+
? `plan-${ctx.currentPlan.number} (${ctx.currentPlan.status})`
|
|
17
|
+
: '无'
|
|
18
|
+
console.log(` 当前计划: ${current}`) // eslint-disable-line no-console
|
|
19
|
+
console.log(` 待执行: ${ctx.preparing.length} 个`) // eslint-disable-line no-console
|
|
20
|
+
console.log(` 已归档: ${ctx.doneCount} 个`) // eslint-disable-line no-console
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
for (const error of result.errors) {
|
|
25
|
+
console.log(`❌ ${error}`) // eslint-disable-line no-console
|
|
26
|
+
}
|
|
27
|
+
process.exitCode = 1
|
|
28
|
+
}
|