ocmm 0.5.3 → 0.6.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 (202) hide show
  1. package/.codex/agents/dw-builder.toml +3 -3
  2. package/.codex/agents/dw-clarifier.toml +2 -2
  3. package/.codex/agents/dw-code-search.toml +2 -2
  4. package/.codex/agents/dw-coding.toml +2 -2
  5. package/.codex/agents/dw-complex.toml +2 -2
  6. package/.codex/agents/dw-creative.toml +2 -2
  7. package/.codex/agents/dw-deep.toml +3 -3
  8. package/.codex/agents/dw-doc-search.toml +2 -2
  9. package/.codex/agents/dw-documenting.toml +2 -2
  10. package/.codex/agents/dw-explore.toml +2 -2
  11. package/.codex/agents/dw-frontend.toml +2 -2
  12. package/.codex/agents/dw-hard-reasoning.toml +2 -2
  13. package/.codex/agents/dw-media-reader.toml +2 -2
  14. package/.codex/agents/dw-normal-task.toml +2 -2
  15. package/.codex/agents/dw-oracle-2nd.toml +8 -0
  16. package/.codex/agents/dw-oracle.toml +3 -3
  17. package/.codex/agents/dw-orchestrator.toml +2 -2
  18. package/.codex/agents/dw-plan-critic.toml +2 -2
  19. package/.codex/agents/dw-planner.toml +3 -3
  20. package/.codex/agents/dw-quick.toml +2 -2
  21. package/.codex/agents/dw-research.toml +2 -2
  22. package/.codex/agents/dw-reviewer.toml +2 -2
  23. package/README.md +193 -46
  24. package/dist/cli/shim.d.ts +4 -2
  25. package/dist/cli/shim.js +26 -11
  26. package/dist/cli/shim.js.map +1 -1
  27. package/dist/codex/plugin-generator.js +121 -96
  28. package/dist/codex/plugin-generator.js.map +1 -1
  29. package/dist/config/load.d.ts +32 -23
  30. package/dist/config/load.js +384 -90
  31. package/dist/config/load.js.map +1 -1
  32. package/dist/config/merge.d.ts +18 -0
  33. package/dist/config/merge.js +46 -0
  34. package/dist/config/merge.js.map +1 -0
  35. package/dist/config/normalize.d.ts +1 -0
  36. package/dist/config/normalize.js +22 -16
  37. package/dist/config/normalize.js.map +1 -1
  38. package/dist/config/profile-aliases.d.ts +12 -0
  39. package/dist/config/profile-aliases.js +127 -0
  40. package/dist/config/profile-aliases.js.map +1 -0
  41. package/dist/config/profile-types.d.ts +13 -0
  42. package/dist/config/profile-types.js +2 -0
  43. package/dist/config/profile-types.js.map +1 -0
  44. package/dist/config/review-agent-migration.d.ts +89 -0
  45. package/dist/config/review-agent-migration.js +237 -0
  46. package/dist/config/review-agent-migration.js.map +1 -0
  47. package/dist/config/schema.d.ts +1364 -219
  48. package/dist/config/schema.js +169 -36
  49. package/dist/config/schema.js.map +1 -1
  50. package/dist/config/tolerant-parse.d.ts +41 -0
  51. package/dist/config/tolerant-parse.js +164 -0
  52. package/dist/config/tolerant-parse.js.map +1 -0
  53. package/dist/data/agents.d.ts +2 -1
  54. package/dist/data/agents.js +25 -10
  55. package/dist/data/agents.js.map +1 -1
  56. package/dist/data/categories.js +2 -1
  57. package/dist/data/categories.js.map +1 -1
  58. package/dist/hooks/chat-params.d.ts +2 -0
  59. package/dist/hooks/chat-params.js +182 -16
  60. package/dist/hooks/chat-params.js.map +1 -1
  61. package/dist/hooks/config.d.ts +14 -2
  62. package/dist/hooks/config.js +538 -60
  63. package/dist/hooks/config.js.map +1 -1
  64. package/dist/hooks/event.d.ts +3 -11
  65. package/dist/hooks/event.js +5 -9
  66. package/dist/hooks/event.js.map +1 -1
  67. package/dist/index.js +21 -14
  68. package/dist/index.js.map +1 -1
  69. package/dist/intent/model-family.d.ts +2 -0
  70. package/dist/intent/model-family.js +11 -0
  71. package/dist/intent/model-family.js.map +1 -1
  72. package/dist/intent/prompt-loader.d.ts +3 -3
  73. package/dist/intent/prompt-loader.js +3 -3
  74. package/dist/permissions/index.d.ts +3 -0
  75. package/dist/permissions/index.js +43 -28
  76. package/dist/permissions/index.js.map +1 -1
  77. package/dist/review-agents/expand.d.ts +36 -0
  78. package/dist/review-agents/expand.js +157 -0
  79. package/dist/review-agents/expand.js.map +1 -0
  80. package/dist/review-agents/names.d.ts +16 -0
  81. package/dist/review-agents/names.js +55 -0
  82. package/dist/review-agents/names.js.map +1 -0
  83. package/dist/routing/effective-route.d.ts +19 -0
  84. package/dist/routing/effective-route.js +133 -0
  85. package/dist/routing/effective-route.js.map +1 -0
  86. package/dist/routing/model-upgrades.d.ts +5 -0
  87. package/dist/routing/model-upgrades.js +59 -11
  88. package/dist/routing/model-upgrades.js.map +1 -1
  89. package/dist/routing/resolver.d.ts +8 -1
  90. package/dist/routing/resolver.js +29 -9
  91. package/dist/routing/resolver.js.map +1 -1
  92. package/dist/routing/route-registry.d.ts +13 -0
  93. package/dist/routing/route-registry.js +84 -0
  94. package/dist/routing/route-registry.js.map +1 -0
  95. package/dist/routing/variant-translator.js +7 -4
  96. package/dist/routing/variant-translator.js.map +1 -1
  97. package/dist/runtime-fallback/dispatcher.d.ts +1 -0
  98. package/dist/runtime-fallback/dispatcher.js +7 -5
  99. package/dist/runtime-fallback/dispatcher.js.map +1 -1
  100. package/dist/runtime-fallback/error-classifier.d.ts +3 -1
  101. package/dist/runtime-fallback/error-classifier.js +135 -1
  102. package/dist/runtime-fallback/error-classifier.js.map +1 -1
  103. package/dist/runtime-fallback/event-handler-generic-fallback.d.ts +26 -0
  104. package/dist/runtime-fallback/event-handler-generic-fallback.js +54 -0
  105. package/dist/runtime-fallback/event-handler-generic-fallback.js.map +1 -0
  106. package/dist/runtime-fallback/event-handler-idle-continuation.d.ts +9 -0
  107. package/dist/runtime-fallback/event-handler-idle-continuation.js +48 -0
  108. package/dist/runtime-fallback/event-handler-idle-continuation.js.map +1 -0
  109. package/dist/runtime-fallback/event-handler-support.d.ts +39 -0
  110. package/dist/runtime-fallback/event-handler-support.js +194 -0
  111. package/dist/runtime-fallback/event-handler-support.js.map +1 -0
  112. package/dist/runtime-fallback/event-handler-test-fixtures.d.ts +874 -0
  113. package/dist/runtime-fallback/event-handler-test-fixtures.js +150 -0
  114. package/dist/runtime-fallback/event-handler-test-fixtures.js.map +1 -0
  115. package/dist/runtime-fallback/event-handler.d.ts +13 -1
  116. package/dist/runtime-fallback/event-handler.js +334 -192
  117. package/dist/runtime-fallback/event-handler.js.map +1 -1
  118. package/dist/runtime-fallback/fallback-state.d.ts +8 -5
  119. package/dist/runtime-fallback/fallback-state.js +9 -6
  120. package/dist/runtime-fallback/fallback-state.js.map +1 -1
  121. package/dist/runtime-fallback/index.d.ts +21 -1
  122. package/dist/runtime-fallback/index.js +7 -1
  123. package/dist/runtime-fallback/index.js.map +1 -1
  124. package/dist/runtime-fallback/interruption-output-adapter.d.ts +7 -0
  125. package/dist/runtime-fallback/interruption-output-adapter.js +91 -0
  126. package/dist/runtime-fallback/interruption-output-adapter.js.map +1 -0
  127. package/dist/runtime-fallback/subagent-429-controller-fixture.d.ts +105 -0
  128. package/dist/runtime-fallback/subagent-429-controller-fixture.js +116 -0
  129. package/dist/runtime-fallback/subagent-429-controller-fixture.js.map +1 -0
  130. package/dist/runtime-fallback/subagent-429-controller.d.ts +167 -0
  131. package/dist/runtime-fallback/subagent-429-controller.js +334 -0
  132. package/dist/runtime-fallback/subagent-429-controller.js.map +1 -0
  133. package/dist/runtime-fallback/subagent-429-policy.d.ts +13 -0
  134. package/dist/runtime-fallback/subagent-429-policy.js +37 -0
  135. package/dist/runtime-fallback/subagent-429-policy.js.map +1 -0
  136. package/dist/runtime-fallback/subagent-429-session.d.ts +48 -0
  137. package/dist/runtime-fallback/subagent-429-session.js +316 -0
  138. package/dist/runtime-fallback/subagent-429-session.js.map +1 -0
  139. package/dist/shared/opencode-events.d.ts +22 -0
  140. package/dist/shared/opencode-events.js +75 -0
  141. package/dist/shared/opencode-events.js.map +1 -0
  142. package/dist/shared/types.d.ts +12 -1
  143. package/package.json +1 -1
  144. package/plugins/deepwork/.codex-plugin/plugin.json +1 -1
  145. package/plugins/deepwork/README.md +3 -2
  146. package/plugins/deepwork/agents/dw-builder.toml +3 -3
  147. package/plugins/deepwork/agents/dw-clarifier.toml +2 -2
  148. package/plugins/deepwork/agents/dw-code-search.toml +2 -2
  149. package/plugins/deepwork/agents/dw-coding.toml +2 -2
  150. package/plugins/deepwork/agents/dw-complex.toml +2 -2
  151. package/plugins/deepwork/agents/dw-creative.toml +2 -2
  152. package/plugins/deepwork/agents/dw-deep.toml +3 -3
  153. package/plugins/deepwork/agents/dw-doc-search.toml +2 -2
  154. package/plugins/deepwork/agents/dw-documenting.toml +2 -2
  155. package/plugins/deepwork/agents/dw-explore.toml +2 -2
  156. package/plugins/deepwork/agents/dw-frontend.toml +2 -2
  157. package/plugins/deepwork/agents/dw-hard-reasoning.toml +2 -2
  158. package/plugins/deepwork/agents/dw-media-reader.toml +2 -2
  159. package/plugins/deepwork/agents/dw-normal-task.toml +2 -2
  160. package/plugins/deepwork/agents/dw-oracle-2nd.toml +8 -0
  161. package/plugins/deepwork/agents/dw-oracle.toml +3 -3
  162. package/plugins/deepwork/agents/dw-orchestrator.toml +2 -2
  163. package/plugins/deepwork/agents/dw-plan-critic.toml +2 -2
  164. package/plugins/deepwork/agents/dw-planner.toml +3 -3
  165. package/plugins/deepwork/agents/dw-quick.toml +2 -2
  166. package/plugins/deepwork/agents/dw-research.toml +2 -2
  167. package/plugins/deepwork/agents/dw-reviewer.toml +2 -2
  168. package/plugins/deepwork/dist/cli/shim.d.ts +4 -2
  169. package/plugins/deepwork/dist/cli/shim.js +26 -11
  170. package/plugins/deepwork/dist/cli/shim.js.map +1 -1
  171. package/plugins/deepwork/dist/shared/opencode-events.d.ts +22 -0
  172. package/plugins/deepwork/dist/shared/opencode-events.js +75 -0
  173. package/plugins/deepwork/dist/shared/opencode-events.js.map +1 -0
  174. package/plugins/deepwork/dist/shared/types.d.ts +12 -1
  175. package/plugins/deepwork/package.json +1 -1
  176. package/plugins/deepwork/skills/deepwork/SKILL.md +74 -58
  177. package/plugins/deepwork/skills/deepwork-requesting-code-review/SKILL.md +53 -27
  178. package/plugins/deepwork/skills/deepwork-requesting-code-review/code-reviewer.md +11 -7
  179. package/plugins/deepwork/skills/deepwork-subagent-driven-development/SKILL.md +34 -21
  180. package/plugins/deepwork/skills/deepwork-subagent-driven-development/implementer-prompt.md +10 -3
  181. package/prompts/codex/agents/clarifier.md +4 -0
  182. package/prompts/codex/agents/orchestrator.md +12 -2
  183. package/prompts/codex/agents/plan-critic.md +4 -0
  184. package/prompts/codex/agents/planner.md +15 -10
  185. package/prompts/codex/agents/reviewer.md +8 -2
  186. package/prompts/codex/deepwork/gpt-5.6.md +20 -37
  187. package/prompts/omo/agents/clarifier.md +4 -0
  188. package/prompts/omo/agents/orchestrator.md +11 -0
  189. package/prompts/omo/agents/plan-critic.md +4 -0
  190. package/prompts/omo/agents/planner.md +15 -3
  191. package/prompts/omo/agents/reviewer.md +8 -2
  192. package/prompts/omo/deepwork/gpt-5.6.md +20 -37
  193. package/prompts/v1/agents/clarifier.md +4 -0
  194. package/prompts/v1/agents/orchestrator.md +12 -2
  195. package/prompts/v1/agents/plan-critic.md +4 -0
  196. package/prompts/v1/agents/planner.md +15 -10
  197. package/prompts/v1/agents/reviewer.md +8 -2
  198. package/prompts/v1/deepwork/gpt-5.6.md +20 -37
  199. package/skills/v1/requesting-code-review/SKILL.md +53 -27
  200. package/skills/v1/requesting-code-review/code-reviewer.md +11 -7
  201. package/skills/v1/subagent-driven-development/SKILL.md +34 -21
  202. package/skills/v1/subagent-driven-development/implementer-prompt.md +10 -3
