@devcxl/opencode-cabbage 1.1.0 → 1.3.0

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 (142) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/README.md +53 -25
  3. package/README.zh.md +23 -23
  4. package/assets/agents/dev-lifecycle.md +208 -68
  5. package/assets/agents/team/architect.md +22 -7
  6. package/assets/agents/team/developer.md +13 -6
  7. package/assets/agents/team/goal-verify.md +4 -1
  8. package/assets/agents/team/researcher.md +59 -0
  9. package/assets/agents/team/reviewer.md +34 -18
  10. package/assets/commands/setup.md +1 -1
  11. package/assets/prompts/bootstrap.md +10 -9
  12. package/assets/prompts/stage-contract.md +25 -25
  13. package/assets/skills/flow-code/SKILL.md +23 -25
  14. package/assets/skills/flow-design/SKILL.md +94 -26
  15. package/assets/skills/flow-release/SKILL.md +41 -17
  16. package/assets/skills/flow-requirements/SKILL.md +19 -13
  17. package/assets/skills/flow-research/SKILL.md +77 -0
  18. package/assets/skills/flow-review/SKILL.md +55 -25
  19. package/assets/skills/flow-setup/SKILL.md +27 -24
  20. package/assets/skills/flow-tasks/SKILL.md +178 -35
  21. package/assets/skills/flow-tdd/SKILL.md +68 -40
  22. package/codex-skills/agent-architect/SKILL.md +79 -0
  23. package/codex-skills/agent-dev-lifecycle/SKILL.md +309 -0
  24. package/codex-skills/agent-developer/SKILL.md +51 -0
  25. package/codex-skills/agent-goal-verify/SKILL.md +45 -0
  26. package/codex-skills/agent-researcher/SKILL.md +32 -0
  27. package/codex-skills/agent-reviewer/SKILL.md +109 -0
  28. package/codex-skills/flow-code/SKILL.md +71 -0
  29. package/codex-skills/flow-design/SKILL.md +146 -0
  30. package/codex-skills/flow-release/SKILL.md +90 -0
  31. package/codex-skills/flow-requirements/SKILL.md +90 -0
  32. package/codex-skills/flow-research/SKILL.md +77 -0
  33. package/codex-skills/flow-review/SKILL.md +110 -0
  34. package/codex-skills/flow-setup/SKILL.md +75 -0
  35. package/codex-skills/flow-tasks/SKILL.md +220 -0
  36. package/codex-skills/flow-tdd/SKILL.md +235 -0
  37. package/dist/hooks/session-start.d.ts +1 -0
  38. package/dist/hooks/session-start.js +72 -0
  39. package/dist/hooks/session-start.js.map +1 -0
  40. package/dist/kernel/session-index.d.ts +8 -25
  41. package/dist/kernel/session-index.js +5 -55
  42. package/dist/kernel/session-index.js.map +1 -1
  43. package/dist/plugin/bootstrap.d.ts +0 -1
  44. package/dist/plugin/bootstrap.js +0 -3
  45. package/dist/plugin/bootstrap.js.map +1 -1
  46. package/dist/plugin/goal-store.d.ts +71 -0
  47. package/dist/plugin/goal-store.js +54 -0
  48. package/dist/plugin/goal-store.js.map +1 -0
  49. package/dist/plugin/goal.d.ts +47 -13
  50. package/dist/plugin/goal.js +228 -128
  51. package/dist/plugin/goal.js.map +1 -1
  52. package/dist/plugin/prompt-lint.js +3 -11
  53. package/dist/plugin/prompt-lint.js.map +1 -1
  54. package/dist/plugin/prompts.d.ts +0 -1
  55. package/dist/plugin/prompts.js +0 -4
  56. package/dist/plugin/prompts.js.map +1 -1
  57. package/dist/plugin/server.d.ts +3 -5
  58. package/dist/plugin/server.js +247 -155
  59. package/dist/plugin/server.js.map +1 -1
  60. package/dist/plugin/skills.d.ts +7 -1
  61. package/dist/plugin/skills.js +75 -12
  62. package/dist/plugin/skills.js.map +1 -1
  63. package/dist/plugin.d.ts +0 -1
  64. package/dist/plugin.js +1 -4
  65. package/dist/plugin.js.map +1 -1
  66. package/dist/util/gh.d.ts +0 -11
  67. package/dist/util/gh.js +0 -14
  68. package/dist/util/gh.js.map +1 -1
  69. package/dist/util/paths.d.ts +0 -14
  70. package/dist/util/paths.js +0 -69
  71. package/dist/util/paths.js.map +1 -1
  72. package/hooks/hooks.json +17 -0
  73. package/package.json +12 -4
  74. package/assets/prompts/ADR-FORMAT.md +0 -45
  75. package/assets/prompts/PRD-FORMAT.md +0 -17
  76. package/assets/templates/gitignore +0 -5
  77. package/dist/kernel/caller.d.ts +0 -48
  78. package/dist/kernel/caller.js +0 -88
  79. package/dist/kernel/caller.js.map +0 -1
  80. package/dist/kernel/flow.d.ts +0 -175
  81. package/dist/kernel/flow.js +0 -467
  82. package/dist/kernel/flow.js.map +0 -1
  83. package/dist/kernel/legacy.d.ts +0 -19
  84. package/dist/kernel/legacy.js +0 -34
  85. package/dist/kernel/legacy.js.map +0 -1
  86. package/dist/kernel/records.d.ts +0 -103
  87. package/dist/kernel/records.js +0 -240
  88. package/dist/kernel/records.js.map +0 -1
  89. package/dist/kernel/release.d.ts +0 -106
  90. package/dist/kernel/release.js +0 -241
  91. package/dist/kernel/release.js.map +0 -1
  92. package/dist/kernel/review.d.ts +0 -34
  93. package/dist/kernel/review.js +0 -82
  94. package/dist/kernel/review.js.map +0 -1
  95. package/dist/kernel/setup.d.ts +0 -95
  96. package/dist/kernel/setup.js +0 -401
  97. package/dist/kernel/setup.js.map +0 -1
  98. package/dist/kernel/slug.d.ts +0 -23
  99. package/dist/kernel/slug.js +0 -67
  100. package/dist/kernel/slug.js.map +0 -1
  101. package/dist/kernel/task.d.ts +0 -213
  102. package/dist/kernel/task.js +0 -873
  103. package/dist/kernel/task.js.map +0 -1
  104. package/dist/kernel/tdd/adapter.d.ts +0 -49
  105. package/dist/kernel/tdd/adapter.js +0 -294
  106. package/dist/kernel/tdd/adapter.js.map +0 -1
  107. package/dist/kernel/tdd/digest.d.ts +0 -18
  108. package/dist/kernel/tdd/digest.js +0 -303
  109. package/dist/kernel/tdd/digest.js.map +0 -1
  110. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  111. package/dist/kernel/tdd/evaluator.js +0 -185
  112. package/dist/kernel/tdd/evaluator.js.map +0 -1
  113. package/dist/kernel/tdd/evidence.d.ts +0 -42
  114. package/dist/kernel/tdd/evidence.js +0 -48
  115. package/dist/kernel/tdd/evidence.js.map +0 -1
  116. package/dist/kernel/tdd/state.d.ts +0 -79
  117. package/dist/kernel/tdd/state.js +0 -363
  118. package/dist/kernel/tdd/state.js.map +0 -1
  119. package/dist/kernel/types.d.ts +0 -180
  120. package/dist/kernel/types.js +0 -2
  121. package/dist/kernel/types.js.map +0 -1
  122. package/dist/kernel/worktree.d.ts +0 -45
  123. package/dist/kernel/worktree.js +0 -156
  124. package/dist/kernel/worktree.js.map +0 -1
  125. package/dist/plugin/flow-control.d.ts +0 -91
  126. package/dist/plugin/flow-control.js +0 -287
  127. package/dist/plugin/flow-control.js.map +0 -1
  128. package/dist/plugin/release-control.d.ts +0 -39
  129. package/dist/plugin/release-control.js +0 -343
  130. package/dist/plugin/release-control.js.map +0 -1
  131. package/dist/plugin/setup-control.d.ts +0 -59
  132. package/dist/plugin/setup-control.js +0 -111
  133. package/dist/plugin/setup-control.js.map +0 -1
  134. package/dist/plugin/task-control.d.ts +0 -90
  135. package/dist/plugin/task-control.js +0 -208
  136. package/dist/plugin/task-control.js.map +0 -1
  137. package/dist/plugin/tdd-checkpoint.d.ts +0 -128
  138. package/dist/plugin/tdd-checkpoint.js +0 -664
  139. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  140. package/dist/util/shell.d.ts +0 -1
  141. package/dist/util/shell.js +0 -4
  142. package/dist/util/shell.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session-index.js","sourceRoot":"","sources":["../../src/kernel/session-index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIvC,MAAM,cAAc,GAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AAe1F,gDAAgD;AAChD,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;AAEnC,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAA;AAC5E,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAA;QACtG,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvH,OAAO,MAAsB,CAAA;QAC/B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACtB,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,KAAmB;IACtE,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAA;IAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5D,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB,EAAE,iBAAyB;IAC3E,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAA;AACvD,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,iBAAyB,EACzB,SAAiB;IAEjB,OAAO,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,SAAS,iBAAiB,wCAAwC,QAAQ,CAAC,SAAS,mEAAmE;aACjK,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAqB;YAC9B,SAAS;YACT,MAAM,EAAE,QAAQ;YAChB,iBAAiB,EAAE,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChG,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,iBAAyB,EACzB,YAAoB,EACpB,aAAsB;IAEtB,OAAO,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YACtG,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,SAAS,iBAAiB,gCAAgC,QAAQ,CAAC,SAAS,gEAAgE;aACtJ,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAqB,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;gBACxF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YAC5B,CAAC;YACD,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAA;YAC1B,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACjC,CAAC;QAED,MAAM,KAAK,GAAqB;YAC9B,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,QAAQ;YAChB,iBAAiB,EAAE,CAAC;YACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,iBAAyB,EACzB,KAAuF;IAEvF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,KAAK,GAAqB,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAChF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,iBAAyB,EACzB,SAAiB;IAEjB,OAAO,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"session-index.js","sourceRoot":"","sources":["../../src/kernel/session-index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
1
  export declare function initBootstrap(): Promise<void>;
2
2
  export declare function getBootstrapContent(): string;
3
- export declare function resetBootstrap(): void;
@@ -11,7 +11,4 @@ export async function initBootstrap() {
11
11
  export function getBootstrapContent() {
12
12
  return _bootstrapCache ?? _fallbackContent;
13
13
  }
14
- export function resetBootstrap() {
15
- _bootstrapCache = undefined;
16
- }
17
14
  //# sourceMappingURL=bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/plugin/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,IAAI,eAAmC,CAAA;AAEvC,MAAM,gBAAgB,GAAG,YAAY,CACnC,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EACnE,QAAQ,EAAE,SAAS,EAAE,cAAc,CACpC,EACD,OAAO,CACR,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAA;IAC7C,eAAe,GAAG,OAAO,IAAI,SAAS,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,IAAI,gBAAgB,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,eAAe,GAAG,SAAS,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/plugin/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,IAAI,eAAmC,CAAA;AAEvC,MAAM,gBAAgB,GAAG,YAAY,CACnC,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EACnE,QAAQ,EAAE,SAAS,EAAE,cAAc,CACpC,EACD,OAAO,CACR,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAA;IAC7C,eAAe,GAAG,OAAO,IAAI,SAAS,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,IAAI,gBAAgB,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { GoalData } from "./goal.js";
2
+ /**
3
+ * goal 存储抽象(V2 迁移解耦准备)。
4
+ *
5
+ * V1 实现 = session.metadata.goal(createMetadataGoalStore)。
6
+ * V2 候选 = ctx.storage / 本地文件——切换时只替换实现,不改调用方。
7
+ * 见 docs/dev/research/2026-08-31-opencode-v2-compat-spike.md §6.3.1。
8
+ */
9
+ /** goal 宿主会话的最小面:goal 工具判定子会话(parentID)与元数据保留(write 全量替换)所需 */
10
+ export interface GoalSession {
11
+ parentID: string | null;
12
+ metadata: Record<string, unknown>;
13
+ }
14
+ /** 宽松消息面:记账与尾部检查的最小形状(V1 实现直接透传 SDK messages data,不做映射) */
15
+ export interface GoalMessage {
16
+ info?: {
17
+ id?: string;
18
+ role?: string;
19
+ time?: {
20
+ completed?: number;
21
+ created?: number;
22
+ } | null;
23
+ tokens?: unknown;
24
+ error?: unknown;
25
+ } | null;
26
+ parts?: Array<{
27
+ type?: string;
28
+ text?: string;
29
+ }>;
30
+ }
31
+ /** goal 状态存储。read 的 fail-closed 语义(异常 → null)由实现保证,调用方依赖此兜底。 */
32
+ export interface GoalStore {
33
+ read(sessionID: string): Promise<{
34
+ goal: GoalData | null;
35
+ session: GoalSession | null;
36
+ }>;
37
+ /** 写 goal;null 表示删除。existingSession 复用 read 结果避免二次读取。 */
38
+ write(sessionID: string, goal: GoalData | null, existingSession?: GoalSession | null): Promise<void>;
39
+ /** 最近消息(记账基线 + 续接尾部检查用)。data 非数组时返回 null(与 SDK 语义一致)。 */
40
+ messages(sessionID: string, limit: number): Promise<GoalMessage[] | null>;
41
+ }
42
+ /** GoalStore V1 实现所需的最小 SDK 客户端面(createOpencodeClient 返回类型的子集) */
43
+ export interface GoalStoreClient {
44
+ session: {
45
+ get(args: {
46
+ sessionID: string;
47
+ }): Promise<{
48
+ data?: {
49
+ parentID?: string | null;
50
+ metadata?: Record<string, unknown>;
51
+ } | null;
52
+ }>;
53
+ update(args: {
54
+ sessionID: string;
55
+ metadata: Record<string, unknown>;
56
+ }): Promise<unknown>;
57
+ messages(args: {
58
+ sessionID: string;
59
+ limit?: number;
60
+ }): Promise<{
61
+ data?: GoalMessage[];
62
+ }>;
63
+ };
64
+ }
65
+ /** V1 实现:goal 持久化在 session metadata 的 goal 键;messages 直接透传 SDK 消息面 */
66
+ export declare function createMetadataGoalStore(client: GoalStoreClient): GoalStore;
67
+ /**
68
+ * 从插件上下文构建 SDK client(V1 宿主机制)。
69
+ * V2 下 ctx 本身即 server client,本函数与 createMetadataGoalStore 一起被替换。
70
+ */
71
+ export declare function createGoalClient(serverUrl: URL, v1Client: any): import("@opencode-ai/sdk/v2").OpencodeClient;
@@ -0,0 +1,54 @@
1
+ import { createOpencodeClient } from "@opencode-ai/sdk/v2";
2
+ /** V1 实现:goal 持久化在 session metadata 的 goal 键;messages 直接透传 SDK 消息面 */
3
+ export function createMetadataGoalStore(client) {
4
+ return {
5
+ async read(sessionID) {
6
+ try {
7
+ const result = await client.session.get({ sessionID });
8
+ const session = result?.data ?? null;
9
+ if (!session)
10
+ return { goal: null, session: null };
11
+ const goalSession = {
12
+ parentID: session.parentID ?? null,
13
+ metadata: session.metadata ?? {},
14
+ };
15
+ if (!goalSession.metadata.goal)
16
+ return { goal: null, session: goalSession };
17
+ return { goal: goalSession.metadata.goal, session: goalSession };
18
+ }
19
+ catch {
20
+ return { goal: null, session: null };
21
+ }
22
+ },
23
+ async write(sessionID, goal, existingSession) {
24
+ const session = existingSession ?? (await this.read(sessionID)).session;
25
+ if (!session)
26
+ throw new Error("Failed to get session");
27
+ const existing = session.metadata ?? {};
28
+ const metadata = goal === null
29
+ ? Object.fromEntries(Object.entries(existing).filter(([k]) => k !== "goal"))
30
+ : { ...existing, goal };
31
+ await client.session.update({ sessionID, metadata });
32
+ },
33
+ async messages(sessionID, limit) {
34
+ const result = await client.session.messages({ sessionID, limit });
35
+ return Array.isArray(result?.data) ? result.data : null;
36
+ },
37
+ };
38
+ }
39
+ /**
40
+ * 从插件上下文构建 SDK client(V1 宿主机制)。
41
+ * V2 下 ctx 本身即 server client,本函数与 createMetadataGoalStore 一起被替换。
42
+ */
43
+ export function createGoalClient(serverUrl, v1Client) {
44
+ const v1Config = v1Client?.getConfig?.() ?? {};
45
+ return createOpencodeClient({
46
+ baseUrl: serverUrl.origin,
47
+ headers: v1Config.headers,
48
+ fetch: v1Config.fetch,
49
+ // SDK v2 默认 ThrowOnError=false(4xx/5xx 静默 resolve 为 {error}),
50
+ // 必须显式开启,否则 readGoal/writeGoal 的 try/catch 与错误传播全部失效
51
+ throwOnError: true,
52
+ });
53
+ }
54
+ //# sourceMappingURL=goal-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-store.js","sourceRoot":"","sources":["../../src/plugin/goal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AA+C1D,sEAAsE;AACtE,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC7D,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,SAAS;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;gBACtD,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAA;gBACpC,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;gBAClD,MAAM,WAAW,GAAgB;oBAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;oBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;iBACjC,CAAA;gBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI;oBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;gBAC3E,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YACtC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe;YAC1C,MAAM,OAAO,GAAG,eAAe,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;YACvE,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAEtD,MAAM,QAAQ,GAA4B,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;YAChE,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI;gBAC5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;gBAC5E,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAA;YAEzB,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK;YAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;YAClE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QACzD,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAc,EAAE,QAAa;IAC5D,MAAM,QAAQ,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAA;IAC9C,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,8DAA8D;QAC9D,qDAAqD;QACrD,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;AACJ,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import type { ToolContext, ToolResult } from "@opencode-ai/plugin";
2
- import { createOpencodeClient } from "@opencode-ai/sdk/v2";
3
- import type { Session } from "@opencode-ai/sdk/v2";
2
+ import type { GoalSession, GoalStore } from "./goal-store.js";
4
3
  export type GoalStatus = "active" | "paused" | "complete";
5
4
  /** 用户最后使用的会话配置快照:续接注入时显式传回,防止 idle 后回落/切换默认 agent 与模型 */
6
5
  export interface GoalSessionProfile {
@@ -17,20 +16,52 @@ export interface GoalData {
17
16
  continuationCount: number;
18
17
  /** 用户最后使用的 agent/模型(create 或用户消息时快照) */
19
18
  sessionProfile?: GoalSessionProfile;
19
+ /** 可选 token 预算(护栏):tokensUsed 达限后自动 pause,防止长跑成本失控 */
20
+ tokenBudget?: number;
21
+ /** 已用 token(快照法:最新完成 assistant 轮 input+cache.read+output − baseline,单调不减) */
22
+ tokensUsed?: number;
23
+ /** 记账基线:create 时点最新完成 assistant 轮的快照(compaction 不做分段,护栏非账单) */
24
+ tokensBaseline?: number;
25
+ /** goal 创建时刻(ms):记账基线初始化与诊断用 */
26
+ createdAt?: number;
27
+ /** 状态原因:'resumed' 是 UI/resume 的 kickoff 信号(首次 tick 豁免 blocked 检测后消费清除) */
28
+ statusReason?: string;
20
29
  }
21
- export declare function createGoal(parentIssueNumber: number, sessionProfile?: GoalSessionProfile): GoalData;
30
+ export declare function createGoal(parentIssueNumber: number, sessionProfile?: GoalSessionProfile, tokenBudget?: number): GoalData;
22
31
  export declare function canTransitionTo(goal: GoalData, target: GoalStatus): boolean;
23
32
  export declare function formatGoal(goal: GoalData): string;
24
33
  export declare const MAX_CONTINUATIONS = 50;
34
+ /**
35
+ * 单条消息的 token 快照 = input + reasoning + cache.read + output。
36
+ * 与 OpenChamber 记账同源:OpenCode 每轮的 cache.read 已含此前所有轮次付费 token,
37
+ * 最新完成轮的快照即整段成本,无需跨消息求和。reasoning 也计费,护栏方向偏严。
38
+ */
39
+ export declare function snapshotTokenTotal(tokens: unknown): number;
40
+ /** token 预算护栏:达到或超过预算即应暂停(null 表示未设预算) */
41
+ export declare function budgetReached(goal: GoalData): boolean;
42
+ /**
43
+ * 识别 agent 在续接回复中输出的显式阻塞报告(continuationPrompt 要求格式:
44
+ * 无法推进时必须输出 [BLOCKED: <原因>])。大小写与空白容错。
45
+ */
46
+ export declare const BLOCKED_REPORT_RE: RegExp;
47
+ export declare function isBlockedReport(text: string): boolean;
48
+ /**
49
+ * 识别 agent 的显式完成报告(continuationPrompt 要求格式:[DONE: <摘要>])。
50
+ * 命中 → goal 暂停并提示用户派 goal-verify 做最终独立验证(与 [BLOCKED:] 对称)。
51
+ */
52
+ export declare const DONE_REPORT_RE: RegExp;
53
+ export declare function isDoneReport(text: string): boolean;
25
54
  export declare function continuationPrompt(parentIssueNumber: number): string;
26
- export declare function verifyAgentPrompt(): string;
27
- export declare function createGoalClient(serverUrl: URL, v1Client: any): import("@opencode-ai/sdk/v2").OpencodeClient;
28
- export declare function readGoal(client: ReturnType<typeof createOpencodeClient>, sessionID: string): Promise<{
55
+ /**
56
+ * 带锁的 goal 读-改-写单一入口:同一 sessionID 的操作串行,杜绝并发丢失更新。
57
+ * fn 接收当前 goal 与宿主会话,返回写回的 goal(null 表示删除)与调用方结果 value。
58
+ * 当前无 goal 且 fn 也返回 null 时跳过写回(避免对不存在 goal 的无谓删除/写入)。
59
+ */
60
+ export declare function mutateGoal<T>(store: GoalStore, sessionID: string, fn: (goal: GoalData | null, session: GoalSession | null) => Promise<{
29
61
  goal: GoalData | null;
30
- session: Session | null;
31
- }>;
32
- export declare function writeGoal(client: ReturnType<typeof createOpencodeClient>, sessionID: string, goal: GoalData | null, existingSession?: Session | null): Promise<void>;
33
- export declare function createGoalTool(client: ReturnType<typeof createOpencodeClient>): {
62
+ value: T;
63
+ }>): Promise<T>;
64
+ export declare function createGoalTool(store: GoalStore, projectDirFallback?: string): {
34
65
  description: string;
35
66
  args: {
36
67
  op: import("zod").ZodEnum<{
@@ -40,11 +71,14 @@ export declare function createGoalTool(client: ReturnType<typeof createOpencodeC
40
71
  resume: "resume";
41
72
  cancel: "cancel";
42
73
  pause: "pause";
74
+ edit: "edit";
43
75
  }>;
44
- parent_issue_number: import("zod").ZodNumber;
76
+ parent_issue_number: import("zod").ZodOptional<import("zod").ZodNumber>;
77
+ token_budget: import("zod").ZodOptional<import("zod").ZodNumber>;
45
78
  };
46
79
  execute(args: {
47
- op: "complete" | "create" | "get" | "resume" | "cancel" | "pause";
48
- parent_issue_number: number;
80
+ op: "complete" | "create" | "get" | "resume" | "cancel" | "pause" | "edit";
81
+ parent_issue_number?: number | undefined;
82
+ token_budget?: number | undefined;
49
83
  }, context: ToolContext): Promise<ToolResult>;
50
84
  };