@devcxl/opencode-cabbage 1.0.0 → 1.2.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 (126) hide show
  1. package/README.md +19 -25
  2. package/README.zh.md +17 -23
  3. package/assets/agents/dev-lifecycle.md +208 -68
  4. package/assets/agents/team/architect.md +22 -4
  5. package/assets/agents/team/developer.md +13 -6
  6. package/assets/agents/team/goal-verify.md +4 -1
  7. package/assets/agents/team/researcher.md +59 -0
  8. package/assets/agents/team/reviewer.md +34 -18
  9. package/assets/commands/setup.md +1 -1
  10. package/assets/prompts/bootstrap.md +10 -9
  11. package/assets/prompts/stage-contract.md +25 -25
  12. package/assets/skills/flow-code/SKILL.md +23 -25
  13. package/assets/skills/flow-design/SKILL.md +94 -26
  14. package/assets/skills/flow-release/SKILL.md +41 -17
  15. package/assets/skills/flow-requirements/SKILL.md +19 -13
  16. package/assets/skills/flow-research/SKILL.md +77 -0
  17. package/assets/skills/flow-review/SKILL.md +55 -25
  18. package/assets/skills/flow-setup/SKILL.md +27 -24
  19. package/assets/skills/flow-tasks/SKILL.md +178 -35
  20. package/assets/skills/flow-tdd/SKILL.md +68 -40
  21. package/dist/kernel/context.js +12 -1
  22. package/dist/kernel/context.js.map +1 -1
  23. package/dist/kernel/permission.d.ts +1 -1
  24. package/dist/kernel/permission.js +9 -1
  25. package/dist/kernel/permission.js.map +1 -1
  26. package/dist/kernel/profile.js +5 -2
  27. package/dist/kernel/profile.js.map +1 -1
  28. package/dist/kernel/session-index.d.ts +12 -27
  29. package/dist/kernel/session-index.js +46 -80
  30. package/dist/kernel/session-index.js.map +1 -1
  31. package/dist/plugin/bootstrap.d.ts +0 -1
  32. package/dist/plugin/bootstrap.js +0 -3
  33. package/dist/plugin/bootstrap.js.map +1 -1
  34. package/dist/plugin/goal.d.ts +57 -6
  35. package/dist/plugin/goal.js +234 -86
  36. package/dist/plugin/goal.js.map +1 -1
  37. package/dist/plugin/prompt-lint.js +3 -12
  38. package/dist/plugin/prompt-lint.js.map +1 -1
  39. package/dist/plugin/prompts.d.ts +0 -1
  40. package/dist/plugin/prompts.js +0 -4
  41. package/dist/plugin/prompts.js.map +1 -1
  42. package/dist/plugin/server.d.ts +2 -5
  43. package/dist/plugin/server.js +260 -136
  44. package/dist/plugin/server.js.map +1 -1
  45. package/dist/plugin/skills.d.ts +7 -1
  46. package/dist/plugin/skills.js +75 -12
  47. package/dist/plugin/skills.js.map +1 -1
  48. package/dist/plugin.d.ts +0 -1
  49. package/dist/plugin.js +1 -4
  50. package/dist/plugin.js.map +1 -1
  51. package/dist/util/gh.d.ts +3 -9
  52. package/dist/util/gh.js +9 -11
  53. package/dist/util/gh.js.map +1 -1
  54. package/dist/util/paths.d.ts +6 -14
  55. package/dist/util/paths.js +12 -67
  56. package/dist/util/paths.js.map +1 -1
  57. package/package.json +5 -5
  58. package/assets/prompts/ADR-FORMAT.md +0 -45
  59. package/assets/prompts/PRD-FORMAT.md +0 -17
  60. package/assets/templates/gitignore +0 -5
  61. package/dist/kernel/caller.d.ts +0 -48
  62. package/dist/kernel/caller.js +0 -88
  63. package/dist/kernel/caller.js.map +0 -1
  64. package/dist/kernel/flow.d.ts +0 -166
  65. package/dist/kernel/flow.js +0 -387
  66. package/dist/kernel/flow.js.map +0 -1
  67. package/dist/kernel/legacy.d.ts +0 -19
  68. package/dist/kernel/legacy.js +0 -34
  69. package/dist/kernel/legacy.js.map +0 -1
  70. package/dist/kernel/records.d.ts +0 -87
  71. package/dist/kernel/records.js +0 -197
  72. package/dist/kernel/records.js.map +0 -1
  73. package/dist/kernel/release.d.ts +0 -104
  74. package/dist/kernel/release.js +0 -229
  75. package/dist/kernel/release.js.map +0 -1
  76. package/dist/kernel/review.d.ts +0 -34
  77. package/dist/kernel/review.js +0 -81
  78. package/dist/kernel/review.js.map +0 -1
  79. package/dist/kernel/setup.d.ts +0 -70
  80. package/dist/kernel/setup.js +0 -324
  81. package/dist/kernel/setup.js.map +0 -1
  82. package/dist/kernel/slug.d.ts +0 -23
  83. package/dist/kernel/slug.js +0 -67
  84. package/dist/kernel/slug.js.map +0 -1
  85. package/dist/kernel/task.d.ts +0 -208
  86. package/dist/kernel/task.js +0 -788
  87. package/dist/kernel/task.js.map +0 -1
  88. package/dist/kernel/tdd/adapter.d.ts +0 -49
  89. package/dist/kernel/tdd/adapter.js +0 -293
  90. package/dist/kernel/tdd/adapter.js.map +0 -1
  91. package/dist/kernel/tdd/digest.d.ts +0 -17
  92. package/dist/kernel/tdd/digest.js +0 -301
  93. package/dist/kernel/tdd/digest.js.map +0 -1
  94. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  95. package/dist/kernel/tdd/evaluator.js +0 -185
  96. package/dist/kernel/tdd/evaluator.js.map +0 -1
  97. package/dist/kernel/tdd/evidence.d.ts +0 -42
  98. package/dist/kernel/tdd/evidence.js +0 -48
  99. package/dist/kernel/tdd/evidence.js.map +0 -1
  100. package/dist/kernel/tdd/state.d.ts +0 -79
  101. package/dist/kernel/tdd/state.js +0 -363
  102. package/dist/kernel/tdd/state.js.map +0 -1
  103. package/dist/kernel/types.d.ts +0 -180
  104. package/dist/kernel/types.js +0 -2
  105. package/dist/kernel/types.js.map +0 -1
  106. package/dist/kernel/worktree.d.ts +0 -45
  107. package/dist/kernel/worktree.js +0 -127
  108. package/dist/kernel/worktree.js.map +0 -1
  109. package/dist/plugin/flow-control.d.ts +0 -80
  110. package/dist/plugin/flow-control.js +0 -254
  111. package/dist/plugin/flow-control.js.map +0 -1
  112. package/dist/plugin/release-control.d.ts +0 -37
  113. package/dist/plugin/release-control.js +0 -304
  114. package/dist/plugin/release-control.js.map +0 -1
  115. package/dist/plugin/setup-control.d.ts +0 -45
  116. package/dist/plugin/setup-control.js +0 -80
  117. package/dist/plugin/setup-control.js.map +0 -1
  118. package/dist/plugin/task-control.d.ts +0 -90
  119. package/dist/plugin/task-control.js +0 -201
  120. package/dist/plugin/task-control.js.map +0 -1
  121. package/dist/plugin/tdd-checkpoint.d.ts +0 -118
  122. package/dist/plugin/tdd-checkpoint.js +0 -581
  123. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  124. package/dist/util/shell.d.ts +0 -1
  125. package/dist/util/shell.js +0 -4
  126. package/dist/util/shell.js.map +0 -1
