@devcxl/opencode-cabbage 0.2.0 → 0.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 (84) hide show
  1. package/README.md +57 -54
  2. package/README.zh.md +91 -0
  3. package/assets/agents/dev-lifecycle.md +28 -22
  4. package/assets/agents/team/architect.md +14 -0
  5. package/assets/agents/team/backend.md +14 -0
  6. package/assets/agents/team/frontend.md +14 -0
  7. package/assets/agents/team/goal-verify.md +54 -0
  8. package/assets/agents/team/reviewer.md +10 -0
  9. package/assets/skills/flow-code/SKILL.md +13 -0
  10. package/assets/skills/flow-review/SKILL.md +7 -0
  11. package/assets/skills/flow-tasks/SKILL.md +42 -0
  12. package/assets/skills/flow-tdd/SKILL.md +208 -0
  13. package/dist/flowrun/adapter.d.ts +49 -0
  14. package/dist/flowrun/adapter.js +293 -0
  15. package/dist/flowrun/adapter.js.map +1 -0
  16. package/dist/flowrun/ci.d.ts +64 -0
  17. package/dist/flowrun/ci.js +184 -0
  18. package/dist/flowrun/ci.js.map +1 -0
  19. package/dist/flowrun/coverage.d.ts +70 -0
  20. package/dist/flowrun/coverage.js +207 -0
  21. package/dist/flowrun/coverage.js.map +1 -0
  22. package/dist/flowrun/digest.d.ts +17 -0
  23. package/dist/flowrun/digest.js +301 -0
  24. package/dist/flowrun/digest.js.map +1 -0
  25. package/dist/flowrun/evaluator.d.ts +38 -0
  26. package/dist/flowrun/evaluator.js +185 -0
  27. package/dist/flowrun/evaluator.js.map +1 -0
  28. package/dist/flowrun/gate.d.ts +20 -0
  29. package/dist/flowrun/gate.js +40 -3
  30. package/dist/flowrun/gate.js.map +1 -1
  31. package/dist/flowrun/github.d.ts +13 -9
  32. package/dist/flowrun/github.js +46 -26
  33. package/dist/flowrun/github.js.map +1 -1
  34. package/dist/flowrun/index.d.ts +12 -4
  35. package/dist/flowrun/index.js +11 -3
  36. package/dist/flowrun/index.js.map +1 -1
  37. package/dist/flowrun/merge.d.ts +35 -2
  38. package/dist/flowrun/merge.js +72 -8
  39. package/dist/flowrun/merge.js.map +1 -1
  40. package/dist/flowrun/migration.d.ts +11 -0
  41. package/dist/flowrun/migration.js +276 -0
  42. package/dist/flowrun/migration.js.map +1 -0
  43. package/dist/flowrun/pr.d.ts +132 -0
  44. package/dist/flowrun/pr.js +343 -0
  45. package/dist/flowrun/pr.js.map +1 -0
  46. package/dist/flowrun/state.d.ts +79 -0
  47. package/dist/flowrun/state.js +363 -0
  48. package/dist/flowrun/state.js.map +1 -0
  49. package/dist/flowrun/transitions.d.ts +66 -0
  50. package/dist/flowrun/transitions.js +168 -0
  51. package/dist/flowrun/transitions.js.map +1 -0
  52. package/dist/flowrun/types.d.ts +279 -4
  53. package/dist/flowrun/types.js +2 -1
  54. package/dist/flowrun/types.js.map +1 -1
  55. package/dist/flowrun/validator.d.ts +15 -5
  56. package/dist/flowrun/validator.js +117 -5
  57. package/dist/flowrun/validator.js.map +1 -1
  58. package/dist/plugin/agents.d.ts +4 -0
  59. package/dist/plugin/agents.js +19 -0
  60. package/dist/plugin/agents.js.map +1 -1
  61. package/dist/plugin/broker.d.ts +73 -0
  62. package/dist/plugin/broker.js +140 -0
  63. package/dist/plugin/broker.js.map +1 -0
  64. package/dist/plugin/flow-pr-tool.d.ts +37 -0
  65. package/dist/plugin/flow-pr-tool.js +176 -0
  66. package/dist/plugin/flow-pr-tool.js.map +1 -0
  67. package/dist/plugin/goal.d.ts +39 -1
  68. package/dist/plugin/goal.js +80 -1
  69. package/dist/plugin/goal.js.map +1 -1
  70. package/dist/plugin/prompt-lint.js +129 -0
  71. package/dist/plugin/prompt-lint.js.map +1 -1
  72. package/dist/plugin/server.d.ts +8 -0
  73. package/dist/plugin/server.js +306 -11
  74. package/dist/plugin/server.js.map +1 -1
  75. package/dist/plugin/shell.d.ts +37 -0
  76. package/dist/plugin/shell.js +144 -0
  77. package/dist/plugin/shell.js.map +1 -0
  78. package/dist/plugin/tdd-tool.d.ts +62 -0
  79. package/dist/plugin/tdd-tool.js +336 -0
  80. package/dist/plugin/tdd-tool.js.map +1 -0
  81. package/dist/util/gh.d.ts +8 -1
  82. package/dist/util/gh.js +10 -2
  83. package/dist/util/gh.js.map +1 -1
  84. package/package.json +2 -1
