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.
- package/.codex/agents/dw-builder.toml +1 -1
- package/.codex/agents/dw-clarifier.toml +1 -1
- package/.codex/agents/dw-code-search.toml +1 -1
- package/.codex/agents/dw-coding.toml +1 -1
- package/.codex/agents/dw-complex.toml +1 -1
- package/.codex/agents/dw-creative.toml +1 -1
- package/.codex/agents/dw-deep.toml +1 -1
- package/.codex/agents/dw-doc-search.toml +1 -1
- package/.codex/agents/dw-documenting.toml +1 -1
- package/.codex/agents/dw-explore.toml +1 -1
- package/.codex/agents/dw-frontend.toml +1 -1
- package/.codex/agents/dw-hard-reasoning.toml +1 -1
- package/.codex/agents/dw-media-reader.toml +1 -1
- package/.codex/agents/dw-normal-task.toml +1 -1
- package/.codex/agents/dw-oracle-2nd.toml +8 -0
- package/.codex/agents/dw-oracle.toml +1 -1
- package/.codex/agents/dw-orchestrator.toml +1 -1
- package/.codex/agents/dw-plan-critic.toml +1 -1
- package/.codex/agents/dw-planner.toml +1 -1
- package/.codex/agents/dw-quick.toml +1 -1
- package/.codex/agents/dw-research.toml +1 -1
- package/.codex/agents/dw-reviewer.toml +1 -1
- package/README.md +158 -13
- package/dist/cli/shim.d.ts +4 -2
- package/dist/cli/shim.js +26 -11
- package/dist/cli/shim.js.map +1 -1
- package/dist/codex/plugin-generator.js +82 -56
- package/dist/codex/plugin-generator.js.map +1 -1
- package/dist/config/load.d.ts +32 -23
- package/dist/config/load.js +384 -90
- package/dist/config/load.js.map +1 -1
- package/dist/config/merge.d.ts +18 -0
- package/dist/config/merge.js +46 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/normalize.d.ts +1 -0
- package/dist/config/normalize.js +22 -16
- package/dist/config/normalize.js.map +1 -1
- package/dist/config/profile-aliases.d.ts +12 -0
- package/dist/config/profile-aliases.js +127 -0
- package/dist/config/profile-aliases.js.map +1 -0
- package/dist/config/profile-types.d.ts +13 -0
- package/dist/config/profile-types.js +2 -0
- package/dist/config/profile-types.js.map +1 -0
- package/dist/config/review-agent-migration.d.ts +89 -0
- package/dist/config/review-agent-migration.js +237 -0
- package/dist/config/review-agent-migration.js.map +1 -0
- package/dist/config/schema.d.ts +1364 -222
- package/dist/config/schema.js +169 -37
- package/dist/config/schema.js.map +1 -1
- package/dist/config/tolerant-parse.d.ts +41 -0
- package/dist/config/tolerant-parse.js +164 -0
- package/dist/config/tolerant-parse.js.map +1 -0
- package/dist/data/agents.d.ts +1 -1
- package/dist/data/agents.js +7 -7
- package/dist/data/agents.js.map +1 -1
- package/dist/hooks/chat-params.d.ts +2 -0
- package/dist/hooks/chat-params.js +113 -4
- package/dist/hooks/chat-params.js.map +1 -1
- package/dist/hooks/config.d.ts +14 -2
- package/dist/hooks/config.js +538 -60
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/event.d.ts +3 -11
- package/dist/hooks/event.js +5 -9
- package/dist/hooks/event.js.map +1 -1
- package/dist/index.js +21 -14
- package/dist/index.js.map +1 -1
- package/dist/permissions/index.d.ts +3 -0
- package/dist/permissions/index.js +43 -28
- package/dist/permissions/index.js.map +1 -1
- package/dist/review-agents/expand.d.ts +36 -0
- package/dist/review-agents/expand.js +157 -0
- package/dist/review-agents/expand.js.map +1 -0
- package/dist/review-agents/names.d.ts +16 -0
- package/dist/review-agents/names.js +55 -0
- package/dist/review-agents/names.js.map +1 -0
- package/dist/routing/effective-route.d.ts +19 -0
- package/dist/routing/effective-route.js +133 -0
- package/dist/routing/effective-route.js.map +1 -0
- package/dist/routing/model-upgrades.d.ts +5 -0
- package/dist/routing/model-upgrades.js +59 -12
- package/dist/routing/model-upgrades.js.map +1 -1
- package/dist/routing/resolver.d.ts +8 -1
- package/dist/routing/resolver.js +29 -9
- package/dist/routing/resolver.js.map +1 -1
- package/dist/routing/route-registry.d.ts +13 -0
- package/dist/routing/route-registry.js +84 -0
- package/dist/routing/route-registry.js.map +1 -0
- package/dist/runtime-fallback/dispatcher.d.ts +1 -0
- package/dist/runtime-fallback/dispatcher.js +7 -5
- package/dist/runtime-fallback/dispatcher.js.map +1 -1
- package/dist/runtime-fallback/error-classifier.d.ts +3 -1
- package/dist/runtime-fallback/error-classifier.js +135 -1
- package/dist/runtime-fallback/error-classifier.js.map +1 -1
- package/dist/runtime-fallback/event-handler-generic-fallback.d.ts +26 -0
- package/dist/runtime-fallback/event-handler-generic-fallback.js +54 -0
- package/dist/runtime-fallback/event-handler-generic-fallback.js.map +1 -0
- package/dist/runtime-fallback/event-handler-idle-continuation.d.ts +9 -0
- package/dist/runtime-fallback/event-handler-idle-continuation.js +48 -0
- package/dist/runtime-fallback/event-handler-idle-continuation.js.map +1 -0
- package/dist/runtime-fallback/event-handler-support.d.ts +39 -0
- package/dist/runtime-fallback/event-handler-support.js +194 -0
- package/dist/runtime-fallback/event-handler-support.js.map +1 -0
- package/dist/runtime-fallback/event-handler-test-fixtures.d.ts +874 -0
- package/dist/runtime-fallback/event-handler-test-fixtures.js +150 -0
- package/dist/runtime-fallback/event-handler-test-fixtures.js.map +1 -0
- package/dist/runtime-fallback/event-handler.d.ts +13 -1
- package/dist/runtime-fallback/event-handler.js +334 -192
- package/dist/runtime-fallback/event-handler.js.map +1 -1
- package/dist/runtime-fallback/fallback-state.d.ts +8 -5
- package/dist/runtime-fallback/fallback-state.js +9 -6
- package/dist/runtime-fallback/fallback-state.js.map +1 -1
- package/dist/runtime-fallback/index.d.ts +21 -1
- package/dist/runtime-fallback/index.js +7 -1
- package/dist/runtime-fallback/index.js.map +1 -1
- package/dist/runtime-fallback/interruption-output-adapter.d.ts +7 -0
- package/dist/runtime-fallback/interruption-output-adapter.js +91 -0
- package/dist/runtime-fallback/interruption-output-adapter.js.map +1 -0
- package/dist/runtime-fallback/subagent-429-controller-fixture.d.ts +105 -0
- package/dist/runtime-fallback/subagent-429-controller-fixture.js +116 -0
- package/dist/runtime-fallback/subagent-429-controller-fixture.js.map +1 -0
- package/dist/runtime-fallback/subagent-429-controller.d.ts +167 -0
- package/dist/runtime-fallback/subagent-429-controller.js +334 -0
- package/dist/runtime-fallback/subagent-429-controller.js.map +1 -0
- package/dist/runtime-fallback/subagent-429-policy.d.ts +13 -0
- package/dist/runtime-fallback/subagent-429-policy.js +37 -0
- package/dist/runtime-fallback/subagent-429-policy.js.map +1 -0
- package/dist/runtime-fallback/subagent-429-session.d.ts +48 -0
- package/dist/runtime-fallback/subagent-429-session.js +316 -0
- package/dist/runtime-fallback/subagent-429-session.js.map +1 -0
- package/dist/shared/opencode-events.d.ts +22 -0
- package/dist/shared/opencode-events.js +75 -0
- package/dist/shared/opencode-events.js.map +1 -0
- package/dist/shared/types.d.ts +12 -1
- package/package.json +1 -1
- package/plugins/deepwork/.codex-plugin/plugin.json +1 -1
- package/plugins/deepwork/README.md +2 -1
- package/plugins/deepwork/agents/dw-builder.toml +1 -1
- package/plugins/deepwork/agents/dw-clarifier.toml +1 -1
- package/plugins/deepwork/agents/dw-code-search.toml +1 -1
- package/plugins/deepwork/agents/dw-coding.toml +1 -1
- package/plugins/deepwork/agents/dw-complex.toml +1 -1
- package/plugins/deepwork/agents/dw-creative.toml +1 -1
- package/plugins/deepwork/agents/dw-deep.toml +1 -1
- package/plugins/deepwork/agents/dw-doc-search.toml +1 -1
- package/plugins/deepwork/agents/dw-documenting.toml +1 -1
- package/plugins/deepwork/agents/dw-explore.toml +1 -1
- package/plugins/deepwork/agents/dw-frontend.toml +1 -1
- package/plugins/deepwork/agents/dw-hard-reasoning.toml +1 -1
- package/plugins/deepwork/agents/dw-media-reader.toml +1 -1
- package/plugins/deepwork/agents/dw-normal-task.toml +1 -1
- package/plugins/deepwork/agents/dw-oracle-2nd.toml +8 -0
- package/plugins/deepwork/agents/dw-oracle.toml +1 -1
- package/plugins/deepwork/agents/dw-orchestrator.toml +1 -1
- package/plugins/deepwork/agents/dw-plan-critic.toml +1 -1
- package/plugins/deepwork/agents/dw-planner.toml +1 -1
- package/plugins/deepwork/agents/dw-quick.toml +1 -1
- package/plugins/deepwork/agents/dw-research.toml +1 -1
- package/plugins/deepwork/agents/dw-reviewer.toml +1 -1
- package/plugins/deepwork/dist/cli/shim.d.ts +4 -2
- package/plugins/deepwork/dist/cli/shim.js +26 -11
- package/plugins/deepwork/dist/cli/shim.js.map +1 -1
- package/plugins/deepwork/dist/shared/opencode-events.d.ts +22 -0
- package/plugins/deepwork/dist/shared/opencode-events.js +75 -0
- package/plugins/deepwork/dist/shared/opencode-events.js.map +1 -0
- package/plugins/deepwork/dist/shared/types.d.ts +12 -1
- package/plugins/deepwork/package.json +1 -1
- package/plugins/deepwork/skills/deepwork/SKILL.md +30 -14
- package/plugins/deepwork/skills/deepwork-requesting-code-review/SKILL.md +53 -31
- package/plugins/deepwork/skills/deepwork-requesting-code-review/code-reviewer.md +11 -7
- package/plugins/deepwork/skills/deepwork-subagent-driven-development/SKILL.md +28 -19
- package/plugins/deepwork/skills/deepwork-subagent-driven-development/implementer-prompt.md +10 -3
- package/prompts/codex/agents/clarifier.md +4 -0
- package/prompts/codex/agents/orchestrator.md +12 -2
- package/prompts/codex/agents/plan-critic.md +4 -0
- package/prompts/codex/agents/planner.md +15 -10
- package/prompts/codex/agents/reviewer.md +8 -2
- package/prompts/codex/deepwork/gpt-5.6.md +20 -37
- package/prompts/omo/agents/clarifier.md +4 -0
- package/prompts/omo/agents/orchestrator.md +11 -0
- package/prompts/omo/agents/plan-critic.md +4 -0
- package/prompts/omo/agents/planner.md +15 -3
- package/prompts/omo/agents/reviewer.md +8 -2
- package/prompts/omo/deepwork/gpt-5.6.md +20 -37
- package/prompts/v1/agents/clarifier.md +4 -0
- package/prompts/v1/agents/orchestrator.md +12 -2
- package/prompts/v1/agents/plan-critic.md +4 -0
- package/prompts/v1/agents/planner.md +15 -10
- package/prompts/v1/agents/reviewer.md +8 -2
- package/prompts/v1/deepwork/gpt-5.6.md +20 -37
- package/skills/v1/requesting-code-review/SKILL.md +53 -31
- package/skills/v1/requesting-code-review/code-reviewer.md +11 -7
- package/skills/v1/subagent-driven-development/SKILL.md +28 -19
- package/skills/v1/subagent-driven-development/implementer-prompt.md +10 -3
- package/.codex/agents/dw-oracle-high.toml +0 -8
- package/plugins/deepwork/agents/dw-oracle-high.toml +0 -8
|
@@ -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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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -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.
|
|
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",
|
|
@@ -8,6 +8,7 @@ Generated from the Deepwork source tree. Do not edit generated files by hand; ru
|
|
|
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`, `dw-oracle-
|
|
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.
|