ocmm 0.5.4 → 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 (195) hide show
  1. package/.codex/agents/dw-builder.toml +1 -1
  2. package/.codex/agents/dw-clarifier.toml +1 -1
  3. package/.codex/agents/dw-code-search.toml +1 -1
  4. package/.codex/agents/dw-coding.toml +1 -1
  5. package/.codex/agents/dw-complex.toml +1 -1
  6. package/.codex/agents/dw-creative.toml +1 -1
  7. package/.codex/agents/dw-deep.toml +1 -1
  8. package/.codex/agents/dw-doc-search.toml +1 -1
  9. package/.codex/agents/dw-documenting.toml +1 -1
  10. package/.codex/agents/dw-explore.toml +1 -1
  11. package/.codex/agents/dw-frontend.toml +1 -1
  12. package/.codex/agents/dw-hard-reasoning.toml +1 -1
  13. package/.codex/agents/dw-media-reader.toml +1 -1
  14. package/.codex/agents/dw-normal-task.toml +1 -1
  15. package/.codex/agents/dw-oracle-2nd.toml +8 -0
  16. package/.codex/agents/dw-oracle.toml +1 -1
  17. package/.codex/agents/dw-orchestrator.toml +1 -1
  18. package/.codex/agents/dw-plan-critic.toml +1 -1
  19. package/.codex/agents/dw-planner.toml +1 -1
  20. package/.codex/agents/dw-quick.toml +1 -1
  21. package/.codex/agents/dw-research.toml +1 -1
  22. package/.codex/agents/dw-reviewer.toml +1 -1
  23. package/README.md +158 -13
  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 +82 -56
  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 -222
  48. package/dist/config/schema.js +169 -37
  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 +1 -1
  54. package/dist/data/agents.js +7 -7
  55. package/dist/data/agents.js.map +1 -1
  56. package/dist/hooks/chat-params.d.ts +2 -0
  57. package/dist/hooks/chat-params.js +113 -4
  58. package/dist/hooks/chat-params.js.map +1 -1
  59. package/dist/hooks/config.d.ts +14 -2
  60. package/dist/hooks/config.js +538 -60
  61. package/dist/hooks/config.js.map +1 -1
  62. package/dist/hooks/event.d.ts +3 -11
  63. package/dist/hooks/event.js +5 -9
  64. package/dist/hooks/event.js.map +1 -1
  65. package/dist/index.js +21 -14
  66. package/dist/index.js.map +1 -1
  67. package/dist/permissions/index.d.ts +3 -0
  68. package/dist/permissions/index.js +43 -28
  69. package/dist/permissions/index.js.map +1 -1
  70. package/dist/review-agents/expand.d.ts +36 -0
  71. package/dist/review-agents/expand.js +157 -0
  72. package/dist/review-agents/expand.js.map +1 -0
  73. package/dist/review-agents/names.d.ts +16 -0
  74. package/dist/review-agents/names.js +55 -0
  75. package/dist/review-agents/names.js.map +1 -0
  76. package/dist/routing/effective-route.d.ts +19 -0
  77. package/dist/routing/effective-route.js +133 -0
  78. package/dist/routing/effective-route.js.map +1 -0
  79. package/dist/routing/model-upgrades.d.ts +5 -0
  80. package/dist/routing/model-upgrades.js +59 -12
  81. package/dist/routing/model-upgrades.js.map +1 -1
  82. package/dist/routing/resolver.d.ts +8 -1
  83. package/dist/routing/resolver.js +29 -9
  84. package/dist/routing/resolver.js.map +1 -1
  85. package/dist/routing/route-registry.d.ts +13 -0
  86. package/dist/routing/route-registry.js +84 -0
  87. package/dist/routing/route-registry.js.map +1 -0
  88. package/dist/runtime-fallback/dispatcher.d.ts +1 -0
  89. package/dist/runtime-fallback/dispatcher.js +7 -5
  90. package/dist/runtime-fallback/dispatcher.js.map +1 -1
  91. package/dist/runtime-fallback/error-classifier.d.ts +3 -1
  92. package/dist/runtime-fallback/error-classifier.js +135 -1
  93. package/dist/runtime-fallback/error-classifier.js.map +1 -1
  94. package/dist/runtime-fallback/event-handler-generic-fallback.d.ts +26 -0
  95. package/dist/runtime-fallback/event-handler-generic-fallback.js +54 -0
  96. package/dist/runtime-fallback/event-handler-generic-fallback.js.map +1 -0
  97. package/dist/runtime-fallback/event-handler-idle-continuation.d.ts +9 -0
  98. package/dist/runtime-fallback/event-handler-idle-continuation.js +48 -0
  99. package/dist/runtime-fallback/event-handler-idle-continuation.js.map +1 -0
  100. package/dist/runtime-fallback/event-handler-support.d.ts +39 -0
  101. package/dist/runtime-fallback/event-handler-support.js +194 -0
  102. package/dist/runtime-fallback/event-handler-support.js.map +1 -0
  103. package/dist/runtime-fallback/event-handler-test-fixtures.d.ts +874 -0
  104. package/dist/runtime-fallback/event-handler-test-fixtures.js +150 -0
  105. package/dist/runtime-fallback/event-handler-test-fixtures.js.map +1 -0
  106. package/dist/runtime-fallback/event-handler.d.ts +13 -1
  107. package/dist/runtime-fallback/event-handler.js +334 -192
  108. package/dist/runtime-fallback/event-handler.js.map +1 -1
  109. package/dist/runtime-fallback/fallback-state.d.ts +8 -5
  110. package/dist/runtime-fallback/fallback-state.js +9 -6
  111. package/dist/runtime-fallback/fallback-state.js.map +1 -1
  112. package/dist/runtime-fallback/index.d.ts +21 -1
  113. package/dist/runtime-fallback/index.js +7 -1
  114. package/dist/runtime-fallback/index.js.map +1 -1
  115. package/dist/runtime-fallback/interruption-output-adapter.d.ts +7 -0
  116. package/dist/runtime-fallback/interruption-output-adapter.js +91 -0
  117. package/dist/runtime-fallback/interruption-output-adapter.js.map +1 -0
  118. package/dist/runtime-fallback/subagent-429-controller-fixture.d.ts +105 -0
  119. package/dist/runtime-fallback/subagent-429-controller-fixture.js +116 -0
  120. package/dist/runtime-fallback/subagent-429-controller-fixture.js.map +1 -0
  121. package/dist/runtime-fallback/subagent-429-controller.d.ts +167 -0
  122. package/dist/runtime-fallback/subagent-429-controller.js +334 -0
  123. package/dist/runtime-fallback/subagent-429-controller.js.map +1 -0
  124. package/dist/runtime-fallback/subagent-429-policy.d.ts +13 -0
  125. package/dist/runtime-fallback/subagent-429-policy.js +37 -0
  126. package/dist/runtime-fallback/subagent-429-policy.js.map +1 -0
  127. package/dist/runtime-fallback/subagent-429-session.d.ts +48 -0
  128. package/dist/runtime-fallback/subagent-429-session.js +316 -0
  129. package/dist/runtime-fallback/subagent-429-session.js.map +1 -0
  130. package/dist/shared/opencode-events.d.ts +22 -0
  131. package/dist/shared/opencode-events.js +75 -0
  132. package/dist/shared/opencode-events.js.map +1 -0
  133. package/dist/shared/types.d.ts +12 -1
  134. package/package.json +1 -1
  135. package/plugins/deepwork/.codex-plugin/plugin.json +1 -1
  136. package/plugins/deepwork/README.md +2 -1
  137. package/plugins/deepwork/agents/dw-builder.toml +1 -1
  138. package/plugins/deepwork/agents/dw-clarifier.toml +1 -1
  139. package/plugins/deepwork/agents/dw-code-search.toml +1 -1
  140. package/plugins/deepwork/agents/dw-coding.toml +1 -1
  141. package/plugins/deepwork/agents/dw-complex.toml +1 -1
  142. package/plugins/deepwork/agents/dw-creative.toml +1 -1
  143. package/plugins/deepwork/agents/dw-deep.toml +1 -1
  144. package/plugins/deepwork/agents/dw-doc-search.toml +1 -1
  145. package/plugins/deepwork/agents/dw-documenting.toml +1 -1
  146. package/plugins/deepwork/agents/dw-explore.toml +1 -1
  147. package/plugins/deepwork/agents/dw-frontend.toml +1 -1
  148. package/plugins/deepwork/agents/dw-hard-reasoning.toml +1 -1
  149. package/plugins/deepwork/agents/dw-media-reader.toml +1 -1
  150. package/plugins/deepwork/agents/dw-normal-task.toml +1 -1
  151. package/plugins/deepwork/agents/dw-oracle-2nd.toml +8 -0
  152. package/plugins/deepwork/agents/dw-oracle.toml +1 -1
  153. package/plugins/deepwork/agents/dw-orchestrator.toml +1 -1
  154. package/plugins/deepwork/agents/dw-plan-critic.toml +1 -1
  155. package/plugins/deepwork/agents/dw-planner.toml +1 -1
  156. package/plugins/deepwork/agents/dw-quick.toml +1 -1
  157. package/plugins/deepwork/agents/dw-research.toml +1 -1
  158. package/plugins/deepwork/agents/dw-reviewer.toml +1 -1
  159. package/plugins/deepwork/dist/cli/shim.d.ts +4 -2
  160. package/plugins/deepwork/dist/cli/shim.js +26 -11
  161. package/plugins/deepwork/dist/cli/shim.js.map +1 -1
  162. package/plugins/deepwork/dist/shared/opencode-events.d.ts +22 -0
  163. package/plugins/deepwork/dist/shared/opencode-events.js +75 -0
  164. package/plugins/deepwork/dist/shared/opencode-events.js.map +1 -0
  165. package/plugins/deepwork/dist/shared/types.d.ts +12 -1
  166. package/plugins/deepwork/package.json +1 -1
  167. package/plugins/deepwork/skills/deepwork/SKILL.md +30 -14
  168. package/plugins/deepwork/skills/deepwork-requesting-code-review/SKILL.md +53 -31
  169. package/plugins/deepwork/skills/deepwork-requesting-code-review/code-reviewer.md +11 -7
  170. package/plugins/deepwork/skills/deepwork-subagent-driven-development/SKILL.md +28 -19
  171. package/plugins/deepwork/skills/deepwork-subagent-driven-development/implementer-prompt.md +10 -3
  172. package/prompts/codex/agents/clarifier.md +4 -0
  173. package/prompts/codex/agents/orchestrator.md +12 -2
  174. package/prompts/codex/agents/plan-critic.md +4 -0
  175. package/prompts/codex/agents/planner.md +15 -10
  176. package/prompts/codex/agents/reviewer.md +8 -2
  177. package/prompts/codex/deepwork/gpt-5.6.md +20 -37
  178. package/prompts/omo/agents/clarifier.md +4 -0
  179. package/prompts/omo/agents/orchestrator.md +11 -0
  180. package/prompts/omo/agents/plan-critic.md +4 -0
  181. package/prompts/omo/agents/planner.md +15 -3
  182. package/prompts/omo/agents/reviewer.md +8 -2
  183. package/prompts/omo/deepwork/gpt-5.6.md +20 -37
  184. package/prompts/v1/agents/clarifier.md +4 -0
  185. package/prompts/v1/agents/orchestrator.md +12 -2
  186. package/prompts/v1/agents/plan-critic.md +4 -0
  187. package/prompts/v1/agents/planner.md +15 -10
  188. package/prompts/v1/agents/reviewer.md +8 -2
  189. package/prompts/v1/deepwork/gpt-5.6.md +20 -37
  190. package/skills/v1/requesting-code-review/SKILL.md +53 -31
  191. package/skills/v1/requesting-code-review/code-reviewer.md +11 -7
  192. package/skills/v1/subagent-driven-development/SKILL.md +28 -19
  193. package/skills/v1/subagent-driven-development/implementer-prompt.md +10 -3
  194. package/.codex/agents/dw-oracle-high.toml +0 -8
  195. package/plugins/deepwork/agents/dw-oracle-high.toml +0 -8