@@ -1,70 +1,102 @@
1
1
  import { classifyError } from "./error-classifier.js";
2
- import { createFallbackState, markModelFailed, modelKey, peekNextFallback, commitFallback, } from "./fallback-state.js";
2
+ import { markModelFailed, modelKey, peekNextFallback, commitFallback, } from "./fallback-state.js";
3
3
  import { dispatchFallbackRetry, isDispatchInFlight } from "./dispatcher.js";
4
- import { entryExactlyMatchesModel, entryMatchesModel, resolveEffectiveRequirement } from "../routing/resolver.js";
5
- import { matchRequirementSuccessor } from "../routing/model-upgrades.js";
4
+ import { resolveEffectiveRequirement } from "../routing/resolver.js";
5
+ import { createEffectiveRouteRegistry } from "../routing/route-registry.js";
6
6
  import { clearSessionIntent as defaultClearSessionIntent } from "../hooks/chat-message.js";
7
- import { isIdleContinuationEnabled, markSessionAborted, getSessionData, clearSession, DEFAULT_CONTINUATION_PROMPT, } from "./idle-state.js";
8
- import { hasUnfinishedTodos } from "./todo-reader.js";
7
+ import { markSessionAborted, clearSession } from "./idle-state.js";
9
8
  import { isRecord, log } from "../shared/logger.js";
