@devcxl/opencode-cabbage 1.0.0 → 1.1.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 (70) hide show
  1. package/assets/agents/team/architect.md +3 -0
  2. package/dist/kernel/context.js +12 -1
  3. package/dist/kernel/context.js.map +1 -1
  4. package/dist/kernel/flow.d.ts +12 -3
  5. package/dist/kernel/flow.js +107 -27
  6. package/dist/kernel/flow.js.map +1 -1
  7. package/dist/kernel/permission.d.ts +1 -1
  8. package/dist/kernel/permission.js +9 -1
  9. package/dist/kernel/permission.js.map +1 -1
  10. package/dist/kernel/profile.js +5 -2
  11. package/dist/kernel/profile.js.map +1 -1
  12. package/dist/kernel/records.d.ts +22 -6
  13. package/dist/kernel/records.js +71 -28
  14. package/dist/kernel/records.js.map +1 -1
  15. package/dist/kernel/release.d.ts +2 -0
  16. package/dist/kernel/release.js +13 -1
  17. package/dist/kernel/release.js.map +1 -1
  18. package/dist/kernel/review.js +6 -5
  19. package/dist/kernel/review.js.map +1 -1
  20. package/dist/kernel/session-index.d.ts +5 -3
  21. package/dist/kernel/session-index.js +81 -65
  22. package/dist/kernel/session-index.js.map +1 -1
  23. package/dist/kernel/setup.d.ts +26 -1
  24. package/dist/kernel/setup.js +87 -10
  25. package/dist/kernel/setup.js.map +1 -1
  26. package/dist/kernel/task.d.ts +14 -9
  27. package/dist/kernel/task.js +138 -53
  28. package/dist/kernel/task.js.map +1 -1
  29. package/dist/kernel/tdd/adapter.js +27 -26
  30. package/dist/kernel/tdd/adapter.js.map +1 -1
  31. package/dist/kernel/tdd/digest.d.ts +1 -0
  32. package/dist/kernel/tdd/digest.js +6 -4
  33. package/dist/kernel/tdd/digest.js.map +1 -1
  34. package/dist/kernel/tdd/evaluator.js +1 -1
  35. package/dist/kernel/tdd/evaluator.js.map +1 -1
  36. package/dist/kernel/tdd/state.d.ts +1 -1
  37. package/dist/kernel/tdd/state.js +1 -1
  38. package/dist/kernel/tdd/state.js.map +1 -1
  39. package/dist/kernel/worktree.d.ts +1 -1
  40. package/dist/kernel/worktree.js +35 -6
  41. package/dist/kernel/worktree.js.map +1 -1
  42. package/dist/plugin/flow-control.d.ts +11 -0
  43. package/dist/plugin/flow-control.js +47 -14
  44. package/dist/plugin/flow-control.js.map +1 -1
  45. package/dist/plugin/goal.d.ts +11 -1
  46. package/dist/plugin/goal.js +17 -3
  47. package/dist/plugin/goal.js.map +1 -1
  48. package/dist/plugin/prompt-lint.js +0 -1
  49. package/dist/plugin/prompt-lint.js.map +1 -1
  50. package/dist/plugin/release-control.d.ts +2 -0
  51. package/dist/plugin/release-control.js +59 -20
  52. package/dist/plugin/release-control.js.map +1 -1
  53. package/dist/plugin/server.js +53 -20
  54. package/dist/plugin/server.js.map +1 -1
  55. package/dist/plugin/setup-control.d.ts +15 -1
  56. package/dist/plugin/setup-control.js +37 -6
  57. package/dist/plugin/setup-control.js.map +1 -1
  58. package/dist/plugin/task-control.d.ts +2 -2
  59. package/dist/plugin/task-control.js +15 -8
  60. package/dist/plugin/task-control.js.map +1 -1
  61. package/dist/plugin/tdd-checkpoint.d.ts +10 -0
  62. package/dist/plugin/tdd-checkpoint.js +86 -3
  63. package/dist/plugin/tdd-checkpoint.js.map +1 -1
  64. package/dist/util/gh.d.ts +5 -0
  65. package/dist/util/gh.js +12 -0
  66. package/dist/util/gh.js.map +1 -1
  67. package/dist/util/paths.d.ts +6 -0
  68. package/dist/util/paths.js +14 -0
  69. package/dist/util/paths.js.map +1 -1
  70. package/package.json +4 -4
@@ -1,4 +1,4 @@
1
- import { gh as ghCli } from "../util/gh.js";
1
+ import { gh as ghCli, parsePrUrlNumber } from "../util/gh.js";
2
2
  import { escapeShellArg } from "../util/shell.js";
3
3
  import { KeyedMutex } from "./mutex.js";
4
4
  /** TDD evidence 受控 comment 的 marker(单个 comment 承载全部证据) */
@@ -6,6 +6,8 @@ export const EVIDENCE_MARKER_START = "<!-- cabbage-tdd-evidence:start -->";
6
6
  export const EVIDENCE_MARKER_END = "<!-- cabbage-tdd-evidence:end -->";