@@ -1,4 +1,134 @@
1
1
  import { isRecord } from "../shared/logger.js";
2
+ const RECOVERY_FIELDS = [
3
+ ["retryAfter", false],
4
+ ["retry_after", false],
5
+ ["retryDelay", false],
6
+ ["retryAfterMs", true],
7
+ ["retry_after_ms", true],
8
+ ];
9
+ const UNIT_MS = {
10
+ ms: 1,
11
+ millisecond: 1,
12
+ milliseconds: 1,
13
+ s: 1_000,
14
+ sec: 1_000,
15
+ secs: 1_000,
16
+ second: 1_000,
17
+ seconds: 1_000,
18
+ m: 60_000,
19
+ min: 60_000,
20
+ mins: 60_000,
21
+ minute: 60_000,
22
+ minutes: 60_000,
23
+ h: 3_600_000,
24
+ hr: 3_600_000,
25
+ hrs: 3_600_000,
26
+ hour: 3_600_000,
27
+ hours: 3_600_000,
28
+ };
29
+ const DURATION_RE = /^\s*(\d+(?:\.\d+)?)\s*(ms|milliseconds?|s|secs?|seconds?|m|mins?|minutes?|h|hrs?|hours?)\s*$/i;
30
+ const MESSAGE_DURATION_RE = /(?:retry after|try again in|reset in)\s+(\d+(?:\.\d+)?)\s*(ms|milliseconds?|s|secs?|seconds?|m|mins?|minutes?|h|hrs?|hours?)\b/gi;
31
+ const MESSAGE_TIMESTAMP_RE = /(?:reset at|retry at|try again at)\s+(.+?)(?=\s*;|$)/gi;
32
+ const ISO_TIMESTAMP_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})$/i;
33
+ const HTTP_DATE_RE = /^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} GMT$/i;
34
+ function positiveDelay(value) {
35
+ return Number.isFinite(value) && value > 0 ? value : undefined;
36
+ }
37
+ function parseTimestampDelay(value, now) {
38
+ const trimmed = value.trim();
39
+ if (!ISO_TIMESTAMP_RE.test(trimmed) && !HTTP_DATE_RE.test(trimmed))
40
+ return undefined;
41
+ const timestamp = Date.parse(trimmed);
42
+ return Number.isFinite(timestamp) ? positiveDelay(timestamp - now) : undefined;
43
+ }
44
+ function parseRetryAfterHeader(value, now) {
45
+ if (typeof value === "number")
46
+ return positiveDelay(value * 1_000);
47
+ if (typeof value !== "string")
48
+ return undefined;
49
+ const trimmed = value.trim();
50
+ if (/^[+-]?\d+(?:\.\d+)?$/.test(trimmed)) {
51
+ return positiveDelay(Number(trimmed) * 1_000);
52
+ }
53
+ return parseTimestampDelay(trimmed, now);
54
+ }
55
+ function parseRecoveryValue(value, isMilliseconds, now) {
56
+ const multiplier = isMilliseconds ? 1 : 1_000;
57
+ if (typeof value === "number")
58
+ return positiveDelay(value * multiplier);
59
+ if (typeof value !== "string")
60
+ return undefined;
61
+ const trimmed = value.trim();
62
+ if (/^[+-]?\d+(?:\.\d+)?$/.test(trimmed)) {
63
+ return positiveDelay(Number(trimmed) * multiplier);
64
+ }
65
+ const duration = trimmed.match(DURATION_RE);
66
+ if (duration) {
67
+ const unit = duration[2]?.toLowerCase();
68
+ const unitMultiplier = unit ? UNIT_MS[unit] : undefined;
69
+ if (unitMultiplier !== undefined) {
70
+ return positiveDelay(Number(duration[1]) * unitMultiplier);
71
+ }
72
+ }
73
+ return parseTimestampDelay(trimmed, now);
74
+ }
75
+ function collectMessageDelays(message, now) {
76
+ const delays = [];
77
+ for (const match of message.matchAll(MESSAGE_DURATION_RE)) {
78
+ const unit = match[2]?.toLowerCase();
79
+ const unitMultiplier = unit ? UNIT_MS[unit] : undefined;
80
+ const delay = unitMultiplier === undefined ? undefined : positiveDelay(Number(match[1]) * unitMultiplier);
81
+ if (delay !== undefined)
82
+ delays.push(delay);
83
+ }
84
+ for (const match of message.matchAll(MESSAGE_TIMESTAMP_RE)) {
85
+ const timestamp = match[1];
86
+ if (timestamp === undefined)
87
+ continue;
88
+ const delay = parseTimestampDelay(timestamp.trim(), now);
89
+ if (delay !== undefined)
90
+ delays.push(delay);
91
+ }
92
+ return delays;
93
+ }
94
+ export function extractRecoveryDelayMs(error, now = Date.now()) {
95
+ const delays = [];
96
+ const add = (delay) => {
97
+ if (delay !== undefined)
98
+ delays.push(delay);
99
+ };
100
+ const inspectRecord = (record) => {
101
+ for (const [field, isMilliseconds] of RECOVERY_FIELDS) {
102
+ add(parseRecoveryValue(record[field], isMilliseconds, now));
103
+ }
104
+ if (typeof record.message === "string") {
105
+ delays.push(...collectMessageDelays(record.message, now));
106
+ }
107
+ };
108
+ if (typeof error === "string") {
109
+ delays.push(...collectMessageDelays(error, now));
110
+ }
111
+ else if (isRecord(error)) {
112
+ inspectRecord(error);
113
+ for (const nested of [error.error, error.cause]) {
114
+ if (typeof nested === "string") {
115
+ delays.push(...collectMessageDelays(nested, now));
116
+ }
117
+ else if (isRecord(nested)) {
118
+ inspectRecord(nested);
119
+ }
120
+ }
121
+ const response = error.response;
122
+ if (isRecord(response) && isRecord(response.headers)) {
123
+ for (const [name, value] of Object.entries(response.headers)) {
124
+ if (name.toLowerCase() === "retry-after") {
125
+ add(parseRetryAfterHeader(value, now));
126
+ }
127
+ }
128
+ }
129
+ }
130
+ return delays.length > 0 ? Math.max(...delays) : undefined;
131
+ }
2
132
  export function extractStatusCode(error) {
3
133
  if (!isRecord(error))
4
134
  return undefined;
@@ -41,10 +171,11 @@ function extractMessage(error) {
41
171
  }
42
172
  return String(error ?? "");
43
173
  }
