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
@@ -0,0 +1,316 @@
1
+ import { candidateBlocker, blockedUntil, recoveryDeadline, scheduleDelay, scopeFor } from "./subagent-429-policy.js";
2
+ export class Session429State {
3
+ lifecycleGeneration = 0;
4
+ timerGeneration = 0;
5
+ nextDispatchGeneration = 0;
6
+ initialPending = true;
7
+ pending;
8
+ active;
9
+ retryCounts = new Map();
10
+ blocked = new Map();
11
+ lastRecoveryDeadlines = new Map();
12
+ sessionID;
13
+ snapshotId;
14
+ deps;
15
+ isLive;
16
+ remove;
17
+ constructor(sessionID, snapshotId, deps, isLive, remove) {
18
+ this.sessionID = sessionID;
19
+ this.snapshotId = snapshotId;
20
+ this.deps = deps;
21
+ this.isLive = isLive;
22
+ this.remove = remove;
23
+ }
24
+ matchesSnapshot(snapshotId) { return this.snapshotId === snapshotId; }
25
+ activeTarget() { return this.active?.dispatch.target; }
26
+ stop() {
27
+ if (!this.isLive())
28
+ return;
29
+ this.lifecycleGeneration++;
30
+ this.timerGeneration++;
31
+ this.nextDispatchGeneration++;
32
+ this.pending?.cancel?.();
33
+ this.pending = undefined;
34
+ this.active = undefined;
35
+ this.remove();
36
+ }
37
+ on429(input) {
38
+ if (!this.matchesSnapshot(input.snapshotId) || this.stopIfSnapshotStale())
39
+ return { handled: false };
40
+ const restricted = this.restriction(input);
41
+ if (restricted)
42
+ return restricted;
43
+ if (this.active)
44
+ return this.queue429(input, this.active);
45
+ if (this.pending)
46
+ return { handled: true, action: "duplicate-outcome", dispatchGeneration: this.nextDispatchGeneration };
47
+ return this.process429(input, false);
48
+ }
49
+ onOtherError(input) {
50
+ if (!this.matchesSnapshot(input.snapshotId) || this.stopIfSnapshotStale())
51
+ return { handled: false };
52
+ const active = this.active;
53
+ if (!active) {
54
+ this.stop();
55
+ return { handled: false };
56
+ }
57
+ if (active.queuedOutcome)
58
+ return { handled: true, action: "duplicate-outcome", dispatchGeneration: active.generation };
59
+ active.queuedOutcome = {
60
+ kind: "other",
61
+ snapshotId: input.snapshotId,
62
+ dispatchGeneration: active.generation,
63
+ runGenericFallback: input.runGenericFallback,
64
+ };
65
+ if (active.settled)
66
+ this.processQueued(active);
67
+ return { handled: true, action: "queued-other-error", dispatchGeneration: active.generation };
68
+ }
69
+ onIdle() {
70
+ if (this.stopIfSnapshotStale())
71
+ return { kind: "untracked", suppressIdleContinuation: false };
72
+ if (this.initialPending) {
73
+ this.stop();
74
+ return { kind: "initial-succeeded", suppressIdleContinuation: false };
75
+ }
76
+ if (this.pending) {
77
+ this.pending.errorIdleObserved = true;
78
+ this.maybeStart(this.pending);
79
+ return { kind: "error-idle-observed", suppressIdleContinuation: true };
80
+ }
81
+ const active = this.active;
82
+ if (!active)
83
+ return { kind: "untracked", suppressIdleContinuation: false };
84
+ if (active.queuedOutcome?.kind === "429") {
85
+ if (active.queuedOutcome.snapshotId !== this.snapshotId) {
86
+ this.stop();
87
+ return { kind: "untracked", suppressIdleContinuation: false };
88
+ }
89
+ active.queuedOutcome.errorIdleObserved = true;
90
+ return { kind: "queued-error-idle-observed", suppressIdleContinuation: true };
91
+ }
92
+ active.idleObserved = true;
93
+ if (active.settled && !active.queuedOutcome) {
94
+ this.stop();
95
+ return { kind: "retry-succeeded", suppressIdleContinuation: false };
96
+ }
97
+ return { kind: "dispatch-idle-observed", suppressIdleContinuation: true };
98
+ }
99
+ restriction(input) {
100
+ const config = input.runtimeConfig;
101
+ if (!config.subagent429.enabled || !config.enabled) {
102
+ this.stop();
103
+ return { handled: false };
104
+ }
105
+ if (!config.dispatch) {
106
+ this.deps.logger.info("subagent429 observe-only", this.logTarget(input.target));
107
+ this.stop();
108
+ return { handled: true, action: "observe-only" };
109
+ }
110
+ if (this.deps.dispatchRetry)
111
+ return undefined;
112
+ this.deps.logger.warn("subagent429 dispatch stopped", { ...this.logTarget(input.target), reason: "dispatch-unavailable" });
113
+ this.stop();
114
+ return { handled: true, action: "stopped", reason: "dispatch-unavailable" };
115
+ }
116
+ process429(input, errorIdleObserved) {
117
+ if (!this.matchesSnapshot(input.snapshotId) || this.stopIfSnapshotStale())
118
+ return { handled: false };
119
+ const restricted = this.restriction(input);
120
+ if (restricted)
121
+ return restricted;
122
+ this.initialPending = false;
123
+ const scope = scopeFor(input.target, input.runtimeConfig);
124
+ const retriesUsed = this.retryCounts.get(scope.key) ?? 0;
125
+ const observedAt = this.deps.clock();
126
+ const deadline = recoveryDeadline(observedAt, input.classification.recoveryDelayMs);
127
+ if (deadline !== undefined)
128
+ this.lastRecoveryDeadlines.set(scope.key, deadline);
129
+ if (retriesUsed >= input.runtimeConfig.subagent429.maxRetries) {
130
+ this.blocked.set(scope.key, blockedUntil(this.lastRecoveryDeadlines.get(scope.key), observedAt, input.runtimeConfig.cooldownSeconds));
131
+ const prepared = input.prepareSwitch(input.target, candidateBlocker(this.blocked, input.runtimeConfig, this.deps.clock));
132
+ if (!prepared.ok) {
133
+ this.deps.logger.warn("subagent429 switch stopped", { ...this.logTarget(input.target), scope: scope.scope, reason: prepared.reason });
134
+ this.stop();
135
+ return { handled: true, action: "stopped", reason: prepared.reason };
136
+ }
137
+ if (prepared.prepared.snapshotId !== input.snapshotId) {
138
+ this.stop();
139
+ return { handled: false };
140
+ }
141
+ const dispatch = {
142
+ kind: "switch",
143
+ snapshotId: prepared.prepared.snapshotId,
144
+ target: prepared.prepared.target,
145
+ ...(input.agent === undefined ? {} : { agent: input.agent }),
146
+ reason: input.classification.reason,
147
+ prepared: prepared.prepared,
148
+ };
149
+ this.installGate(dispatch, 0, errorIdleObserved);
150
+ this.deps.logger.info("subagent429 switch gated", { ...this.logTarget(dispatch.target), attempt: prepared.prepared.attempt, delayMs: 0, scope: scope.scope, reason: dispatch.reason });
151
+ return { handled: true, action: "switch-gated", attempt: prepared.prepared.attempt, target: dispatch.target };
152
+ }
153
+ const delayMs = scheduleDelay(retriesUsed, input.classification.recoveryDelayMs, this.deps.random);
154
+ const dispatch = {
155
+ kind: "retry",
156
+ snapshotId: input.snapshotId,
157
+ target: input.target,
158
+ ...(input.agent === undefined ? {} : { agent: input.agent }),
159
+ reason: input.classification.reason,
160
+ scope: scope.scope,
161
+ scopeKey: scope.key,
162
+ retriesUsed,
163
+ retryOrdinal: retriesUsed + 1,
164
+ };
165
+ this.installGate(dispatch, delayMs, errorIdleObserved);
166
+ this.deps.logger.info("subagent429 retry gated", { ...this.logTarget(dispatch.target), retryOrdinal: dispatch.retryOrdinal, delayMs, scope: dispatch.scope, reason: dispatch.reason });
167
+ return { handled: true, action: "retry-gated", delayMs, retryOrdinal: dispatch.retryOrdinal, scope: dispatch.scope };
168
+ }
169
+ queue429(input, active) {
170
+ if (active.queuedOutcome)
171
+ return { handled: true, action: "duplicate-outcome", dispatchGeneration: active.generation };
172
+ active.queuedOutcome = {
173
+ kind: "429",
174
+ snapshotId: input.snapshotId,
175
+ dispatchGeneration: active.generation,
176
+ input,
177
+ errorIdleObserved: false,
178
+ };
179
+ if (active.settled)
180
+ this.processQueued(active);
181
+ return { handled: true, action: "queued-429", dispatchGeneration: active.generation };
182
+ }
183
+ installGate(dispatch, delayMs, errorIdleObserved) {
184
+ if (!this.matchesSnapshot(dispatch.snapshotId) || this.stopIfSnapshotStale())
185
+ return;
186
+ this.pending?.cancel?.();
187
+ const generation = ++this.timerGeneration;
188
+ const gate = {
189
+ generation,
190
+ snapshotId: dispatch.snapshotId,
191
+ delayReady: false,
192
+ errorIdleObserved,
193
+ started: false,
194
+ dispatch,
195
+ };
196
+ this.pending = gate;
197
+ gate.cancel = this.deps.scheduler.schedule(delayMs, async () => {
198
+ if (this.stopIfSnapshotStale())
199
+ return;
200
+ if (this.pending !== gate || this.timerGeneration !== generation || gate.snapshotId !== this.snapshotId)
201
+ return;
202
+ gate.delayReady = true;
203
+ this.maybeStart(gate);
204
+ });
205
+ this.maybeStart(gate);
206
+ }
207
+ maybeStart(gate) {
208
+ if (this.stopIfSnapshotStale())
209
+ return;
210
+ if (this.pending !== gate || gate.snapshotId !== this.snapshotId || gate.started || !gate.delayReady || !gate.errorIdleObserved)
211
+ return;
212
+ gate.started = true;
213
+ gate.cancel?.();
214
+ this.pending = undefined;
215
+ const active = {
216
+ generation: ++this.nextDispatchGeneration,
217
+ lifecycleGeneration: this.lifecycleGeneration,
218
+ snapshotId: gate.snapshotId,
219
+ dispatch: gate.dispatch,
220
+ idleObserved: false,
221
+ settled: false,
222
+ accounted: false,
223
+ };
224
+ this.active = active;
225
+ void this.settle(active);
226
+ }
227
+ async settle(active) {
228
+ if (!this.isCurrent(active)) {
229
+ this.stop();
230
+ return;
231
+ }
232
+ let dispatched = false;
233
+ try {
234
+ dispatched = await this.deps.dispatchRetry({
235
+ sessionID: this.sessionID,
236
+ snapshotId: active.snapshotId,
237
+ ...(active.dispatch.agent === undefined ? {} : { agent: active.dispatch.agent }),
238
+ target: active.dispatch.target,
239
+ reason: active.dispatch.reason,
240
+ });
241
+ }
242
+ catch {
243
+ dispatched = false;
244
+ }
245
+ if (!this.isCurrent(active)) {
246
+ this.stop();
247
+ return;
248
+ }
249
+ active.settled = true;
250
+ const requestProven = dispatched || active.queuedOutcome !== undefined;
251
+ if (requestProven && !active.accounted && !this.account(active))
252
+ return;
253
+ if (active.queuedOutcome)
254
+ return this.processQueued(active);
255
+ if (active.idleObserved)
256
+ return this.stop();
257
+ if (!dispatched) {
258
+ this.deps.logger.warn("subagent429 dispatch stopped", { ...this.logTarget(active.dispatch.target), reason: "bare-false" });
259
+ return this.stop();
260
+ }
261
+ }
262
+ processQueued(active) {
263
+ if (!active.queuedOutcome)
264
+ return;
265
+ const outcome = active.queuedOutcome;
266
+ if (!this.isCurrent(active) || outcome.snapshotId !== active.snapshotId) {
267
+ this.stop();
268
+ return;
269
+ }
270
+ this.active = undefined;
271
+ if (outcome.kind === "other") {
272
+ this.stop();
273
+ void outcome.runGenericFallback(active.dispatch.target).catch(() => {
274
+ this.deps.logger.warn("subagent429 generic handoff failed", { ...this.logTarget(active.dispatch.target), reason: "handoff-threw" });
275
+ });
276
+ return;
277
+ }
278
+ this.process429({
279
+ ...outcome.input,
280
+ snapshotId: outcome.snapshotId,
281
+ target: active.dispatch.target,
282
+ }, outcome.errorIdleObserved);
283
+ }
284
+ account(active) {
285
+ if (!this.isCurrent(active)) {
286
+ this.stop();
287
+ return false;
288
+ }
289
+ active.accounted = true;
290
+ if (active.dispatch.kind === "retry")
291
+ this.retryCounts.set(active.dispatch.scopeKey, active.dispatch.retriesUsed + 1);
292
+ else
293
+ active.dispatch.prepared.commit();
294
+ return true;
295
+ }
296
+ isCurrent(active) {
297
+ return this.isSnapshotCurrent()
298
+ && this.active === active
299
+ && this.lifecycleGeneration === active.lifecycleGeneration
300
+ && active.snapshotId === this.snapshotId
301
+ && active.dispatch.snapshotId === this.snapshotId;
302
+ }
303
+ isSnapshotCurrent() {
304
+ return this.isLive() && this.deps.isCurrentSnapshot(this.snapshotId);
305
+ }
306
+ stopIfSnapshotStale() {
307
+ if (this.isSnapshotCurrent())
308
+ return false;
309
+ this.stop();
310
+ return true;
311
+ }
312
+ logTarget(target) {
313
+ return { sessionID: this.sessionID, providerID: target.providerID, modelID: target.modelID };
314
+ }
315
+ }
316
+ //# sourceMappingURL=subagent-429-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-429-session.js","sourceRoot":"","sources":["../../src/runtime-fallback/subagent-429-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type SessionLineage = {
2
+ sessionID: string;
3
+ parentSessionID?: string;
4
+ };
5
+ export type TaskPartInterruptionEvidence = {
6
+ childSessionID: string;
7
+ parentSessionID: string;
8
+ parentPartID?: string;
9
+ callID?: string;
10
+ agent?: string;
11
+ taskID?: string;
12
+ terminalTaskErrorObserved: true;
13
+ transportInterrupted: boolean;
14
+ errorText: string;
15
+ };
16
+ export declare function eventEnvelope(raw: unknown): {
17
+ type: string;
18
+ properties: Record<string, unknown>;
19
+ } | null;
20
+ export declare function resolveSessionLineageProperties(props: unknown): SessionLineage | null;
21
+ export declare function resolveSessionLineage(raw: unknown): SessionLineage | null;
22
+ export declare function resolveTaskPartInterruption(raw: unknown): TaskPartInterruptionEvidence | null;
@@ -0,0 +1,75 @@
1
+ import { isRecord } from "./logger.js";
2
+ function stringField(value, keys) {
3
+ if (!isRecord(value))
4
+ return undefined;
5
+ for (const key of keys) {
6
+ const found = value[key];
7
+ if (typeof found === "string" && found.length > 0)
8
+ return found;
9
+ }
10
+ return undefined;
11
+ }
12
+ export function eventEnvelope(raw) {
13
+ if (!isRecord(raw))
14
+ return null;
15
+ const event = isRecord(raw.event) ? raw.event : raw;
16
+ const type = typeof event.type === "string" ? event.type : "";
17
+ if (!type)
18
+ return null;
19
+ const properties = isRecord(event.properties) ? event.properties : event;
20
+ return { type, properties };
21
+ }
22
+ export function resolveSessionLineageProperties(props) {
23
+ if (!isRecord(props))
24
+ return null;
25
+ const info = isRecord(props.info) ? props.info : undefined;
26
+ const session = isRecord(props.session) ? props.session : undefined;
27
+ const sessionID = stringField(props, ["sessionID", "sessionId"])
28
+ ?? (session ? stringField(session, ["id", "sessionID", "sessionId"]) : undefined)
29
+ ?? (info ? stringField(info, ["id", "sessionID", "sessionId"]) : undefined);
30
+ if (!sessionID)
31
+ return null;
32
+ const parentSessionID = stringField(props, ["parentID", "parentId", "parentSessionID", "parentSessionId"])
33
+ ?? (session ? stringField(session, ["parentID", "parentId", "parentSessionID", "parentSessionId"]) : undefined)
34
+ ?? (info ? stringField(info, ["parentID", "parentId", "parentSessionID", "parentSessionId"]) : undefined);
35
+ return { sessionID, ...(parentSessionID ? { parentSessionID } : {}) };
36
+ }
37
+ export function resolveSessionLineage(raw) {
38
+ const envelope = eventEnvelope(raw);
39
+ return envelope ? resolveSessionLineageProperties(envelope.properties) : null;
40
+ }
41
+ export function resolveTaskPartInterruption(raw) {
42
+ const envelope = eventEnvelope(raw);
43
+ if (!envelope || envelope.type !== "message.part.updated")
44
+ return null;
45
+ const part = isRecord(envelope.properties.part) ? envelope.properties.part : undefined;
46
+ if (!part || part.type !== "tool" || part.tool !== "task")
47
+ return null;
48
+ const state = isRecord(part.state) ? part.state : undefined;
49
+ if (!state || state.status !== "error")
50
+ return null;
51
+ const metadata = isRecord(state.metadata) ? state.metadata : undefined;
52
+ const input = isRecord(state.input) ? state.input : undefined;
53
+ const childSessionID = metadata ? stringField(metadata, ["sessionId", "sessionID"]) : undefined;
54
+ const parentSessionID = stringField(envelope.properties, ["sessionID", "sessionId"])
55
+ ?? (part ? stringField(part, ["sessionID", "sessionId"]) : undefined);
56
+ if (!childSessionID || !parentSessionID)
57
+ return null;
58
+ const inputTaskID = input ? stringField(input, ["task_id", "taskID", "taskId"]) : undefined;
59
+ const errorText = typeof state.error === "string" ? state.error : "";
60
+ const parentPartID = stringField(part, ["id"]);
61
+ const callID = stringField(part, ["callID", "callId"]);
62
+ const agent = input ? stringField(input, ["subagent_type", "agent"]) : undefined;
63
+ return {
64
+ childSessionID,
65
+ parentSessionID,
66
+ ...(parentPartID ? { parentPartID } : {}),
67
+ ...(callID ? { callID } : {}),
68
+ ...(agent ? { agent } : {}),
69
+ ...(inputTaskID ? { taskID: inputTaskID } : {}),
70
+ terminalTaskErrorObserved: true,
71
+ transportInterrupted: metadata?.interrupted === true,
72
+ errorText,
73
+ };
74
+ }
75
+ //# sourceMappingURL=opencode-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-events.js","sourceRoot":"","sources":["../../src/shared/opencode-events.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,17 @@ export type ModelRequirement = {
43
43
  /** Restrict eligible providers (subset of provider IDs). */
