@devcxl/opencode-cabbage 0.2.1 → 0.3.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 (75) hide show
  1. package/assets/agents/dev-lifecycle.md +23 -19
  2. package/assets/agents/team/architect.md +14 -0
  3. package/assets/agents/team/backend.md +14 -0
  4. package/assets/agents/team/frontend.md +14 -0
  5. package/assets/agents/team/goal-verify.md +54 -0
  6. package/assets/agents/team/reviewer.md +10 -0
  7. package/assets/skills/flow-code/SKILL.md +13 -0
  8. package/assets/skills/flow-review/SKILL.md +7 -0
  9. package/assets/skills/flow-tasks/SKILL.md +42 -0
  10. package/assets/skills/flow-tdd/SKILL.md +208 -0
  11. package/dist/flowrun/adapter.d.ts +49 -0
  12. package/dist/flowrun/adapter.js +293 -0
  13. package/dist/flowrun/adapter.js.map +1 -0
  14. package/dist/flowrun/ci.d.ts +64 -0
  15. package/dist/flowrun/ci.js +184 -0
  16. package/dist/flowrun/ci.js.map +1 -0
  17. package/dist/flowrun/coverage.d.ts +70 -0
  18. package/dist/flowrun/coverage.js +207 -0
  19. package/dist/flowrun/coverage.js.map +1 -0
  20. package/dist/flowrun/digest.d.ts +17 -0
  21. package/dist/flowrun/digest.js +301 -0
  22. package/dist/flowrun/digest.js.map +1 -0
  23. package/dist/flowrun/evaluator.d.ts +38 -0
  24. package/dist/flowrun/evaluator.js +185 -0
  25. package/dist/flowrun/evaluator.js.map +1 -0
  26. package/dist/flowrun/gate.d.ts +10 -0
  27. package/dist/flowrun/gate.js +12 -3
  28. package/dist/flowrun/gate.js.map +1 -1
  29. package/dist/flowrun/github.d.ts +13 -9
  30. package/dist/flowrun/github.js +46 -26
  31. package/dist/flowrun/github.js.map +1 -1
  32. package/dist/flowrun/index.d.ts +10 -3
  33. package/dist/flowrun/index.js +9 -2
  34. package/dist/flowrun/index.js.map +1 -1
  35. package/dist/flowrun/merge.d.ts +35 -2
  36. package/dist/flowrun/merge.js +72 -8
  37. package/dist/flowrun/merge.js.map +1 -1
  38. package/dist/flowrun/migration.d.ts +11 -0
  39. package/dist/flowrun/migration.js +276 -0
  40. package/dist/flowrun/migration.js.map +1 -0
  41. package/dist/flowrun/state.d.ts +79 -0
  42. package/dist/flowrun/state.js +363 -0
  43. package/dist/flowrun/state.js.map +1 -0
  44. package/dist/flowrun/transitions.d.ts +66 -0
  45. package/dist/flowrun/transitions.js +168 -0
  46. package/dist/flowrun/transitions.js.map +1 -0
  47. package/dist/flowrun/types.d.ts +279 -4
  48. package/dist/flowrun/types.js +2 -1
  49. package/dist/flowrun/types.js.map +1 -1
  50. package/dist/flowrun/validator.d.ts +15 -5
  51. package/dist/flowrun/validator.js +117 -5
  52. package/dist/flowrun/validator.js.map +1 -1
  53. package/dist/plugin/agents.d.ts +4 -0
  54. package/dist/plugin/agents.js +19 -0
  55. package/dist/plugin/agents.js.map +1 -1
  56. package/dist/plugin/broker.d.ts +73 -0
  57. package/dist/plugin/broker.js +140 -0
  58. package/dist/plugin/broker.js.map +1 -0
  59. package/dist/plugin/goal.d.ts +39 -1
  60. package/dist/plugin/goal.js +80 -1
  61. package/dist/plugin/goal.js.map +1 -1
  62. package/dist/plugin/prompt-lint.js +129 -0
  63. package/dist/plugin/prompt-lint.js.map +1 -1
  64. package/dist/plugin/server.js +241 -11
  65. package/dist/plugin/server.js.map +1 -1
  66. package/dist/plugin/shell.d.ts +37 -0
  67. package/dist/plugin/shell.js +144 -0
  68. package/dist/plugin/shell.js.map +1 -0
  69. package/dist/plugin/tdd-tool.d.ts +62 -0
  70. package/dist/plugin/tdd-tool.js +336 -0
  71. package/dist/plugin/tdd-tool.js.map +1 -0
  72. package/dist/util/gh.d.ts +8 -1
  73. package/dist/util/gh.js +10 -2
  74. package/dist/util/gh.js.map +1 -1
  75. package/package.json +2 -1