10
- const ABORT_NAMES = new Set([
11
- "AbortError",
12
- "MessageAbortedError",
13
- "DOMException",
14
- ]);
15
- function isAbortError(error) {
16
- if (!isRecord(error))
17
- return false;
18
- const name = typeof error.name === "string" ? error.name : "";
19
- if (ABORT_NAMES.has(name))
20
- return true;
21
- if (error.isAbort === true)
22
- return true;
23
- return false;
24
- }
25
- function resolveSessionID(props) {
26
- if (!isRecord(props))
27
- return "";
28
- if (typeof props.sessionID === "string")
29
- return props.sessionID;
30
- if (isRecord(props.session) && typeof props.session.id === "string") {
31
- return props.session.id;
32
- }
33
- return "";
34
- }
35
- function resolveAgent(props) {
36
- if (!isRecord(props))
37
- return undefined;
38
- if (typeof props.agent === "string")
39
- return props.agent;
40
- if (isRecord(props.agent) && typeof props.agent.name === "string") {
41
- return props.agent.name;
42
- }
43
- return undefined;
44
- }
45
- function resolveEventModel(props) {
46
- if (!isRecord(props))
47
- return null;
48
- const model = props.model;
49
- if (!isRecord(model))
50
- return null;
51
- const providerID = typeof model.providerID === "string" ? model.providerID : "";
52
- const modelID = typeof model.modelID === "string" ? model.modelID : "";
53
- if (!providerID || !modelID)
54
- return null;
55
- return { providerID, modelID };
56
- }
57
- function parseRegisteredModel(value) {
58
- if (!value)
59
- return null;
60
- const slash = value.indexOf("/");
61
- if (slash <= 0 || slash === value.length - 1)
62
- return null;
63
- return { providerID: value.slice(0, slash), modelID: value.slice(slash + 1) };
64
- }
65
- export function createRuntimeFallbackEventHandler(deps) {
9
+ import { createSubagent429Controller, } from "./subagent-429-controller.js";
10
+ import { applyRequirementDefaults, chainHeadIdentity, createRuntimeFallbackSessionLifecycle, isExplicitRuntimeFallbackAbort, getOrCreateFallbackState, isRuntimeFallbackAbort, parseModelIdentity, resolveParentSessionID, resolveEventModelIdentity, resolveRuntimeFallbackAgent, resolveRuntimeFallbackSessionID, resolveRetryTarget, } from "./event-handler-support.js";
11
+ import { runGenericFallback } from "./event-handler-generic-fallback.js";
12
+ import { handleIdleContinuation } from "./event-handler-idle-continuation.js";
13
+ import { canonicalizeReviewAgentName } from "../review-agents/names.js";
14
+ import { resolveSessionLineage, resolveTaskPartInterruption, } from "../shared/opencode-events.js";
15
+ import { createSubagentInterruptionOutputAdapter } from "./interruption-output-adapter.js";
16
+ export const SUPPRESSION_TOMBSTONE_GRACE_MS = 5 * 60_000;
17
+ export const MAX_SUPPRESSION_TOMBSTONES = 256;
18
+ export function createRuntimeFallbackRuntime(deps) {
66
19
  const sessionStates = new Map();
67
- return async (raw) => {
20
+ const clock = deps.clock ?? Date.now;
21
+ const routeRegistry = deps.routeRegistry ?? createEffectiveRouteRegistry();
22
+ // The subagent-interruption-recovery hook gates only the durable correlation
23
+ // calls (recordSessionLineage, recordTaskPart, markExplicitAbort). It never
24
+ // gates the existing 429/generic fallback/lifecycle/idle behavior.
25
+ const interruptionRecoveryEnabled = () => !deps.getConfig().disabledHooks.includes("subagent-interruption-recovery");
26
+ const lifecycle = createRuntimeFallbackSessionLifecycle(deps.client);
27
+ // Lifecycle-scoped suppression tombstone: an explicit abort or session.deleted
28
+ // for a child blocks late retryable session.error events for the bounded grace
29
+ // window, even when controller state is absent (hook disabled, onDeleted
30
+ // already evicted the controller record) and runtime fallback is enabled.
31
+ // A subsequent legitimate session.created with the same ID clears the
32
+ // tombstone so delete->recreate can dispatch normally. A duplicate active
33
+ // creation (session still tracked by the lifecycle) does NOT clear it - that
34
+ // matches the existing idempotent duplicate-create semantics, where a new
35
+ // session.created for an already-active session is a replay, not a restart.
36
+ const suppressedSessions = new Map();
37
+ const pruneSuppressedSessions = () => {
38
+ const now = clock();
39
+ for (const [sessionID, suppressedAt] of suppressedSessions) {
40
+ if (now - suppressedAt >= SUPPRESSION_TOMBSTONE_GRACE_MS)
41
+ suppressedSessions.delete(sessionID);
42
+ }
43
+ if (suppressedSessions.size <= MAX_SUPPRESSION_TOMBSTONES)
44
+ return;
45
+ const oldest = [...suppressedSessions.entries()]
46
+ .sort(([, left], [, right]) => left - right)
47
+ .slice(0, suppressedSessions.size - MAX_SUPPRESSION_TOMBSTONES);
48
+ for (const [sessionID] of oldest)
49
+ suppressedSessions.delete(sessionID);
50
+ };
51
+ const suppressSession = (sessionID) => {
52
+ pruneSuppressedSessions();
53
+ suppressedSessions.set(sessionID, clock());
54
+ pruneSuppressedSessions();
55
+ };
56
+ const clearSuppression = (sessionID) => {
57
+ pruneSuppressedSessions();
58
+ suppressedSessions.delete(sessionID);
59
+ };
60
+ const isSuppressed = (sessionID) => {
61
+ pruneSuppressedSessions();
62
+ return suppressedSessions.has(sessionID);
63
+ };
64
+ const controller = createSubagent429Controller({
65
+ ...(deps.scheduler === undefined ? {} : { scheduler: deps.scheduler }),
66
+ clock,
67
+ isCurrentSnapshot: routeRegistry.isCurrentSnapshot,
68
+ ...(deps.random === undefined ? {} : { random: deps.random }),
69
+ logger: log,
70
+ ...(deps.client === undefined
71
+ ? {}
72
+ : {
73
+ dispatchRetry: async ({ sessionID, snapshotId, agent, target, reason }) => {
74
+ if (!routeRegistry.isCurrentSnapshot(snapshotId))
75
+ return false;
76
+ const generation = lifecycle.currentGeneration(sessionID);
77
+ await lifecycle.waitForStaleDispatches(sessionID, generation);
78
+ if (!lifecycle.isCurrent(sessionID, generation) || !routeRegistry.isCurrentSnapshot(snapshotId))
79
+ return false;
80
+ return lifecycle.trackDispatch(sessionID, generation, dispatchFallbackRetry({
81
+ client: lifecycle.guardedClient(sessionID, generation, () => routeRegistry.isCurrentSnapshot(snapshotId)),
82
+ sessionID,
83
+ ...(deps.directory === undefined ? {} : { directory: deps.directory }),
84
+ ...(agent === undefined ? {} : { agent }),
85
+ newEntry: target.entry,
86
+ reason,
87
+ abortBeforeDispatch: false,
88
+ }));
89
+ },
90
+ }),
91
+ });
92
+ const genericFallbackCtx = {
93
+ lifecycle,
94
+ isCurrentSnapshot: routeRegistry.isCurrentSnapshot,
95
+ ...(deps.client === undefined ? {} : { client: deps.client }),
96
+ ...(deps.directory === undefined ? {} : { directory: deps.directory }),
97
+ clock,
98
+ };
99
+ const event = async (raw) => {
68
100
  if (!isRecord(raw))
69
101
  return;
70
102
  const event = isRecord(raw.event) ? raw.event : raw;
@@ -72,188 +104,298 @@ export function createRuntimeFallbackEventHandler(deps) {
72
104
  if (!eventType)
73
105
  return;
74
106
  const props = isRecord(event.properties) ? event.properties : event;
75
- const sessionID = resolveSessionID(props);
107
+ const sessionID = resolveRuntimeFallbackSessionID(props);
108
+ const routeSnapshot = routeRegistry.snapshot();
76
109
  if (eventType === "session.created") {
77
- if (sessionID)
78
- sessionStates.delete(sessionID);
110
+ // Decode lineage via the shared decoder so runtime fallback, permissions,
111
+ // and interruption correlation share one parent-ID spelling policy.
112
+ const lineage = resolveSessionLineage(raw);
113
+ if (lineage && lineage.sessionID) {
114
+ const childSessionID = lineage.sessionID;
115
+ if (!lifecycle.hasSession(childSessionID)) {
116
+ // Legitimate (re)creation: this is either a fresh session or a
117
+ // delete->recreate cycle. Either way, clear any prior suppression
118
+ // tombstone so a later retryable error can dispatch normally.
119
+ // A duplicate-active-create (session still tracked) skips this
120
+ // branch and preserves the tombstone, matching the idempotent
121
+ // duplicate-create semantics.
122
+ clearSuppression(childSessionID);
123
+ lifecycle.beginSession(childSessionID);
124
+ sessionStates.delete(childSessionID);
125
+ controller.onSessionCreated(childSessionID, lineage.parentSessionID !== undefined, routeSnapshot.snapshotId);
126
+ // When interruption recovery is enabled and a parent exists, record
127
+ // the durable lineage. This does NOT dispatch and is additive.
128
+ if (interruptionRecoveryEnabled() && lineage.parentSessionID !== undefined) {
129
+ controller.recordSessionLineage({
130
+ childSessionID,
131
+ parentSessionID: lineage.parentSessionID,
132
+ });
133
+ }
134
+ }
135
+ }
136
+ else if (sessionID) {
137
+ // Fallback: sessionID resolved through the legacy path even if the
138
+ // shared decoder did not produce a lineage. Preserve prior behavior.
139
+ if (!lifecycle.hasSession(sessionID)) {
140
+ clearSuppression(sessionID);
141
+ lifecycle.beginSession(sessionID);
142
+ sessionStates.delete(sessionID);
143
+ controller.onSessionCreated(sessionID, resolveParentSessionID(props) !== undefined, routeSnapshot.snapshotId);
144
+ }
145
+ }
79
146
  return;
80
147
  }
81
148
  if (eventType === "session.deleted") {
82
149
  if (sessionID) {
150
+ // Call the existing controller.onDeleted() before other cache cleanup
151
+ // so the durable correlation is invalidated before any idle continuations.
152
+ lifecycle.invalidateSession(sessionID);
153
+ controller.onDeleted(sessionID);
83
154
  (deps.clearSessionIntent ?? defaultClearSessionIntent)(sessionID);
84
155
  sessionStates.delete(sessionID);
85
156
  if (deps.idleState)
86
157
  clearSession(deps.idleState, sessionID);
158
+ // Record a bounded lifecycle tombstone so late retryable session.error
159
+ // events cannot fall through to dedicated 429 or generic fallback. A
160
+ // legitimate session.created with the same ID clears it immediately.
161
+ suppressSession(sessionID);
87
162
  }
88
163
  return;
89
164
  }
90
165
  if (eventType === "session.idle") {
91
166
  if (sessionID) {
167
+ const idleResult = controller.onIdle(sessionID, routeSnapshot.snapshotId);
92
168
  (deps.clearSessionIntent ?? defaultClearSessionIntent)(sessionID);
93
- // Do NOT delete sessionStates here the session may still be live
169
+ // Do NOT delete sessionStates here - the session may still be live
94
170
  // and a later session.error must continue from existing fallback
95
171
  // state (fallbackIndex, activeModel, attempts). Only session.deleted
96
172
  // and session.created reset fallback state.
97
- await handleIdleContinuation(deps, sessionID);
173
+ if (!idleResult.suppressIdleContinuation) {
174
+ await handleIdleContinuation(deps, sessionID);
175
+ }
176
+ }
177
+ return;
178
+ }
179
+ // Process parent-side task tool part interruptions BEFORE the generic
180
+ // session.error gate. This event must NEVER dispatch on its own - it
181
+ // only records durable evidence so a later retryable child error can
182
+ // be correlated and dispatched through the existing 429/generic paths.
183
+ if (eventType === "message.part.updated") {
184
+ if (interruptionRecoveryEnabled()) {
185
+ const evidence = resolveTaskPartInterruption(raw);
186
+ if (evidence) {
187
+ // Canonicalize the evidence agent (e.g. oracle-second -> oracle-2nd).
188
+ const canonicalAgent = evidence.agent === undefined
189
+ ? undefined
190
+ : (canonicalizeReviewAgentName(evidence.agent) ?? evidence.agent);
191
+ controller.recordTaskPart({
192
+ childSessionID: evidence.childSessionID,
193
+ parentSessionID: evidence.parentSessionID,
194
+ ...(evidence.parentPartID === undefined ? {} : { parentPartID: evidence.parentPartID }),
195
+ ...(evidence.callID === undefined ? {} : { callID: evidence.callID }),
196
+ ...(canonicalAgent === undefined ? {} : { agent: canonicalAgent }),
197
+ ...(evidence.taskID === undefined ? {} : { taskID: evidence.taskID }),
198
+ terminalTaskErrorObserved: true,
199
+ });
200
+ }
98
201
  }
99
202
  return;
100
203
  }
101
204
  if (eventType !== "session.error")
102
205
  return;
103
206
  const cfg = deps.getConfig();
207
+ // Evaluate explicit abort BEFORE the runtimeFallback.enabled early return.
208
+ // This ensures that even when runtime fallback is disabled, an explicit
209
+ // abort cancels any pending 429 gate and records abort evidence so a
210
+ // misleading output notice cannot be produced for an aborted child.
211
+ const earlyError = props.error;
212
+ if (isRuntimeFallbackAbort(earlyError)) {
213
+ if (sessionID && isExplicitRuntimeFallbackAbort(earlyError)) {
214
+ if (interruptionRecoveryEnabled()) {
215
+ controller.markExplicitAbort(sessionID);
216
+ }
217
+ if (deps.idleState) {
218
+ markSessionAborted(deps.idleState, sessionID);
219
+ }
220
+ // Record a bounded lifecycle tombstone so late retryable session.error
221
+ // events cannot fall through to dedicated 429 or generic fallback. A
222
+ // legitimate session.created with the same ID clears it immediately.
223
+ suppressSession(sessionID);
224
+ }
225
+ log.debug(`session.error abort (likely our own); skipping`);
226
+ return;
227
+ }
104
228
  if (!cfg.runtimeFallback.enabled)
105
229
  return;
106
230
  if (!sessionID) {
107
231
  log.debug("session.error without sessionID; skipping");
108
232
  return;
109
233
  }
110
- const error = props.error;
111
- if (isAbortError(error)) {
112
- if (deps.idleState) {
113
- markSessionAborted(deps.idleState, sessionID);
114
- }
115
- log.debug(`session.error abort (likely our own); skipping`);
116
- return;
117
- }
118
- if (isDispatchInFlight(sessionID)) {
119
- log.debug(`session.error while retry in flight; skipping`);
234
+ // Lifecycle tombstone: an explicit abort or session.deleted blocks late
235
+ // retryable session.error events during its bounded grace window, even
236
+ // when controller state is absent (hook disabled, onDeleted already
237
+ // evicted the controller record). This blocks both fallback paths before
238
+ // any dispatch attempt.
239
+ if (isSuppressed(sessionID)) {
240
+ log.debug(`session.error for suppressed session=${sessionID.slice(0, 16)}…; skipping`);
120
241
  return;
121
242
  }
122
- const classification = classifyError(error, cfg.runtimeFallback);
123
- const agent = resolveAgent(props);
243
+ const error = props.error;
244
+ const classification = classifyError(error, cfg.runtimeFallback, clock());
245
+ // Resolve the child agent from the event payload; if absent, fall back to
246
+ // the durable correlation's recorded agent so a child session whose
247
+ // session.error omits the agent can still be matched for retry.
248
+ const eventAgent = resolveRuntimeFallbackAgent(props);
249
+ const correlationAgent = controller.getInterruptionCorrelation({ childSessionID: sessionID })?.agent;
250
+ const agent = eventAgent ?? correlationAgent;
124
251
  log.info(`session.error: session=${sessionID.slice(0, 16)}… agent=${agent ?? "<none>"} ` +
125
252
  `retryable=${classification.retryable} reason=${classification.reason}`);
126
- if (!classification.retryable)
127
- return;
128
- const effective = agent
253
+ const publishedRoute = routeSnapshot.published && agent
254
+ ? routeSnapshot.routes.get(agent)
255
+ : undefined;
256
+ const effective = !routeSnapshot.published && agent
129
257
  ? resolveEffectiveRequirement({
130
258
  agentName: agent,
131
259
  agentsConfig: cfg.agents,
132
260
  categoriesConfig: cfg.categories,
261
+ disabledAgents: cfg.disabledAgents,
133
262
  })
134
263
  : null;
135
- const requirement = effective?.requirement ?? null;
136
- if (!requirement || requirement.fallbackChain.length <= 1) {
137
- log.info(`no fallback chain configured for agent=${agent ?? "<none>"}; skipping`);
138
- return;
264
+ const requirement = routeSnapshot.published
265
+ ? publishedRoute?.requirement ?? null
266
+ : effective?.requirement ?? null;
267
+ const routeModel = routeSnapshot.published ? parseModelIdentity(publishedRoute?.model) : null;
268
+ // Once the classification is retryable and a known effective agent
269
+ // requirement exists, record durable retryable-child-error evidence. This
270
+ // does NOT dispatch - the existing on429()/generic fallback paths below
271
+ // remain the only dispatch paths. It only flips the retryableChildError
272
+ // boolean on the durable correlation so a parent-side task evidence
273
+ // already recorded (or arriving later) can be correlated.
274
+ if (interruptionRecoveryEnabled() && classification.retryable && requirement) {
275
+ controller.markRetryableChildError(sessionID);
139
276
  }
140
- const eventModel = resolveEventModel(props);
141
- // Initialize from the actual failed model. Models outside the static chain
142
- // start at -1 so chain index 0 remains eligible.
277
+ const eventModel = resolveEventModelIdentity(props);
278
+ const inFlight = isDispatchInFlight(sessionID);
279
+ const activeDispatchTarget = !eventModel && inFlight
280
+ ? controller.getActiveDispatchTarget(sessionID, routeSnapshot.snapshotId)
281
+ : undefined;
282
+ const headModel = chainHeadIdentity(requirement);
143
283
  let state = sessionStates.get(sessionID);
144
- if (!state) {
145
- const head = requirement.fallbackChain[0];
146
- const chainHeadModel = head
147
- ? { providerID: head.providers[0] ?? "", modelID: head.model }
148
- : null;
149
- const registeredModel = agent
150
- ? parseRegisteredModel(deps.registeredAgentModels?.get(agent))
151
- : null;
152
- const initialModel = eventModel ?? registeredModel ?? chainHeadModel;
153
- if (!initialModel) {
154
- log.info(`could not determine initial model for agent=${agent ?? "<none>"}; skipping`);
155
- return;
284
+ if (classification.retryable && requirement && requirement.fallbackChain.length > 0) {
285
+ const initialModel = eventModel
286
+ ?? (activeDispatchTarget
287
+ ? { providerID: activeDispatchTarget.providerID, modelID: activeDispatchTarget.modelID }
288
+ : null)
289
+ ?? routeModel
290
+ ?? headModel;
291
+ if (initialModel) {
292
+ state = getOrCreateFallbackState(sessionStates, sessionID, requirement, initialModel, routeSnapshot.snapshotId);
156
293
  }
157
- const initialKey = modelKey(initialModel.providerID, initialModel.modelID);
158
- state = createFallbackState(initialKey);
159
- state.activeModel = initialKey;
160
- state.fallbackIndex = requirement.fallbackChain.findIndex((entry) => entryExactlyMatchesModel(entry, initialModel.providerID, initialModel.modelID));
161
- if (state.fallbackIndex < 0 && !matchRequirementSuccessor(requirement, initialModel.providerID, initialModel.modelID)) {
162
- state.fallbackIndex = requirement.fallbackChain.findIndex((entry) => entryMatchesModel(entry, initialModel.providerID, initialModel.modelID));
163
- }
164
- sessionStates.set(sessionID, state);
165
- }
166
- // Priority order for the failed-model key:
167
- // 1. Explicit model from the event payload.
168
- // 2. The state's activeModel (previously dispatched fallback model).
169
- // 3. The agent's primary fallback-chain entry (first entry).
170
- let justFailedKey = null;
171
- if (eventModel) {
172
- justFailedKey = modelKey(eventModel.providerID, eventModel.modelID);
173
- }
174
- else if (state.activeModel) {
175
- justFailedKey = state.activeModel;
176
- }
177
- else if (requirement.fallbackChain[0]) {
178
- const primary = requirement.fallbackChain[0];
179
- const primaryProvider = primary.providers[0] ?? "";
180
- justFailedKey = modelKey(primaryProvider, primary.model);
181
- }
182
- if (!justFailedKey) {
183
- log.info(`could not determine failed model for agent=${agent ?? "<none>"}; skipping`);
184
- return;
185
294
  }
186
- markModelFailed(state, justFailedKey);
187
- const peek = peekNextFallback(state, requirement, justFailedKey, cfg.runtimeFallback.maxAttempts, cfg.runtimeFallback.cooldownSeconds);
188
- if (!peek.ok) {
189
- log.warn(`fallback exhausted: ${peek.reason} (session=${sessionID.slice(0, 16)}…)`);
190
- return;
191
- }
192
- log.info(`fallback attempt ${peek.nextAttempts}/${cfg.runtimeFallback.maxAttempts}: ` +
193
- `model=${peek.entry.providers[0] ?? ""}/${peek.entry.model}`);
194
- if (!cfg.runtimeFallback.dispatch) {
195
- log.info(`dispatch disabled; observe-only`);
295
+ const stateModel = parseModelIdentity(state?.activeModel);
296
+ const failedTarget = activeDispatchTarget
297
+ ?? (eventModel ? resolveRetryTarget(requirement, eventModel) : undefined)
298
+ ?? (stateModel ? resolveRetryTarget(requirement, stateModel) : undefined)
299
+ ?? (headModel ? resolveRetryTarget(requirement, headModel) : undefined);
300
+ const genericInput = (target = failedTarget) => ({
301
+ sessionID,
302
+ generation: lifecycle.currentGeneration(sessionID),
303
+ ...(agent === undefined ? {} : { agent }),
304
+ classification,
305
+ requirement,
306
+ ...(state === undefined ? {} : { state }),
307
+ ...(target === undefined ? {} : { failedTarget: target }),
308
+ snapshotId: routeSnapshot.snapshotId,
309
+ runtimeConfig: cfg.runtimeFallback,
310
+ });
311
+ const dedicated429 = classification.retryable && classification.statusCode === 429;
312
+ // A stale in-flight dispatch from an older generation may still hold the
313
+ // global sessionID lock. Let it settle, confirm this generation is still
314
+ // current, then re-read the lock; only a genuine in-flight dispatch skips.
315
+ const skipBecauseInFlight = async () => {
316
+ if (!inFlight)
317
+ return false;
318
+ const generation = lifecycle.currentGeneration(sessionID);
319
+ await lifecycle.waitForStaleDispatches(sessionID, generation);
320
+ if (!lifecycle.isCurrent(sessionID, generation))
321
+ return true;
322
+ return isDispatchInFlight(sessionID);
323
+ };
324
+ if (!dedicated429) {
325
+ const decision = controller.onOtherError({
326
+ sessionID,
327
+ snapshotId: routeSnapshot.snapshotId,
328
+ runGenericFallback: async (activeTarget) => {
329
+ if (!routeRegistry.isCurrentSnapshot(routeSnapshot.snapshotId))
330
+ return;
331
+ await runGenericFallback(genericFallbackCtx, genericInput(activeTarget));
332
+ },
333
+ });
334
+ if (decision.handled)
335
+ return;
336
+ if (await skipBecauseInFlight()) {
337
+ log.debug("session.error while generic retry is in flight; skipping");
338
+ return;
339
+ }
340
+ await runGenericFallback(genericFallbackCtx, genericInput());
196
341
  return;
197
342
  }
198
- if (!deps.client) {
199
- log.warn(`no client available; cannot dispatch (observe-only)`);
343
+ // Dedicated retries are meaningful even with a one-entry chain because
344
+ // they re-dispatch that exact model. They only need a non-empty chain to
345
+ // establish a target and later prepare a switch.
346
+ if (!requirement || requirement.fallbackChain.length === 0 || !state || !failedTarget) {
347
+ controller.onDeleted(sessionID);
200
348
  return;
201
349
  }
202
- const dispatched = await dispatchFallbackRetry({
203
- client: deps.client,
350
+ const decision = controller.on429({
204
351
  sessionID,
205
- ...(deps.directory !== undefined ? { directory: deps.directory } : {}),
206
- ...(agent !== undefined ? { agent } : {}),
207
- newEntry: peek.entry,
208
- reason: classification.reason,
352
+ snapshotId: routeSnapshot.snapshotId,
353
+ ...(agent === undefined ? {} : { agent }),
354
+ target: failedTarget,
355
+ classification: {
356
+ reason: classification.reason,
357
+ ...(classification.recoveryDelayMs === undefined ? {} : { recoveryDelayMs: classification.recoveryDelayMs }),
358
+ },
359
+ runtimeConfig: cfg.runtimeFallback,
360
+ prepareSwitch: (failed, isCandidateBlocked) => {
361
+ const failedKey = modelKey(failed.providerID, failed.modelID);
362
+ markModelFailed(state, failedKey, clock());
363
+ const peek = peekNextFallback(state, requirement, failedKey, cfg.runtimeFallback.maxAttempts, cfg.runtimeFallback.cooldownSeconds, clock(), isCandidateBlocked);
364
+ if (!peek.ok)
365
+ return { ok: false, reason: peek.reason };
366
+ const providerID = peek.entry.providers[0] ?? "";
367
+ const entry = { ...applyRequirementDefaults(requirement, peek.entry), providers: [providerID] };
368
+ let committed = false;
369
+ return {
370
+ ok: true,
371
+ prepared: {
372
+ target: { providerID, modelID: entry.model, entry },
373
+ attempt: peek.nextAttempts,
374
+ snapshotId: routeSnapshot.snapshotId,
375
+ commit: () => {
376
+ if (committed || !routeRegistry.isCurrentSnapshot(routeSnapshot.snapshotId))
377
+ return;
378
+ committed = true;
379
+ commitFallback(state, entry, peek.index);
380
+ },
381
+ },
382
+ };
383
+ },
209
384
  });
210
- if (dispatched) {
211
- commitFallback(state, peek.entry, peek.index);
385
+ if (decision.handled)
386
+ return;
387
+ if (await skipBecauseInFlight()) {
388
+ log.debug("session.error while retry in flight; dedicated controller did not handle");
389
+ return;
212
390
  }
391
+ await runGenericFallback(genericFallbackCtx, genericInput());
392
+ };
393
+ return {
394
+ event,
395
+ afterTask: createSubagentInterruptionOutputAdapter({ getConfig: deps.getConfig, controller }),
213
396
  };
214
397
  }
215
- async function handleIdleContinuation(deps, sessionID) {
216
- const idleState = deps.idleState;
217
- if (!idleState)
218
- return;
219
- const data = idleState.sessionData.get(sessionID);
220
- // ESC abort — never continue
221
- if (data?.aborted) {
222
- clearSession(idleState, sessionID);
223
- return;
224
- }
225
- // Not enabled — clean up
226
- if (!isIdleContinuationEnabled(idleState, sessionID)) {
227
- clearSession(idleState, sessionID);
228
- return;
229
- }
230
- const cfg = deps.getConfig();
231
- const idleCfg = cfg.idleContinuation;
232
- const maxContinuations = idleCfg?.maxContinuations ?? 20;
233
- const count = data?.continuationCount ?? 0;
234
- if (count >= maxContinuations) {
235
- clearSession(idleState, sessionID);
236
- return;
237
- }
238
- if (!deps.client)
239
- return;
240
- const hasUnfinished = await hasUnfinishedTodos(deps.client, sessionID);
241
- if (!hasUnfinished) {
242
- clearSession(idleState, sessionID);
243
- return;
244
- }
245
- const prompt = idleCfg?.prompt ?? DEFAULT_CONTINUATION_PROMPT;
246
- try {
247
- await deps.client.session.prompt({
248
- path: { id: sessionID },
249
- body: { parts: [{ type: "text", text: prompt }] },
250
- });
251
- const sessionData = getSessionData(idleState, sessionID);
252
- sessionData.continuationCount = count + 1;
253
- }
254
- catch (err) {
255
- log.warn("idle continuation prompt failed", { sessionID, error: String(err) });
256
- clearSession(idleState, sessionID);
257
- }
398
+ export function createRuntimeFallbackEventHandler(deps) {
399
+ return createRuntimeFallbackRuntime(deps).event;
258
400
  }
259
401
  //# sourceMappingURL=event-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/runtime-fallback/event-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/runtime-fallback/event-handler.ts"],"names":[],"mappings":"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"}