oh-my-codex 0.18.5 → 0.18.7
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/Cargo.lock +6 -6
- package/Cargo.toml +1 -1
- package/README.md +56 -7
- package/dist/agents/__tests__/definitions.test.js +11 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +14 -5
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts +2 -0
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +4 -1
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.js +2 -2
- package/dist/agents/native-config.js.map +1 -1
- package/dist/autopilot/__tests__/fsm.test.d.ts +2 -0
- package/dist/autopilot/__tests__/fsm.test.d.ts.map +1 -0
- package/dist/autopilot/__tests__/fsm.test.js +75 -0
- package/dist/autopilot/__tests__/fsm.test.js.map +1 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.d.ts +2 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.d.ts.map +1 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.js +79 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -0
- package/dist/autopilot/deep-interview-gate.d.ts +18 -0
- package/dist/autopilot/deep-interview-gate.d.ts.map +1 -0
- package/dist/autopilot/deep-interview-gate.js +256 -0
- package/dist/autopilot/deep-interview-gate.js.map +1 -0
- package/dist/autopilot/fsm.d.ts +13 -0
- package/dist/autopilot/fsm.d.ts.map +1 -0
- package/dist/autopilot/fsm.js +70 -0
- package/dist/autopilot/fsm.js.map +1 -0
- package/dist/autopilot/ralplan-gate.d.ts +17 -0
- package/dist/autopilot/ralplan-gate.d.ts.map +1 -0
- package/dist/autopilot/ralplan-gate.js +61 -0
- package/dist/autopilot/ralplan-gate.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +24 -4
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +175 -6
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +100 -0
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +18 -0
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +2 -2
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/index.d.ts +3 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +191 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/question.d.ts.map +1 -1
- package/dist/cli/question.js +36 -5
- package/dist/cli/question.js.map +1 -1
- package/dist/config/__tests__/deep-interview.test.js +7 -6
- package/dist/config/__tests__/deep-interview.test.js.map +1 -1
- package/dist/config/deep-interview.d.ts.map +1 -1
- package/dist/config/deep-interview.js +14 -4
- package/dist/config/deep-interview.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +8 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +10 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +649 -11
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +63 -0
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/session.test.js +25 -0
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/deep-interview-config-instruction.js +1 -1
- package/dist/hooks/deep-interview-config-instruction.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +1 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +171 -21
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +1 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/session.d.ts +2 -0
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +13 -5
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/authority.test.js +35 -0
- package/dist/hud/__tests__/authority.test.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +320 -3
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +117 -14
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +117 -8
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +80 -0
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +134 -1
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/authority.d.ts.map +1 -1
- package/dist/hud/authority.js +13 -2
- package/dist/hud/authority.js.map +1 -1
- package/dist/hud/colors.d.ts +1 -0
- package/dist/hud/colors.d.ts.map +1 -1
- package/dist/hud/colors.js +4 -0
- package/dist/hud/colors.js.map +1 -1
- package/dist/hud/constants.d.ts +3 -2
- package/dist/hud/constants.d.ts.map +1 -1
- package/dist/hud/constants.js +3 -2
- package/dist/hud/constants.js.map +1 -1
- package/dist/hud/index.d.ts +20 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +99 -18
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts +2 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +6 -3
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts +1 -0
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +69 -17
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +16 -1
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts +2 -0
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +39 -2
- package/dist/hud/tmux.js.map +1 -1
- package/dist/mcp/__tests__/hermes-bridge.test.js +203 -7
- package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +13 -1
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/hermes-bridge.d.ts +12 -2
- package/dist/mcp/hermes-bridge.d.ts.map +1 -1
- package/dist/mcp/hermes-bridge.js +83 -9
- package/dist/mcp/hermes-bridge.js.map +1 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.js +7 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +130 -0
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.js +1 -1
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/ralplan.d.ts +1 -0
- package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
- package/dist/pipeline/stages/ralplan.js +14 -5
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/question/__tests__/deep-interview.test.js +160 -2
- package/dist/question/__tests__/deep-interview.test.js.map +1 -1
- package/dist/question/__tests__/policy.test.js +63 -3
- package/dist/question/__tests__/policy.test.js.map +1 -1
- package/dist/question/__tests__/renderer.test.js +191 -2
- package/dist/question/__tests__/renderer.test.js.map +1 -1
- package/dist/question/__tests__/state.test.js +94 -3
- package/dist/question/__tests__/state.test.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +4 -0
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/autopilot-wait.d.ts +12 -2
- package/dist/question/autopilot-wait.d.ts.map +1 -1
- package/dist/question/autopilot-wait.js +158 -47
- package/dist/question/autopilot-wait.js.map +1 -1
- package/dist/question/deep-interview.d.ts.map +1 -1
- package/dist/question/deep-interview.js +22 -6
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/question/policy.d.ts.map +1 -1
- package/dist/question/policy.js +2 -5
- package/dist/question/policy.js.map +1 -1
- package/dist/question/renderer.d.ts +12 -0
- package/dist/question/renderer.d.ts.map +1 -1
- package/dist/question/renderer.js +87 -3
- package/dist/question/renderer.js.map +1 -1
- package/dist/question/state.d.ts +8 -1
- package/dist/question/state.d.ts.map +1 -1
- package/dist/question/state.js +54 -14
- package/dist/question/state.js.map +1 -1
- package/dist/question/types.d.ts +1 -1
- package/dist/question/types.d.ts.map +1 -1
- package/dist/question/ui.d.ts +1 -0
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +1 -0
- package/dist/question/ui.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +191 -0
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +9 -1
- package/dist/ralplan/consensus-gate.d.ts.map +1 -1
- package/dist/ralplan/consensus-gate.js +84 -2
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/ralplan/runtime.d.ts +9 -0
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +32 -11
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +1487 -34
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/check-version-sync.js +8 -4
- package/dist/scripts/check-version-sync.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +356 -38
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +79 -1
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/hook-payload-guard.d.ts +9 -0
- package/dist/scripts/hook-payload-guard.d.ts.map +1 -0
- package/dist/scripts/hook-payload-guard.js +111 -0
- package/dist/scripts/hook-payload-guard.js.map +1 -0
- package/dist/scripts/notify-fallback-watcher.js +8 -1
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/__tests__/payload-guard.test.d.ts +2 -0
- package/dist/scripts/notify-hook/__tests__/payload-guard.test.d.ts.map +1 -0
- package/dist/scripts/notify-hook/__tests__/payload-guard.test.js +39 -0
- package/dist/scripts/notify-hook/__tests__/payload-guard.test.js.map +1 -0
- package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.js +234 -86
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
- package/dist/scripts/notify-hook.js +11 -2
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +1012 -1
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +59 -1
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/__tests__/workflow-transition.test.js +73 -7
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +102 -0
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +33 -3
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.d.ts +6 -0
- package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +28 -1
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +10 -3
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/__tests__/tracker.test.js +139 -0
- package/dist/subagents/__tests__/tracker.test.js.map +1 -1
- package/dist/subagents/tracker.d.ts +3 -0
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +41 -4
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/coordination-protocol.test.d.ts +2 -0
- package/dist/team/__tests__/coordination-protocol.test.d.ts.map +1 -0
- package/dist/team/__tests__/coordination-protocol.test.js +173 -0
- package/dist/team/__tests__/coordination-protocol.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +51 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +83 -0
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +45 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +84 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/coordination-protocol.d.ts +14 -0
- package/dist/team/coordination-protocol.d.ts.map +1 -0
- package/dist/team/coordination-protocol.js +244 -0
- package/dist/team/coordination-protocol.js.map +1 -0
- package/dist/team/runtime.d.ts +1 -0
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +19 -3
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state/tasks.d.ts.map +1 -1
- package/dist/team/state/tasks.js +24 -0
- package/dist/team/state/tasks.js.map +1 -1
- package/dist/team/state/types.d.ts +21 -1
- package/dist/team/state/types.d.ts.map +1 -1
- package/dist/team/state/types.js.map +1 -1
- package/dist/team/state.d.ts +17 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +12 -5
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +1 -1
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +19 -1
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +63 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/utils/__tests__/agents-model-table.test.js +4 -2
- package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
- package/dist/utils/agents-model-table.d.ts.map +1 -1
- package/dist/utils/agents-model-table.js +3 -0
- package/dist/utils/agents-model-table.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +10 -5
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +9 -4
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +12 -0
- package/plugins/oh-my-codex/skills/team/SKILL.md +16 -0
- package/plugins/oh-my-codex/skills/worker/SKILL.md +14 -0
- package/skills/autopilot/SKILL.md +10 -5
- package/skills/deep-interview/SKILL.md +9 -4
- package/skills/ralplan/SKILL.md +12 -0
- package/skills/team/SKILL.md +16 -0
- package/skills/worker/SKILL.md +14 -0
- package/src/scripts/__tests__/codex-native-hook.test.ts +2202 -523
- package/src/scripts/check-version-sync.ts +8 -4
- package/src/scripts/codex-native-hook.ts +444 -36
- package/src/scripts/codex-native-pre-post.ts +80 -0
- package/src/scripts/hook-payload-guard.ts +113 -0
- package/src/scripts/notify-fallback-watcher.ts +8 -1
- package/src/scripts/notify-hook/__tests__/payload-guard.test.ts +41 -0
- package/src/scripts/notify-hook/team-worker-stop.ts +193 -52
- package/src/scripts/notify-hook.ts +14 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,iCAAiC,SAAU,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,2BAA2B,IAAI,qBAAqB,CAKnE;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAmEpF;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ3F;AAED,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3G;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,uBAAuB,GAC7B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,15 @@ export function createSubagentTrackingState() {
|
|
|
13
13
|
sessions: {},
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
export function isTrustedSubagentThread(session, threadId) {
|
|
17
|
+
const normalizedThreadId = threadId.trim();
|
|
18
|
+
if (!session || !normalizedThreadId)
|
|
19
|
+
return false;
|
|
20
|
+
const leaderThreadId = session.leader_thread_id?.trim();
|
|
21
|
+
if (leaderThreadId && leaderThreadId === normalizedThreadId)
|
|
22
|
+
return false;
|
|
23
|
+
return session.threads[normalizedThreadId]?.kind === 'subagent';
|
|
24
|
+
}
|
|
16
25
|
export function normalizeSubagentTrackingState(input) {
|
|
17
26
|
const base = createSubagentTrackingState();
|
|
18
27
|
if (!input || typeof input !== 'object')
|
|
@@ -111,11 +120,39 @@ export function recordSubagentTurn(state, input) {
|
|
|
111
120
|
updated_at: timestamp,
|
|
112
121
|
threads: {},
|
|
113
122
|
};
|
|
114
|
-
const
|
|
123
|
+
const requestedKind = input.kind === 'leader' || input.kind === 'subagent' ? input.kind : undefined;
|
|
124
|
+
const requestedLeaderThreadId = input.leaderThreadId?.trim();
|
|
115
125
|
const existingThread = existingSession.threads[threadId];
|
|
126
|
+
const existingKind = existingThread?.kind === 'leader' || existingThread?.kind === 'subagent'
|
|
127
|
+
? existingThread.kind
|
|
128
|
+
: undefined;
|
|
129
|
+
const existingLeaderThreadId = existingSession.leader_thread_id?.trim();
|
|
130
|
+
// `leader_thread_id` is the session's top-level leader boundary. A native
|
|
131
|
+
// subagent can itself be the immediate parent of a nested native role, but
|
|
132
|
+
// that must not reclassify known subagent evidence as the session leader.
|
|
133
|
+
const requestedLeaderThread = requestedLeaderThreadId
|
|
134
|
+
? existingSession.threads[requestedLeaderThreadId]
|
|
135
|
+
: undefined;
|
|
136
|
+
const requestedLeaderWouldReclassifySubagent = requestedLeaderThread?.kind === 'subagent';
|
|
137
|
+
const requestedSessionLeaderThreadId = requestedLeaderWouldReclassifySubagent
|
|
138
|
+
? undefined
|
|
139
|
+
: requestedLeaderThreadId;
|
|
140
|
+
const preserveExistingSubagent = existingKind === 'subagent' && requestedKind !== 'subagent';
|
|
141
|
+
const preserveKnownLeader = requestedKind === 'subagent'
|
|
142
|
+
&& (existingKind === 'leader' || existingLeaderThreadId === threadId);
|
|
143
|
+
const leaderThreadId = preserveKnownLeader
|
|
144
|
+
? existingLeaderThreadId || threadId
|
|
145
|
+
: existingLeaderThreadId
|
|
146
|
+
|| requestedSessionLeaderThreadId
|
|
147
|
+
|| (requestedKind === 'subagent' || preserveExistingSubagent ? undefined : threadId);
|
|
148
|
+
const kind = preserveKnownLeader
|
|
149
|
+
? 'leader'
|
|
150
|
+
: requestedKind === 'leader' && existingKind === 'subagent'
|
|
151
|
+
? 'subagent'
|
|
152
|
+
: requestedKind ?? (threadId === leaderThreadId ? 'leader' : existingKind ?? 'subagent');
|
|
116
153
|
const nextThread = {
|
|
117
154
|
thread_id: threadId,
|
|
118
|
-
kind
|
|
155
|
+
kind,
|
|
119
156
|
first_seen_at: existingThread?.first_seen_at ?? timestamp,
|
|
120
157
|
last_seen_at: timestamp,
|
|
121
158
|
turn_count: (existingThread?.turn_count ?? 0) + 1,
|
|
@@ -141,7 +178,7 @@ export function recordSubagentTurn(state, input) {
|
|
|
141
178
|
}
|
|
142
179
|
normalized.sessions[sessionId] = {
|
|
143
180
|
session_id: sessionId,
|
|
144
|
-
leader_thread_id: leaderThreadId,
|
|
181
|
+
...(leaderThreadId ? { leader_thread_id: leaderThreadId } : {}),
|
|
145
182
|
updated_at: timestamp,
|
|
146
183
|
threads,
|
|
147
184
|
};
|
|
@@ -165,7 +202,7 @@ export function summarizeSubagentSession(state, sessionId, options = {}) {
|
|
|
165
202
|
? options.now.getTime()
|
|
166
203
|
: Date.now();
|
|
167
204
|
const allThreadIds = Object.keys(session.threads).sort();
|
|
168
|
-
const allSubagentThreadIds = allThreadIds.filter((threadId) => session
|
|
205
|
+
const allSubagentThreadIds = allThreadIds.filter((threadId) => isTrustedSubagentThread(session, threadId));
|
|
169
206
|
const activeSubagentThreadIds = allSubagentThreadIds.filter((threadId) => {
|
|
170
207
|
const thread = session.threads[threadId];
|
|
171
208
|
if (!thread)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination-protocol.test.d.ts","sourceRoot":"","sources":["../../../src/team/__tests__/coordination-protocol.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { normalizeTeamTaskCoordinationPlanForStorage, synthesizeCoordinationPlan, synthesizeCoordinationPlans, } from "../coordination-protocol.js";
|
|
4
|
+
function task(overrides) {
|
|
5
|
+
return {
|
|
6
|
+
id: "1",
|
|
7
|
+
subject: "subject",
|
|
8
|
+
description: "description",
|
|
9
|
+
status: "pending",
|
|
10
|
+
created_at: new Date(0).toISOString(),
|
|
11
|
+
...overrides,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
describe("team coordination protocol gating", () => {
|
|
15
|
+
it("keeps explicit independent fan-out lightweight", () => {
|
|
16
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
17
|
+
subject: "Independent docs sweep",
|
|
18
|
+
description: "Fan-out read-only sweep: each worker checks one separate doc, no shared files and no dependencies.",
|
|
19
|
+
}));
|
|
20
|
+
assert.equal(plan.mode, "lightweight");
|
|
21
|
+
assert.ok(plan.activation_reasons.includes("explicit_independent_fanout"));
|
|
22
|
+
assert.equal(plan.required_mechanisms, undefined);
|
|
23
|
+
});
|
|
24
|
+
it("lets singular no-shared-file/no-dependency wording stay lightweight", () => {
|
|
25
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
26
|
+
subject: "Fixture lane",
|
|
27
|
+
description: "No shared file/no dependency lane.",
|
|
28
|
+
}));
|
|
29
|
+
assert.equal(plan.mode, "lightweight");
|
|
30
|
+
assert.ok(plan.activation_reasons.includes("explicit_independent_fanout"));
|
|
31
|
+
});
|
|
32
|
+
it("lets hyphenated no-shared-file/no-dependency wording stay lightweight", () => {
|
|
33
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
34
|
+
subject: "Fixture lane",
|
|
35
|
+
description: "No-shared-file/no-dependency lane.",
|
|
36
|
+
}));
|
|
37
|
+
assert.equal(plan.mode, "lightweight");
|
|
38
|
+
assert.ok(plan.activation_reasons.includes("explicit_independent_fanout"));
|
|
39
|
+
});
|
|
40
|
+
it("keeps simple narrow tasks lightweight", () => {
|
|
41
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
42
|
+
subject: "Fix typo",
|
|
43
|
+
description: "Fix one typo in README.md",
|
|
44
|
+
}));
|
|
45
|
+
assert.equal(plan.mode, "lightweight");
|
|
46
|
+
assert.ok(plan.activation_reasons.includes("simple_narrow_scope"));
|
|
47
|
+
});
|
|
48
|
+
it("activates coordinated protocol for dependency and handoff work", () => {
|
|
49
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
50
|
+
subject: "Integrate parser and verification lanes",
|
|
51
|
+
description: "Coordinate handoff across shared parser contract and e2e verification.",
|
|
52
|
+
depends_on: ["1"],
|
|
53
|
+
}));
|
|
54
|
+
assert.equal(plan.mode, "coordinated");
|
|
55
|
+
assert.ok(plan.activation_reasons.includes("task_dependencies"));
|
|
56
|
+
assert.ok(plan.activation_reasons.includes("cross_boundary_or_handoff_language"));
|
|
57
|
+
assert.deepEqual(plan.required_mechanisms, [
|
|
58
|
+
"shared_mental_model",
|
|
59
|
+
"closed_loop_communication",
|
|
60
|
+
"mutual_performance_monitoring",
|
|
61
|
+
"backup_behavior",
|
|
62
|
+
"adaptability_checkpoint",
|
|
63
|
+
"team_orientation",
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
it("activates coordinated protocol for overlapping file paths across sibling tasks", () => {
|
|
67
|
+
const plans = synthesizeCoordinationPlans([
|
|
68
|
+
task({
|
|
69
|
+
subject: "Update parser",
|
|
70
|
+
description: "Implement parser change",
|
|
71
|
+
filePaths: ["src/parser.ts"],
|
|
72
|
+
}),
|
|
73
|
+
task({
|
|
74
|
+
subject: "Update parser tests",
|
|
75
|
+
description: "Add tests",
|
|
76
|
+
filePaths: ["src/parser.ts"],
|
|
77
|
+
}),
|
|
78
|
+
task({
|
|
79
|
+
subject: "Independent docs",
|
|
80
|
+
description: "Fan-out read-only doc check",
|
|
81
|
+
filePaths: ["docs/usage.md"],
|
|
82
|
+
}),
|
|
83
|
+
]);
|
|
84
|
+
assert.equal(plans[0]?.mode, "coordinated");
|
|
85
|
+
assert.equal(plans[1]?.mode, "coordinated");
|
|
86
|
+
assert.ok(plans[0]?.activation_reasons.includes("shared_file_scope"));
|
|
87
|
+
assert.ok(plans[1]?.activation_reasons.includes("shared_file_scope"));
|
|
88
|
+
assert.equal(plans[2]?.mode, "lightweight");
|
|
89
|
+
});
|
|
90
|
+
it("canonicalizes equivalent file paths before detecting sibling overlap", () => {
|
|
91
|
+
const plans = synthesizeCoordinationPlans([
|
|
92
|
+
task({
|
|
93
|
+
subject: "Update parser",
|
|
94
|
+
description: "Implement parser change",
|
|
95
|
+
filePaths: ["./src/parser.ts"],
|
|
96
|
+
}),
|
|
97
|
+
task({
|
|
98
|
+
subject: "Update parser tests",
|
|
99
|
+
description: "Add tests",
|
|
100
|
+
filePaths: ["src/./parser.ts"],
|
|
101
|
+
}),
|
|
102
|
+
]);
|
|
103
|
+
assert.equal(plans[0]?.mode, "coordinated");
|
|
104
|
+
assert.equal(plans[1]?.mode, "coordinated");
|
|
105
|
+
assert.ok(plans[0]?.activation_reasons.includes("shared_file_scope"));
|
|
106
|
+
assert.ok(plans[1]?.activation_reasons.includes("shared_file_scope"));
|
|
107
|
+
});
|
|
108
|
+
it("activates coordinated protocol for overlapping domains across sibling tasks", () => {
|
|
109
|
+
const plans = synthesizeCoordinationPlans([
|
|
110
|
+
task({
|
|
111
|
+
subject: "Runtime lane A",
|
|
112
|
+
description: "Implement update",
|
|
113
|
+
domains: ["team-runtime"],
|
|
114
|
+
}),
|
|
115
|
+
task({
|
|
116
|
+
subject: "Runtime lane B",
|
|
117
|
+
description: "Verify update",
|
|
118
|
+
domains: ["team-runtime"],
|
|
119
|
+
}),
|
|
120
|
+
]);
|
|
121
|
+
assert.equal(plans[0]?.mode, "coordinated");
|
|
122
|
+
assert.equal(plans[1]?.mode, "coordinated");
|
|
123
|
+
assert.ok(plans[0]?.activation_reasons.includes("shared_domain_scope"));
|
|
124
|
+
assert.ok(plans[1]?.activation_reasons.includes("shared_domain_scope"));
|
|
125
|
+
});
|
|
126
|
+
it("activates coordinated protocol for symbolic dependencies before DAG remapping", () => {
|
|
127
|
+
const plan = synthesizeCoordinationPlan(task({
|
|
128
|
+
subject: "Dependent verification",
|
|
129
|
+
description: "Run verification after implementation",
|
|
130
|
+
symbolic_depends_on: ["impl"],
|
|
131
|
+
}));
|
|
132
|
+
assert.equal(plan.mode, "coordinated");
|
|
133
|
+
assert.ok(plan.activation_reasons.includes("task_dependencies"));
|
|
134
|
+
});
|
|
135
|
+
it("treats mixed invalid coordination mechanisms as an untrusted override", () => {
|
|
136
|
+
const plan = normalizeTeamTaskCoordinationPlanForStorage({
|
|
137
|
+
mode: "coordinated",
|
|
138
|
+
activation_reasons: [
|
|
139
|
+
" cross_boundary_or_handoff_language ",
|
|
140
|
+
"cross_boundary_or_handoff_language",
|
|
141
|
+
],
|
|
142
|
+
required_mechanisms: ["closed_loop_communication", "bogus-mechanism"],
|
|
143
|
+
});
|
|
144
|
+
assert.deepEqual(plan, {
|
|
145
|
+
mode: "coordinated",
|
|
146
|
+
activation_reasons: ["cross_boundary_or_handoff_language"],
|
|
147
|
+
required_mechanisms: [
|
|
148
|
+
"shared_mental_model",
|
|
149
|
+
"closed_loop_communication",
|
|
150
|
+
"mutual_performance_monitoring",
|
|
151
|
+
"backup_behavior",
|
|
152
|
+
"adaptability_checkpoint",
|
|
153
|
+
"team_orientation",
|
|
154
|
+
],
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
it("falls back to the full mechanism checklist when metadata has no valid mechanisms", () => {
|
|
158
|
+
const plan = normalizeTeamTaskCoordinationPlanForStorage({
|
|
159
|
+
mode: "coordinated",
|
|
160
|
+
activation_reasons: ["cross_boundary_or_handoff_language"],
|
|
161
|
+
required_mechanisms: ["bogus-mechanism"],
|
|
162
|
+
});
|
|
163
|
+
assert.deepEqual(plan?.required_mechanisms, [
|
|
164
|
+
"shared_mental_model",
|
|
165
|
+
"closed_loop_communication",
|
|
166
|
+
"mutual_performance_monitoring",
|
|
167
|
+
"backup_behavior",
|
|
168
|
+
"adaptability_checkpoint",
|
|
169
|
+
"team_orientation",
|
|
170
|
+
]);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=coordination-protocol.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination-protocol.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/coordination-protocol.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5544,11 +5544,13 @@ esac
|
|
|
5544
5544
|
await writeFakePromptWorkerBinary(fakeCodexPath, `setTimeout(() => {}, 5000);`);
|
|
5545
5545
|
let runtime = null;
|
|
5546
5546
|
try {
|
|
5547
|
-
runtime = await withPromptModeCodexEnv(binDir, {}, () => withoutTeamWorkerEnv(() => startTeam('team-delegation-persist', 'delegation persistence test', 'executor', 1, [{ subject: 'Investigate runtime assignment', description: 'Search runtime
|
|
5547
|
+
runtime = await withPromptModeCodexEnv(binDir, {}, () => withoutTeamWorkerEnv(() => startTeam('team-delegation-persist', 'delegation persistence test', 'executor', 1, [{ subject: 'Investigate runtime assignment', description: 'Search runtime, debug assignTask behavior, and coordinate shared handoff boundaries' }], cwd)));
|
|
5548
5548
|
const task = await readTask(runtime.teamName, '1', cwd);
|
|
5549
5549
|
assert.equal(task?.delegation?.mode, 'auto');
|
|
5550
5550
|
assert.equal(task?.delegation?.child_model, 'gpt-5.4-mini');
|
|
5551
5551
|
assert.equal(task?.delegation?.required_parallel_probe, true);
|
|
5552
|
+
assert.equal(task?.coordination?.mode, 'coordinated');
|
|
5553
|
+
assert.ok(task?.coordination?.activation_reasons.includes('cross_boundary_or_handoff_language'));
|
|
5552
5554
|
}
|
|
5553
5555
|
finally {
|
|
5554
5556
|
if (runtime) {
|
|
@@ -5881,12 +5883,27 @@ esac
|
|
|
5881
5883
|
assert.ok(config);
|
|
5882
5884
|
config.worker_launch_mode = 'prompt';
|
|
5883
5885
|
await saveTeamConfig(config, cwd);
|
|
5884
|
-
const task = await createTask('team-assign-delegation', {
|
|
5886
|
+
const task = await createTask('team-assign-delegation', {
|
|
5887
|
+
subject: 'Investigate follow-up assignment',
|
|
5888
|
+
description: 'Search repo and debug follow-up assignment behavior.',
|
|
5889
|
+
status: 'pending',
|
|
5890
|
+
filePaths: ['src/team/runtime.ts'],
|
|
5891
|
+
coordination: { mode: 'coordinated', activation_reasons: ['stale_snapshot_before_assignment'] },
|
|
5892
|
+
}, cwd);
|
|
5893
|
+
await createTask('team-assign-delegation', {
|
|
5894
|
+
subject: 'Sibling runtime verification',
|
|
5895
|
+
description: 'Verify the same runtime path.',
|
|
5896
|
+
status: 'pending',
|
|
5897
|
+
filePaths: ['src/team/runtime.ts'],
|
|
5898
|
+
}, cwd);
|
|
5885
5899
|
await writeWorkerInbox('team-assign-delegation', 'worker-1', 'existing inbox', cwd);
|
|
5886
5900
|
await assert.rejects(() => assignTask('team-assign-delegation', 'worker-1', task.id, cwd), /worker_notify_failed/);
|
|
5887
5901
|
const reread = await readTask('team-assign-delegation', task.id, cwd);
|
|
5888
5902
|
assert.equal(reread?.delegation?.mode, 'auto');
|
|
5889
5903
|
assert.equal(reread?.delegation?.child_model, 'gpt-5.4-mini');
|
|
5904
|
+
assert.equal(reread?.coordination?.mode, 'coordinated');
|
|
5905
|
+
assert.ok(reread?.coordination?.activation_reasons.includes('shared_file_scope'));
|
|
5906
|
+
assert.equal(reread?.coordination?.activation_reasons.includes('stale_snapshot_before_assignment'), false);
|
|
5890
5907
|
const inbox = await readFile(join(cwd, '.omx', 'state', 'team', 'team-assign-delegation', 'workers', 'worker-1', 'inbox.md'), 'utf-8');
|
|
5891
5908
|
assert.match(inbox, /Assignment Cancelled/);
|
|
5892
5909
|
assert.match(inbox, /worker_notify_failed/);
|
|
@@ -5895,6 +5912,38 @@ esac
|
|
|
5895
5912
|
await rm(cwd, { recursive: true, force: true });
|
|
5896
5913
|
}
|
|
5897
5914
|
});
|
|
5915
|
+
it('assignTask preserves explicitly authored coordination metadata', async () => {
|
|
5916
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-'));
|
|
5917
|
+
try {
|
|
5918
|
+
await initTeamState('team-assign-explicit', 'assignment explicit coordination test', 'executor', 1, cwd);
|
|
5919
|
+
const config = await readTeamConfig('team-assign-explicit', cwd);
|
|
5920
|
+
assert.ok(config);
|
|
5921
|
+
config.worker_launch_mode = 'prompt';
|
|
5922
|
+
await saveTeamConfig(config, cwd);
|
|
5923
|
+
const task = await createTask('team-assign-explicit', {
|
|
5924
|
+
subject: 'Explicit coordination lane',
|
|
5925
|
+
description: 'Preserve the caller-authored coordination plan.',
|
|
5926
|
+
status: 'pending',
|
|
5927
|
+
filePaths: ['src/team/runtime.ts'],
|
|
5928
|
+
coordination: { mode: 'coordinated', activation_reasons: ['caller_authored_boundary'], source: 'explicit' },
|
|
5929
|
+
}, cwd);
|
|
5930
|
+
await createTask('team-assign-explicit', {
|
|
5931
|
+
subject: 'Sibling runtime verification',
|
|
5932
|
+
description: 'Verify the same runtime path.',
|
|
5933
|
+
status: 'pending',
|
|
5934
|
+
filePaths: ['./src/team/runtime.ts'],
|
|
5935
|
+
}, cwd);
|
|
5936
|
+
await writeWorkerInbox('team-assign-explicit', 'worker-1', 'existing inbox', cwd);
|
|
5937
|
+
await assert.rejects(() => assignTask('team-assign-explicit', 'worker-1', task.id, cwd), /worker_notify_failed/);
|
|
5938
|
+
const reread = await readTask('team-assign-explicit', task.id, cwd);
|
|
5939
|
+
assert.equal(reread?.coordination?.source, 'explicit');
|
|
5940
|
+
assert.deepEqual(reread?.coordination?.activation_reasons, ['caller_authored_boundary']);
|
|
5941
|
+
assert.equal(reread?.coordination?.activation_reasons.includes('shared_file_scope'), false);
|
|
5942
|
+
}
|
|
5943
|
+
finally {
|
|
5944
|
+
await rm(cwd, { recursive: true, force: true });
|
|
5945
|
+
}
|
|
5946
|
+
});
|
|
5898
5947
|
it('assignTask injects approved handoff context when the persisted approved binding remains ready', async () => {
|
|
5899
5948
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-approved-followup-'));
|
|
5900
5949
|
const approvedTask = 'Execute approved issue 1320 plan';
|