@@ -0,0 +1,185 @@
1
+ /**
2
+ * 判定 TDD 模式是否合规的纯函数。
3
+ *
4
+ * 规则(参见 Spec Section 4.3):
5
+ *
6
+ * **strict**:
7
+ * - 必须至少有一个 verification=tDD 的 criterion
8
+ * - 每个 TDD criterion 都必须有 status=pass 的 cycle 覆盖
9
+ * - verification=regression 的 criterion 由 final regression 覆盖
10
+ * - verification=manual 不允许在 strict 模式下使用
11
+ * - final regression 和 final verification 必须 pass
12
+ *
13
+ * **relaxed**:
14
+ * - 仅要求 final regression 为 pass,不检查 cycle
15
+ * - final verification 必须 pass
16
+ *
17
+ * **bypass**:
18
+ * - 必须有 exception 且其 alternativeValidation 全部完成(evidence 中对应 status=pass)
19
+ * - final verification 仍必须 pass
20
+ * - 不要求 runner / cycle / regression
21
+ *
22
+ * **enforcement**:
23
+ * - advisory:缺失 evidence 仅产生 warning,不阻断(仍返回 pass/waived)
24
+ * - runtime:缺失 evidence 直接阻断(返回 fail)
25
+ */
26
+ export function evaluateTddCompliance(policy, evidence, criteria) {
27
+ const warnings = [];
28
+ const isAdvisory = policy.enforcement === "advisory";
29
+ // ── 通用检查:final verification ──
30
+ const verificationOk = evidence.verification.status === "pass";
31
+ if (!verificationOk) {
32
+ if (isAdvisory) {
33
+ warnings.push("final verification 未通过(advisory 模式:仅记录 warning)");
34
+ }
35
+ else {
36
+ warnings.push("final verification 未通过");
37
+ return { status: "fail", warnings };
38
+ }
39
+ }
40
+ // ── bypass 模式 ──
41
+ if (policy.mode === "bypass") {
42
+ return evaluateBypass(policy, evidence, isAdvisory, warnings, verificationOk);
43
+ }
44
+ // ── strict 模式 ──
45
+ if (policy.mode === "strict") {
46
+ return evaluateStrict(policy, evidence, criteria, isAdvisory, warnings, verificationOk);
47
+ }
48
+ // ── relaxed 模式 ──
49
+ return evaluateRelaxed(evidence, isAdvisory, warnings, verificationOk);
50
+ }
51
+ // ── 私有辅助函数 ──
52
+ function evaluateBypass(policy, evidence, isAdvisory, warnings, verificationOk) {
53
+ // bypass 必须有 exception
54
+ if (!policy.exception) {
55
+ if (isAdvisory) {
56
+ warnings.push("bypass 模式缺少 exception(advisory 模式:仅记录 warning)");
57
+ return { status: "waived", warnings };
58
+ }
59
+ warnings.push("bypass 模式缺少 exception");
60
+ return { status: "fail", warnings };
61
+ }
62
+ // verification 失败时已在主函数中返回 fail,此处 verificationOk 保证为 true(或 advisory 已记 warning)
63
+ if (!verificationOk) {
64
+ // advisory 下 verification 失败已记 warning,继续检查替代验证
65
+ // 统一返回 waived(advisory 不阻断)
66
+ if (isAdvisory) {
67
+ checkAltValidations(policy, evidence, isAdvisory, warnings);
68
+ return { status: "waived", warnings };
69
+ }
70
+ return { status: "fail", warnings };
71
+ }
72
+ // 检查替代验证
73
+ const altOk = checkAltValidations(policy, evidence, isAdvisory, warnings);
74
+ if (isAdvisory) {
75
+ return { status: "waived", warnings };
76
+ }
77
+ if (!altOk) {
78
+ return { status: "fail", warnings };
79
+ }
80
+ return { status: "waived", warnings: warnings.filter(w => w.length > 0) };
81
+ }
82
+ function evaluateStrict(policy, evidence, criteria, isAdvisory, warnings, verificationOk) {
83
+ // verification 已前置检查,runtime 下失败则已在主函数返回 fail
84
+ if (!verificationOk && !isAdvisory) {
85
+ return { status: "fail", warnings };
86
+ }
87
+ const tddCriteria = criteria.filter(c => c.verification === "tdd");
88
+ const regressionCriteria = criteria.filter(c => c.verification === "regression");
89
+ const manualCriteria = criteria.filter(c => c.verification === "manual");
90
+ let hasFailure = false;
91
+ // strict 必须至少有一个 TDD criterion
92
+ if (tddCriteria.length === 0) {
93
+ if (isAdvisory) {
94
+ warnings.push("strict 模式要求至少一个 verification=tdd 的 criterion(advisory 模式:仅记录 warning)");
95
+ }
96
+ else {
97
+ warnings.push("strict 模式要求至少一个 verification=tdd 的 criterion");
98
+ hasFailure = true;
99
+ }
100
+ }
101
+ // manual criterion 不允许在 strict 模式
102
+ if (manualCriteria.length > 0) {
103
+ if (isAdvisory) {
104
+ warnings.push(`strict 模式不允许 verification=manual 的 criterion: ${manualCriteria.map(c => c.id).join(", ")}(advisory 模式:仅记录 warning)`);
105
+ }
106
+ else {
107
+ warnings.push(`strict 模式不允许 verification=manual 的 criterion: ${manualCriteria.map(c => c.id).join(", ")}`);
108
+ hasFailure = true;
109
+ }
110
+ }
111
+ // 每个 TDD criterion 都需要有 pass cycle 覆盖
112
+ for (const c of tddCriteria) {
113
+ const matchingCycles = evidence.cycles.filter(cycle => cycle.criterionId === c.id);
114
+ const hasPassCycle = matchingCycles.some(cycle => cycle.status === "pass");
115
+ if (!hasPassCycle) {
116
+ if (isAdvisory) {
117
+ warnings.push(`TDD criterion "${c.id}" 缺少有效 cycle(advisory 模式:仅记录 warning)`);
118
+ }
119
+ else {
120
+ warnings.push(`TDD criterion "${c.id}" 缺少有效 cycle`);
121
+ hasFailure = true;
122
+ }
123
+ }
124
+ }
125
+ // regression criterion 由 final regression 覆盖
126
+ if (regressionCriteria.length > 0) {
127
+ const regressionOk = evidence.regression.status === "pass";
128
+ if (!regressionOk) {
129
+ if (isAdvisory) {
130
+ warnings.push("final regression 未通过,无法覆盖 regression criterion(advisory 模式:仅记录 warning)");
131
+ }
132
+ else {
133
+ warnings.push("final regression 未通过,无法覆盖 regression criterion");
134
+ hasFailure = true;
135
+ }
136
+ }
137
+ }
138
+ if (isAdvisory) {
139
+ return { status: "pass", warnings };
140
+ }
141
+ if (hasFailure) {
142
+ return { status: "fail", warnings };
143
+ }
144
+ return { status: "pass", warnings };
145
+ }
146
+ function evaluateRelaxed(evidence, isAdvisory, warnings, verificationOk) {
147
+ if (!verificationOk && !isAdvisory) {
148
+ return { status: "fail", warnings };
149
+ }
150
+ const regressionOk = evidence.regression.status === "pass";
151
+ if (!regressionOk) {
152
+ if (isAdvisory) {
153
+ warnings.push("relaxed 模式要求 final regression 通过(advisory 模式:仅记录 warning)");
154
+ return { status: "pass", warnings };
155
+ }
156
+ warnings.push("relaxed 模式要求 final regression 通过");
157
+ return { status: "fail", warnings };
158
+ }
159
+ return { status: "pass", warnings };
160
+ }
161
+ /**
162
+ * 检查 bypass 模式下所有 alternative validation 是否完成。
163
+ * 返回 true 表示全部通过,false 表示有缺失或失败。
164
+ */
165
+ function checkAltValidations(policy, evidence, isAdvisory, warnings) {
166
+ if (!policy.exception) {
167
+ return false;
168
+ }
169
+ let allOk = true;
170
+ for (const av of policy.exception.alternativeValidation) {
171
+ const matchingEvidence = evidence.alternativeValidation.filter(ev => ev.validationId === av.validationId);
172
+ const hasPass = matchingEvidence.some(ev => ev.status === "pass");
173
+ if (!hasPass) {
174
+ if (isAdvisory) {
175
+ warnings.push(`替代验证 "${av.validationId}" 未完成(advisory 模式:仅记录 warning)`);
176
+ }
177
+ else {
178
+ warnings.push(`替代验证 "${av.validationId}" 未完成`);
179
+ allOk = false;
180
+ }
181
+ }
182
+ }
183
+ return allOk;
184
+ }
185
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/flowrun/evaluator.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,16 @@ export declare function canStartStage(flowRun: FlowRun, stage: FlowStage): GateR
9
9
  export declare function canCompleteStage(flowRun: FlowRun, stage: FlowStage): GateResult;