44
44
  requiresProvider?: string[];
45
45
  };
46
+ /** Where the route requirement was selected, before request-local overrides. */
47
+ export type RequirementSource = "user-config" | "agent-default" | "category-default";
48
+ /** Which final-primary selection branch won during route construction. */
49
+ export type PrimarySource = "existing-model" | "user-requirement" | "catalog-upgrade" | "builtin-requirement";
50
+ /** Immutable route snapshot materialized for one registered OpenCode agent. */
51
+ export type EffectiveModelRoute = {
52
+ readonly model: string;
53
+ readonly requirement: ModelRequirement;
54
+ readonly requirementSource: RequirementSource;
55
+ readonly primarySource: PrimarySource;
56
+ };
46
57
  /** Lightweight category descriptor used for documentation + delegate-task hints. */
47
58
  export type Category = {
48
59
  name: string;
@@ -85,4 +96,4 @@ export type ResolutionEntry = {
85
96
  /** Why we chose this entry (used in logs). */
86
97
  source: ResolutionSource;
87
98
  };
88
- export type ResolutionSource = "user-config" | "agent-default" | "category-default" | "input-variant" | "no-op";
99
+ export type ResolutionSource = "user-config" | "agent-default" | "category-default" | "input-variant" | "host-profile-floor" | "no-op";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ocmm",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "OpenCode Multi-Model Auto-Router plugin (ocmm). Per-agent model selection, variant -> param translation, intent-keyword mode injection.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepwork",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "Codex adapter for deepwork workflows, Deepwork agents, skills, and MCP tool registrations.",
5
5
  "author": {
6
6
  "name": "Hugefiver"
@@ -3,11 +3,12 @@
3
3
  Generated from the Deepwork source tree. Do not edit generated files by hand; run `pnpm run gen:codex-plugin` from the repository root.
4
4
 
5
5
  - Workflow: `codex`
6
- - Generated agents: 21
6
+ - Generated agents: 22
7
7
  - Skills are copied from `skills/` plus flattened `skills/v1/` deepwork skills.
8
8
  - MCP servers are generated from the Deepwork `mcp` config namespace.
9
9
  - The default `lsp` MCP uses the plugin-local `ocmm-lsp` wrapper and bundled GitHub Release binary.
10
10
  - Workflow skill: `deepwork`.
11
- - Generated Codex agent profiles use the `dw-*` prefix, including functional agents such as `dw-oracle` and `dw-creative`.
11
+ - Generated Codex agent profiles use the `dw-*` prefix, including functional agents such as `dw-oracle`, `dw-oracle-2nd`, and `dw-creative`.
12
+ - Logical Oracle/Reviewer tiers (for example `dw-oracle-high`) are emitted only when explicitly configured.
12
13
 
13
14
  The OpenCode plugin remains `dist/index.js`; this directory is the Codex adapter bundle.