44
- export function classifyError(error, cfg) {
174
+ export function classifyError(error, cfg, now = Date.now()) {
45
175
  const message = extractMessage(error);
46
176
  const statusCode = extractStatusCode(error);
47
177
  const errorName = extractErrorName(error);
178
+ const recoveryDelayMs = statusCode === 429 ? extractRecoveryDelayMs(error, now) : undefined;
48
179
  if (statusCode !== undefined && cfg.retryOnStatusCodes.includes(statusCode)) {
49
180
  return {
50
181
  retryable: true,
@@ -52,6 +183,7 @@ export function classifyError(error, cfg) {
52
183
  statusCode,
53
184
  errorName,
54
185
  message,
186
+ ...(recoveryDelayMs === undefined ? {} : { recoveryDelayMs }),
55
187
  };
56
188
  }
57
189
  const lower = message.toLowerCase();
@@ -65,6 +197,7 @@ export function classifyError(error, cfg) {
65
197
  statusCode,
66
198
  errorName,
67
199
  message,
200
+ ...(recoveryDelayMs === undefined ? {} : { recoveryDelayMs }),
68
201
  };
69
202
  }
70
203
  }
@@ -78,6 +211,7 @@ export function classifyError(error, cfg) {
78
211
  statusCode,
79
212
  errorName,
80
213
  message,
214
+ ...(recoveryDelayMs === undefined ? {} : { recoveryDelayMs }),
81
215
  };
82
216
  }