10
10
  export declare function canStartTask(flowRun: FlowRun, taskId: string): GateResult;
11
11
  export declare function canCompleteTask(flowRun: FlowRun, taskId: string): GateResult;
12
+ /**
13
+ * 检查 FlowRun 是否满足合并收尾条件。
14
+ *
15
+ * 新语义(v2):
16
+ * - FlowRun 状态为 running 或 merging
17
+ * - 所有 Task 状态均为 merged
18
+ * - 不再要求 review Stage 为 pass(Task-local merge 已独立)
19
+ *
20
+ * 用于 flow_run finalize。
21
+ */
12
22
  export declare function canMerge(flowRun: FlowRun): GateResult;
13
23
  export declare function allTasksComplete(flowRun: FlowRun): boolean;
14
24
  export declare function getReadyTasks(flowRun: FlowRun): TaskState[];
@@ -84,13 +84,22 @@ export function canCompleteTask(flowRun, taskId) {
84
84
  }
85
85
  return ok();
86
86
  }
87
+ /**
88
+ * 检查 FlowRun 是否满足合并收尾条件。
89
+ *
90
+ * 新语义(v2):
91
+ * - FlowRun 状态为 running 或 merging
92
+ * - 所有 Task 状态均为 merged
93
+ * - 不再要求 review Stage 为 pass(Task-local merge 已独立)
94
+ *
95
+ * 用于 flow_run finalize。
96
+ */
87
97
  export function canMerge(flowRun) {
88
98
  if (flowRun.status !== "running" && flowRun.status !== "merging") {
89
99
  return block("FlowRun is not in a mergeable state");
90
100
  }
91
- const reviewStage = flowRun.stages.review;
92
- if (reviewStage.status !== "pass") {
93
- return block("Review stage is not complete");
101
+ if (!allTasksComplete(flowRun)) {
102
+ return block("Not all tasks merged (finalize requires all tasks to be merged first)");
94
103
  }
95
104
  return ok();
96
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/flowrun/gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/flowrun/gate.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,24 @@
1
- import { type FlowRun } from "./types.js";
2
- export declare function extractFlowRunFromBody(body: string): FlowRun | null;
1
+ import { type FlowRun, type FlowRunReadResult } from "./types.js";
2
+ /**
3
+ * 从 Issue body 中提取 FlowRun,执行完整 v1→v2 读取管线:
4
+ * JSON parse → detect version → migrate → validate → return FlowRunReadResult
5
+ */
6
+ export declare function extractFlowRunFromBody(body: string): FlowRunReadResult;
3
7
  export declare function replaceFlowRunInBody(body: string, flowRun: FlowRun): string;
4
- export declare function readFlowRun(issueNumber: number): Promise<FlowRun | null>;
5
- export declare function writeFlowRun(issueNumber: number, flowRun: FlowRun): Promise<{
8
+ export declare function readFlowRun(issueNumber: number, ghEnv?: Record<string, string>): Promise<FlowRunReadResult>;
9
+ export declare function writeFlowRun(issueNumber: number, flowRun: FlowRun, ghEnv?: Record<string, string>): Promise<{
6
10
  success: boolean;
7
11
  error?: string;
8
12
  }>;
9
- export declare function readFlowRunWithLock(issueNumber: number): Promise<{
10
- flowRun: FlowRun | null;
13
+ export declare function readFlowRunWithLock(issueNumber: number, ghEnv?: Record<string, string>): Promise<{
14
+ flowRunResult: FlowRunReadResult;
11
15
  currentBody: string | null;
12
16
  }>;
13
- export declare function writeFlowRunWithLock(issueNumber: number, flowRun: FlowRun, previousBody: string): Promise<{
17
+ export declare function writeFlowRunWithLock(issueNumber: number, flowRun: FlowRun, previousBody: string, ghEnv?: Record<string, string>): Promise<{
14
18
  success: boolean;
15
19
  error?: string;
16
20
  conflict: boolean;
17
21
  }>;
18
- export declare function applyLabel(issueNumber: number, label: string): Promise<boolean>;
19
- export declare function removeLabel(issueNumber: number, label: string): Promise<boolean>;
22
+ export declare function applyLabel(issueNumber: number, label: string, ghEnv?: Record<string, string>): Promise<boolean>;
23
+ export declare function removeLabel(issueNumber: number, label: string, ghEnv?: Record<string, string>): Promise<boolean>;
20
24
  export declare function createInitialFlowRun(flowRunId: string, repo: string, parentIssueNumber: number): FlowRun;
@@ -2,27 +2,43 @@ import { gh } from "../util/gh.js";
2
2
  import { escapeShellArg } from "../util/shell.js";
3
3
  import { CABINET_START_MARKER, CABINET_END_MARKER, CURRENT_SCHEMA_VERSION, } from "./types.js";
4
4
  import { validateFlowRun } from "./validator.js";
5
+ import { migrateV1ToV2 } from "./migration.js";
5
6
  function buildFlowRunBlock(flowRun) {
6
7
  const json = JSON.stringify(flowRun, null, 2);
7
8
  return `${CABINET_START_MARKER}\n\`\`\`json\n${json}\n\`\`\`\n${CABINET_END_MARKER}`;
8
9
  }
10
+ /**
11
+ * 从 Issue body 中提取 FlowRun,执行完整 v1→v2 读取管线:
12
+ * JSON parse → detect version → migrate → validate → return FlowRunReadResult
13
+ */
9
14
  export function extractFlowRunFromBody(body) {
10
15
  const startIdx = body.indexOf(CABINET_START_MARKER);
11
16
  const endIdx = body.indexOf(CABINET_END_MARKER);
12
- if (startIdx === -1 || endIdx === -1)
13
- return null;
17
+ if (startIdx === -1 || endIdx === -1) {
18
+ return { ok: false, code: "NOT_FOUND", errors: [{ path: "", message: "FlowRun markers not found in issue body" }] };
19
+ }
14
20
  const block = body.slice(startIdx + CABINET_START_MARKER.length, endIdx).trim();
15
21
  const jsonMatch = block.match(/```json\n?([\s\S]*?)```/);
16
- if (!jsonMatch)
17
- return null;
22
+ if (!jsonMatch) {
23
+ return { ok: false, code: "INVALID_JSON", errors: [{ path: "", message: "JSON block not found" }] };
24
+ }
25
+ let parsed;
18
26
  try {
19
- const parsed = JSON.parse(jsonMatch[1].trim());
20
- const { data } = validateFlowRun(parsed);
21
- return data;
27
+ parsed = JSON.parse(jsonMatch[1].trim());
22
28
  }
23
29
  catch {
24
- return null;
30
+ return { ok: false, code: "INVALID_JSON", errors: [{ path: "", message: "Failed to parse FlowRun JSON" }] };
25
31
  }
32
+ // Step 1: version detection + migration
33
+ const migrationResult = migrateV1ToV2(parsed);
34
+ if (!migrationResult.ok)
35
+ return migrationResult;
36
+ // Step 2: validate v2
37
+ const { errors } = validateFlowRun(migrationResult.data);
38
+ if (errors.length > 0) {
39
+ return { ok: false, code: "VALIDATION_FAILED", errors };
40
+ }
41
+ return { ok: true, data: migrationResult.data, migrated: migrationResult.migrated };
26
42
  }
27
43
  export function replaceFlowRunInBody(body, flowRun) {
28
44
  const startIdx = body.indexOf(CABINET_START_MARKER);
@@ -33,65 +49,65 @@ export function replaceFlowRunInBody(body, flowRun) {
33
49
  }
34
50
  return body.slice(0, startIdx) + block + body.slice(endIdx + CABINET_END_MARKER.length);
35
51
  }
36
- export async function readFlowRun(issueNumber) {
52
+ export async function readFlowRun(issueNumber, ghEnv) {
37
53
  try {
38
- const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`);
54
+ const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`, 30_000, ghEnv);
39
55
  return extractFlowRunFromBody(stdout);
40
56
  }
41
57
  catch {
42
- return null;
58
+ return { ok: false, code: "NOT_FOUND", errors: [{ path: "", message: "Failed to read issue body" }] };
43
59
  }
44
60
  }
45
- export async function writeFlowRun(issueNumber, flowRun) {
61
+ export async function writeFlowRun(issueNumber, flowRun, ghEnv) {
46
62
  try {
47
- const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`);
63
+ const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`, 30_000, ghEnv);
48
64
  const body = stdout;
49
65
  const newBody = replaceFlowRunInBody(body, flowRun);
50
66
  const escaped = escapeShellArg(newBody);
51
- await gh(`issue edit ${issueNumber} --body '${escaped}'`);
67
+ await gh(`issue edit ${issueNumber} --body '${escaped}'`, 30_000, ghEnv);
52
68
  return { success: true };
53
69
  }
54
70
  catch (err) {
55
71
  return { success: false, error: String(err) };
56
72
  }
57
73
  }
58
- export async function readFlowRunWithLock(issueNumber) {
74
+ export async function readFlowRunWithLock(issueNumber, ghEnv) {
59
75
  try {
60
- const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`);
61
- const flowRun = extractFlowRunFromBody(stdout);
62
- return { flowRun, currentBody: stdout };
76
+ const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`, 30_000, ghEnv);
77
+ const flowRunResult = extractFlowRunFromBody(stdout);
78
+ return { flowRunResult, currentBody: stdout };
63
79
  }
64
80
  catch {
65
- return { flowRun: null, currentBody: null };
81
+ return { flowRunResult: { ok: false, code: "NOT_FOUND", errors: [{ path: "", message: "Failed to read issue body" }] }, currentBody: null };
66
82
  }
67
83
  }
68
- export async function writeFlowRunWithLock(issueNumber, flowRun, previousBody) {
84
+ export async function writeFlowRunWithLock(issueNumber, flowRun, previousBody, ghEnv) {
69
85
  try {
70
- const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`);
86
+ const { stdout } = await gh(`issue view ${issueNumber} --json body --jq .body`, 30_000, ghEnv);
71
87
  if (previousBody !== stdout) {
72
88
  return { success: false, error: "Conflict: body has changed since last read", conflict: true };
73
89
  }
74
90
  const newBody = replaceFlowRunInBody(stdout, flowRun);
75
91
  const escaped = escapeShellArg(newBody);
76
- await gh(`issue edit ${issueNumber} --body '${escaped}'`);
92
+ await gh(`issue edit ${issueNumber} --body '${escaped}'`, 30_000, ghEnv);
77
93
  return { success: true, conflict: false };
78
94
  }
79
95
  catch (err) {
80
96
  return { success: false, error: String(err), conflict: false };
81
97
  }
82
98
  }
83
- export async function applyLabel(issueNumber, label) {
99
+ export async function applyLabel(issueNumber, label, ghEnv) {
84
100
  try {
85
- await gh(`issue edit ${issueNumber} --add-label '${label}'`);
101
+ await gh(`issue edit ${issueNumber} --add-label '${label}'`, 30_000, ghEnv);
86
102
  return true;
87
103
  }
88
104
  catch {
89
105
  return false;
90
106
  }
91
107
  }
92
- export async function removeLabel(issueNumber, label) {
108
+ export async function removeLabel(issueNumber, label, ghEnv) {
93
109
  try {
94
- await gh(`issue edit ${issueNumber} --remove-label '${label}'`);
110
+ await gh(`issue edit ${issueNumber} --remove-label '${label}'`, 30_000, ghEnv);
95
111
  return true;
96
112
  }
97
113
  catch {
@@ -129,6 +145,10 @@ export function createInitialFlowRun(flowRunId, repo, parentIssueNumber) {
129
145
  nextTickAfter: null,
130
146
  maxRuntime: 86_400_000,
131
147
  completedAt: null,
148
+ repositoryQualityPolicy: {
149
+ mode: "off",
150
+ requiredChecks: [],
151
+ },
132
152
  };
133
153
  }
134
154
  //# sourceMappingURL=github.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/flowrun/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/flowrun/github.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,14 @@
1
- export { type FlowRun, type FlowRunStatus, type FlowStage, type TaskState, type TaskStatus, type StageState, type StageStatus, type Checkpoint, type CheckpointStatus, type EvidenceEntry, type PRCheckpoints, FLOW_RUN_STAGES, FLOW_RUN_STATUSES, TASK_STATUSES, STAGE_STATUSES, CHECKPOINT_STATUSES, CURRENT_SCHEMA_VERSION, DEFAULT_MAX_RUNTIME_MS, CABINET_START_MARKER, CABINET_END_MARKER, LABEL_PREFIX, FLOW_RUN_LABELS, } from "./types.js";
2
- export { validateFlowRun, type ValidationError, } from "./validator.js";
1
+ export { type FlowRun, type FlowRunStatus, type FlowStage, type TaskState, type TaskStatus, type StageState, type StageStatus, type Checkpoint, type CheckpointStatus, type EvidenceEntry, type PRCheckpoints, FLOW_RUN_STAGES, FLOW_RUN_STATUSES, TASK_STATUSES, STAGE_STATUSES, CHECKPOINT_STATUSES, CURRENT_SCHEMA_VERSION, DEFAULT_MAX_RUNTIME_MS, CABINET_START_MARKER, CABINET_END_MARKER, LABEL_PREFIX, FLOW_RUN_LABELS, type AcceptanceCriterion, type TddMode, type TddEnforcement, type TddRunnerPolicy, type TddApproval, type AlternativeValidation, type TddException, type TddPolicy, type TddFailureKind, type TddCommandEvidence, type VersionedDigest, type TddTaskStartEvidence, type TaskExecutionBinding, type TddCycleEvidence, type TddRegressionEvidence, type FinalVerificationEvidence, type AlternativeValidationEvidence, type TddReworkEvidence, type ReworkApproval, type TddEvidence, type CoveragePolicy, type CoverageEvidence, type TddComplianceCheckpoint, type RepositoryQualityPolicy, type GoalFlowRunRef, type FlowRunReadResult, type TaskCommand, type ValidationError, type FlowControlRequest, type FlowControlResponse, type FlowControlOp, } from "./types.js";
2
+ export { validateFlowRun, validateFlowRunDag, type DagValidationError, } from "./validator.js";
3
+ export { migrateV1ToV2, } from "./migration.js";
3
4
  export { extractFlowRunFromBody, replaceFlowRunInBody, readFlowRun, writeFlowRun, readFlowRunWithLock, writeFlowRunWithLock, applyLabel, removeLabel, createInitialFlowRun, } from "./github.js";
4
5
  export { canStartStage, canCompleteStage, canStartTask, canCompleteTask, canMerge, allTasksComplete, getReadyTasks, determineNextStage, type GateResult, } from "./gate.js";
5
- export { checkBranchProtection, validateCheckpoint, validatePRCheckpoints, canAutoMergeTask, mergePR, createRevertPR, type MergeGateResult, } from "./merge.js";
6
+ export { flowRunStart, flowStageStart, flowStageComplete, flowTaskStart, flowRunFinalize, type TransitionError, type TransitionResult, } from "./transitions.js";
7
+ export { checkBranchProtection, validateCheckpoint, validatePRCheckpoints, canMergeTaskPR, mergePR, mergeTaskPR, createRevertPR, setMergeGhExecutor, type MergeGateResult, } from "./merge.js";
6
8
  export { checkRuntime, hasRuntimeExpired, getRuntimeMs, checkBackpressure, buildContinuationContext, type RuntimeCheckResult, type BackpressureStatus, } from "./resilience.js";
7
9
  export { postAuditComment, postPRComment, buildStageAudit, buildMergeAudit, } from "./audit.js";
10
+ export { evaluateTddCompliance, type EvaluationResult, } from "./evaluator.js";
11
+ export { computeWorkspaceDigest, type DigestOptions, } from "./digest.js";
12
+ export { executeRedCheck, validateSelector, classifyVitestFailure, buildVitestArgs, type VitestOutput, type FailureInput, } from "./adapter.js";
13
+ export { validateCoveragePath, resolveCoveragePath, parseCoverageReport, buildCoverageEvidence, checkCoverageThreshold, computeReportDigest, verifySymlinkSafe, type ParsedCoverageData, type BuildCoverageEvidenceInput, } from "./coverage.js";
14
+ export { checkRequiredChecks, validateRequiredWorkflow, computeQualityContractDigest, type PRCheckResult, type CICheckResult, type RequiredWorkflowValidation, } from "./ci.js";
@@ -1,8 +1,15 @@
1
1
  export { FLOW_RUN_STAGES, FLOW_RUN_STATUSES, TASK_STATUSES, STAGE_STATUSES, CHECKPOINT_STATUSES, CURRENT_SCHEMA_VERSION, DEFAULT_MAX_RUNTIME_MS, CABINET_START_MARKER, CABINET_END_MARKER, LABEL_PREFIX, FLOW_RUN_LABELS, } from "./types.js";
2
- export { validateFlowRun, } from "./validator.js";
2
+ export { validateFlowRun, validateFlowRunDag, } from "./validator.js";
3
+ export { migrateV1ToV2, } from "./migration.js";
3
4
  export { extractFlowRunFromBody, replaceFlowRunInBody, readFlowRun, writeFlowRun, readFlowRunWithLock, writeFlowRunWithLock, applyLabel, removeLabel, createInitialFlowRun, } from "./github.js";
4
5
  export { canStartStage, canCompleteStage, canStartTask, canCompleteTask, canMerge, allTasksComplete, getReadyTasks, determineNextStage, } from "./gate.js";
5
- export { checkBranchProtection, validateCheckpoint, validatePRCheckpoints, canAutoMergeTask, mergePR, createRevertPR, } from "./merge.js";
6
+ export { flowRunStart, flowStageStart, flowStageComplete, flowTaskStart, flowRunFinalize, } from "./transitions.js";
7
+ export { checkBranchProtection, validateCheckpoint, validatePRCheckpoints, canMergeTaskPR, mergePR, mergeTaskPR, createRevertPR, setMergeGhExecutor, } from "./merge.js";
6
8
  export { checkRuntime, hasRuntimeExpired, getRuntimeMs, checkBackpressure, buildContinuationContext, } from "./resilience.js";
7
9
  export { postAuditComment, postPRComment, buildStageAudit, buildMergeAudit, } from "./audit.js";
10
+ export { evaluateTddCompliance, } from "./evaluator.js";
11
+ export { computeWorkspaceDigest, } from "./digest.js";
12
+ export { executeRedCheck, validateSelector, classifyVitestFailure, buildVitestArgs, } from "./adapter.js";
13
+ export { validateCoveragePath, resolveCoveragePath, parseCoverageReport, buildCoverageEvidence, checkCoverageThreshold, computeReportDigest, verifySymlinkSafe, } from "./coverage.js";
14
+ export { checkRequiredChecks, validateRequiredWorkflow, computeQualityContractDigest, } from "./ci.js";
8
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flowrun/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EACtF,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,GACxE,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,eAAe,GAChB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,sBAAsB,EAAE,oBAAoB,EAC5C,WAAW,EAAE,YAAY,EACzB,mBAAmB,EAAE,oBAAoB,EACzC,UAAU,EAAE,WAAW,EAAE,oBAAoB,GAC9C,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAC9D,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,GAE9D,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,qBAAqB,EAAE,kBAAkB,EAAE,qBAAqB,EAChE,gBAAgB,EAAE,OAAO,EAAE,cAAc,GAE1C,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAC7C,iBAAiB,EAAE,wBAAwB,GAE5C,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,gBAAgB,EAAE,aAAa,EAC/B,eAAe,EAAE,eAAe,GACjC,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flowrun/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EACtF,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,GAexE,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,eAAe,EAAE,kBAAkB,GAEpC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,sBAAsB,EAAE,oBAAoB,EAC5C,WAAW,EAAE,YAAY,EACzB,mBAAmB,EAAE,oBAAoB,EACzC,UAAU,EAAE,WAAW,EAAE,oBAAoB,GAC9C,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAC9D,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,GAE9D,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAC9D,eAAe,GAEhB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,qBAAqB,EAAE,kBAAkB,EAAE,qBAAqB,EAChE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,GAEzE,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAC7C,iBAAiB,EAAE,wBAAwB,GAE5C,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,gBAAgB,EAAE,aAAa,EAC/B,eAAe,EAAE,eAAe,GACjC,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,qBAAqB,GAEtB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,sBAAsB,GAEvB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAGhB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,GAI7B,MAAM,SAAS,CAAA"}
@@ -1,4 +1,9 @@
1
- import type { FlowRun, PRCheckpoints, Checkpoint, TaskState } from "./types.js";
1
+ import type { PRCheckpoints, Checkpoint, TaskState } from "./types.js";
2
+ type GhFn = (args: string) => Promise<{
3
+ stdout: string;
4
+ stderr: string;
5
+ }>;
6
+ export declare function setMergeGhExecutor(fn: GhFn): void;
2
7
  export interface BranchProtectionStatus {
3
8
  exists: boolean;
4
9
  requiredChecks: string[];
@@ -13,12 +18,40 @@ export interface MergeGateResult {
13
18
  export declare function checkBranchProtection(owner: string, repo: string): Promise<BranchProtectionStatus>;
14
19
  export declare function validateCheckpoint(cp: Checkpoint): "pending" | "pass" | "fail";
15
20
  export declare function validatePRCheckpoints(checkpoints: PRCheckpoints): MergeGateResult;
16
- export declare function canAutoMergeTask(flowRun: FlowRun, task: TaskState, protection: BranchProtectionStatus): MergeGateResult;
21
+ /**
22
+ * Task-local merge gate(不依赖全局 canMerge)。
23
+ *
24
+ * 检查条件(按顺序):
25
+ * 1. Task 状态为 "reviewing"
26
+ * 2. 存在 PR Checkpoints
27
+ * 3. 所有 checkpoint 状态为 pass
28
+ * 4. TDD compliance 为 pass / waived / null(无 TDD 要求)
29
+ * 5. Branch Protection 已启用
30
+ *
31
+ * 不要求全局 review Stage 为 pass。
32
+ */
33
+ export declare function canMergeTaskPR(task: TaskState, hasBranchProtection: boolean): MergeGateResult;
34
+ /**
35
+ * 标准化合并 PR(无安全检查,向后兼容)。
36
+ */
17
37
  export declare function mergePR(prNumber: number): Promise<{
18
38
  success: boolean;
19
39
  error?: string;
20
40
  }>;
41
+ /**
42
+ * Task-local PR 合并(带 --match-head-commit 安全检查)。
43
+ *
44
+ * 步骤:
45
+ * 1. 验证 verifiedSha 非空
46
+ * 2. 使用 gh pr merge --squash --delete-branch --match-head-commit <verifiedSha>
47
+ * 3. 失败时返回错误
48
+ */
49
+ export declare function mergeTaskPR(prNumber: number, verifiedSha: string): Promise<{
50
+ success: boolean;
51
+ error?: string;
52
+ }>;
21
53
  export declare function createRevertPR(prNumber: number, reason: string): Promise<{
22
54
  prNumber?: number;
23
55
  error?: string;
24
56
  }>;
57
+ export {};