@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.
Files changed (94) hide show
  1. package/README.md +58 -61
  2. package/dist/cli.js +1 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/done.js +2 -0
  5. package/dist/commands/done.js.map +1 -0
  6. package/dist/commands/install.js +2 -0
  7. package/dist/commands/install.js.map +1 -0
  8. package/dist/commands/printer.js +4 -0
  9. package/dist/commands/printer.js.map +1 -0
  10. package/dist/commands/status.js +2 -0
  11. package/dist/commands/status.js.map +1 -0
  12. package/dist/commands/sync.js +2 -0
  13. package/dist/commands/sync.js.map +1 -0
  14. package/dist/commands/validate.js +2 -0
  15. package/dist/commands/validate.js.map +1 -0
  16. package/dist/content/actions.js +177 -0
  17. package/dist/content/actions.js.map +1 -0
  18. package/dist/content/index.js +48 -0
  19. package/dist/content/index.js.map +1 -0
  20. package/dist/context/archiver.js +2 -0
  21. package/dist/context/archiver.js.map +1 -0
  22. package/dist/context/reader.js +2 -0
  23. package/dist/context/reader.js.map +1 -0
  24. package/dist/context/validator.js +2 -0
  25. package/dist/context/validator.js.map +1 -0
  26. package/dist/runner.js +3 -0
  27. package/dist/runner.js.map +1 -0
  28. package/dist/stats.html +1 -1
  29. package/dist/tools.js +2 -0
  30. package/dist/tools.js.map +1 -0
  31. package/package.json +2 -2
  32. package/src/cli.ts +33 -14
  33. package/src/commands/done.ts +55 -0
  34. package/src/commands/install.ts +56 -0
  35. package/src/commands/{shared.ts → printer.ts} +2 -3
  36. package/src/commands/status.ts +35 -0
  37. package/src/commands/sync.ts +40 -0
  38. package/src/commands/validate.ts +28 -0
  39. package/src/content/actions.ts +238 -0
  40. package/src/content/index.ts +94 -0
  41. package/src/context/archiver.ts +45 -0
  42. package/src/context/index.ts +3 -0
  43. package/src/context/reader.ts +77 -0
  44. package/src/context/validator.ts +44 -0
  45. package/src/runner.ts +113 -0
  46. package/src/tools.ts +114 -0
  47. package/src/types.ts +71 -0
  48. package/dist/adapters/tool-targets.js +0 -2
  49. package/dist/adapters/tool-targets.js.map +0 -1
  50. package/dist/commands/setup.js +0 -2
  51. package/dist/commands/setup.js.map +0 -1
  52. package/dist/commands/shared.js +0 -4
  53. package/dist/commands/shared.js.map +0 -1
  54. package/dist/commands/update.js +0 -2
  55. package/dist/commands/update.js.map +0 -1
  56. package/dist/domain/workflow-content.js +0 -2
  57. package/dist/domain/workflow-content.js.map +0 -1
  58. package/dist/domain/workflow-context.js +0 -2
  59. package/dist/domain/workflow-context.js.map +0 -1
  60. package/dist/domain/workflow-templates/done.js +0 -23
  61. package/dist/domain/workflow-templates/done.js.map +0 -1
  62. package/dist/domain/workflow-templates/implement.js +0 -35
  63. package/dist/domain/workflow-templates/implement.js.map +0 -1
  64. package/dist/domain/workflow-templates/init.js +0 -37
  65. package/dist/domain/workflow-templates/init.js.map +0 -1
  66. package/dist/domain/workflow-templates/patch.js +0 -41
  67. package/dist/domain/workflow-templates/patch.js.map +0 -1
  68. package/dist/domain/workflow-templates/plan.js +0 -58
  69. package/dist/domain/workflow-templates/plan.js.map +0 -1
  70. package/dist/domain/workflow-templates/replan.js +0 -31
  71. package/dist/domain/workflow-templates/replan.js.map +0 -1
  72. package/dist/generators/workflow.js +0 -2
  73. package/dist/generators/workflow.js.map +0 -1
  74. package/dist/runtime/execute.js +0 -2
  75. package/dist/runtime/execute.js.map +0 -1
  76. package/dist/shared/fs.js +0 -3
  77. package/dist/shared/fs.js.map +0 -1
  78. package/src/adapters/tool-targets.ts +0 -157
  79. package/src/commands/setup.ts +0 -64
  80. package/src/commands/update.ts +0 -46
  81. package/src/domain/types.ts +0 -50
  82. package/src/domain/workflow-content.ts +0 -25
  83. package/src/domain/workflow-context.ts +0 -48
  84. package/src/domain/workflow-templates/done.ts +0 -28
  85. package/src/domain/workflow-templates/implement.ts +0 -41
  86. package/src/domain/workflow-templates/index.ts +0 -7
  87. package/src/domain/workflow-templates/init.ts +0 -42
  88. package/src/domain/workflow-templates/patch.ts +0 -47
  89. package/src/domain/workflow-templates/plan.ts +0 -70
  90. package/src/domain/workflow-templates/replan.ts +0 -36
  91. package/src/generators/workflow.ts +0 -25
  92. package/src/runtime/execute.ts +0 -45
  93. package/src/shared/fs.ts +0 -66
  94. 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":"f096d9a8-1"}]},{"name":"cli.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","uid":"f096d9a8-3"}]},{"name":"adapters/tool-targets.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/adapters/tool-targets.ts","uid":"f096d9a8-5"}]},{"name":"commands/setup.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/setup.ts","uid":"f096d9a8-7"}]},{"name":"commands/shared.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/shared.ts","uid":"f096d9a8-9"}]},{"name":"commands/update.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/commands/update.ts","uid":"f096d9a8-11"}]},{"name":"domain/workflow-content.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-content.ts","uid":"f096d9a8-13"}]},{"name":"domain/workflow-context.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-context.ts","uid":"f096d9a8-15"}]},{"name":"domain/workflow-templates/done.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/done.ts","uid":"f096d9a8-17"}]},{"name":"domain/workflow-templates/implement.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/implement.ts","uid":"f096d9a8-19"}]},{"name":"domain/workflow-templates/init.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/init.ts","uid":"f096d9a8-21"}]},{"name":"domain/workflow-templates/patch.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/patch.ts","uid":"f096d9a8-23"}]},{"name":"domain/workflow-templates/plan.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/plan.ts","uid":"f096d9a8-25"}]},{"name":"domain/workflow-templates/replan.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/replan.ts","uid":"f096d9a8-27"}]},{"name":"generators/workflow.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/generators/workflow.ts","uid":"f096d9a8-29"}]},{"name":"runtime/execute.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/runtime/execute.ts","uid":"f096d9a8-31"}]},{"name":"shared/fs.js","children":[{"name":"home/whj/codes/cat-kit/packages/agent-context/src/shared/fs.ts","uid":"f096d9a8-33"}]}],"isRoot":true},"nodeParts":{"f096d9a8-1":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-0"},"f096d9a8-3":{"renderedLength":1231,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-2"},"f096d9a8-5":{"renderedLength":2849,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-4"},"f096d9a8-7":{"renderedLength":1002,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-6"},"f096d9a8-9":{"renderedLength":973,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-8"},"f096d9a8-11":{"renderedLength":752,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-10"},"f096d9a8-13":{"renderedLength":340,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-12"},"f096d9a8-15":{"renderedLength":926,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-14"},"f096d9a8-17":{"renderedLength":1638,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-16"},"f096d9a8-19":{"renderedLength":2036,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-18"},"f096d9a8-21":{"renderedLength":2170,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-20"},"f096d9a8-23":{"renderedLength":1811,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-22"},"f096d9a8-25":{"renderedLength":2476,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-24"},"f096d9a8-27":{"renderedLength":1720,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-26"},"f096d9a8-29":{"renderedLength":468,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-28"},"f096d9a8-31":{"renderedLength":750,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-30"},"f096d9a8-33":{"renderedLength":1128,"gzipLength":0,"brotliLength":0,"metaUid":"f096d9a8-32"}},"nodeMetas":{"f096d9a8-0":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.d.ts","moduleParts":{"cli.d.ts":"f096d9a8-1"},"imported":[],"importedBy":[],"isEntry":true},"f096d9a8-2":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/cli.ts","moduleParts":{"cli.js":"f096d9a8-3"},"imported":[{"uid":"f096d9a8-34"},{"uid":"f096d9a8-35"},{"uid":"f096d9a8-6"},{"uid":"f096d9a8-10"}],"importedBy":[],"isEntry":true},"f096d9a8-4":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/adapters/tool-targets.ts","moduleParts":{"adapters/tool-targets.js":"f096d9a8-5"},"imported":[{"uid":"f096d9a8-37"},{"uid":"f096d9a8-34"}],"importedBy":[{"uid":"f096d9a8-6"},{"uid":"f096d9a8-10"},{"uid":"f096d9a8-30"},{"uid":"f096d9a8-28"}]},"f096d9a8-6":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/setup.ts","moduleParts":{"commands/setup.js":"f096d9a8-7"},"imported":[{"uid":"f096d9a8-36"},{"uid":"f096d9a8-4"},{"uid":"f096d9a8-30"},{"uid":"f096d9a8-8"}],"importedBy":[{"uid":"f096d9a8-2"}]},"f096d9a8-8":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/shared.ts","moduleParts":{"commands/shared.js":"f096d9a8-9"},"imported":[{"uid":"f096d9a8-37"}],"importedBy":[{"uid":"f096d9a8-6"},{"uid":"f096d9a8-10"}]},"f096d9a8-10":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/commands/update.ts","moduleParts":{"commands/update.js":"f096d9a8-11"},"imported":[{"uid":"f096d9a8-4"},{"uid":"f096d9a8-30"},{"uid":"f096d9a8-8"}],"importedBy":[{"uid":"f096d9a8-2"}]},"f096d9a8-12":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-content.ts","moduleParts":{"domain/workflow-content.js":"f096d9a8-13"},"imported":[{"uid":"f096d9a8-39"}],"importedBy":[{"uid":"f096d9a8-28"}]},"f096d9a8-14":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-context.ts","moduleParts":{"domain/workflow-context.js":"f096d9a8-15"},"imported":[],"importedBy":[{"uid":"f096d9a8-39"},{"uid":"f096d9a8-20"},{"uid":"f096d9a8-24"},{"uid":"f096d9a8-26"},{"uid":"f096d9a8-18"},{"uid":"f096d9a8-22"},{"uid":"f096d9a8-16"}]},"f096d9a8-16":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/done.ts","moduleParts":{"domain/workflow-templates/done.js":"f096d9a8-17"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-18":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/implement.ts","moduleParts":{"domain/workflow-templates/implement.js":"f096d9a8-19"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-20":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/init.ts","moduleParts":{"domain/workflow-templates/init.js":"f096d9a8-21"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-22":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/patch.ts","moduleParts":{"domain/workflow-templates/patch.js":"f096d9a8-23"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-24":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/plan.ts","moduleParts":{"domain/workflow-templates/plan.js":"f096d9a8-25"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-26":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/replan.ts","moduleParts":{"domain/workflow-templates/replan.js":"f096d9a8-27"},"imported":[{"uid":"f096d9a8-14"}],"importedBy":[{"uid":"f096d9a8-39"}]},"f096d9a8-28":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/generators/workflow.ts","moduleParts":{"generators/workflow.js":"f096d9a8-29"},"imported":[{"uid":"f096d9a8-4"},{"uid":"f096d9a8-12"}],"importedBy":[{"uid":"f096d9a8-30"}]},"f096d9a8-30":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/runtime/execute.ts","moduleParts":{"runtime/execute.js":"f096d9a8-31"},"imported":[{"uid":"f096d9a8-4"},{"uid":"f096d9a8-28"},{"uid":"f096d9a8-32"}],"importedBy":[{"uid":"f096d9a8-6"},{"uid":"f096d9a8-10"}]},"f096d9a8-32":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/shared/fs.ts","moduleParts":{"shared/fs.js":"f096d9a8-33"},"imported":[{"uid":"f096d9a8-37"},{"uid":"f096d9a8-34"},{"uid":"f096d9a8-38"}],"importedBy":[{"uid":"f096d9a8-30"}]},"f096d9a8-34":{"id":"node:fs","moduleParts":{},"imported":[],"importedBy":[{"uid":"f096d9a8-2"},{"uid":"f096d9a8-4"},{"uid":"f096d9a8-32"}]},"f096d9a8-35":{"id":"commander","moduleParts":{},"imported":[],"importedBy":[{"uid":"f096d9a8-2"}]},"f096d9a8-36":{"id":"@inquirer/prompts","moduleParts":{},"imported":[],"importedBy":[{"uid":"f096d9a8-6"}]},"f096d9a8-37":{"id":"node:path","moduleParts":{},"imported":[],"importedBy":[{"uid":"f096d9a8-4"},{"uid":"f096d9a8-8"},{"uid":"f096d9a8-32"}]},"f096d9a8-38":{"id":"node:fs/promises","moduleParts":{},"imported":[],"importedBy":[{"uid":"f096d9a8-32"}]},"f096d9a8-39":{"id":"/home/whj/codes/cat-kit/packages/agent-context/src/domain/workflow-templates/index.ts","moduleParts":{},"imported":[{"uid":"f096d9a8-14"},{"uid":"f096d9a8-20"},{"uid":"f096d9a8-24"},{"uid":"f096d9a8-26"},{"uid":"f096d9a8-18"},{"uid":"f096d9a8-22"},{"uid":"f096d9a8-16"}],"importedBy":[{"uid":"f096d9a8-12"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":false,"brotli":false,"sourcemap":false}};
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.0.7",
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 { setupCommand } from './commands/setup'
7
- import { updateCommand } from './commands/update'
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(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as {
10
- version?: string
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 工作流生成工具').version(packageVersion)
20
+ program.name('agent-context').description('Agent Context Skills 安装工具').version(packageVersion)
17
21
 
18
22
  program
19
- .command('setup')
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(setupCommand)
28
+ .action(installCommand)
25
29
 
26
30
  program
27
- .command('update')
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(updateCommand)
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 '../domain/types'
3
+ import type { RunResult } from '../types.js'
4
4
 
5
5
  export function printRunSummary(result: RunResult, cwd: string): void {
6
- const modeTitle = result.mode === 'setup' ? 'setup' : 'update'
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
+ }