oh-my-codex 0.7.4 → 0.7.6
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.
- package/README.md +14 -0
- package/dist/cli/__tests__/index.test.js +25 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.d.ts +2 -0
- package/dist/cli/__tests__/ralph.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralph.test.js +64 -0
- package/dist/cli/__tests__/ralph.test.js.map +1 -0
- package/dist/cli/__tests__/team-decompose.test.d.ts +2 -0
- package/dist/cli/__tests__/team-decompose.test.d.ts.map +1 -0
- package/dist/cli/__tests__/team-decompose.test.js +67 -0
- package/dist/cli/__tests__/team-decompose.test.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +25 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ralph.d.ts +12 -0
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +58 -1
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/team.d.ts +18 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +108 -16
- package/dist/cli/team.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +8 -0
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +10 -7
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +11 -7
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +199 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +11 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +266 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +4 -5
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +36 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts +2 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.js +219 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.js.map +1 -0
- package/dist/mcp/bootstrap.d.ts +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +1 -0
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +11 -2
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/team-server.d.ts +24 -0
- package/dist/mcp/team-server.d.ts.map +1 -0
- package/dist/mcp/team-server.js +419 -0
- package/dist/mcp/team-server.js.map +1 -0
- package/dist/notifications/__tests__/verbosity.test.js +35 -0
- package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +4 -2
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +11 -2
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/notifications/types.d.ts +4 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/index.test.js +40 -0
- package/dist/openclaw/__tests__/index.test.js.map +1 -1
- package/dist/openclaw/index.d.ts.map +1 -1
- package/dist/openclaw/index.js +1 -0
- package/dist/openclaw/index.js.map +1 -1
- package/dist/openclaw/types.d.ts +2 -0
- package/dist/openclaw/types.d.ts.map +1 -1
- package/dist/team/__tests__/role-router.test.d.ts +2 -0
- package/dist/team/__tests__/role-router.test.d.ts.map +1 -0
- package/dist/team/__tests__/role-router.test.js +204 -0
- package/dist/team/__tests__/role-router.test.js.map +1 -0
- package/dist/team/__tests__/runtime-cli.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-cli.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-cli.test.js +72 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +194 -5
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +132 -2
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +86 -7
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +38 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +27 -1
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/idle-nudge.d.ts +53 -0
- package/dist/team/idle-nudge.d.ts.map +1 -0
- package/dist/team/idle-nudge.js +140 -0
- package/dist/team/idle-nudge.js.map +1 -0
- package/dist/team/mcp-comm.d.ts +1 -1
- package/dist/team/mcp-comm.d.ts.map +1 -1
- package/dist/team/role-router.d.ts +32 -0
- package/dist/team/role-router.d.ts.map +1 -0
- package/dist/team/role-router.js +137 -0
- package/dist/team/role-router.js.map +1 -0
- package/dist/team/runtime-cli.d.ts +18 -0
- package/dist/team/runtime-cli.d.ts.map +1 -0
- package/dist/team/runtime-cli.js +238 -0
- package/dist/team/runtime-cli.js.map +1 -0
- package/dist/team/runtime.d.ts +4 -0
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +108 -42
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +1 -0
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +41 -20
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state.d.ts +2 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts +42 -2
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +219 -65
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +2 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +29 -5
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.d.ts +5 -1
- package/dist/team/worktree.d.ts.map +1 -1
- package/dist/team/worktree.js +28 -16
- package/dist/team/worktree.js.map +1 -1
- package/package.json +1 -1
- package/scripts/notify-hook/log.js +5 -0
- package/scripts/notify-hook/team-dispatch.js +44 -8
- package/scripts/notify-hook/team-worker.js +26 -4
- package/scripts/notify-hook/tmux-injection.js +45 -4
- package/scripts/notify-hook/visual-verdict.js +109 -0
- package/scripts/notify-hook.js +26 -0
- package/scripts/tmux-hook-engine.js +24 -0
- package/skills/autopilot/SKILL.md +2 -2
- package/skills/doctor/SKILL.md +1 -1
- package/skills/help/SKILL.md +3 -3
- package/skills/skill/SKILL.md +32 -32
- package/skills/team/SKILL.md +43 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-bootstrap.d.ts","sourceRoot":"","sources":["../../src/team/worker-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6B3C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"worker-bootstrap.d.ts","sourceRoot":"","sources":["../../src/team/worker-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6B3C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2C9D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7F;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5E;AAWD;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAGf;AAuED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACvB,GACL,MAAM,CA+DR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,MAAM,CAsBR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBlF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzG"}
|
|
@@ -48,11 +48,21 @@ You are a team worker in team "${teamName}". Your identity and assigned tasks ar
|
|
|
48
48
|
7. Request a claim via the state API (claimTask); do not directly set status to "in_progress" in the task file
|
|
49
49
|
8. Do the work using your tools
|
|
50
50
|
9. On completion: write {"status": "completed", "result": "summary of what was done"} to the task file
|
|
51
|
-
10. Update your status: write {"state": "idle"} to <team_state_root>/team/${teamName}/workers/{your-name}/status.json
|
|
51
|
+
10. Update your status: write {"state": "idle", "updated_at": "<current ISO timestamp>"} to <team_state_root>/team/${teamName}/workers/{your-name}/status.json
|
|
52
52
|
11. Wait for new instructions (the lead will send them via your terminal)
|
|
53
53
|
12. Check your mailbox for messages at <team_state_root>/team/${teamName}/mailbox/{your-name}.json
|
|
54
54
|
13. For team_* MCP tools, do not pass workingDirectory unless the lead explicitly tells you to
|
|
55
55
|
|
|
56
|
+
## Message Protocol
|
|
57
|
+
When calling team_send_message, you MUST always include:
|
|
58
|
+
- from_worker: "<your-worker-name>" (your identity — check your inbox file for your worker name, never omit this)
|
|
59
|
+
- to_worker: "leader-fixed" (to message the leader) or "worker-N" (for peers)
|
|
60
|
+
|
|
61
|
+
Example:
|
|
62
|
+
team_send_message({ team_name: "${teamName}", from_worker: "<your-worker-name>", to_worker: "leader-fixed", body: "Task completed" })
|
|
63
|
+
|
|
64
|
+
CRITICAL: Never omit from_worker. The MCP server cannot auto-detect your identity.
|
|
65
|
+
|
|
56
66
|
## Rules
|
|
57
67
|
- Do NOT edit files outside the paths listed in your task description
|
|
58
68
|
- If you need to modify a shared file, report to the lead by writing to your status file with state "blocked"
|
|
@@ -220,15 +230,22 @@ export function generateInitialInbox(workerName, teamName, agentType, tasks, opt
|
|
|
220
230
|
if (t.blocked_by && t.blocked_by.length > 0) {
|
|
221
231
|
entry += `\n Blocked by: ${t.blocked_by.join(', ')}`;
|
|
222
232
|
}
|
|
233
|
+
if (t.role) {
|
|
234
|
+
entry += `\n Role: ${t.role}`;
|
|
235
|
+
}
|
|
223
236
|
return entry;
|
|
224
237
|
})
|
|
225
238
|
.join('\n');
|
|
226
239
|
const teamStateRoot = options.teamStateRoot || '<team_state_root>';
|
|
227
240
|
const leaderCwd = options.leaderCwd || '<leader_cwd>';
|
|
241
|
+
const displayRole = options.workerRole ?? agentType;
|
|
242
|
+
const specializationSection = options.rolePromptContent
|
|
243
|
+
? `\n## Your Specialization\n\nYou are operating as a **${displayRole}** agent. Follow these behavioral guidelines:\n\n${options.rolePromptContent}\n`
|
|
244
|
+
: '';
|
|
228
245
|
return `# Worker Assignment: ${workerName}
|
|
229
246
|
|
|
230
247
|
**Team:** ${teamName}
|
|
231
|
-
**Role:** ${
|
|
248
|
+
**Role:** ${displayRole}
|
|
232
249
|
**Worker Name:** ${workerName}
|
|
233
250
|
|
|
234
251
|
## Your Assigned Tasks
|
|
@@ -247,10 +264,17 @@ ${taskList}
|
|
|
247
264
|
7. Request a claim via state API (\`claimTask\`) to claim it
|
|
248
265
|
8. Complete the work described in the task
|
|
249
266
|
9. Write \`{"status": "completed", "result": "brief summary"}\` to the task file
|
|
250
|
-
10. Write \`{"state": "idle"}\` to \`${teamStateRoot}/team/${teamName}/workers/${workerName}/status.json\`
|
|
267
|
+
10. Write \`{"state": "idle", "updated_at": "<current ISO timestamp>"}\` to \`${teamStateRoot}/team/${teamName}/workers/${workerName}/status.json\`
|
|
251
268
|
11. Wait for the next instruction from the lead
|
|
252
269
|
12. For team_* MCP tools, do not pass \`workingDirectory\` unless the lead explicitly asks (if resolution fails, use leader cwd: \`${leaderCwd}\`)
|
|
253
270
|
|
|
271
|
+
## Message Protocol
|
|
272
|
+
When using team_send_message MCP tool, ALWAYS include from_worker with YOUR worker name:
|
|
273
|
+
- from_worker: "${workerName}"
|
|
274
|
+
- to_worker: "leader-fixed" (for leader) or "worker-N" (for peers)
|
|
275
|
+
|
|
276
|
+
Example: team_send_message({ team_name: "${teamName}", from_worker: "${workerName}", to_worker: "leader-fixed", body: "ACK: initialized" })
|
|
277
|
+
|
|
254
278
|
${buildVerificationSection('each assigned task')}
|
|
255
279
|
|
|
256
280
|
## Scope Rules
|
|
@@ -258,7 +282,7 @@ ${buildVerificationSection('each assigned task')}
|
|
|
258
282
|
- Do NOT edit files that belong to other workers
|
|
259
283
|
- If you need to modify a shared/common file, write \`{"state": "blocked", "reason": "need to edit shared file X"}\` to your status file and wait
|
|
260
284
|
- Do NOT spawn sub-agents (no \`spawn_agent\`). Complete work in this worker session.
|
|
261
|
-
`;
|
|
285
|
+
${specializationSection}`;
|
|
262
286
|
}
|
|
263
287
|
/**
|
|
264
288
|
* Generate inbox content for a follow-up task assignment.
|
|
@@ -281,7 +305,7 @@ ${taskDescription}
|
|
|
281
305
|
3. Request a claim via state API (\`claimTask\`)
|
|
282
306
|
4. Complete the work
|
|
283
307
|
5. Write \`{"status": "completed", "result": "brief summary"}\` when done
|
|
284
|
-
6. Write \`{"state": "idle"}\` to your status file
|
|
308
|
+
6. Write \`{"state": "idle", "updated_at": "<current ISO timestamp>"}\` to your status file
|
|
285
309
|
|
|
286
310
|
${buildVerificationSection(taskDescription)}
|
|
287
311
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-bootstrap.js","sourceRoot":"","sources":["../../src/team/worker-bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAElG,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AACxD,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAC7D,MAAM,eAAe,GAAG,YAAY,CAAC;AACrC,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,SAAS,wBAAwB,CAAC,eAAuB;IACvD,MAAM,YAAY,GAAG,2BAA2B,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACrF,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO;;;EAGP,YAAY;;EAEZ,OAAO;;;;;CAKR,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,GAAG,kBAAkB;;iCAEG,QAAQ;;;;;;;;;;;gDAWO,QAAQ;;;;;;
|
|
1
|
+
{"version":3,"file":"worker-bootstrap.js","sourceRoot":"","sources":["../../src/team/worker-bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/team/worktree.d.ts
CHANGED
|
@@ -48,7 +48,11 @@ export declare function ensureWorktree(plan: PlannedWorktreeTarget | {
|
|
|
48
48
|
}): EnsureWorktreeResult | {
|
|
49
49
|
enabled: false;
|
|
50
50
|
};
|
|
51
|
+
export interface RollbackWorktreeOptions {
|
|
52
|
+
/** When true, skip `git branch -D` for branches created during provisioning (ralph policy). */
|
|
53
|
+
skipBranchDeletion?: boolean;
|
|
54
|
+
}
|
|
51
55
|
export declare function rollbackProvisionedWorktrees(results: Array<EnsureWorktreeResult | {
|
|
52
56
|
enabled: false;
|
|
53
|
-
}
|
|
57
|
+
}>, options?: RollbackWorktreeOptions): Promise<void>;
|
|
54
58
|
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/team/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/team/worktree.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GACpB;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC7C;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAiID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAmDpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,qBAAqB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAoBvG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG,oBAAoB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAuE1H;AAED,MAAM,WAAW,uBAAuB;IACtC,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,KAAK,CAAC,oBAAoB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC,EACzD,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
package/dist/team/worktree.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { execFileSync, spawnSync } from 'child_process';
|
|
1
|
+
import { execFile as execFileCb, execFileSync, spawnSync } from 'child_process';
|
|
2
2
|
import { existsSync, mkdirSync } from 'fs';
|
|
3
3
|
import { basename, dirname, join, resolve } from 'path';
|
|
4
|
+
import { promisify } from 'util';
|
|
5
|
+
const execFilePromise = promisify(execFileCb);
|
|
4
6
|
const BRANCH_IN_USE_PATTERN = /already checked out|already used by worktree|is already checked out/i;
|
|
5
7
|
function sanitizePathToken(value) {
|
|
6
8
|
const normalized = value
|
|
@@ -238,34 +240,44 @@ export function ensureWorktree(plan) {
|
|
|
238
240
|
createdBranch: Boolean(plan.branchName && !branchAlreadyExisted),
|
|
239
241
|
};
|
|
240
242
|
}
|
|
241
|
-
export function rollbackProvisionedWorktrees(results) {
|
|
243
|
+
export async function rollbackProvisionedWorktrees(results, options = {}) {
|
|
242
244
|
const created = results
|
|
243
245
|
.filter((result) => result.enabled === true && result.created)
|
|
244
246
|
.reverse();
|
|
245
247
|
const errors = [];
|
|
246
248
|
for (const result of created) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
try {
|
|
250
|
+
await execFilePromise('git', ['worktree', 'remove', '--force', result.worktreePath], {
|
|
251
|
+
cwd: result.repoRoot,
|
|
252
|
+
encoding: 'utf-8',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
const stderr = (err.stderr ?? '').trim();
|
|
257
|
+
const exitCode = err.code;
|
|
258
|
+
errors.push(`remove:${result.worktreePath}:${stderr || `exit_${exitCode}`}`);
|
|
254
259
|
continue;
|
|
255
260
|
}
|
|
261
|
+
if (options.skipBranchDeletion)
|
|
262
|
+
continue;
|
|
256
263
|
if (!result.createdBranch || !result.branchName)
|
|
257
264
|
continue;
|
|
258
265
|
const entriesAfterRemove = listWorktrees(result.repoRoot);
|
|
259
266
|
const stillCheckedOut = hasBranchInUse(entriesAfterRemove, result.branchName, result.worktreePath);
|
|
260
267
|
if (stillCheckedOut)
|
|
261
268
|
continue;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
+
try {
|
|
270
|
+
await execFilePromise('git', ['branch', '-D', result.branchName], {
|
|
271
|
+
cwd: result.repoRoot,
|
|
272
|
+
encoding: 'utf-8',
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
if (branchExists(result.repoRoot, result.branchName)) {
|
|
277
|
+
const stderr = (err.stderr ?? '').trim();
|
|
278
|
+
const exitCode = err.code;
|
|
279
|
+
errors.push(`delete_branch:${result.branchName}:${stderr || `exit_${exitCode}`}`);
|
|
280
|
+
}
|
|
269
281
|
}
|
|
270
282
|
}
|
|
271
283
|
if (errors.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/team/worktree.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/team/worktree.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,3 +9,8 @@ export async function logTmuxHookEvent(logsDir, event) {
|
|
|
9
9
|
const file = join(logsDir, `tmux-hook-${new Date().toISOString().split('T')[0]}.jsonl`);
|
|
10
10
|
await appendFile(file, JSON.stringify(event) + '\n').catch(() => {});
|
|
11
11
|
}
|
|
12
|
+
|
|
13
|
+
export async function logNotifyHookEvent(logsDir, event) {
|
|
14
|
+
const file = join(logsDir, `notify-hook-${new Date().toISOString().split('T')[0]}.jsonl`);
|
|
15
|
+
await appendFile(file, JSON.stringify(event) + '\n').catch(() => {});
|
|
16
|
+
}
|
|
@@ -122,8 +122,15 @@ function defaultInjectTarget(request, config) {
|
|
|
122
122
|
const worker = config.workers.find((candidate) => Number(candidate?.index) === request.worker_index);
|
|
123
123
|
if (worker?.pane_id) return { type: 'pane', value: worker.pane_id };
|
|
124
124
|
}
|
|
125
|
+
// Leader-fixed fallback: use config.leader_pane_id when request has no
|
|
126
|
+
// pane_id or worker_index (leader is not a worker). Without this, leader
|
|
127
|
+
// dispatch falls through to the session target which hits the active pane
|
|
128
|
+
// (likely a worker). Fixes #433.
|
|
129
|
+
if (request.to_worker === 'leader-fixed' && config.leader_pane_id) {
|
|
130
|
+
return { type: 'pane', value: config.leader_pane_id };
|
|
131
|
+
}
|
|
125
132
|
if (typeof request.worker_index === 'number' && config.tmux_session) {
|
|
126
|
-
return { type: 'pane', value: `${config.tmux_session}
|
|
133
|
+
return { type: 'pane', value: `${config.tmux_session}.${request.worker_index}` };
|
|
127
134
|
}
|
|
128
135
|
if (config.tmux_session) return { type: 'session', value: config.tmux_session };
|
|
129
136
|
return null;
|
|
@@ -149,6 +156,21 @@ function capturedPaneContainsTrigger(captured, trigger) {
|
|
|
149
156
|
return normalizeCaptureText(captured).includes(normalizeCaptureText(trigger));
|
|
150
157
|
}
|
|
151
158
|
|
|
159
|
+
// Ported from src/team/tmux-session.ts:949-963 — detects active CLI task indicators.
|
|
160
|
+
function paneHasActiveTask(captured) {
|
|
161
|
+
const lines = safeString(captured)
|
|
162
|
+
.split('\n')
|
|
163
|
+
.map((line) => line.replace(/\r/g, '').trim())
|
|
164
|
+
.filter((line) => line.length > 0);
|
|
165
|
+
const tail = lines.slice(-40);
|
|
166
|
+
if (tail.some((line) => /esc to interrupt/i.test(line))) return true;
|
|
167
|
+
if (tail.some((line) => /\bbackground terminal running\b/i.test(line))) return true;
|
|
168
|
+
if (tail.some((line) => /^•\s.+\(.+•\s*esc to interrupt\)$/i.test(line))) return true;
|
|
169
|
+
// Claude active generation lines
|
|
170
|
+
if (tail.some((line) => /^[·✻]\s+[A-Za-z][A-Za-z0-9''-]*(?:\s+[A-Za-z][A-Za-z0-9''-]*){0,3}(?:…|\.{3})$/u.test(line))) return true;
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
|
|
152
174
|
const INJECT_VERIFY_DELAY_MS = 250;
|
|
153
175
|
const INJECT_VERIFY_ROUNDS = 3;
|
|
154
176
|
|
|
@@ -183,16 +205,23 @@ async function injectDispatchRequest(request, config, cwd) {
|
|
|
183
205
|
let preCaptureHasTrigger = false;
|
|
184
206
|
if (attemptCountAtStart >= 1) {
|
|
185
207
|
try {
|
|
186
|
-
|
|
208
|
+
// Narrow capture (8 lines) to scope check to input area, not scrollback output
|
|
209
|
+
const preCapture = await runProcess('tmux', buildCapturePaneArgv(resolution.paneTarget, 8), 2000);
|
|
187
210
|
preCaptureHasTrigger = capturedPaneContainsTrigger(preCapture.stdout, request.trigger_message);
|
|
188
211
|
} catch {
|
|
189
212
|
preCaptureHasTrigger = false;
|
|
190
213
|
}
|
|
191
214
|
}
|
|
192
215
|
|
|
193
|
-
|
|
194
|
-
|
|
216
|
+
// Retype whenever trigger text is NOT in the narrow input area, regardless of attempt count.
|
|
217
|
+
// Pre-0.7.4 bug: 80-line capture matched trigger in scrollback output, falsely skipping retype.
|
|
218
|
+
const shouldTypePrompt = attemptCountAtStart === 0 || !preCaptureHasTrigger;
|
|
195
219
|
if (shouldTypePrompt) {
|
|
220
|
+
if (attemptCountAtStart >= 1) {
|
|
221
|
+
// Clear stale text in input buffer before retyping (mirrors sync path tmux-session.ts:1270)
|
|
222
|
+
await runProcess('tmux', ['send-keys', '-t', resolution.paneTarget, 'C-u'], 1000).catch(() => {});
|
|
223
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
224
|
+
}
|
|
196
225
|
await runProcess('tmux', argv.typeArgv, 3000);
|
|
197
226
|
}
|
|
198
227
|
|
|
@@ -203,18 +232,25 @@ async function injectDispatchRequest(request, config, cwd) {
|
|
|
203
232
|
// Post-injection verification: confirm the trigger text was consumed.
|
|
204
233
|
// Fixes #391: without this, dispatch marks 'notified' even when the worker
|
|
205
234
|
// pane is sitting on an unsent draft (C-m was not effectively applied).
|
|
206
|
-
const
|
|
235
|
+
const verifyNarrowArgv = buildCapturePaneArgv(resolution.paneTarget, 8);
|
|
236
|
+
const verifyWideArgv = buildCapturePaneArgv(resolution.paneTarget);
|
|
207
237
|
for (let round = 0; round < INJECT_VERIFY_ROUNDS; round++) {
|
|
208
238
|
await new Promise((r) => setTimeout(r, INJECT_VERIFY_DELAY_MS));
|
|
209
239
|
try {
|
|
210
|
-
|
|
211
|
-
|
|
240
|
+
// Primary: trigger text no longer in narrow input area
|
|
241
|
+
const narrowCap = await runProcess('tmux', verifyNarrowArgv, 2000);
|
|
242
|
+
if (!capturedPaneContainsTrigger(narrowCap.stdout, request.trigger_message)) {
|
|
212
243
|
return { ok: true, reason: 'tmux_send_keys_confirmed', pane: resolution.paneTarget };
|
|
213
244
|
}
|
|
245
|
+
// Secondary: worker is actively processing (mirrors sync path tmux-session.ts:1292-1294)
|
|
246
|
+
const wideCap = await runProcess('tmux', verifyWideArgv, 2000);
|
|
247
|
+
if (paneHasActiveTask(wideCap.stdout)) {
|
|
248
|
+
return { ok: true, reason: 'tmux_send_keys_confirmed_active_task', pane: resolution.paneTarget };
|
|
249
|
+
}
|
|
214
250
|
} catch {
|
|
215
251
|
// capture failed; fall through to retry C-m
|
|
216
252
|
}
|
|
217
|
-
// Draft still visible — retry C-m
|
|
253
|
+
// Draft still visible and no active task — retry C-m
|
|
218
254
|
for (const submit of argv.submitArgv) {
|
|
219
255
|
await runProcess('tmux', submit, 3000).catch(() => {});
|
|
220
256
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Team worker: heartbeat, idle detection, and leader notification.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { readFile, writeFile, mkdir, appendFile, rename } from 'fs/promises';
|
|
5
|
+
import { readFile, writeFile, mkdir, appendFile, rename, stat } from 'fs/promises';
|
|
6
6
|
import { existsSync } from 'fs';
|
|
7
7
|
import { join, resolve as resolvePath } from 'path';
|
|
8
8
|
import { asNumber, safeString } from './utils.js';
|
|
@@ -127,7 +127,18 @@ async function readWorkerStatusSnapshot(stateDir, teamName, workerName, nowMs =
|
|
|
127
127
|
const parsed = JSON.parse(raw);
|
|
128
128
|
const state = parsed && typeof parsed.state === 'string' ? parsed.state : 'unknown';
|
|
129
129
|
const updatedAt = parsed && typeof parsed.updated_at === 'string' ? parsed.updated_at : null;
|
|
130
|
-
|
|
130
|
+
let fresh = false;
|
|
131
|
+
if (updatedAt) {
|
|
132
|
+
fresh = isFreshIso(updatedAt, resolveStatusStaleMs(), nowMs);
|
|
133
|
+
} else {
|
|
134
|
+
// Fallback: if worker omits updated_at, use file mtime as staleness proxy
|
|
135
|
+
try {
|
|
136
|
+
const st = await stat(statusPath);
|
|
137
|
+
fresh = (nowMs - st.mtimeMs) <= resolveStatusStaleMs();
|
|
138
|
+
} catch {
|
|
139
|
+
fresh = false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
131
142
|
return { state, updated_at: updatedAt, fresh };
|
|
132
143
|
} catch {
|
|
133
144
|
return { state: 'unknown', updated_at: null, fresh: false };
|
|
@@ -314,7 +325,18 @@ export async function maybeNotifyLeaderWorkerIdle({ cwd, stateDir, logsDir, pars
|
|
|
314
325
|
if (parsed && typeof parsed.state === 'string') currentState = parsed.state;
|
|
315
326
|
if (parsed && typeof parsed.current_task_id === 'string') currentTaskId = parsed.current_task_id;
|
|
316
327
|
if (parsed && typeof parsed.reason === 'string') currentReason = parsed.reason;
|
|
317
|
-
|
|
328
|
+
const updatedAtField = parsed && typeof parsed.updated_at === 'string' ? parsed.updated_at : null;
|
|
329
|
+
if (updatedAtField) {
|
|
330
|
+
statusFresh = isFreshIso(updatedAtField, resolveStatusStaleMs(), nowMs);
|
|
331
|
+
} else {
|
|
332
|
+
// Fallback: use file mtime when worker omits updated_at
|
|
333
|
+
try {
|
|
334
|
+
const st = await stat(statusPath);
|
|
335
|
+
statusFresh = (nowMs - st.mtimeMs) <= resolveStatusStaleMs();
|
|
336
|
+
} catch {
|
|
337
|
+
statusFresh = false;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
318
340
|
}
|
|
319
341
|
} catch { /* ignore */ }
|
|
320
342
|
|
|
@@ -339,7 +361,7 @@ export async function maybeNotifyLeaderWorkerIdle({ cwd, stateDir, logsDir, pars
|
|
|
339
361
|
// Only fire on working->idle transition (non-idle to idle)
|
|
340
362
|
if (currentState !== 'idle') return;
|
|
341
363
|
if (!statusFresh) return;
|
|
342
|
-
if (prevState === 'idle' || prevState === 'done'
|
|
364
|
+
if (prevState === 'idle' || prevState === 'done') return;
|
|
343
365
|
|
|
344
366
|
const heartbeat = await readWorkerHeartbeatSnapshot(stateDir, teamName, workerName, nowMs);
|
|
345
367
|
if (!heartbeat.fresh) return;
|
|
@@ -22,6 +22,8 @@ import {
|
|
|
22
22
|
evaluateInjectionGuards,
|
|
23
23
|
buildSendKeysArgv,
|
|
24
24
|
buildPaneInModeArgv,
|
|
25
|
+
buildPaneCurrentCommandArgv,
|
|
26
|
+
isPaneRunningShell,
|
|
25
27
|
} from '../tmux-hook-engine.js';
|
|
26
28
|
|
|
27
29
|
export async function resolveSessionToPane(sessionName) {
|
|
@@ -188,9 +190,14 @@ export async function handleTmuxInjection({
|
|
|
188
190
|
|
|
189
191
|
const activeModes = [];
|
|
190
192
|
const activeModeStates = {};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
193
|
+
const scannedStateDirs = new Set();
|
|
194
|
+
const payloadSessionId = safeString(payload.session_id || payload['session-id'] || '');
|
|
195
|
+
const scanActiveModeStateDirs = async (dirs, preserveExisting = false) => {
|
|
196
|
+
for (const scopedDir of dirs) {
|
|
197
|
+
const resolvedScopedDir = resolvePath(scopedDir);
|
|
198
|
+
if (scannedStateDirs.has(resolvedScopedDir)) continue;
|
|
199
|
+
scannedStateDirs.add(resolvedScopedDir);
|
|
200
|
+
|
|
194
201
|
const files = await readdir(scopedDir).catch(() => []);
|
|
195
202
|
for (const file of files) {
|
|
196
203
|
if (!file.endsWith('-state.json') || file === 'tmux-hook-state.json') continue;
|
|
@@ -199,10 +206,20 @@ export async function handleTmuxInjection({
|
|
|
199
206
|
if (parsed && parsed.active) {
|
|
200
207
|
const modeName = file.replace('-state.json', '');
|
|
201
208
|
activeModes.push(modeName);
|
|
202
|
-
activeModeStates[modeName]
|
|
209
|
+
if (!preserveExisting || !activeModeStates[modeName]) {
|
|
210
|
+
activeModeStates[modeName] = parsed;
|
|
211
|
+
}
|
|
203
212
|
}
|
|
204
213
|
}
|
|
205
214
|
}
|
|
215
|
+
};
|
|
216
|
+
try {
|
|
217
|
+
const scopedDirs = await getScopedStateDirsForCurrentSession(stateDir, payloadSessionId);
|
|
218
|
+
await scanActiveModeStateDirs(scopedDirs);
|
|
219
|
+
|
|
220
|
+
if (!pickActiveMode(activeModes, config.allowed_modes) && !scannedStateDirs.has(resolvePath(stateDir))) {
|
|
221
|
+
await scanActiveModeStateDirs([stateDir], true);
|
|
222
|
+
}
|
|
206
223
|
} catch {
|
|
207
224
|
// Non-fatal
|
|
208
225
|
}
|
|
@@ -356,6 +373,30 @@ export async function handleTmuxInjection({
|
|
|
356
373
|
}
|
|
357
374
|
}
|
|
358
375
|
|
|
376
|
+
// Shell-detection guard: skip injection when the agent process has exited
|
|
377
|
+
// and the pane has returned to an interactive shell (zsh, bash, etc.).
|
|
378
|
+
// Sending the inject marker to a shell causes glob errors like
|
|
379
|
+
// "zsh: no matches found: [OMX_TMUX_INJECT]". See #441.
|
|
380
|
+
try {
|
|
381
|
+
const cmdResult = await runProcess('tmux', buildPaneCurrentCommandArgv(paneTarget), 1000);
|
|
382
|
+
const currentCmd = safeString(cmdResult.stdout).trim();
|
|
383
|
+
if (isPaneRunningShell(currentCmd)) {
|
|
384
|
+
state.last_reason = 'agent_not_running';
|
|
385
|
+
state.last_event_at = nowIso;
|
|
386
|
+
await writeFile(hookStatePath, JSON.stringify(state, null, 2)).catch(() => {});
|
|
387
|
+
await logTmuxHookEvent(logsDir, {
|
|
388
|
+
...baseLog,
|
|
389
|
+
event: 'injection_skipped',
|
|
390
|
+
reason: 'agent_not_running',
|
|
391
|
+
pane_target: paneTarget,
|
|
392
|
+
pane_current_command: currentCmd,
|
|
393
|
+
});
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
} catch {
|
|
397
|
+
// Non-fatal: if querying pane command fails, proceed with injection.
|
|
398
|
+
}
|
|
399
|
+
|
|
359
400
|
if (config.dry_run) {
|
|
360
401
|
updateStateForAttempt(false, 'dry_run');
|
|
361
402
|
await writeFile(hookStatePath, JSON.stringify(state, null, 2)).catch(() => {});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual verdict extraction and persistence.
|
|
3
|
+
*
|
|
4
|
+
* Parses PASS / FAIL / INCOMPLETE verdicts from verifier agent output
|
|
5
|
+
* and persists them to stateDir/verdicts/latest-verdict.json.
|
|
6
|
+
*
|
|
7
|
+
* All failures are logged with structured context (issue #421) rather
|
|
8
|
+
* than silently swallowed.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { logNotifyHookEvent } from './log.js';
|
|
14
|
+
import { safeString } from './utils.js';
|
|
15
|
+
|
|
16
|
+
/** Structured patterns that reliably indicate a verification verdict. */
|
|
17
|
+
const VERDICT_PATTERNS = [
|
|
18
|
+
/\*\*Status\*\*:\s*(PASS|FAIL|INCOMPLETE)/i,
|
|
19
|
+
/\bVerdict:\s*(PASS|FAIL|INCOMPLETE)\b/i,
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Heuristic: output contains verdict-like markers but no structured match.
|
|
24
|
+
* Used to emit a debug-level log for candidate parse failures.
|
|
25
|
+
*/
|
|
26
|
+
const VERDICT_CANDIDATE_RE = /(?:\*\*Status\*\*\s*:|Verdict\s*:)/i;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Attempt to extract a structured verdict from free-form text.
|
|
30
|
+
* Returns `{ verdict, raw }` on success, `null` otherwise.
|
|
31
|
+
*/
|
|
32
|
+
export function parseVisualVerdict(text) {
|
|
33
|
+
if (!text || typeof text !== 'string') return null;
|
|
34
|
+
for (const pattern of VERDICT_PATTERNS) {
|
|
35
|
+
const match = text.match(pattern);
|
|
36
|
+
if (match) {
|
|
37
|
+
return { verdict: match[1].toUpperCase(), raw: match[0] };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Parse a visual verdict from the agent payload output and persist it.
|
|
45
|
+
*
|
|
46
|
+
* Logs structured warnings/debug events instead of silently swallowing
|
|
47
|
+
* errors (addresses issue #421):
|
|
48
|
+
* - debug: candidate markers found but no structured verdict matched
|
|
49
|
+
* - warn: verdict file write failure (with turn/session context)
|
|
50
|
+
*
|
|
51
|
+
* Module import failure is handled by the caller in notify-hook.js.
|
|
52
|
+
*/
|
|
53
|
+
export async function maybePersistVisualVerdict({ payload, stateDir, logsDir, sessionId, turnId }) {
|
|
54
|
+
const output = safeString(
|
|
55
|
+
payload?.['last-assistant-message'] || payload?.last_assistant_message || '',
|
|
56
|
+
);
|
|
57
|
+
if (!output) return;
|
|
58
|
+
|
|
59
|
+
const parsed = parseVisualVerdict(output);
|
|
60
|
+
|
|
61
|
+
if (!parsed) {
|
|
62
|
+
// Debug level: verdict-like markers present but no structured match
|
|
63
|
+
if (VERDICT_CANDIDATE_RE.test(output)) {
|
|
64
|
+
await logNotifyHookEvent(logsDir, {
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
level: 'debug',
|
|
67
|
+
type: 'visual_verdict_parse_no_match',
|
|
68
|
+
session_id: sessionId,
|
|
69
|
+
turn_id: turnId,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Persist the extracted verdict
|
|
76
|
+
try {
|
|
77
|
+
const verdictDir = join(stateDir, 'verdicts');
|
|
78
|
+
await mkdir(verdictDir, { recursive: true });
|
|
79
|
+
|
|
80
|
+
const entry = {
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
verdict: parsed.verdict,
|
|
83
|
+
raw_match: parsed.raw,
|
|
84
|
+
session_id: sessionId,
|
|
85
|
+
turn_id: turnId,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
await writeFile(
|
|
89
|
+
join(verdictDir, 'latest-verdict.json'),
|
|
90
|
+
JSON.stringify(entry, null, 2),
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
await logNotifyHookEvent(logsDir, {
|
|
94
|
+
...entry,
|
|
95
|
+
level: 'info',
|
|
96
|
+
type: 'visual_verdict_persisted',
|
|
97
|
+
});
|
|
98
|
+
} catch (err) {
|
|
99
|
+
// Warn level: persistence write failure with turn/session context
|
|
100
|
+
await logNotifyHookEvent(logsDir, {
|
|
101
|
+
timestamp: new Date().toISOString(),
|
|
102
|
+
level: 'warn',
|
|
103
|
+
type: 'visual_verdict_write_failure',
|
|
104
|
+
error: err?.message || String(err),
|
|
105
|
+
session_id: sessionId,
|
|
106
|
+
turn_id: turnId,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|