83
217
  //# sourceMappingURL=error-classifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-classifier.js","sourceRoot":"","sources":["../../src/runtime-fallback/error-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-classifier.js","sourceRoot":"","sources":["../../src/runtime-fallback/error-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type FallbackState } from "./fallback-state.ts";
2
+ import { type OcmmClient } from "./dispatcher.ts";
3
+ import type { RuntimeFallbackConfig } from "../config/schema.ts";
4
+ import type { ModelRequirement } from "../shared/types.ts";
5
+ import type { ErrorClassification } from "./error-classifier.ts";
6
+ import type { Subagent429Target } from "./subagent-429-controller.ts";
7
+ import { type RuntimeFallbackSessionLifecycle } from "./event-handler-support.ts";
8
+ export type GenericFallbackInput = {
9
+ sessionID: string;
10
+ generation: number;
11
+ snapshotId: number;
12
+ agent?: string;
13
+ classification: ErrorClassification;
14
+ requirement: ModelRequirement | null;
15
+ state?: FallbackState;
16
+ failedTarget?: Subagent429Target;
17
+ runtimeConfig: RuntimeFallbackConfig;
18
+ };
19
+ export type GenericFallbackContext = {
20
+ lifecycle: RuntimeFallbackSessionLifecycle;
21
+ isCurrentSnapshot: (snapshotId: number) => boolean;
22
+ client?: OcmmClient;
23
+ directory?: string;
24
+ clock: () => number;
25
+ };
26
+ export declare function runGenericFallback(ctx: GenericFallbackContext, input: GenericFallbackInput): Promise<void>;
@@ -0,0 +1,54 @@
1
+ import { markModelFailed, modelKey, peekNextFallback, commitFallback, } from "./fallback-state.js";
2
+ import { dispatchFallbackRetry } from "./dispatcher.js";
3
+ import { applyRequirementDefaults } from "./event-handler-support.js";
4
+ import { log } from "../shared/logger.js";
5
+ export async function runGenericFallback(ctx, input) {
6
+ const { lifecycle, client, directory, clock, isCurrentSnapshot } = ctx;
7
+ const { sessionID, generation, snapshotId, agent, classification, requirement, state, failedTarget, runtimeConfig } = input;
8
+ const isCurrent = () => lifecycle.isCurrent(sessionID, generation) && isCurrentSnapshot(snapshotId);
9
+ if (!isCurrent())
10
+ return;
11
+ if (!classification.retryable)
12
+ return;
13
+ if (!requirement || requirement.fallbackChain.length <= 1) {
14
+ log.info(`no fallback chain configured for agent=${agent ?? "<none>"}; skipping`);
15
+ return;
16
+ }
17
+ if (!state || !failedTarget) {
18
+ log.info(`could not determine failed model for agent=${agent ?? "<none>"}; skipping`);
19
+ return;
20
+ }
21
+ const justFailedKey = modelKey(failedTarget.providerID, failedTarget.modelID);
22
+ markModelFailed(state, justFailedKey, clock());
23
+ const peek = peekNextFallback(state, requirement, justFailedKey, runtimeConfig.maxAttempts, runtimeConfig.cooldownSeconds, clock());
24
+ if (!peek.ok) {
25
+ log.warn(`fallback exhausted: ${peek.reason} (session=${sessionID.slice(0, 16)}…)`);
26
+ return;
27
+ }
28
+ const entry = applyRequirementDefaults(requirement, peek.entry);
29
+ log.info(`fallback attempt ${peek.nextAttempts}/${runtimeConfig.maxAttempts}: ` +
30
+ `model=${entry.providers[0] ?? ""}/${entry.model}`);
31
+ if (!runtimeConfig.dispatch) {
32
+ log.info("dispatch disabled; observe-only");
33
+ return;
34
+ }
35
+ if (!client) {
36
+ log.warn("no client available; cannot dispatch (observe-only)");
37
+ return;
38
+ }
39
+ await lifecycle.waitForStaleDispatches(sessionID, generation);
40
+ if (!isCurrent())
41
+ return;
42
+ const dispatched = await lifecycle.trackDispatch(sessionID, generation, dispatchFallbackRetry({
43
+ client: lifecycle.guardedClient(sessionID, generation, () => isCurrentSnapshot(snapshotId)),
44
+ sessionID,
45
+ ...(directory === undefined ? {} : { directory }),
46
+ ...(agent === undefined ? {} : { agent }),
47
+ newEntry: entry,
48
+ reason: classification.reason,
49
+ }));
50
+ if (dispatched && isCurrent()) {
51
+ commitFallback(state, entry, peek.index);
52
+ }
53
+ }
54
+ //# sourceMappingURL=event-handler-generic-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler-generic-fallback.js","sourceRoot":"","sources":["../../src/runtime-fallback/event-handler-generic-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { OcmmClient } from "./dispatcher.ts";
2
+ import type { OcmmConfig } from "../config/schema.ts";
3
+ import { type IdleContinuationState } from "./idle-state.ts";
4
+ export type IdleContinuationDeps = {
5
+ getConfig: () => OcmmConfig;
6
+ client?: OcmmClient;
7
+ idleState?: IdleContinuationState;
8
+ };
9
+ export declare function handleIdleContinuation(deps: IdleContinuationDeps, sessionID: string): Promise<void>;
@@ -0,0 +1,48 @@
1
+ import { isIdleContinuationEnabled, clearSession, getSessionData, DEFAULT_CONTINUATION_PROMPT, } from "./idle-state.js";
2
+ import { hasUnfinishedTodos } from "./todo-reader.js";
3
+ import { log } from "../shared/logger.js";
4
+ export async function handleIdleContinuation(deps, sessionID) {
5
+ const idleState = deps.idleState;
6
+ if (!idleState)
7
+ return;
8
+ const data = idleState.sessionData.get(sessionID);
9
+ // ESC abort - never continue
10
+ if (data?.aborted) {
11
+ clearSession(idleState, sessionID);
12
+ return;
13
+ }
14
+ // Not enabled - clean up
15
+ if (!isIdleContinuationEnabled(idleState, sessionID)) {
16
+ clearSession(idleState, sessionID);
17
+ return;
18
+ }
19
+ const cfg = deps.getConfig();
20
+ const idleCfg = cfg.idleContinuation;
21
+ const maxContinuations = idleCfg?.maxContinuations ?? 20;
22
+ const count = data?.continuationCount ?? 0;
23
+ if (count >= maxContinuations) {
24
+ clearSession(idleState, sessionID);
25
+ return;
26
+ }
27
+ if (!deps.client)
28
+ return;
29
+ const hasUnfinished = await hasUnfinishedTodos(deps.client, sessionID);
30
+ if (!hasUnfinished) {
31
+ clearSession(idleState, sessionID);
32
+ return;
33
+ }
34
+ const prompt = idleCfg?.prompt ?? DEFAULT_CONTINUATION_PROMPT;
35
+ try {
36
+ await deps.client.session.prompt({
37
+ path: { id: sessionID },
38
+ body: { parts: [{ type: "text", text: prompt }] },
39
+ });
40
+ const sessionData = getSessionData(idleState, sessionID);
41
+ sessionData.continuationCount = count + 1;
42
+ }
43
+ catch (err) {
44
+ log.warn("idle continuation prompt failed", { sessionID, error: String(err) });
45
+ clearSession(idleState, sessionID);
46
+ }
47
+ }
48
+ //# sourceMappingURL=event-handler-idle-continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler-idle-continuation.js","sourceRoot":"","sources":["../../src/runtime-fallback/event-handler-idle-continuation.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,2BAA2B,GAE5B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAQzC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAA0B,EAAE,SAAiB;IACxF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;IAChC,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACjD,6BAA6B;IAC7B,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAClC,OAAM;IACR,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QACrD,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAClC,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAA;IACpC,MAAM,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAA;IAExD,MAAM,KAAK,GAAG,IAAI,EAAE,iBAAiB,IAAI,CAAC,CAAA;IAC1C,IAAI,KAAK,IAAI,gBAAgB,EAAE,CAAC;QAC9B,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAClC,OAAM;IACR,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAM;IAExB,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAClC,OAAM;IACR,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,2BAA2B,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;SAClD,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACxD,WAAW,CAAC,iBAAiB,GAAG,KAAK,GAAG,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9E,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { FallbackEntry, ModelRequirement } from "../shared/types.ts";
2
+ import type { Subagent429Target } from "./subagent-429-controller.ts";
3
+ import { type FallbackState } from "./fallback-state.ts";
4
+ import type { OcmmClient } from "./dispatcher.ts";
5
+ export type ModelIdentity = {
6
+ providerID: string;
7
+ modelID: string;
8
+ };
9
+ export declare function isExplicitRuntimeFallbackAbort(error: unknown): boolean;
10
+ export declare function isRuntimeFallbackAbort(error: unknown): boolean;
11
+ export declare function resolveRuntimeFallbackSessionID(props: unknown): string;
12
+ export declare function resolveRuntimeFallbackAgent(props: unknown): string | undefined;
13
+ export declare function resolveEventModelIdentity(props: unknown): ModelIdentity | null;
14
+ export declare function parseModelIdentity(value: string | null | undefined): ModelIdentity | null;
15
+ export declare function resolveParentSessionID(props: unknown): string | undefined;
16
+ export declare function applyRequirementDefaults(requirement: ModelRequirement | null | undefined, entry: FallbackEntry): FallbackEntry;
17
+ /**
18
+ * Build a retry target that retains the selected chain entry's inference
19
+ * metadata while pinning dispatch to the provider/model that actually failed.
20
+ */
21
+ export declare function resolveRetryTarget(requirement: ModelRequirement | null | undefined, identity: ModelIdentity): Subagent429Target;
22
+ export declare function chainHeadIdentity(requirement: ModelRequirement | null): ModelIdentity | null;
23
+ export declare function getOrCreateFallbackState(sessionStates: Map<string, FallbackState>, sessionID: string, requirement: ModelRequirement, identity: ModelIdentity, snapshotId: number): FallbackState;
24
+ /**
25
+ * Coordinates event lifecycles with dispatcher I/O. Invalidating a session
26
+ * unblocks stale abort/messages/prompt calls and lets a replacement lifecycle
27
+ * wait for that stale dispatcher ownership to leave its session-ID lock.
28
+ */
29
+ export type RuntimeFallbackSessionLifecycle = {
30
+ beginSession: (sessionID: string) => number;
31
+ hasSession: (sessionID: string) => boolean;
32
+ invalidateSession: (sessionID: string) => void;
33
+ currentGeneration: (sessionID: string) => number;
34
+ isCurrent: (sessionID: string, generation: number) => boolean;
35
+ trackDispatch: <T>(sessionID: string, generation: number, promise: Promise<T>) => Promise<T>;
36
+ waitForStaleDispatches: (sessionID: string, generation: number) => Promise<void>;
37
+ guardedClient: (sessionID: string, generation: number, isOperationCurrent?: () => boolean) => OcmmClient;
38
+ };
39
+ export declare function createRuntimeFallbackSessionLifecycle(client: OcmmClient | undefined): RuntimeFallbackSessionLifecycle;
@@ -0,0 +1,194 @@
1
+ import { entryExactlyMatchesModel, entryMatchesModel } from "../routing/resolver.js";
2
+ import { matchRequirementSuccessor } from "../routing/model-upgrades.js";
3
+ import { isRecord } from "../shared/logger.js";
4
+ import { resolveSessionLineageProperties } from "../shared/opencode-events.js";
5
+ import { createFallbackState, modelKey } from "./fallback-state.js";
6
+ const ABORT_NAMES = new Set(["AbortError", "DOMException"]);
7
+ export function isExplicitRuntimeFallbackAbort(error) {
8
+ return isRecord(error) && error.isAbort === true;
9
+ }
10
+ export function isRuntimeFallbackAbort(error) {
11
+ if (!isRecord(error))
12
+ return false;
13
+ const name = typeof error.name === "string" ? error.name : "";
14
+ return ABORT_NAMES.has(name) || isExplicitRuntimeFallbackAbort(error);
15
+ }
16
+ export function resolveRuntimeFallbackSessionID(props) {
17
+ return resolveSessionLineageProperties(props)?.sessionID ?? "";
18
+ }
19
+ export function resolveRuntimeFallbackAgent(props) {
20
+ if (!isRecord(props))
21
+ return undefined;
22
+ if (typeof props.agent === "string")
23
+ return props.agent;
24
+ if (isRecord(props.agent) && typeof props.agent.name === "string")
25
+ return props.agent.name;
26
+ return undefined;
27
+ }
28
+ export function resolveEventModelIdentity(props) {
29
+ if (!isRecord(props) || !isRecord(props.model))
30
+ return null;
31
+ const providerID = typeof props.model.providerID === "string" ? props.model.providerID : "";
32
+ const modelID = typeof props.model.modelID === "string" ? props.model.modelID : "";
33
+ return providerID && modelID ? { providerID, modelID } : null;
34
+ }
35
+ export function parseModelIdentity(value) {
36
+ if (!value)
37
+ return null;
38
+ const slash = value.indexOf("/");
39
+ if (slash <= 0 || slash === value.length - 1)
40
+ return null;
41
+ return { providerID: value.slice(0, slash), modelID: value.slice(slash + 1) };
42
+ }
43
+ export function resolveParentSessionID(props) {
44
+ return resolveSessionLineageProperties(props)?.parentSessionID;
45
+ }
46
+ function matchingEntry(requirement, identity) {
47
+ if (!requirement)
48
+ return undefined;
49
+ return requirement.fallbackChain.find((entry) => entryExactlyMatchesModel(entry, identity.providerID, identity.modelID))
50
+ ?? matchRequirementSuccessor(requirement, identity.providerID, identity.modelID)
51
+ ?? requirement.fallbackChain.find((entry) => entryMatchesModel(entry, identity.providerID, identity.modelID));
52
+ }
53
+ export function applyRequirementDefaults(requirement, entry) {
54
+ return entry.variant === undefined && requirement?.variant !== undefined
55
+ ? { ...entry, variant: requirement.variant }
56
+ : entry;
57
+ }
58
+ /**
59
+ * Build a retry target that retains the selected chain entry's inference
60
+ * metadata while pinning dispatch to the provider/model that actually failed.
61
+ */
62
+ export function resolveRetryTarget(requirement, identity) {
63
+ const template = matchingEntry(requirement, identity);
64
+ const base = applyRequirementDefaults(requirement, template ?? { providers: [identity.providerID], model: identity.modelID });
65
+ const entry = { ...base, providers: [identity.providerID], model: identity.modelID };
66
+ return { providerID: identity.providerID, modelID: identity.modelID, entry };
67
+ }
68
+ export function chainHeadIdentity(requirement) {
69
+ const head = requirement?.fallbackChain[0];
70
+ const providerID = head?.providers[0];
71
+ return head && providerID ? { providerID, modelID: head.model } : null;
72
+ }
73
+ export function getOrCreateFallbackState(sessionStates, sessionID, requirement, identity, snapshotId) {
74
+ const existing = sessionStates.get(sessionID);
75
+ if (existing?.snapshotId === snapshotId)
76
+ return existing;
77
+ const initialKey = modelKey(identity.providerID, identity.modelID);
78
+ const state = createFallbackState(initialKey, snapshotId);
79
+ state.activeModel = initialKey;
80
+ const matched = matchingEntry(requirement, identity);
81
+ // A synthesized successor is deliberately not an in-chain entry, so indexOf
82
+ // preserves -1 and starts the next fallback at the effective chain head.
83
+ state.fallbackIndex = matched ? requirement.fallbackChain.indexOf(matched) : -1;
84
+ sessionStates.set(sessionID, state);
85
+ return state;
86
+ }
87
+ export function createRuntimeFallbackSessionLifecycle(client) {
88
+ const sessionGenerations = new Map();
89
+ const cancellationSignals = new Map();
90
+ const activeDispatches = new Map();
91
+ let nextGeneration = 0;
92
+ const createCancellationSignal = () => {
93
+ let cancel;
94
+ const promise = new Promise((resolve) => { cancel = resolve; });
95
+ return { promise, cancel };
96
+ };
97
+ const beginSession = (sessionID) => {
98
+ const previous = sessionGenerations.get(sessionID);
99
+ if (previous !== undefined) {
100
+ cancellationSignals.get(previous)?.cancel();
101
+ cancellationSignals.delete(previous);
102
+ }
103
+ const generation = ++nextGeneration;
104
+ sessionGenerations.set(sessionID, generation);
105
+ cancellationSignals.set(generation, createCancellationSignal());
106
+ return generation;
107
+ };
108
+ const hasSession = (sessionID) => sessionGenerations.has(sessionID);
109
+ const invalidateSession = (sessionID) => {
110
+ const generation = sessionGenerations.get(sessionID);
111
+ if (generation !== undefined) {
112
+ cancellationSignals.get(generation)?.cancel();
113
+ cancellationSignals.delete(generation);
114
+ }
115
+ nextGeneration++;
116
+ sessionGenerations.delete(sessionID);
117
+ };
118
+ const currentGeneration = (sessionID) => sessionGenerations.get(sessionID) ?? beginSession(sessionID);
119
+ const isCurrent = (sessionID, generation) => sessionGenerations.get(sessionID) === generation;
120
+ const trackDispatch = (sessionID, generation, promise) => {
121
+ let byGeneration = activeDispatches.get(sessionID);
122
+ if (!byGeneration) {
123
+ byGeneration = new Map();
124
+ activeDispatches.set(sessionID, byGeneration);
125
+ }
126
+ let dispatches = byGeneration.get(generation);
127
+ if (!dispatches) {
128
+ dispatches = new Set();
129
+ byGeneration.set(generation, dispatches);
130
+ }
131
+ const tracked = promise;
132
+ dispatches.add(tracked);
133
+ const remove = () => {
134
+ dispatches.delete(tracked);
135
+ if (dispatches.size === 0)
136
+ byGeneration.delete(generation);
137
+ if (byGeneration.size === 0)
138
+ activeDispatches.delete(sessionID);
139
+ };
140
+ void tracked.then(remove, remove);
141
+ return promise;
142
+ };
143
+ const waitForStaleDispatches = async (sessionID, generation) => {
144
+ const byGeneration = activeDispatches.get(sessionID);
145
+ if (!byGeneration)
146
+ return;
147
+ const stale = [...byGeneration.entries()]
148
+ .filter(([otherGeneration]) => otherGeneration !== generation)
149
+ .flatMap(([, dispatches]) => [...dispatches]);
150
+ if (stale.length > 0)
151
+ await Promise.allSettled(stale);
152
+ };
153
+ const guardedClient = (sessionID, generation, isOperationCurrent = undefined) => {
154
+ const operationIsCurrent = () => isCurrent(sessionID, generation) && (isOperationCurrent?.() ?? true);
155
+ return {
156
+ session: {
157
+ async abort(args) {
158
+ if (!operationIsCurrent() || !client)
159
+ return undefined;
160
+ const cancelled = cancellationSignals.get(generation)?.promise ?? Promise.resolve();
161
+ const response = await Promise.race([client.session.abort(args), cancelled]);
162
+ return operationIsCurrent() ? response : undefined;
163
+ },
164
+ async messages(args) {
165
+ if (!operationIsCurrent() || !client)
166
+ return { messages: [] };
167
+ const cancelled = cancellationSignals.get(generation)?.promise ?? Promise.resolve();
168
+ const response = await Promise.race([client.session.messages(args), cancelled]);
169
+ return operationIsCurrent() ? response : { messages: [] };
170
+ },
171
+ async prompt(args) {
172
+ if (!operationIsCurrent() || !client)
173
+ throw new Error("runtime fallback session is stale");
174
+ const cancelled = cancellationSignals.get(generation)?.promise ?? Promise.resolve();
175
+ const response = await Promise.race([client.session.prompt(args), cancelled]);
176
+ if (!operationIsCurrent())
177
+ throw new Error("runtime fallback session became stale");
178
+ return response;
179
+ },
180
+ },
181
+ };
182
+ };
183
+ return {
184
+ beginSession,
185
+ hasSession,
186
+ invalidateSession,
187
+ currentGeneration,
188
+ isCurrent,
189
+ trackDispatch,
190
+ waitForStaleDispatches,
191
+ guardedClient,
192
+ };
193
+ }
194
+ //# sourceMappingURL=event-handler-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler-support.js","sourceRoot":"","sources":["../../src/runtime-fallback/event-handler-support.ts"],"names":[],"mappings":"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"}