@@ -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,15 @@
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
- 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";
5
+ export { canStartStage, canCompleteStage, canStartTask, canCompleteTask, canMerge, allTasksComplete, getReadyTasks, determineNextStage, canCreatePR, type GateResult, } from "./gate.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 { preflightPRCreate, createOrReusePR, setGhExecutor, initiateRework, completeRework, fetchRemotePRHead, revalidateRemoteHead, type CreatePRParams, type CreatePRResult, type PreflightResult, type ReworkInput, type ReworkResult, type CompleteReworkInput, type CompleteReworkResult, type RemotePRHead, type FetchRemoteHeadResult, type RevalidateResult, } from "./pr.js";
14
+ export { validateCoveragePath, resolveCoveragePath, parseCoverageReport, buildCoverageEvidence, checkCoverageThreshold, computeReportDigest, verifySymlinkSafe, type ParsedCoverageData, type BuildCoverageEvidenceInput, } from "./coverage.js";
15
+ export { checkRequiredChecks, validateRequiredWorkflow, computeQualityContractDigest, type PRCheckResult, type CICheckResult, type RequiredWorkflowValidation, } from "./ci.js";
@@ -1,8 +1,16 @@
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
- export { canStartStage, canCompleteStage, canStartTask, canCompleteTask, canMerge, allTasksComplete, getReadyTasks, determineNextStage, } from "./gate.js";
5
- export { checkBranchProtection, validateCheckpoint, validatePRCheckpoints, canAutoMergeTask, mergePR, createRevertPR, } from "./merge.js";
5
+ export { canStartStage, canCompleteStage, canStartTask, canCompleteTask, canMerge, allTasksComplete, getReadyTasks, determineNextStage, canCreatePR, } from "./gate.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 { preflightPRCreate, createOrReusePR, setGhExecutor, initiateRework, completeRework, fetchRemotePRHead, revalidateRemoteHead, } from "./pr.js";
14
+ export { validateCoveragePath, resolveCoveragePath, parseCoverageReport, buildCoverageEvidence, checkCoverageThreshold, computeReportDigest, verifySymlinkSafe, } from "./coverage.js";
15
+ export { checkRequiredChecks, validateRequiredWorkflow, computeQualityContractDigest, } from "./ci.js";
8
16
  //# 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,EAC7D,WAAW,GAEZ,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,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,GAWrB,MAAM,SAAS,CAAA;AAEhB,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 {};
@@ -1,5 +1,15 @@
1
- import { canMerge } from "./gate.js";
2
- import { gh } from "../util/gh.js";
1
+ let mergeGhExecutor = null;
2
+ export function setMergeGhExecutor(fn) {
3
+ mergeGhExecutor = fn;
4
+ }
5
+ async function gh(args) {
6
+ if (mergeGhExecutor) {
7
+ return mergeGhExecutor(args);
8
+ }
9
+ const mod = await import("../util/gh.js");
10
+ return mod.gh(args);
11
+ }
12
+ // ─── Branch Protection ───
3
13
  export async function checkBranchProtection(owner, repo) {
4
14
  try {
5
15
  const { stdout } = await gh(`api repos/${owner}/${repo}/branches/main/protection`);
@@ -26,6 +36,7 @@ export async function checkBranchProtection(owner, repo) {
26
36
  };
27
37
  }
28
38
  }
39
+ // ─── Checkpoint 验证 ───
29
40
  export function validateCheckpoint(cp) {
30
41
  if (cp.status === "pass")
31
42
  return "pass";
@@ -63,24 +74,51 @@ export function validatePRCheckpoints(checkpoints) {
63
74
  }
64
75
  return { allowed: true, checkpointResults: results };
65
76
  }