7
7
  /** Flow Record(Parent Issue)标签 */
8
8
  export const FLOW_LABEL = "cabbage:flow";
9
+ /** 全自动授权标签:用户打此标签 = 该 flow 全自动运行,阶段确认门禁(requirements/高风险)自动放行 */
10
+ export const AUTO_LABEL = "cabbage:auto";
9
11
  /** 阶段标签前缀:cabbage:stage:<stage> */
10
12
  export const STAGE_LABEL_PREFIX = "cabbage:stage:";
11
13
  let recordsGhExecutor = null;
@@ -55,14 +57,21 @@ async function writeBody(issueNumber, body) {
55
57
  const escaped = escapeShellArg(body);
56
58
  await gh(`issue edit ${issueNumber} --body '${escaped}'`);
57
59
  }
58
- /** 创建 Draft Parent Issue(Flow Record),打 cabbage:flow 标签 */
60
+ /** 创建 Parent Issue(Flow Record),打 cabbage:flow 标签(gh 2.96:issue create 无 --draft/--json) */
59
61
  export async function createFlowRecord(input) {
60
62
  try {
63
+ await ensureLabel(FLOW_LABEL);
64
+ if (input.autoMode)
65
+ await ensureLabel(AUTO_LABEL);
61
66
  const escapedBody = escapeShellArg(input.body);
62
- const { stdout } = await gh(`issue create --title '${input.slug}' --body '${escapedBody}' --label '${FLOW_LABEL}' --draft --json number --jq .number`);
63
- const number = Number(stdout.trim());
64
- if (!Number.isInteger(number)) {
65
- throw new Error(`invalid issue number: ${stdout}`);
67
+ const labelArgs = input.autoMode
68
+ ? `--label '${FLOW_LABEL}' --label '${AUTO_LABEL}'`
69
+ : `--label '${FLOW_LABEL}'`;
70
+ const { stdout } = await gh(`issue create --title '${escapeShellArg(input.slug)}' --body '${escapedBody}' ${labelArgs}`);
71
+ // issue create 不支持 --json:解析 stdout 中的 issue URL
72
+ const number = parsePrUrlNumber(stdout);
73
+ if (number === null) {
74
+ throw new Error(`invalid issue create output: ${stdout}`);
66
75
  }
67
76
  return { ok: true, ref: { parentIssueNumber: number, slug: input.slug } };
68
77
  }
@@ -81,7 +90,8 @@ export async function readFlowRecord(parentIssueNumber) {
81
90
  }
82
91
  /**
83
92
  * 乐观锁更新 Flow Record body:mutex 串行 + previousBody 比对。
84
- * 比对不一致(外部并发修改)→ 重读最新 body 重试 1 次(retried: true)。
93
+ * 比对不一致(外部并发修改)→ 重读最新 body,基于最新内容合并写入(retried: true)。
94
+ * 合并语义保留外部修改;跨进程完全串行化需 ETag/If-Match(GitHub REST 限制,超出范围)。
85
95
  */
86
96
  export async function updateFlowRecord(parentIssueNumber, previousBody, buildNewBody) {
87
97
  return recordMutex.runExclusive(parentIssueNumber, async () => {
@@ -91,7 +101,7 @@ export async function updateFlowRecord(parentIssueNumber, previousBody, buildNew
91
101
  await writeBody(parentIssueNumber, buildNewBody(current));
92
102
  return { ok: true, retried: false };
93
103
  }
94
- // 冲突:重读最新 body 重试 1 次
104
+ // 冲突:重读最新 body,基于最新内容合并(保留外部修改)
95
105
  const latest = await readBody(parentIssueNumber);
96
106
  await writeBody(parentIssueNumber, buildNewBody(latest));
97
107
  return { ok: true, retried: true };
@@ -105,10 +115,11 @@ export async function updateFlowRecord(parentIssueNumber, previousBody, buildNew
105
115
  export async function createTaskRecord(input) {
106
116
  try {
107
117
  const escapedBody = escapeShellArg(input.body);
108
- const { stdout } = await gh(`issue create --title '${input.title}' --body '${escapedBody}' --parent ${input.parentIssueNumber} --json number --jq .number`);
109
- const number = Number(stdout.trim());
110
- if (!Number.isInteger(number)) {
111
- throw new Error(`invalid issue number: ${stdout}`);
118
+ const { stdout } = await gh(`issue create --title '${escapeShellArg(input.title)}' --body '${escapedBody}' --parent ${input.parentIssueNumber}`);
119
+ // issue create 不支持 --json:解析 stdout 中的 issue URL
120
+ const number = parsePrUrlNumber(stdout);
121
+ if (number === null) {
122
+ throw new Error(`invalid issue create output: ${stdout}`);
112
123
  }
113
124
  return {
114
125
  ok: true,
@@ -119,48 +130,70 @@ export async function createTaskRecord(input) {
119
130
  return { ok: false, error: String(err) };
120
131
  }
121
132
  }
122
- /** 读取 Task Record 的单个受控 evidence comment;不存在返回 null */
133
+ /**
134
+ * 读取 Task Record 的受控 evidence comment(取最新的,兼容历史多 comment);不存在返回 null。
135
+ * 兼容旧格式注释:只有 start marker、无 end marker 的注释(旧版本插件写入)也视为受控,
136
+ * revision 从 `revision:N` 行提取;完全无法解析时返回 null。
137
+ */
123
138
  export async function readTddEvidenceComment(issueNumber) {
124
139
  try {
125
- const { stdout } = await gh(`issue view ${issueNumber} --json comments --jq '[.comments[] | select(.body | contains("${EVIDENCE_MARKER_START}")) | {id: (.id|tonumber), body}] | first'`);
140
+ const { stdout } = await gh(`issue view ${issueNumber} --json comments --jq '[.comments[] | select(.body | contains("${EVIDENCE_MARKER_START}")) | {id: (.id|tonumber), body}] | last'`);
126
141
  const trimmed = stdout.trim();
127
142
  if (trimmed === "" || trimmed === "null") {
128
143
  return null;
129
144
  }
130
145
  const parsed = JSON.parse(trimmed);
131
146
  const extracted = extractEvidenceBlock(parsed.body);
132
- if (!extracted) {
147
+ if (extracted) {
148
+ return { id: parsed.id, body: parsed.body, revision: extracted.revision };
149
+ }
150
+ // 旧格式兼容:只有 start marker(无 end marker)→ 从 body 提取 revision
151
+ const legacyRevision = parsed.body.match(/revision:(\d+)/)?.[1];
152
+ if (legacyRevision === undefined) {
133
153
  return null;
134
154
  }
135
- return { id: parsed.id, body: parsed.body, revision: extracted.revision };
155
+ return { id: parsed.id, body: parsed.body, revision: Number(legacyRevision) };
136
156
  }
137
157
  catch {
138
158
  return null;
139
159
  }
140
160
  }
161
+ /** 单条 evidence comment 超过该字节数后滚动到新 comment(GitHub comment body 上限 65536 字节) */
162
+ export const MAX_EVIDENCE_COMMENT_BYTES = 55_000;
141
163
  /**
142
- * 追加 TDD evidence 到 Task Record 的单个受控 comment:
143
- * 无受控 comment → 新建(revision 1);有 → marker 区间内 append,revision+1(PATCH 更新)。
164
+ * 追加 TDD evidence 到 Task Record 的受控 comment:
165
+ * 无受控 comment → 新建(revision 1);有 → marker 区间内 append,revision+1(PATCH 更新);
166
+ * 单 comment 超限 → 滚动到新 comment(revision 从当前继续)。
144
167
  * mutex 按 issueNumber 串行;block 已存在则幂等跳过(追加不重复)。
168
+ * 跨进程并发为最佳努力(PATCH 前基于最新重读的 body 构造,丢失概率显著降低);
169
+ * 完全串行化需 ETag/If-Match(GitHub REST 限制,超出当前范围)。
145
170
  */
146
171
  export async function appendTddEvidence(issueNumber, block) {
147
172
  return recordMutex.runExclusive(issueNumber, async () => {
148
173
  try {
174
+ // 幂等:block 已在最新 comment 的 marker 区间内,不重复追加
149
175
  const existing = await readTddEvidenceComment(issueNumber);
176
+ if (existing && extractEvidenceBlock(existing.body)?.content.includes(block)) {
177
+ return { ok: true, revision: existing.revision };
178
+ }
150
179
  if (!existing) {
151
180
  const body = buildEvidenceCommentBody(block, 1);
152
181
  await gh(`issue comment ${issueNumber} --body '${escapeShellArg(body)}'`);
153
182
  return { ok: true, revision: 1 };
154
183
  }
155
- // 幂等:block 已在 marker 区间内,不重复追加
156
- const extracted = extractEvidenceBlock(existing.body);
157
- if (extracted && extracted.content.includes(block)) {
158
- return { ok: true, revision: existing.revision };
184
+ // 滚动:最新 comment 超限 → 新建 comment 承载新证据
185
+ if (existing.body.length > MAX_EVIDENCE_COMMENT_BYTES) {
186
+ const body = buildEvidenceCommentBody(block, existing.revision + 1);
187
+ await gh(`issue comment ${issueNumber} --body '${escapeShellArg(body)}'`);
188
+ return { ok: true, revision: existing.revision + 1 };
159
189
  }
160
- const newBody = appendBlockToEvidenceBody(existing.body, block, existing.revision);
190
+ // 追加前基于最新重读的 body 构造(跨进程冲突时尽量以最新为准,防覆盖丢失)
191
+ const current = await readTddEvidenceComment(issueNumber);
192
+ const base = current && current.id === existing.id ? current : existing;
193
+ const newBody = appendBlockToEvidenceBody(base.body, block, base.revision);
161
194
  const repo = await gh("repo view --json nameWithOwner --jq .nameWithOwner");
162
- await gh(`api repos/${repo.stdout.trim()}/issues/comments/${existing.id} -X PATCH -f body='${escapeShellArg(newBody)}'`);
163
- return { ok: true, revision: existing.revision + 1 };
195
+ await gh(`api repos/${repo.stdout.trim()}/issues/comments/${base.id} -X PATCH -f body='${escapeShellArg(newBody)}'`);
196
+ return { ok: true, revision: base.revision + 1 };
164
197
  }
165
198
  catch (err) {
166
199
  return { ok: false, revision: 0, error: String(err) };
@@ -175,7 +208,16 @@ function appendBlockToEvidenceBody(body, block, revision) {
175
208
  return `${prefix}${block}\n${suffix}`.replace(/(revision:)\d+/, `$1${revision + 1}`);
176
209
  }
177
210
  // ─── labels ───
178
- /** 设置 Flow Record 的阶段标签:移除其它 cabbage:stage:*,添加当前阶段 */
211
+ /** 确保 label 存在(gh label create --force:存在则更新,幂等);创建失败不阻塞(后续 add-label 会显式报错) */
212
+ export async function ensureLabel(name) {
213
+ try {
214
+ await gh(`label create '${escapeShellArg(name)}' --force`);
215
+ }
216
+ catch {
217
+ // 已存在或权限不足:忽略,add-label 阶段仍会暴露真实错误
218
+ }
219
+ }
220
+ /** 设置 Flow Record 的阶段标签:移除其它 cabbage:stage:*,添加当前阶段(自动创建目标标签) */
179
221
  export async function setStageLabel(parentIssueNumber, stage) {
180
222
  try {
181
223
  const { stdout } = await gh(`issue view ${parentIssueNumber} --json labels --jq '[.labels[].name] | join(" ") | tostring'`);
@@ -184,9 +226,10 @@ export async function setStageLabel(parentIssueNumber, stage) {
184
226
  const stale = currentLabels.filter(l => l.startsWith(STAGE_LABEL_PREFIX) && l !== target);
185
227
  const args = [];
186
228
  for (const label of stale) {
187
- args.push(`--remove-label '${label}'`);
229
+ args.push(`--remove-label '${escapeShellArg(label)}'`);
188
230
  }
189
- args.push(`--add-label '${target}'`);
231
+ args.push(`--add-label '${escapeShellArg(target)}'`);
232
+ await ensureLabel(target);
190
233
  await gh(`issue edit ${parentIssueNumber} ${args.join(" ")}`);
191
234
  return { ok: true };
192
235
  }
@@ -1 +1 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/kernel/records.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/kernel/records.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,8 @@ export type ProposeVersionResult = {
70
70
  export declare function proposeVersion(currentVersion: string, changes: ReleaseChange[]): ProposeVersionResult;
71
71
  /** 按 tag 格式(如 v{version})构建 tag;缺省 v{version} */
72
72
  export declare function buildTag(version: string, tagFormat: string): string;
73
+ /** tag 名是否可安全进入 shell 命令;非法(含 tagFormat 注入)→ false */
74
+ export declare function validateTagName(tag: string): boolean;
73
75
  /** tag 是否匹配格式(替换 {version} 为语义版本正则后整体匹配) */
74
76
  export declare function validateTagFormat(tag: string, tagFormat: string): boolean;
75
77
  /** 按分类聚合生成 Release Notes markdown;breaking 变更单独列出 */
@@ -143,6 +143,12 @@ export function buildTag(version, tagFormat) {
143
143
  }
144
144
  return `v${version}`;
145
145
  }
146
+ /** git tag 名安全白名单(git ref 合法字符子集,杜绝 shell 元字符/引号/分号) */
147
+ const TAG_SAFE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
148
+ /** tag 名是否可安全进入 shell 命令;非法(含 tagFormat 注入)→ false */
149
+ export function validateTagName(tag) {
150
+ return TAG_SAFE.test(tag);
151
+ }
146
152
  /** tag 是否匹配格式(替换 {version} 为语义版本正则后整体匹配) */
147
153
  export function validateTagFormat(tag, tagFormat) {
148
154
  const escaped = tagFormat.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace("\\{version\\}", "(\\d+\\.\\d+\\.\\d+)");
@@ -192,6 +198,9 @@ export async function latestTag(executor) {
192
198
  }
193
199
  /** 聚合上一 tag 之后 base 分支的全部 commit(sha + 首行标题) */
194
200
  export async function listCommitsSinceTag(tag, baseBranch, executor) {
201
+ if (!validateTagName(tag)) {
202
+ throw new Error(`Invalid tag name: ${tag}`);
203
+ }
195
204
  const { stdout } = await ghFn(executor)(`api repos/{owner}/{repo}/compare/${tag}...${baseBranch} --jq '.commits[] | {sha: .sha, title: (.commit.message | split("\\n")[0])}'`);
196
205
  const trimmed = stdout.trim();
197
206
  if (trimmed === "" || trimmed === "null")
@@ -202,7 +211,10 @@ export async function listCommitsSinceTag(tag, baseBranch, executor) {
202
211
  }
203
212
  /** 远程已存在 tag 指向的 commit SHA;不存在返回 null */
204
213
  export async function existingTagSha(tag, executor) {
205
- const { stdout } = await ghFn(executor)(`api repos/{owner}/{repo}/tags --jq '.[] | select(.name == "${tag}") | .commit.sha'`);
214
+ if (!validateTagName(tag)) {
215
+ throw new Error(`Invalid tag name: ${tag}`);
216
+ }
217
+ const { stdout } = await ghFn(executor)(`api repos/{owner}/{repo}/tags --jq '.[] | select(.name == ${JSON.stringify(tag)}) | .commit.sha'`);
206
218
  const trimmed = stdout.trim();
207
219
  if (trimmed === "" || trimmed === "null")
208
220
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/kernel/release.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/kernel/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,eAAe,CAAA;AA2B3C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9D,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;AACpD,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,GAAW;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,GAAW,EAAE,OAAe;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAA;IAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AACvD,CAAC;AAED,gBAAgB;AAEhB,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAE/C,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;AAC3C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,IAAiB;IAC7D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QACzD,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QACrE,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAA;IACnF,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAC3C,OAAO,OAAO,CAAA;AAChB,CAAC;AAMD,MAAM,oBAAoB,GAAG,4BAA4B,CAAA;AAEzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEhG;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IAEtF,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAErB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;QAC1C,KAAK,KAAK;YACR,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;QACtC,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACvC;YACE,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;YAC7E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAyC;IACvE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;IACpF,CAAC,CAAC,CAAA;AACJ,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,cAAsB,EAAE,OAAwB;IAC7E,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,4BAA4B,cAAc,EAAE,EAAE,CAAA;IACtG,CAAC;IAED,MAAM,YAAY,GAAG,OAAO;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,sBAAsB;YAC5B,YAAY;YACZ,OAAO,EAAE,uEAAuE,YAAY,CAAC,MAAM,aAAa;SACjH,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aAC5C,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7G,CAAC;IACD,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;AAChF,CAAC;AAED,cAAc;AAEd,iDAAiD;AACjD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,SAAiB;IACzD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,OAAO,EAAE,CAAA;AACtB,CAAC;AAED,wDAAwD;AACxD,MAAM,QAAQ,GAAG,8BAA8B,CAAA;AAE/C,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAiB;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAA;IACjH,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC;AAED,wBAAwB;AAExB,MAAM,cAAc,GAA+B;IACjD,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,MAAM,EAAE,eAAe,CAAC;CAC1B,CAAA;AAED,qDAAqD;AACrD,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAwB;IACzE,MAAM,KAAK,GAAa,CAAC,MAAM,OAAO,EAAE,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAA;QACtC,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE,CAAC,CAAA;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAMD,IAAI,iBAAiB,GAAgB,IAAI,CAAA;AAEzC,MAAM,UAAU,oBAAoB,CAAC,EAAe;IAClD,iBAAiB,GAAG,EAAE,CAAA;AACxB,CAAC;AAED,sDAAsD;AACtD,SAAS,IAAI,CAAC,QAAe;IAC3B,OAAO,QAAQ,IAAI,iBAAiB,IAAI,KAAK,CAAA;AAC/C,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAe;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,gDAAgD,CAAC,CAAA;IACzF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IACrD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAW,EACX,UAAkB,EAClB,QAAe;IAEf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CACrC,oCAAoC,GAAG,MAAM,UAAU,8EAA8E,CACtI,CAAA;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,EAAE,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqC,CAAA;IACvE,sCAAsC;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,QAAe;IAC/D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,6DAA6D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC3I,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IACrD,OAAO,OAAO,CAAA;AAChB,CAAC;AAMD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAW,EACX,WAAmB,EACnB,QAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAA;IACvF,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO,GAAG,sBAAsB,QAAQ,gCAAgC,WAAW,uBAAuB;KACpH,CAAA;AACH,CAAC"}
@@ -4,6 +4,8 @@
4
4
  * - checkBranchProtection:默认分支保护探测
5
5
  * - createRevertPR:回滚 PR
6
6
  */
7
+ import { gh as ghCli, parsePrUrlNumber } from "../util/gh.js";
8
+ import { escapeShellArg } from "../util/shell.js";
7
9
  let mergeGhExecutor = null;
8
10
  export function setMergeGhExecutor(fn) {
9
11
  mergeGhExecutor = fn;
@@ -12,8 +14,7 @@ async function gh(args) {
12
14
  if (mergeGhExecutor) {
13
15
  return mergeGhExecutor(args);
14
16
  }
15
- const mod = await import("../util/gh.js");
16
- return mod.gh(args);
17
+ return ghCli(args);
17
18
  }
18
19
  // ─── Branch Protection ───
19
20
  export async function checkBranchProtection(owner, repo) {
@@ -57,7 +58,7 @@ export async function mergeTaskPR(prNumber, verifiedSha) {
57
58
  }
58
59
  try {
59
60
  // --match-head-commit 确保只有 verified 的 commit 才会被合并
60
- await gh(`pr merge ${prNumber} --squash --delete-branch --match-head-commit ${verifiedSha}`);
61
+ await gh(`pr merge ${prNumber} --squash --delete-branch --match-head-commit '${verifiedSha}'`);
61
62
  return { success: true };
62
63
  }
63
64
  catch (err) {
@@ -71,8 +72,8 @@ export async function createRevertPR(prNumber, reason) {
71
72
  const pr = JSON.parse(stdout);
72
73
  const revertTitle = `revert: ${pr.title}`;
73
74
  const revertBody = `Reverts #${prNumber}\n\nReason: ${reason}\n\nAuto-generated by opencode-cabbage.`;
74
- const { stdout: newPR } = await gh(`pr create --title '${revertTitle}' --body '${revertBody}' --base main --head main`);
75
- return { prNumber: parseInt(newPR.trim().split("/").pop() || "0", 10) };
75
+ const { stdout: newPR } = await gh(`pr create --title '${escapeShellArg(revertTitle)}' --body '${escapeShellArg(revertBody)}' --base main --head main`);
76
+ return { prNumber: parsePrUrlNumber(newPR) ?? 0 };
76
77
  }
77
78
  catch (err) {
78
79
  return { error: String(err) };
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/kernel/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/kernel/review.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface FlowSessionEntry {
3
3
  sessionID: string;
4
4
  status: FlowSessionStatus;
5
5
  continuationCount: number;
6
+ /** goal-verify 已完成验证(goal complete)——flow 级持久化,不依赖会话一致性 */
7
+ goalComplete?: boolean;
6
8
  updatedAt: number;
7
9
  }
8
10
  export interface SessionIndex {
@@ -11,7 +13,7 @@ export interface SessionIndex {
11
13
  export declare function sessionIndexPath(projectDir: string): string;
12
14
  /** 读取索引;文件不存在或损坏时返回空索引。 */
13
15
  export declare function readIndex(projectDir: string): Promise<SessionIndex>;
14
- /** 原子写:先写临时文件再 rename。 */
16
+ /** 原子写:先写临时文件(PID 后缀防跨进程 tmp 冲突)再 rename。 */
15
17
  export declare function writeIndex(projectDir: string, index: SessionIndex): Promise<void>;
16
18
  export declare function getFlowSession(index: SessionIndex, parentIssueNumber: number): FlowSessionEntry | null;
17
19
  export type BindSessionResult = {
@@ -37,7 +39,7 @@ export declare function bindSession(projectDir: string, parentIssueNumber: numbe
37
39
  * 调用方还需将旧 session 的 goal status 置 paused(goalClient 层)。
38
40
  */
39
41
  export declare function takeoverSession(projectDir: string, parentIssueNumber: number, newSessionID: string, userConfirmed: boolean): Promise<BindSessionResult>;
40
- /** 更新已绑定 flow 的状态/计数;flow 未绑定时返回 null 且不创建 entry。 */
41
- export declare function updateFlowSession(projectDir: string, parentIssueNumber: number, patch: Partial<Pick<FlowSessionEntry, "status" | "continuationCount">>): Promise<FlowSessionEntry | null>;
42
+ /** 更新已绑定 flow 的状态/计数/goal 完成标记;flow 未绑定时返回 null 且不创建 entry。 */
43
+ export declare function updateFlowSession(projectDir: string, parentIssueNumber: number, patch: Partial<Pick<FlowSessionEntry, "status" | "continuationCount" | "goalComplete">>): Promise<FlowSessionEntry | null>;
42
44
  /** 解绑:仅当 sessionID 与当前绑定匹配时删除 entry。 */
43
45
  export declare function unbindSession(projectDir: string, parentIssueNumber: number, sessionID: string): Promise<boolean>;
@@ -2,10 +2,15 @@
2
2
  * Flow → session 轻量索引(替代 session-state.json)。
3
3
  * 路径:.opencode/opencode-cabbage/session-index.json
4
4
  * 作用:parentIssueNumber → sessionID 绑定;双 session 检测(R7)。
5
+ * 并发:全部 read-modify-write 按 projectDir 走 KeyedMutex 串行,防丢失更新。
5
6
  */
6
7
  import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
7
8
  import path from "node:path";
8
9
  import { PLUGIN_ID } from "../util/paths.js";
10
+ import { KeyedMutex } from "./mutex.js";
11
+ const VALID_STATUSES = ["active", "paused", "completed", "cancelled"];
12
+ /** 按 projectDir 串行化索引读写(防并发 bind/update 互覆盖) */
13
+ const indexMutex = new KeyedMutex();
9
14
  export function sessionIndexPath(projectDir) {
10
15
  return path.join(projectDir, ".opencode", PLUGIN_ID, "session-index.json");
11
16
  }
@@ -22,10 +27,10 @@ export async function readIndex(projectDir) {
22
27
  return { flows: {} };
23
28
  }
24
29
  }
25
- /** 原子写:先写临时文件再 rename。 */
30
+ /** 原子写:先写临时文件(PID 后缀防跨进程 tmp 冲突)再 rename。 */
26
31
  export async function writeIndex(projectDir, index) {
27
32
  const target = sessionIndexPath(projectDir);
28
- const tmp = `${target}.tmp`;
33
+ const tmp = `${target}.${process.pid}.tmp`;
29
34
  await mkdir(path.dirname(target), { recursive: true });
30
35
  await writeFile(tmp, JSON.stringify(index, null, 2), "utf8");
31
36
  await rename(tmp, target);
@@ -38,25 +43,27 @@ export function getFlowSession(index, parentIssueNumber) {
38
43
  * 双 session 检测(§10.3):该 flow 已被另一 active session 绑定时拒绝。
39
44
  */
40
45
  export async function bindSession(projectDir, parentIssueNumber, sessionID) {
41
- const index = await readIndex(projectDir);
42
- const key = String(parentIssueNumber);
43
- const existing = index.flows[key];
44
- if (existing && existing.sessionID !== sessionID && existing.status === "active") {
45
- return {
46
- ok: false,
47
- code: "FLOW_SESSION_CONFLICT",
48
- message: `Flow #${parentIssueNumber} is already bound to active session "${existing.sessionID}". Use flow_control takeover with user confirmation to take over.`,
46
+ return indexMutex.runExclusive(projectDir, async () => {
47
+ const index = await readIndex(projectDir);
48
+ const key = String(parentIssueNumber);
49
+ const existing = index.flows[key];
50
+ if (existing && existing.sessionID !== sessionID && existing.status === "active") {
51
+ return {
52
+ ok: false,
53
+ code: "FLOW_SESSION_CONFLICT",
54
+ message: `Flow #${parentIssueNumber} is already bound to active session "${existing.sessionID}". Use flow_control takeover with user confirmation to take over.`,
55
+ };
56
+ }
57
+ const entry = {
58
+ sessionID,
59
+ status: "active",
60
+ continuationCount: existing && existing.sessionID === sessionID ? existing.continuationCount : 0,
61
+ updatedAt: Date.now(),
49
62
  };
50
- }
51
- const entry = {
52
- sessionID,
53
- status: "active",
54
- continuationCount: existing && existing.sessionID === sessionID ? existing.continuationCount : 0,
55
- updatedAt: Date.now(),
56
- };
57
- index.flows[key] = entry;
58
- await writeIndex(projectDir, index);
59
- return { ok: true, entry };
63
+ index.flows[key] = entry;
64
+ await writeIndex(projectDir, index);
65
+ return { ok: true, entry };
66
+ });
60
67
  }
61
68
  /**
62
69
  * 接管绑定:旧 session 置 paused,新 session 绑定 active(R7)。
@@ -64,57 +71,66 @@ export async function bindSession(projectDir, parentIssueNumber, sessionID) {
64
71
  * 调用方还需将旧 session 的 goal status 置 paused(goalClient 层)。
65
72
  */
66
73
  export async function takeoverSession(projectDir, parentIssueNumber, newSessionID, userConfirmed) {
67
- const index = await readIndex(projectDir);
68
- const key = String(parentIssueNumber);
69
- const existing = index.flows[key];
70
- if (existing && existing.sessionID !== newSessionID && existing.status === "active" && !userConfirmed) {
71
- return {
72
- ok: false,
73
- code: "TAKEOVER_NOT_CONFIRMED",
74
- message: `Flow #${parentIssueNumber} is bound to active session "${existing.sessionID}". Takeover requires user confirmation (user_confirmed: true).`,
75
- };
76
- }
77
- if (existing) {
78
- if (existing.sessionID === newSessionID) {
79
- const entry = { ...existing, status: "active", updatedAt: Date.now() };
80
- index.flows[key] = entry;
81
- await writeIndex(projectDir, index);
82
- return { ok: true, entry };
74
+ return indexMutex.runExclusive(projectDir, async () => {
75
+ const index = await readIndex(projectDir);
76
+ const key = String(parentIssueNumber);
77
+ const existing = index.flows[key];
78
+ if (existing && existing.sessionID !== newSessionID && existing.status === "active" && !userConfirmed) {
79
+ return {
80
+ ok: false,
81
+ code: "TAKEOVER_NOT_CONFIRMED",
82
+ message: `Flow #${parentIssueNumber} is bound to active session "${existing.sessionID}". Takeover requires user confirmation (user_confirmed: true).`,
83
+ };
83
84
  }
84
- existing.status = "paused";
85
- existing.updatedAt = Date.now();
86
- }
87
- const entry = {
88
- sessionID: newSessionID,
89
- status: "active",
90
- continuationCount: 0,
91
- updatedAt: Date.now(),
92
- };
93
- index.flows[key] = entry;
94
- await writeIndex(projectDir, index);
95
- return { ok: true, entry };
85
+ if (existing) {
86
+ if (existing.sessionID === newSessionID) {
87
+ const entry = { ...existing, status: "active", updatedAt: Date.now() };
88
+ index.flows[key] = entry;
89
+ await writeIndex(projectDir, index);
90
+ return { ok: true, entry };
91
+ }
92
+ existing.status = "paused";
93
+ existing.updatedAt = Date.now();
94
+ }
95
+ const entry = {
96
+ sessionID: newSessionID,
97
+ status: "active",
98
+ continuationCount: 0,
99
+ updatedAt: Date.now(),
100
+ };
101
+ index.flows[key] = entry;
102
+ await writeIndex(projectDir, index);
103
+ return { ok: true, entry };
104
+ });
96
105
  }
97
- /** 更新已绑定 flow 的状态/计数;flow 未绑定时返回 null 且不创建 entry。 */
106
+ /** 更新已绑定 flow 的状态/计数/goal 完成标记;flow 未绑定时返回 null 且不创建 entry。 */
98
107
  export async function updateFlowSession(projectDir, parentIssueNumber, patch) {
99
- const index = await readIndex(projectDir);
100
- const key = String(parentIssueNumber);
101
- const existing = index.flows[key];
102
- if (!existing)
108
+ if (patch.status !== undefined && !VALID_STATUSES.includes(patch.status)) {
103
109
  return null;
104
- const entry = { ...existing, ...patch, updatedAt: Date.now() };
105
- index.flows[key] = entry;
106
- await writeIndex(projectDir, index);
107
- return entry;
110
+ }
111
+ return indexMutex.runExclusive(projectDir, async () => {
112
+ const index = await readIndex(projectDir);
113
+ const key = String(parentIssueNumber);
114
+ const existing = index.flows[key];
115
+ if (!existing)
116
+ return null;
117
+ const entry = { ...existing, ...patch, updatedAt: Date.now() };
118
+ index.flows[key] = entry;
119
+ await writeIndex(projectDir, index);
120
+ return entry;
121
+ });
108
122
  }
109
123
  /** 解绑:仅当 sessionID 与当前绑定匹配时删除 entry。 */
110
124
  export async function unbindSession(projectDir, parentIssueNumber, sessionID) {
111
- const index = await readIndex(projectDir);
112
- const key = String(parentIssueNumber);
113
- const existing = index.flows[key];
114
- if (!existing || existing.sessionID !== sessionID)
115
- return false;
116
- delete index.flows[key];
117
- await writeIndex(projectDir, index);
118
- return true;
125
+ return indexMutex.runExclusive(projectDir, async () => {
126
+ const index = await readIndex(projectDir);
127
+ const key = String(parentIssueNumber);
128
+ const existing = index.flows[key];
129
+ if (!existing || existing.sessionID !== sessionID)
130
+ return false;
131
+ delete index.flows[key];
132
+ await writeIndex(projectDir, index);
133
+ return true;
134
+ });
119
135
  }
120
136
  //# sourceMappingURL=session-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-index.js","sourceRoot":"","sources":["../../src/kernel/session-index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAe5C,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAA;AAC5E,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAA;QACtG,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvH,OAAO,MAAsB,CAAA;QAC/B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACtB,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,KAAmB;IACtE,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,GAAG,MAAM,MAAM,CAAA;IAC3B,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5D,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB,EAAE,iBAAyB;IAC3E,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAA;AACvD,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,iBAAyB,EACzB,SAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjF,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,SAAS,iBAAiB,wCAAwC,QAAQ,CAAC,SAAS,mEAAmE;SACjK,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAqB;QAC9B,SAAS;QACT,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAChG,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;IACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,iBAAyB,EACzB,YAAoB,EACpB,aAAsB;IAEtB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QACtG,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,SAAS,iBAAiB,gCAAgC,QAAQ,CAAC,SAAS,gEAAgE;SACtJ,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACxC,MAAM,KAAK,GAAqB,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACxF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAC5B,CAAC;QACD,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAA;QAC1B,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACjC,CAAC;IAED,MAAM,KAAK,GAAqB;QAC9B,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;IACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,iBAAyB,EACzB,KAAsE;IAEtE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,KAAK,GAAqB,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IAChF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACxB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,iBAAyB,EACzB,SAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvB,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"session-index.js","sourceRoot":"","sources":["../../src/kernel/session-index.ts"],"names":[],"mappings":"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"}