@@ -1,208 +0,0 @@
1
- import { type ProjectProfile } from "./profile.js";
2
- import { type WorkspaceBaseline } from "./tdd/evidence.js";
3
- import type { AcceptanceCriterion, TaskRecordRef, TddEvidence, TddPolicy } from "./types.js";
4
- /** Task Record 状态标签前缀:cabbage:task:<status> */
5
- export declare const TASK_STATUS_LABEL_PREFIX = "cabbage:task:";
6
- /** Task 状态标签取值 */
7
- export type TaskStatus = "running" | "reviewing" | "merged" | "cancelled";
8
- /** 默认最大并行 Task 数(PRD R7,Profile 可覆盖但内核按此判定) */
9
- export declare const MAX_PARALLEL_TASKS = 5;
10
- /** 内核内置风险 pattern(spec §12 #12:migrations/auth/permissions/release workflow/密钥/公共 API),与 Profile riskPatterns 合并 */
11
- export declare const BUILTIN_RISK_PATTERNS: string[];
12
- export type CmdResult = {
13
- stdout: string;
14
- stderr: string;
15
- };
16
- export type CmdFn = (args: string) => Promise<CmdResult>;
17
- export declare function setTaskGhExecutor(fn: CmdFn | null): void;
18
- export declare function setTaskGitExecutor(fn: CmdFn | null): void;
19
- export declare function taskGh(args: string, timeout?: number): Promise<CmdResult>;
20
- export declare function taskGit(args: string): Promise<CmdResult>;
21
- /**
22
- * 新建 Task Record 的 body:acceptance criteria + 依赖 + 状态 checklist + Closes 约定。
23
- * criteria 渲染为 `- [ ] <id>: <description> [<verification>]`,可被 parseCriteriaFromBody 还原。
24
- */
25
- export declare function buildTaskBody(slug: string, criteria: AcceptanceCriterion[], dependencies: number[]): string;
26
- /** TDD 跨批协议:Task Record body 内 TDD 上下文块 marker(tdd_checkpoint 工具解析;spec §2.3/§4) */
27
- export declare const TASK_TDD_TAG = "<!-- cabbage-task-tdd -->";
28
- /** 构造 TDD 上下文块 JSON(policy + criteria + worktreeDir),供 tdd_checkpoint resolveTaskContext 解析 */
29
- export declare function buildTaskTddBlock(policy: TddPolicy, criteria: AcceptanceCriterion[], worktreePath: string): string;
30
- /** 解析 create-task 传入的 acceptance_criteria JSON(字符串数组 → AcceptanceCriterion[]);非法返回 null */
31
- export declare function parseAcceptanceCriteria(json: string): AcceptanceCriterion[] | null;
32
- /** 从 Task Record body 还原 acceptance criteria(buildTaskBody 的逆操作) */
33
- export declare function parseCriteriaFromBody(body: string): AcceptanceCriterion[];
34
- /** 从 Task Record body 的 Dependencies 区块解析依赖 Issue 号 */
35
- export declare function parseDependenciesFromBody(body: string): number[];
36
- /** 解析 create-task 的 depends_on 参数:"12, 13" 或 "#12,#13" → [12, 13];空/非法输入返回 [] */
37
- export declare function parseDependenciesArg(raw: string | undefined): number[];
38
- /** 从 Project Profile 冻结 TDD policy:enforcement 固定 runtime(PRD R6 行为变更强制 Runtime TDD) */
39
- export declare function freezeTddPolicy(profile: ProjectProfile): TddPolicy;
40
- /** 轻量 glob 匹配(支持 **、*、?),风险 pattern 匹配专用 */
41
- export declare function matchRiskPattern(filePath: string, pattern: string): boolean;
42
- /**
43
- * 风险双层判定:模型初判 + 内核按实际 diff 升级,只升不降(PRD R8 / spec §12 #12)。
44
- * modelRisk 为 high → high;否则 diff 命中任一 risk pattern → high;否则 low。
45
- */
46
- export declare function escalateRisk(modelRisk: "low" | "high", changedFiles: string[], riskPatterns: string[]): "low" | "high";
47
- export interface ParsedEvidenceBlock {
48
- stage: string;
49
- fields: Record<string, string>;
50
- }
51
- /** 解析受控 evidence comment 为结构化 blocks;无 marker 或畸形返回 null */
52
- export declare function parseEvidenceComment(body: string): ParsedEvidenceBlock[] | null;
53
- /** 把受控 comment 还原为 TddEvidence(供 evaluateTddCompliance 判定);无 marker 返回 null */
54
- export declare function evidenceCommentToTddEvidence(comment: {
55
- id: number;
56
- body: string;
57
- revision: number;
58
- }): TddEvidence | null;
59
- export interface TaskRuntimeState {
60
- slug: string;
61
- parentIssueNumber: number;
62
- issueNumber: number;
63
- branch: string;
64
- worktreePath: string;
65
- policy: TddPolicy;
66
- baseline: WorkspaceBaseline;
67
- startedAt: string;
68
- }
69
- export declare function taskStatePath(projectDir: string, slug: string): string;
70
- export declare function writeTaskState(projectDir: string, state: TaskRuntimeState): Promise<void>;
71
- export declare function readTaskState(projectDir: string, slug: string): Promise<TaskRuntimeState | null>;
72
- /** 设置 Task Record 状态标签(移除其它 cabbage:task:*,添加当前) */
73
- export declare function setTaskStatusLabel(issueNumber: number, status: TaskStatus): Promise<{
74
- ok: boolean;
75
- error?: string;
76
- }>;
77
- export interface CreateTaskInput {
78
- projectDir: string;
79
- parentIssueNumber: number;
80
- title: string;
81
- acceptanceCriteriaJson?: string;
82
- dependencies?: number[];
83
- }
84
- export type CreateTaskResult = {
85
- ok: true;
86
- ref: TaskRecordRef;
87
- } | {
88
- ok: false;
89
- code: string;
90
- message: string;
91
- };
92
- /**
93
- * create-task(spec §2.3):validateTitle → slug → 未完成同名冲突检查(branch/worktree 已存在)→
94
- * createTaskRecord(Sub Issue,body 含 acceptance criteria、依赖、Closes 约定)关联 Parent。
95
- */
96
- export declare function createTask(input: CreateTaskInput): Promise<CreateTaskResult>;
97
- export type StartTaskResult = {
98
- ok: true;
99
- issueNumber: number;
100
- branch: string;
101
- worktreePath: string;
102
- policy: TddPolicy;
103
- baseline: WorkspaceBaseline;
104
- } | {
105
- ok: false;
106
- code: string;
107
- message: string;
108
- };
109
- /**
110
- * start-task(spec §2.3):前置门禁(Planning Baseline 已合并、依赖 Task 已 merged、并行数 <5)→
111
- * worktree-start → captureWorkspaceBaseline → freezeTddPolicy → 写 Task Record 状态。
112
- */
113
- export declare function startTask(projectDir: string, parentIssueNumber: number, taskId: string): Promise<StartTaskResult>;
114
- export type SubmitTaskResult = {
115
- ok: true;
116
- prNumber: number;
117
- evidenceRevision: number;
118
- } | {
119
- ok: false;
120
- code: string;
121
- message: string;
122
- missing?: string[];
123
- };
124
- /**
125
- * submit-task(spec §4.4):TDD 硬门禁——evidence 不完整(无 comment、regression 未 pass、
126
- * compliance 未 pass)→ 拒绝创建 PR;通过后 push 分支 → gh pr create(body 引用 Task Record +
127
- * evidence comment 链接,含 Closes 约定)→ 标记 reviewing。
128
- */
129
- export declare function submitTask(projectDir: string, parentIssueNumber: number, taskId: string): Promise<SubmitTaskResult>;
130
- export type SubmitReviewResult = {
131
- ok: true;
132
- prNumber: number;
133
- verdict: "approve" | "request-changes";
134
- } | {
135
- ok: false;
136
- code: string;
137
- message: string;
138
- };
139
- /** submit-review(spec §2.3):primary 提交 reviewer 双轴审查结果(reviewer 本身只读) */
140
- export declare function submitReview(prNumber: number, verdict: "approve" | "request-changes", comment?: string): Promise<SubmitReviewResult>;
141
- export type MergeTaskResult = {
142
- ok: true;
143
- prNumber: number;
144
- risk: "low" | "high";
145
- warning?: string;
146
- } | {
147
- ok: false;
148
- code: string;
149
- message: string;
150
- };
151
- /**
152
- * merge-task(spec §2.3 + PRD R8):CI checks 通过 + 分支保护 + 风险双层判定(只升不降)+
153
- * 高风险需非作者人类 approval → mergeTaskPR(--match-head-commit)→ 关闭 Sub Issue →
154
- * worktree 干净销毁。
155
- */
156
- export declare function mergeTask(projectDir: string, parentIssueNumber: number, taskId: string, modelRisk: "low" | "high"): Promise<MergeTaskResult>;
157
- /** 将原始 statusCheckRollup 映射为 {name, state}(纯函数,供测试直接验证 jq 语义) */
158
- export declare function mapCheckRollup(raw: unknown[]): Array<{
159
- name: string;
160
- state: string;
161
- }>;
162
- export type TaskLifecycleResult = {
163
- ok: true;
164
- issueNumber: number;
165
- } | {
166
- ok: false;
167
- code: string;
168
- message: string;
169
- };
170
- export type DestroyTaskWorktreeResult = {
171
- ok: true;
172
- reason: string;
173
- } | {
174
- ok: false;
175
- code: string;
176
- message: string;
177
- };
178
- export interface TaskStatusReport {
179
- task: {
180
- issueNumber: number;
181
- slug: string;
182
- state: string;
183
- labels: string[];
184
- };
185
- pullRequests: Array<{
186
- number: number;
187
- state: string;
188
- headRefName: string;
189
- checks: Array<{
190
- name: string;
191
- state: string;
192
- }>;
193
- }>;
194
- }
195
- export type TaskStatusResult = {
196
- ok: true;
197
- report: TaskStatusReport;
198
- } | {
199
- ok: false;
200
- code: string;
201
- message: string;
202
- };
203
- /** cancel-task:受控取消(user_confirmed)→ 关闭 Sub Issue + 状态标签 cancelled */
204
- export declare function cancelTask(projectDir: string, parentIssueNumber: number, taskId: string, userConfirmed: boolean): Promise<TaskLifecycleResult>;
205
- /** destroy-worktree:preflight 销毁(§3.3),需 user_confirmed(除非 PR 已合并且干净) */
206
- export declare function destroyTaskWorktree(projectDir: string, parentIssueNumber: number, taskId: string, userConfirmed: boolean): Promise<DestroyTaskWorktreeResult>;
207
- /** status-task:读 Task Record + PR + checks 汇总 */
208
- export declare function readTaskStatus(projectDir: string, parentIssueNumber: number, taskId: string): Promise<TaskStatusResult>;