66
- export function canAutoMergeTask(flowRun, task, protection) {
67
- const flowGate = canMerge(flowRun);
68
- if (!flowGate.allowed) {
69
- return { allowed: false, reason: flowGate.reason, checkpointResults: {} };
70
- }
77
+ // ─── Task-local Merge Gate ───
78
+ /**
79
+ * Task-local merge gate(不依赖全局 canMerge)。
80
+ *
81
+ * 检查条件(按顺序):
82
+ * 1. Task 状态为 "reviewing"
83
+ * 2. 存在 PR Checkpoints
84
+ * 3. 所有 checkpoint 状态为 pass
85
+ * 4. TDD compliance 为 pass / waived / null(无 TDD 要求)
86
+ * 5. Branch Protection 已启用
87
+ *
88
+ * 不要求全局 review Stage 为 pass。
89
+ */
90
+ export function canMergeTaskPR(task, hasBranchProtection) {
91
+ // 1. Task 状态检查
71
92
  if (task.status === "merged") {
72
93
  return { allowed: false, reason: "Task already merged", checkpointResults: {} };
73
94
  }
74
95
  if (task.status !== "reviewing") {
75
96
  return { allowed: false, reason: `Task status is ${task.status}, expected reviewing`, checkpointResults: {} };
76
97
  }
98
+ // 2. PR Checkpoints 存在性
77
99
  if (!task.prCheckpoints) {
78
100
  return { allowed: false, reason: "No PR checkpoints recorded", checkpointResults: {} };
79
101
  }
102
+ // 3. 标准 checkpoint 验证
80
103
  const prResult = validatePRCheckpoints(task.prCheckpoints);
81
104
  if (!prResult.allowed)
82
105
  return prResult;
83
- if (!protection.exists) {
106
+ // 4. TDD compliance 验证
107
+ const tdd = task.prCheckpoints.tddCompliance;
108
+ if (tdd !== null && tdd.status === "fail") {
109
+ prResult.checkpointResults["tddCompliance"] = "fail";
110
+ return {
111
+ allowed: false,
112
+ reason: `TDD compliance failed: ${tdd.summary}`,
113
+ checkpointResults: prResult.checkpointResults,
114
+ };
115
+ }
116
+ // tdd === null → 无 TDD 要求,视为通过
117
+ // tdd.status === "pass" / "waived" → 通过
118
+ prResult.checkpointResults["tddCompliance"] =
119
+ tdd === null ? "skipped" : tdd.status;
120
+ // 5. Branch Protection
121
+ if (!hasBranchProtection) {
84
122
  prResult.checkpointResults.branchProtection = "fail";
85
123
  return {
86
124
  allowed: false,
@@ -91,6 +129,10 @@ export function canAutoMergeTask(flowRun, task, protection) {
91
129
  prResult.checkpointResults.branchProtection = "pass";
92
130
  return prResult;
93
131
  }
132
+ // ─── PR 合并操作 ───
133
+ /**
134
+ * 标准化合并 PR(无安全检查,向后兼容)。
135
+ */
94
136
  export async function mergePR(prNumber) {
95
137
  try {
96
138
  await gh(`pr merge ${prNumber} --squash --delete-branch`);
@@ -100,6 +142,28 @@ export async function mergePR(prNumber) {
100
142
  return { success: false, error: String(err) };
101
143
  }
102
144
  }
145
+ /**
146
+ * Task-local PR 合并(带 --match-head-commit 安全检查)。
147
+ *
148
+ * 步骤:
149
+ * 1. 验证 verifiedSha 非空
150
+ * 2. 使用 gh pr merge --squash --delete-branch --match-head-commit <verifiedSha>
151
+ * 3. 失败时返回错误
152
+ */
153
+ export async function mergeTaskPR(prNumber, verifiedSha) {
154
+ if (!verifiedSha) {
155
+ return { success: false, error: "verifiedSha is required for merge --match-head-commit" };
156
+ }
157
+ try {
158
+ // --match-head-commit 确保只有 verified 的 commit 才会被合并
159
+ await gh(`pr merge ${prNumber} --squash --delete-branch --match-head-commit ${verifiedSha}`);
160
+ return { success: true };
161
+ }
162
+ catch (err) {
163
+ return { success: false, error: String(err) };
164
+ }
165
+ }
166
+ // ─── Revert ───
103
167
  export async function createRevertPR(prNumber, reason) {
104
168
  try {
105
169
  const { stdout } = await gh(`pr view ${prNumber} --json headRefName,headRepository,body,title`);
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/flowrun/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/flowrun/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FlowRunReadResult } from "./types.js";
2
+ /**
3
+ * v1→v2 幂等迁移器
4
+ *
5
+ * 纯函数:输入 v1 FlowRun (unknown),输出 FlowRunReadResult。
6
+ * - 如果输入已经是 v2 格式 → 直接返回(幂等)
7
+ * - 如果 schemaVersion > 2 → 返回 UNSUPPORTED_SCHEMA
8
+ * - 如果 schemaVersion 缺失/非整数/< 1 → 返回 VALIDATION_FAILED
9
+ * - 如果 schemaVersion === 1 → 执行迁移
10
+ */
11
+ export declare function migrateV1ToV2(flowRun: unknown): FlowRunReadResult;