@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,79 +0,0 @@
1
- import type { TddEvidence, TddCycleEvidence, TddCommandEvidence, AcceptanceCriterion, VersionedDigest } from "../types.js";
2
- export interface StateError {
3
- code: string;
4
- message: string;
5
- }
6
- export type StateResult<T> = {
7
- ok: true;
8
- value: T;
9
- } | {
10
- ok: false;
11
- error: StateError;
12
- };
13
- /**
14
- * 创建初始 TddEvidence(status=not-recorded, revision=0)。
15
- */
16
- export declare function createTaskEvidence(): TddEvidence;
17
- /**
18
- * 启动一个新的 TDD cycle。
19
- *
20
- * 验证:
21
- * - criterion 存在且 verification=tdd
22
- * - testPaths 匹配 testFilePatterns
23
- * - 同 cycleId + 同 workspace digest → 幂等返回原 evidence
24
- * - 同 cycleId + 不同 workspace digest → CYCLE_CONFLICT
25
- */
26
- export declare function startCycle(evidence: TddEvidence, cycleId: string, criterionId: string, testPaths: string[], testSelector: string, workspaceDigest: VersionedDigest, acceptanceCriteria: AcceptanceCriterion[], testFilePatterns: string[]): StateResult<{
27
- evidence: TddEvidence;
28
- cycle: TddCycleEvidence;
29
- }>;
30
- /**
31
- * 记录 RED 尝试。
32
- *
33
- * 验证:
34
- * - cycle 存在且 status ∈ {started, red}
35
- * - failureKind 为 assertion 或 missing-behavior(有效 RED)
36
- * - 幂等:相同 outputDigest → 返回原结果
37
- */
38
- export declare function recordRed(evidence: TddEvidence, cycleId: string, redEvidence: TddCommandEvidence): StateResult<{
39
- evidence: TddEvidence;
40
- cycle: TddCycleEvidence;
41
- }>;
42
- /**
43
- * 记录 GREEN 尝试。
44
- *
45
- * 验证:
46
- * - cycle 存在且已有有效 RED(redTestDigest !== null)
47
- * - GREEN exitCode === 0
48
- * - implementation files 有变化
49
- * - 幂等:相同 outputDigest → 返回原结果
50
- */
51
- export declare function recordGreen(evidence: TddEvidence, cycleId: string, greenEvidence: TddCommandEvidence, implementationFilesChanged: boolean): StateResult<{
52
- evidence: TddEvidence;
53
- cycle: TddCycleEvidence;
54
- }>;
55
- /**
56
- * 记录最终 regression 结果。
57
- *
58
- * 验证:
59
- * - runs 非空
60
- * - 所有 run exitCode === 0 且无 timeout 则 pass,否则 fail
61
- */
62
- export declare function recordFinalRegression(evidence: TddEvidence, headSha: string, treeSha: string, runs: TddCommandEvidence[]): StateResult<TddEvidence>;
63
- /**
64
- * 记录最终 verification 结果。
65
- *
66
- * 规则:
67
- * - runs 为空 → pass(未配置 verifyCommands)
68
- * - 所有 run exitCode === 0 则 pass,否则 fail
69
- */
70
- export declare function recordFinalVerification(evidence: TddEvidence, headSha: string, treeSha: string, runs: TddCommandEvidence[]): StateResult<TddEvidence>;
71
- /**
72
- * 放弃一个 cycle。
73
- *
74
- * 规则:
75
- * - cycle 必须存在
76
- * - cycle 状态不能是 "pass"(已通过的 cycle 不能放弃)
77
- * - 保留审计记录,reason 写入 warnings
78
- */
79
- export declare function abandonCycle(evidence: TddEvidence, cycleId: string, reason: string): StateResult<TddEvidence>;
@@ -1,363 +0,0 @@
1
- // ─── 辅助函数 ───
2
- function findCycle(evidence, cycleId) {
3
- return evidence.cycles.find(c => c.cycleId === cycleId);
4
- }
5
- function replaceCycle(evidence, updated) {
6
- return evidence.cycles.map(c => c.cycleId === updated.cycleId ? updated : c);
7
- }
8
- function bumpRevision(evidence) {
9
- return { ...evidence, revision: evidence.revision + 1, updatedAt: new Date().toISOString() };
10
- }
11
- /**
12
- * 简单 glob 匹配(支持 *、**)
13
- */
14
- function matchSimpleGlob(filePath, pattern) {
15
- const normalized = filePath.split("/").join("/");
16
- let regexStr = "";
17
- let i = 0;
18
- while (i < pattern.length) {
19
- if (pattern[i] === "*" && pattern[i + 1] === "*") {
20
- i += 2;
21
- if (i < pattern.length && pattern[i] === "/") {
22
- regexStr += "(.*/)?";
23
- i++;
24
- }
25
- else {
26
- regexStr += ".*";
27
- }
28
- }
29
- else if (pattern[i] === "*") {
30
- regexStr += "[^/]*";
31
- i++;
32
- }
33
- else if (pattern[i] === ".") {
34
- regexStr += "\\.";
35
- i++;
36
- }
37
- else if (pattern[i] === "?") {
38
- regexStr += "[^/]";
39
- i++;
40
- }
41
- else {
42
- if ("+^$(){}[]|\\".includes(pattern[i])) {
43
- regexStr += "\\" + pattern[i];
44
- }
45
- else {
46
- regexStr += pattern[i];
47
- }
48
- i++;
49
- }
50
- }
51
- return new RegExp(`^${regexStr}$`).test(normalized);
52
- }
53
- function matchesAnyPattern(path, patterns) {
54
- if (patterns.length === 0)
55
- return false;
56
- return patterns.some(p => matchSimpleGlob(path, p));
57
- }
58
- function digestEqual(a, b) {
59
- if (a === null || b === null)
60
- return a === b;
61
- return a.algorithm === b.algorithm && a.value === b.value;
62
- }
63
- /**
64
- * 判断 RED failure 是否有效:
65
- * 只有 assertion 和 missing-behavior 才是有效的 RED failure。
66
- */
67
- function isValidRedFailure(failureKind) {
68
- return failureKind === "assertion" || failureKind === "missing-behavior";
69
- }
70
- // ─── 公开函数 ───
71
- /**
72
- * 创建初始 TddEvidence(status=not-recorded, revision=0)。
73
- */
74
- export function createTaskEvidence() {
75
- return {
76
- revision: 0,
77
- reworkRevision: 0,
78
- status: "not-recorded",
79
- taskStart: { status: "pending", headSha: null, treeSha: null, startedAt: null },
80
- cycles: [],
81
- regression: { status: "pending", headSha: null, treeSha: null, reworkRevision: 0, runs: [] },
82
- verification: { status: "pending", headSha: null, treeSha: null, runs: [] },
83
- alternativeValidation: [],
84
- reworks: [],
85
- warnings: [],
86
- updatedAt: null,
87
- };
88
- }
89
- /**
90
- * 启动一个新的 TDD cycle。
91
- *
92
- * 验证:
93
- * - criterion 存在且 verification=tdd
94
- * - testPaths 匹配 testFilePatterns
95
- * - 同 cycleId + 同 workspace digest → 幂等返回原 evidence
96
- * - 同 cycleId + 不同 workspace digest → CYCLE_CONFLICT
97
- */
98
- export function startCycle(evidence, cycleId, criterionId, testPaths, testSelector, workspaceDigest, acceptanceCriteria, testFilePatterns) {
99
- // ── 验证 criterion 存在且为 tdd ──
100
- const criterion = acceptanceCriteria.find(c => c.id === criterionId);
101
- if (!criterion || criterion.verification !== "tdd") {
102
- return {
103
- ok: false,
104
- error: { code: "CRITERION_NOT_FOUND", message: `Criterion "${criterionId}" not found or not verification=tdd` },
105
- };
106
- }
107
- // ── 验证 testPaths 匹配 testFilePatterns ──
108
- for (const tp of testPaths) {
109
- if (!matchesAnyPattern(tp, testFilePatterns)) {
110
- return {
111
- ok: false,
112
- error: { code: "POLICY_INVALID", message: `Test path "${tp}" does not match testFilePatterns` },
113
- };
114
- }
115
- }
116
- // ── 检查已有 cycle ──
117
- const existing = findCycle(evidence, cycleId);
118
- if (existing) {
119
- // 幂等:相同 workspace digest
120
- if (digestEqual(existing.startWorkspaceDigest, workspaceDigest)) {
121
- return { ok: true, value: { evidence, cycle: existing } };
122
- }
123
- // 冲突
124
- return {
125
- ok: false,
126
- error: { code: "CYCLE_CONFLICT", message: `Cycle "${cycleId}" already exists with different workspace digest` },
127
- };
128
- }
129
- // ── 创建新 cycle ──
130
- const cycle = {
131
- cycleId,
132
- criterionId,
133
- reworkRevision: evidence.reworkRevision,
134
- status: "started",
135
- startWorkspaceDigest: workspaceDigest,
136
- testFiles: testPaths,
137
- redTestDigest: null,
138
- redAttempts: [],
139
- greenAttempts: [],
140
- };
141
- const newEvidence = bumpRevision({
142
- ...evidence,
143
- status: evidence.status === "not-recorded" ? "in-progress" : evidence.status,
144
- cycles: [...evidence.cycles, cycle],
145
- });
146
- return { ok: true, value: { evidence: newEvidence, cycle } };
147
- }
148
- /**
149
- * 记录 RED 尝试。
150
- *
151
- * 验证:
152
- * - cycle 存在且 status ∈ {started, red}
153
- * - failureKind 为 assertion 或 missing-behavior(有效 RED)
154
- * - 幂等:相同 outputDigest → 返回原结果
155
- */
156
- export function recordRed(evidence, cycleId, redEvidence) {
157
- const existing = findCycle(evidence, cycleId);
158
- if (!existing) {
159
- return {
160
- ok: false,
161
- error: { code: "CYCLE_CONFLICT", message: `Cycle "${cycleId}" not found` },
162
- };
163
- }
164
- // cycle 必须处于 started 或 red 状态
165
- if (existing.status !== "started" && existing.status !== "red") {
166
- return {
167
- ok: false,
168
- error: { code: "INVALID_TRANSITION", message: `Cycle "${cycleId}" is in "${existing.status}" state, cannot record RED` },
169
- };
170
- }
171
- // ── 失败分类校验 ──
172
- const exitCode = redEvidence.exitCode;
173
- // 测试通过(exitCode === 0)→ RED_EXPECTED_FAILURE
174
- if (exitCode === 0) {
175
- return {
176
- ok: false,
177
- error: { code: "RED_EXPECTED_FAILURE", message: "RED requires test failure (exitCode !== 0)" },
178
- };
179
- }
180
- // timeout
181
- if (redEvidence.failureKind === "timeout") {
182
- return {
183
- ok: false,
184
- error: { code: "COMMAND_TIMEOUT", message: "Test execution timed out" },
185
- };
186
- }
187
- // infrastructure 或 unknown → 不算 RED
188
- if (!isValidRedFailure(redEvidence.failureKind)) {
189
- return {
190
- ok: false,
191
- error: { code: "RED_INFRASTRUCTURE_FAILURE", message: `Failure kind "${redEvidence.failureKind}" is not a valid RED failure (expected assertion or missing-behavior)` },
192
- };
193
- }
194
- // ── 幂等检查:相同 outputDigest ──
195
- const dup = existing.redAttempts.find(a => digestEqual(a.outputDigest, redEvidence.outputDigest));
196
- if (dup) {
197
- // 已经记录过相同的 RED,返回原 evidence(不修改)
198
- return { ok: true, value: { evidence, cycle: existing } };
199
- }
200
- // ── 记录 RED ──
201
- const updatedCycle = {
202
- ...existing,
203
- status: "red",
204
- redTestDigest: redEvidence.executionInputDigest,
205
- redAttempts: [...existing.redAttempts, redEvidence],
206
- };
207
- const newEvidence = bumpRevision({
208
- ...evidence,
209
- cycles: replaceCycle(evidence, updatedCycle),
210
- });
211
- return { ok: true, value: { evidence: newEvidence, cycle: updatedCycle } };
212
- }
213
- /**
214
- * 记录 GREEN 尝试。
215
- *
216
- * 验证:
217
- * - cycle 存在且已有有效 RED(redTestDigest !== null)
218
- * - GREEN exitCode === 0
219
- * - implementation files 有变化
220
- * - 幂等:相同 outputDigest → 返回原结果
221
- */
222
- export function recordGreen(evidence, cycleId, greenEvidence, implementationFilesChanged) {
223
- const existing = findCycle(evidence, cycleId);
224
- if (!existing) {
225
- return {
226
- ok: false,
227
- error: { code: "CYCLE_CONFLICT", message: `Cycle "${cycleId}" not found` },
228
- };
229
- }
230
- // 必须有 RED
231
- if (existing.redTestDigest === null || existing.redAttempts.length === 0) {
232
- return {
233
- ok: false,
234
- error: { code: "INVALID_TRANSITION", message: `Cycle "${cycleId}" has no RED recorded` },
235
- };
236
- }
237
- // GREEN 测试必须通过
238
- if (greenEvidence.exitCode !== 0) {
239
- return {
240
- ok: false,
241
- error: { code: "GREEN_EXPECTED_PASS", message: "GREEN requires all tests to pass (exitCode === 0)" },
242
- };
243
- }
244
- // 必须有实现变化
245
- if (!implementationFilesChanged) {
246
- return {
247
- ok: false,
248
- error: { code: "IMPLEMENTATION_CHANGE_REQUIRED", message: "GREEN requires implementation file changes" },
249
- };
250
- }
251
- // ── 幂等检查:相同 outputDigest ──
252
- const dup = existing.greenAttempts.find(a => digestEqual(a.outputDigest, greenEvidence.outputDigest));
253
- if (dup) {
254
- return { ok: true, value: { evidence, cycle: existing } };
255
- }
256
- // ── 记录 GREEN ──
257
- const updatedCycle = {
258
- ...existing,
259
- status: "pass",
260
- greenAttempts: [...existing.greenAttempts, greenEvidence],
261
- };
262
- const newEvidence = bumpRevision({
263
- ...evidence,
264
- cycles: replaceCycle(evidence, updatedCycle),
265
- });
266
- return { ok: true, value: { evidence: newEvidence, cycle: updatedCycle } };
267
- }
268
- /**
269
- * 记录最终 regression 结果。
270
- *
271
- * 验证:
272
- * - runs 非空
273
- * - 所有 run exitCode === 0 且无 timeout 则 pass,否则 fail
274
- */
275
- export function recordFinalRegression(evidence, headSha, treeSha, runs) {
276
- if (runs.length === 0) {
277
- return {
278
- ok: false,
279
- error: { code: "REGRESSION_FAILED", message: "Regression requires at least one run" },
280
- };
281
- }
282
- const allPass = runs.every(r => r.exitCode === 0 && r.failureKind !== "timeout");
283
- const status = allPass ? "pass" : "fail";
284
- const newEvidence = bumpRevision({
285
- ...evidence,
286
- regression: {
287
- status,
288
- headSha,
289
- treeSha,
290
- reworkRevision: evidence.reworkRevision,
291
- runs,
292
- },
293
- });
294
- return { ok: true, value: newEvidence };
295
- }
296
- /**
297
- * 记录最终 verification 结果。
298
- *
299
- * 规则:
300
- * - runs 为空 → pass(未配置 verifyCommands)
301
- * - 所有 run exitCode === 0 则 pass,否则 fail
302
- */
303
- export function recordFinalVerification(evidence, headSha, treeSha, runs) {
304
- if (runs.length === 0) {
305
- // 未配置 verifyCommands,视为 pass
306
- const newEvidence = bumpRevision({
307
- ...evidence,
308
- verification: {
309
- status: "pass",
310
- headSha,
311
- treeSha,
312
- runs: [],
313
- },
314
- });
315
- return { ok: true, value: newEvidence };
316
- }
317
- const allPass = runs.every(r => r.exitCode === 0);
318
- const status = allPass ? "pass" : "fail";
319
- const newEvidence = bumpRevision({
320
- ...evidence,
321
- verification: {
322
- status,
323
- headSha,
324
- treeSha,
325
- runs,
326
- },
327
- });
328
- return { ok: true, value: newEvidence };
329
- }
330
- /**
331
- * 放弃一个 cycle。
332
- *
333
- * 规则:
334
- * - cycle 必须存在
335
- * - cycle 状态不能是 "pass"(已通过的 cycle 不能放弃)
336
- * - 保留审计记录,reason 写入 warnings
337
- */
338
- export function abandonCycle(evidence, cycleId, reason) {
339
- const existing = findCycle(evidence, cycleId);
340
- if (!existing) {
341
- return {
342
- ok: false,
343
- error: { code: "CYCLE_CONFLICT", message: `Cycle "${cycleId}" not found` },
344
- };
345
- }
346
- if (existing.status === "pass") {
347
- return {
348
- ok: false,
349
- error: { code: "INVALID_TRANSITION", message: `Cannot abandon cycle "${cycleId}" that has already passed` },
350
- };
351
- }
352
- const updatedCycle = {
353
- ...existing,
354
- status: "abandoned",
355
- };
356
- const newEvidence = bumpRevision({
357
- ...evidence,
358
- cycles: replaceCycle(evidence, updatedCycle),
359
- warnings: [...evidence.warnings, reason],
360
- });
361
- return { ok: true, value: newEvidence };
362
- }
363
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/kernel/tdd/state.ts"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
1
- /** Flow Record 引用:GitHub Parent Issue 承载 Flow 生命周期与阶段状态 */
2
- export interface FlowRecordRef {
3
- parentIssueNumber: number;
4
- slug: string;
5
- }
6
- /** Task Record 引用:GitHub Sub Issue 承载 Task 生命周期与 TDD 证据 */
7
- export interface TaskRecordRef {
8
- parentIssueNumber: number;
9
- taskId: string;
10
- issueNumber: number;
11
- }
12
- export interface AcceptanceCriterion {
13
- id: string;
14
- description: string;
15
- verification: "tdd" | "regression" | "manual";
16
- }
17
- export type TddMode = "strict" | "relaxed" | "bypass";
18
- export type TddEnforcement = "advisory" | "runtime";
19
- export interface TddRunnerPolicy {
20
- adapter: "vitest";
21
- baseCommand: string;
22
- timeoutMs: number;
23
- executionInputPatterns: string[];
24
- }
25
- export interface VersionedDigest {
26
- algorithm: "sha256-content-v1" | "sha256-output-v1" | "git-tree-v1";
27
- value: string;
28
- }
29
- export type TddApproval = {
30
- kind: "planning-pr";
31
- repo: string;
32
- prNumber: number;
33
- reviewId: number;
34
- approver: string;
35
- mergedCommitSha: string;
36
- policyDigest: string;
37
- } | {
38
- kind: "issue-comment";
39
- repo: string;
40
- issueNumber: number;
41
- commentId: number;
42
- approver: string;
43
- commentBodyDigest: VersionedDigest;
44
- policyDigest: string;
45
- } | {
46
- kind: "legacy-migration";
47
- fromSchemaVersion: 1;
48
- };
49
- export interface TaskCommand {
50
- command: string;
51
- cwd: string;
52
- timeoutMs: number;
53
- env: Record<string, string>;
54
- }
55
- export type AlternativeValidation = {
56
- validationId: string;
57
- kind: "command";
58
- command: TaskCommand;
59
- } | {
60
- validationId: string;
61
- kind: "manual";
62
- description: string;
63
- };
64
- export interface TddException {
65
- reason: string;
66
- alternativeValidation: AlternativeValidation[];
67
- approval: TddApproval;
68
- }
69
- export interface TddPolicy {
70
- mode: TddMode;
71
- enforcement: TddEnforcement;
72
- runner: TddRunnerPolicy | null;
73
- testFilePatterns: string[];
74
- implementationFilePatterns: string[];
75
- generatedArtifactPatterns: string[];
76
- exception: TddException | null;
77
- source: {
78
- manifestPath: string;
79
- revisionSha: string;
80
- };
81
- }
82
- export type TddFailureKind = "assertion" | "missing-behavior" | "infrastructure" | "timeout" | "unknown";
83
- export interface TddCommandEvidence {
84
- command: string;
85
- testSelector: string | null;
86
- exitCode: number | null;
87
- failureKind: TddFailureKind | null;
88
- testsCollected: number | null;
89
- testsFailed: number | null;
90
- startedAt: string;
91
- finishedAt: string;
92
- durationMs: number;
93
- changedFiles: string[];
94
- outputDigest: VersionedDigest;
95
- workspaceDigest: VersionedDigest;
96
- executionInputDigest: VersionedDigest;
97
- summary: string;
98
- }
99
- export interface TddTaskStartEvidence {
100
- status: "pending" | "pass" | "fail";
101
- headSha: string | null;
102
- treeSha: string | null;
103
- startedAt: string | null;
104
- }
105
- export interface TddCycleEvidence {
106
- cycleId: string;
107
- criterionId: string;
108
- reworkRevision: number;
109
- status: "started" | "red" | "pass" | "failed" | "abandoned";
110
- startWorkspaceDigest: VersionedDigest;
111
- testFiles: string[];
112
- redTestDigest: VersionedDigest | null;
113
- redAttempts: TddCommandEvidence[];
114
- greenAttempts: TddCommandEvidence[];
115
- }
116
- export interface TddRegressionEvidence {
117
- status: "pending" | "pass" | "fail" | "skipped";
118
- headSha: string | null;
119
- treeSha: string | null;
120
- reworkRevision: number;
121
- runs: TddCommandEvidence[];
122
- }
123
- export interface FinalVerificationEvidence {
124
- status: "pending" | "pass" | "fail";
125
- headSha: string | null;
126
- treeSha: string | null;
127
- runs: TddCommandEvidence[];
128
- }
129
- export type AlternativeValidationEvidence = {
130
- validationId: string;
131
- kind: "command";
132
- status: "pass" | "fail";
133
- headSha: string;
134
- treeSha: string;
135
- reworkRevision: number;
136
- evidence: TddCommandEvidence;
137
- } | {
138
- validationId: string;
139
- kind: "manual";
140
- status: "pass" | "fail";
141
- headSha: string;
142
- treeSha: string;
143
- reworkRevision: number;
144
- reviewRef: string;
145
- reviewer: string;
146
- contentDigest: VersionedDigest;
147
- policyDigest: string;
148
- summary: string;
149
- };
150
- export interface ReworkApproval {
151
- reworkRevision: number;
152
- kind: "refactor";
153
- headSha: string;
154
- treeSha: string;
155
- reviewerSessionId: string;
156
- reviewerMessageId: string;
157
- contentDigest: VersionedDigest;
158
- policyDigest: string;
159
- }
160
- export interface TddReworkEvidence {
161
- reworkRevision: number;
162
- kind: "behavior" | "refactor";
163
- affectedCriterionIds: string[];
164
- status: "started" | "evidence-ready" | "pass" | "fail";
165
- startHeadSha: string;
166
- approval: ReworkApproval | null;
167
- }
168
- export interface TddEvidence {
169
- revision: number;
170
- reworkRevision: number;
171
- status: "not-recorded" | "pending" | "in-progress" | "pass" | "fail" | "waived";
172
- taskStart: TddTaskStartEvidence;
173
- cycles: TddCycleEvidence[];
174
- regression: TddRegressionEvidence;
175
- verification: FinalVerificationEvidence;
176
- alternativeValidation: AlternativeValidationEvidence[];
177
- reworks: TddReworkEvidence[];
178
- warnings: string[];
179
- updatedAt: string | null;
180
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/kernel/types.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- import type { BranchType } from "./slug.js";
2
- type GitFn = (args: string) => Promise<{
3
- stdout: string;
4
- stderr: string;
5
- }>;
6
- export declare function setWorktreeGitExecutor(fn: GitFn | null): void;
7
- export type WorktreeStartResult = {
8
- ok: true;
9
- branch: string;
10
- path: string;
11
- reused: boolean;
12
- } | {
13
- ok: false;
14
- code: "BRANCH_EXISTS" | "BRANCH_EXISTS_UNMERGED" | "BRANCH_MISMATCH" | "GIT_FAILED";
15
- message: string;
16
- };
17
- export interface WorktreeStartInput {
18
- projectDir: string;
19
- slug: string;
20
- base: string;
21
- branchType?: BranchType;
22
- }
23
- /** 分支已存在(本地 ref),未合并 → BRANCH_EXISTS_UNMERGED;已合并残留 → BRANCH_EXISTS */
24
- export declare function worktreeStart(input: WorktreeStartInput): Promise<WorktreeStartResult>;
25
- export type DestroyReason = "OK" | "DIRTY_WORKTREE" | "PR_NOT_MERGED" | "BRANCH_NOT_PUSHED" | "NOT_FOUND";
26
- export type DestroyWorktreeResult = {
27
- ok: true;
28
- reason: "OK" | "NOT_FOUND";
29
- } | {
30
- ok: false;
31
- reason: "DIRTY_WORKTREE" | "PR_NOT_MERGED" | "BRANCH_NOT_PUSHED" | "GIT_FAILED";
32
- message: string;
33
- };
34
- export interface DestroyWorktreeInput {
35
- worktreeDir: string;
36
- branch: string;
37
- prMerged: boolean;
38
- userConfirmed: boolean;
39
- }
40
- /**
41
- * preflight 顺序:不存在 → 幂等跳过;脏 → 拒绝(不 --force);
42
- * 未合并 → 需 user_confirmed 且分支已推送;合并且干净 → 自动删除。
43
- */
44
- export declare function destroyWorktree(input: DestroyWorktreeInput): Promise<DestroyWorktreeResult>;
45
- export {};