@jterrats/open-orchestra 1.0.12 → 1.0.13

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/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.0.13 - 2026-05-22
6
+
7
+ ### Changed
8
+
9
+ - Runtime-native parent action dispatch now enforces delegation capacity before
10
+ calling parent runtime tools. Dispatch is sequential, records structured
11
+ `checked.capacity` metadata, and promotes queued actions only after lifecycle
12
+ events free capacity.
13
+
14
+ ### Fixed
15
+
16
+ - Fixed queued runtime-native subagent actions being able to flood the parent
17
+ runtime when several squads or gates were pending at the same time.
18
+ - Fixed suspended runtime sessions opening new dispatch capacity before they
19
+ were explicitly completed, canceled, timed out, failed, or closed.
20
+
21
+ ### Validation
22
+
23
+ - `npm run build` passed.
24
+ - `npm run typecheck` passed.
25
+ - `node --test test/runtime-adapters.test.js` passed with 63 tests.
26
+ - `node --test test/autonomous-workflow-cli.test.js` passed with 43 tests.
27
+
5
28
  ## 1.0.12 - 2026-05-22
6
29
 
7
30
  ### Added
@@ -0,0 +1,2 @@
1
+ import type { PendingRuntimeParentAction, RuntimeClaudeNativeBridgeResult } from "./types.js";
2
+ export declare function resolveClaudeNativeBridge(action: PendingRuntimeParentAction): RuntimeClaudeNativeBridgeResult;
@@ -0,0 +1,59 @@
1
+ export function resolveClaudeNativeBridge(action) {
2
+ const metadata = {
3
+ taskId: action.taskId,
4
+ sessionId: action.sessionId,
5
+ phase: action.phase,
6
+ role: action.role,
7
+ runtime: "claude-cli",
8
+ actionKind: "claude-agent-request",
9
+ tool: "claude-code-agent",
10
+ promptArtifact: action.action.payload.promptArtifact,
11
+ expectedResultArtifact: action.action.payload.expectedResultArtifact,
12
+ directProviderApiAllowed: false,
13
+ };
14
+ if (!isClaudeParentRuntime()) {
15
+ return {
16
+ status: "unsupported",
17
+ reason: "Claude native callback bridge unavailable: active parent runtime is not Claude",
18
+ guidance: claudeNativeBridgeFallbackGuidance(),
19
+ metadata,
20
+ };
21
+ }
22
+ if (!hasClaudeNativeCallbackCapability()) {
23
+ return {
24
+ status: "unsupported",
25
+ reason: "Claude native callback bridge unavailable: no verified Agent/Subagent callback capability was provided",
26
+ guidance: claudeNativeBridgeFallbackGuidance(),
27
+ metadata,
28
+ };
29
+ }
30
+ const childId = process.env.OPEN_ORCHESTRA_CLAUDE_NATIVE_CHILD_ID?.trim() ||
31
+ `claude-native-callback:${deterministicSessionLabel(action.sessionId)}`;
32
+ return {
33
+ status: "native-dispatched",
34
+ childId,
35
+ metadata,
36
+ summary: `Claude native callback bridge dispatched: ${action.action.kind}`,
37
+ };
38
+ }
39
+ function isClaudeParentRuntime() {
40
+ const activeRuntime = process.env.OPEN_ORCHESTRA_ACTIVE_RUNTIME?.trim();
41
+ return (activeRuntime === "claude" ||
42
+ activeRuntime === "claude-cli" ||
43
+ process.env.CLAUDECODE === "1" ||
44
+ process.env.CLAUDE_CODE === "1");
45
+ }
46
+ function hasClaudeNativeCallbackCapability() {
47
+ return process.env.OPEN_ORCHESTRA_CLAUDE_NATIVE_CALLBACK === "1";
48
+ }
49
+ function claudeNativeBridgeFallbackGuidance() {
50
+ return [
51
+ "Native Claude Agent/Subagent dispatch was not recorded.",
52
+ "Inspect the prompt artifact, launch it from a supported Claude Code parent runtime, then record lifecycle with the provided manual commands.",
53
+ "Do not call Anthropic or other provider APIs from Orchestra.",
54
+ ].join(" ");
55
+ }
56
+ function deterministicSessionLabel(sessionId) {
57
+ return sessionId.replace(/[^a-zA-Z0-9._-]+/g, "-");
58
+ }
59
+ //# sourceMappingURL=runtime-claude-native-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-claude-native-bridge.js","sourceRoot":"","sources":["../src/runtime-claude-native-bridge.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,yBAAyB,CACvC,MAAkC;IAElC,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,YAAqB;QAC9B,UAAU,EAAE,sBAA+B;QAC3C,IAAI,EAAE,mBAA4B;QAClC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;QACpD,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB;QACpE,wBAAwB,EAAE,KAAc;KACzC,CAAC;IACF,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EACJ,gFAAgF;YAClF,QAAQ,EAAE,kCAAkC,EAAE;YAC9C,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,iCAAiC,EAAE,EAAE,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EACJ,wGAAwG;YAC1G,QAAQ,EAAE,kCAAkC,EAAE;YAC9C,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE;QACzD,0BAA0B,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,OAAO;QACL,MAAM,EAAE,mBAAmB;QAC3B,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,6CAA6C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACxE,OAAO,CACL,aAAa,KAAK,QAAQ;QAC1B,aAAa,KAAK,YAAY;QAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,qCAAqC,KAAK,GAAG,CAAC;AACnE,CAAC;AAED,SAAS,kCAAkC;IACzC,OAAO;QACL,yDAAyD;QACzD,8IAA8I;QAC9I,8DAA8D;KAC/D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAiB;IAClD,OAAO,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { EventEntry, PendingRuntimeParentAction, RuntimeDelegationGuardrails } from "./types.js";
2
+ export interface RuntimeParentActionCapacity {
3
+ status: "available" | "reserved" | "queued";
4
+ activeSessions: number;
5
+ maxConcurrentDelegates: number;
6
+ activeTaskSessions: number;
7
+ maxSpawnsPerTask: number;
8
+ reason?: string;
9
+ }
10
+ export declare function runtimeParentActionCapacity(events: EventEntry[], action: PendingRuntimeParentAction, policy: RuntimeDelegationGuardrails): RuntimeParentActionCapacity;
@@ -0,0 +1,110 @@
1
+ import { listRuntimeDelegationSessions } from "./runtime-guardrails.js";
2
+ export function runtimeParentActionCapacity(events, action, policy) {
3
+ const sessions = listRuntimeDelegationSessions({
4
+ policy,
5
+ events,
6
+ includeClosed: true,
7
+ }).filter((session) => reservesRuntimeNativeCapacity(session));
8
+ const activeSessions = sessions.length;
9
+ const activeTaskSessions = sessions.filter((session) => session.taskId === action.taskId).length;
10
+ if (action.status === "queued") {
11
+ return queueCapacityState({
12
+ activeSessions,
13
+ activeTaskSessions,
14
+ maxConcurrentDelegates: policy.maxConcurrentDelegates,
15
+ maxSpawnsPerTask: policy.maxSpawnsPerTask,
16
+ });
17
+ }
18
+ if (action.status === "requested") {
19
+ return requestedCapacityState({
20
+ action,
21
+ sessions,
22
+ maxConcurrentDelegates: policy.maxConcurrentDelegates,
23
+ maxSpawnsPerTask: policy.maxSpawnsPerTask,
24
+ activeSessions,
25
+ activeTaskSessions,
26
+ });
27
+ }
28
+ return {
29
+ status: "available",
30
+ activeSessions,
31
+ maxConcurrentDelegates: policy.maxConcurrentDelegates,
32
+ activeTaskSessions,
33
+ maxSpawnsPerTask: policy.maxSpawnsPerTask,
34
+ };
35
+ }
36
+ function reservesRuntimeNativeCapacity(session) {
37
+ if (session.stale) {
38
+ return false;
39
+ }
40
+ return session.active || session.status === "suspended";
41
+ }
42
+ function queueCapacityState({ activeSessions, activeTaskSessions, maxConcurrentDelegates, maxSpawnsPerTask, }) {
43
+ if (activeSessions >= maxConcurrentDelegates) {
44
+ return {
45
+ status: "queued",
46
+ activeSessions,
47
+ maxConcurrentDelegates,
48
+ activeTaskSessions,
49
+ maxSpawnsPerTask,
50
+ reason: `request is queued until delegation capacity is available: active delegates ${activeSessions} reached max concurrent ${maxConcurrentDelegates}`,
51
+ };
52
+ }
53
+ if (activeTaskSessions >= maxSpawnsPerTask) {
54
+ return {
55
+ status: "queued",
56
+ activeSessions,
57
+ maxConcurrentDelegates,
58
+ activeTaskSessions,
59
+ maxSpawnsPerTask,
60
+ reason: `request is queued until delegation capacity is available: active task delegates ${activeTaskSessions} reached max per task ${maxSpawnsPerTask}`,
61
+ };
62
+ }
63
+ return {
64
+ status: "available",
65
+ activeSessions,
66
+ maxConcurrentDelegates,
67
+ activeTaskSessions,
68
+ maxSpawnsPerTask,
69
+ };
70
+ }
71
+ function requestedCapacityState({ action, sessions, maxConcurrentDelegates, maxSpawnsPerTask, activeSessions, activeTaskSessions, }) {
72
+ const nonRequestedSessions = sessions.filter((session) => session.status !== "requested");
73
+ const requestedSessions = sessions
74
+ .filter((session) => session.status === "requested")
75
+ .sort((left, right) => left.updatedAt.localeCompare(right.updatedAt) ||
76
+ left.sessionId.localeCompare(right.sessionId));
77
+ const allowedRequested = new Set();
78
+ let globalReservations = nonRequestedSessions.length;
79
+ const taskReservations = new Map();
80
+ for (const session of nonRequestedSessions) {
81
+ taskReservations.set(session.taskId, (taskReservations.get(session.taskId) ?? 0) + 1);
82
+ }
83
+ for (const session of requestedSessions) {
84
+ const taskCount = taskReservations.get(session.taskId) ?? 0;
85
+ if (globalReservations < maxConcurrentDelegates &&
86
+ taskCount < maxSpawnsPerTask) {
87
+ allowedRequested.add(session.sessionId);
88
+ globalReservations += 1;
89
+ taskReservations.set(session.taskId, taskCount + 1);
90
+ }
91
+ }
92
+ if (!allowedRequested.has(action.sessionId)) {
93
+ return {
94
+ status: "queued",
95
+ activeSessions,
96
+ maxConcurrentDelegates,
97
+ activeTaskSessions,
98
+ maxSpawnsPerTask,
99
+ reason: `request is queued until delegation capacity is available: runtime-native spawn reservation is waiting for capacity: active delegates ${activeSessions}/${maxConcurrentDelegates}, task delegates ${activeTaskSessions}/${maxSpawnsPerTask}`,
100
+ };
101
+ }
102
+ return {
103
+ status: "reserved",
104
+ activeSessions,
105
+ maxConcurrentDelegates,
106
+ activeTaskSessions,
107
+ maxSpawnsPerTask,
108
+ };
109
+ }
110
+ //# sourceMappingURL=runtime-parent-action-capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-parent-action-capacity.js","sourceRoot":"","sources":["../src/runtime-parent-action-capacity.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,5 @@
1
1
  import type { PendingRuntimeParentAction, RuntimeClaudeNativeBridgeResult, RuntimeParentActionEligibility } from "./types.js";
2
- export interface RuntimeParentActionDispatchFallback {
3
- summary: string;
4
- guidance: string;
5
- lifecycleCommands: PendingRuntimeParentAction["action"]["lifecycleCommands"];
6
- promptArtifact: string;
7
- expectedResultArtifact: string;
8
- }
2
+ import type { RuntimeParentActionDispatchFallback } from "./runtime-parent-action-fallback.js";
9
3
  export interface RuntimeParentActionDispatchResult {
10
4
  sessionId: string;
11
5
  taskId: string;
@@ -1,9 +1,12 @@
1
1
  import { getRuntimeExecutionAdapter } from "./runtime-adapters.js";
2
+ import { resolveClaudeNativeBridge } from "./runtime-claude-native-bridge.js";
2
3
  import { normalizeRuntimeDelegationGuardrails, summarizeRuntimeDelegationOperations, } from "./runtime-guardrails.js";
4
+ import { runtimeParentActionCapacity } from "./runtime-parent-action-capacity.js";
3
5
  import { listPendingRuntimeParentActions } from "./runtime-parent-actions.js";
4
6
  import { evaluateRuntimeParentActionEligibility, runtimeParentActionLegacyRationale, } from "./runtime-parent-action-eligibility.js";
7
+ import { runtimeParentActionFallback } from "./runtime-parent-action-fallback.js";
5
8
  import { recordRuntimeSpawnLifecycle } from "./runtime-spawn-bridge.js";
6
- import { readEvents } from "./workspace.js";
9
+ import { appendEvent, readEvents } from "./workspace.js";
7
10
  import { getWorkflowConfig } from "./workflow-services.js";
8
11
  import { removeUndefined } from "./command-utils.js";
9
12
  export async function dispatchPendingRuntimeParentActions({ root, taskId, runtime, }) {
@@ -11,18 +14,27 @@ export async function dispatchPendingRuntimeParentActions({ root, taskId, runtim
11
14
  events: await readEvents(root),
12
15
  ...(taskId ? { taskId } : {}),
13
16
  });
14
- return Promise.all(actions.map((action) => dispatchRuntimeParentAction(removeUndefined({ root, action, runtime }))));
17
+ const results = [];
18
+ for (const action of actions) {
19
+ results.push(await dispatchRuntimeParentAction(removeUndefined({ root, action, runtime })));
20
+ }
21
+ return results;
15
22
  }
16
23
  export async function dispatchRuntimeParentAction({ root, action, runtime, }) {
17
- const base = runtimeParentActionDispatchBase(action);
18
- const sessions = await runtimeSessions(root, action.taskId);
19
- const session = sessions.find((candidate) => candidate.sessionId === action.sessionId);
24
+ const effectiveAction = await promoteQueuedRuntimeParentAction(root, action);
25
+ const base = runtimeParentActionDispatchBase(effectiveAction);
26
+ const events = await readEvents(root);
27
+ const sessions = await runtimeSessions(root, effectiveAction.taskId, events);
28
+ const session = sessions.find((candidate) => candidate.sessionId === effectiveAction.sessionId);
29
+ const guardrails = await runtimeGuardrailPolicy(root);
30
+ const capacity = runtimeParentActionCapacity(events, effectiveAction, guardrails);
20
31
  const eligibility = evaluateRuntimeParentActionEligibility({
21
- action,
22
- adapter: safeRuntimeAdapter(action.runtime),
32
+ action: effectiveAction,
33
+ adapter: safeRuntimeAdapter(effectiveAction.runtime),
23
34
  ...(runtime ? { runtimeFilter: runtime } : {}),
24
35
  ...(session ? { session } : {}),
25
36
  safetyState: session ? "safe" : "unknown",
37
+ capacity,
26
38
  });
27
39
  if (!eligibility.dispatchable) {
28
40
  return {
@@ -30,11 +42,11 @@ export async function dispatchRuntimeParentAction({ root, action, runtime, }) {
30
42
  status: "skipped",
31
43
  reason: runtimeParentActionDispatchReason(eligibility),
32
44
  eligibility,
33
- fallback: runtimeParentActionFallback(action, eligibility),
45
+ fallback: runtimeParentActionFallback(effectiveAction, eligibility),
34
46
  };
35
47
  }
36
- if (action.action.kind === "claude-agent-request") {
37
- const bridge = resolveClaudeNativeBridge(action);
48
+ if (effectiveAction.action.kind === "claude-agent-request") {
49
+ const bridge = resolveClaudeNativeBridge(effectiveAction);
38
50
  if (bridge.status === "unsupported") {
39
51
  return {
40
52
  ...base,
@@ -42,22 +54,22 @@ export async function dispatchRuntimeParentAction({ root, action, runtime, }) {
42
54
  reason: bridge.reason,
43
55
  eligibility,
44
56
  nativeBridge: bridge,
45
- fallback: runtimeParentActionFallback(action, eligibility, bridge),
57
+ fallback: runtimeParentActionFallback(effectiveAction, eligibility, bridge),
46
58
  };
47
59
  }
48
60
  await recordRuntimeSpawnLifecycle({
49
61
  root,
50
- sessionId: action.sessionId,
62
+ sessionId: effectiveAction.sessionId,
51
63
  status: "spawned",
52
64
  spawnedAgentId: bridge.childId,
53
65
  summary: bridge.summary,
54
66
  });
55
67
  await recordRuntimeSpawnLifecycle({
56
68
  root,
57
- sessionId: action.sessionId,
69
+ sessionId: effectiveAction.sessionId,
58
70
  status: "active",
59
71
  spawnedAgentId: bridge.childId,
60
- summary: `Claude native callback bridge active: ${action.action.kind}`,
72
+ summary: `Claude native callback bridge active: ${effectiveAction.action.kind}`,
61
73
  });
62
74
  return {
63
75
  ...base,
@@ -68,22 +80,60 @@ export async function dispatchRuntimeParentAction({ root, action, runtime, }) {
68
80
  nativeBridge: bridge,
69
81
  };
70
82
  }
71
- const agentId = runtimeParentActionAgentId(action);
83
+ const agentId = runtimeParentActionAgentId(effectiveAction);
72
84
  await recordRuntimeSpawnLifecycle({
73
85
  root,
74
- sessionId: action.sessionId,
86
+ sessionId: effectiveAction.sessionId,
75
87
  status: "spawned",
76
88
  spawnedAgentId: agentId,
77
- summary: `Runtime parent action dispatched: ${action.action.kind}`,
89
+ summary: `Runtime parent action dispatched: ${effectiveAction.action.kind}`,
78
90
  });
79
91
  return {
80
92
  ...base,
81
93
  status: "dispatched",
82
94
  agentId,
83
- reason: `dispatched ${action.action.kind} through active parent runtime`,
95
+ reason: `dispatched ${effectiveAction.action.kind} through active parent runtime`,
84
96
  eligibility,
85
97
  };
86
98
  }
99
+ async function promoteQueuedRuntimeParentAction(root, action) {
100
+ if (action.status !== "queued") {
101
+ return action;
102
+ }
103
+ const events = await readEvents(root);
104
+ const capacity = runtimeParentActionCapacity(events, action, await runtimeGuardrailPolicy(root));
105
+ if (capacity.status === "queued") {
106
+ return action;
107
+ }
108
+ const event = await appendEvent(root, {
109
+ type: "RUNTIME_SPAWN_REQUEST_RENDERED",
110
+ taskId: action.taskId,
111
+ actor: "parent",
112
+ summary: `Runtime spawn request requested: ${action.phase} via ${action.runtime}`,
113
+ artifacts: action.artifacts,
114
+ metadata: {
115
+ sessionId: action.sessionId,
116
+ runtime: action.runtime,
117
+ phase: action.phase,
118
+ role: action.role,
119
+ status: "requested",
120
+ spawnMode: action.action.mode,
121
+ spawnTool: action.action.tool,
122
+ parentRuntimeAction: action.action,
123
+ promptArtifact: action.action.payload.promptArtifact,
124
+ contextManifestArtifact: action.action.payload.contextManifestArtifact,
125
+ expectedResultArtifact: action.action.payload.expectedResultArtifact,
126
+ directProviderApiAllowed: false,
127
+ promotedFromQueued: true,
128
+ },
129
+ });
130
+ return {
131
+ ...action,
132
+ status: "requested",
133
+ updatedAt: event.timestamp,
134
+ actionable: true,
135
+ };
136
+ }
87
137
  function runtimeParentActionDispatchBase(action) {
88
138
  return {
89
139
  sessionId: action.sessionId,
@@ -103,88 +153,32 @@ function deterministicSessionLabel(sessionId) {
103
153
  return sessionId.replace(/[^a-zA-Z0-9._-]+/g, "-");
104
154
  }
105
155
  function runtimeParentActionDispatchReason(eligibility) {
156
+ const runtimeMismatch = eligibility.reasons.find((reason) => reason.code === "runtime-mismatch");
157
+ if (runtimeMismatch) {
158
+ return runtimeMismatch.message;
159
+ }
160
+ const suspended = eligibility.reasons.find((reason) => reason.code === "suspended");
161
+ if (suspended) {
162
+ return suspended.message;
163
+ }
106
164
  const queued = eligibility.reasons.find((reason) => reason.code === "queued");
107
165
  if (queued) {
108
166
  return queued.message;
109
167
  }
110
- const runtimeMismatch = eligibility.reasons.find((reason) => reason.code === "runtime-mismatch");
111
- return (runtimeMismatch?.message ?? runtimeParentActionLegacyRationale(eligibility));
168
+ return runtimeParentActionLegacyRationale(eligibility);
112
169
  }
113
- function runtimeParentActionFallback(action, eligibility, bridge) {
114
- return {
115
- summary: bridge?.reason ?? runtimeParentActionLegacyRationale(eligibility),
116
- guidance: bridge?.guidance ??
117
- "Inspect the prompt artifact, launch the active parent runtime's native subagent tool manually when supported, then record lifecycle with the provided commands. Do not call provider APIs from Orchestra.",
118
- lifecycleCommands: action.action.lifecycleCommands,
119
- promptArtifact: action.action.payload.promptArtifact,
120
- expectedResultArtifact: action.action.payload.expectedResultArtifact,
121
- };
122
- }
123
- function resolveClaudeNativeBridge(action) {
124
- const metadata = {
125
- taskId: action.taskId,
126
- sessionId: action.sessionId,
127
- phase: action.phase,
128
- role: action.role,
129
- runtime: "claude-cli",
130
- actionKind: "claude-agent-request",
131
- tool: "claude-code-agent",
132
- promptArtifact: action.action.payload.promptArtifact,
133
- expectedResultArtifact: action.action.payload.expectedResultArtifact,
134
- directProviderApiAllowed: false,
135
- };
136
- if (!isClaudeParentRuntime()) {
137
- return {
138
- status: "unsupported",
139
- reason: "Claude native callback bridge unavailable: active parent runtime is not Claude",
140
- guidance: claudeNativeBridgeFallbackGuidance(),
141
- metadata,
142
- };
143
- }
144
- if (!hasClaudeNativeCallbackCapability()) {
145
- return {
146
- status: "unsupported",
147
- reason: "Claude native callback bridge unavailable: no verified Agent/Subagent callback capability was provided",
148
- guidance: claudeNativeBridgeFallbackGuidance(),
149
- metadata,
150
- };
151
- }
152
- const childId = process.env.OPEN_ORCHESTRA_CLAUDE_NATIVE_CHILD_ID?.trim() ||
153
- `claude-native-callback:${deterministicSessionLabel(action.sessionId)}`;
154
- return {
155
- status: "native-dispatched",
156
- childId,
157
- metadata,
158
- summary: `Claude native callback bridge dispatched: ${action.action.kind}`,
159
- };
160
- }
161
- function isClaudeParentRuntime() {
162
- const activeRuntime = process.env.OPEN_ORCHESTRA_ACTIVE_RUNTIME?.trim();
163
- return (activeRuntime === "claude" ||
164
- activeRuntime === "claude-cli" ||
165
- process.env.CLAUDECODE === "1" ||
166
- process.env.CLAUDE_CODE === "1");
167
- }
168
- function hasClaudeNativeCallbackCapability() {
169
- return process.env.OPEN_ORCHESTRA_CLAUDE_NATIVE_CALLBACK === "1";
170
- }
171
- function claudeNativeBridgeFallbackGuidance() {
172
- return [
173
- "Native Claude Agent/Subagent dispatch was not recorded.",
174
- "Inspect the prompt artifact, launch it from a supported Claude Code parent runtime, then record lifecycle with the provided manual commands.",
175
- "Do not call Anthropic or other provider APIs from Orchestra.",
176
- ].join(" ");
177
- }
178
- async function runtimeSessions(root, taskId) {
179
- const config = await getWorkflowConfig(root);
180
- const policy = normalizeRuntimeDelegationGuardrails(config.runtimePolicy?.delegation?.guardrails);
170
+ async function runtimeSessions(root, taskId, events) {
181
171
  return summarizeRuntimeDelegationOperations({
182
- policy,
183
- events: await readEvents(root),
172
+ policy: await runtimeGuardrailPolicy(root),
173
+ events: events ?? (await readEvents(root)),
184
174
  taskId,
185
175
  includeClosed: true,
186
176
  }).sessions;
187
177
  }
178
+ async function runtimeGuardrailPolicy(root) {
179
+ const config = await getWorkflowConfig(root);
180
+ return normalizeRuntimeDelegationGuardrails(config.runtimePolicy?.delegation?.guardrails);
181
+ }
188
182
  function safeRuntimeAdapter(runtime) {
189
183
  try {
190
184
  return getRuntimeExecutionAdapter(runtime);
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-parent-action-dispatch.js","sourceRoot":"","sources":["../src/runtime-parent-action-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-parent-action-dispatch.js","sourceRoot":"","sources":["../src/runtime-parent-action-dispatch.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,16 @@ export interface RuntimeParentActionEligibilityInput {
6
6
  session?: RuntimeDelegationSessionSummary | undefined;
7
7
  safetyState?: RuntimeParentActionSafetyState;
8
8
  isLatestAction?: boolean;
9
+ capacity?: RuntimeParentActionEligibilityCapacity | undefined;
10
+ }
11
+ export interface RuntimeParentActionEligibilityCapacity {
12
+ status: "available" | "reserved" | "queued";
13
+ activeSessions: number;
14
+ maxConcurrentDelegates: number;
15
+ activeTaskSessions: number;
16
+ maxSpawnsPerTask: number;
17
+ reason?: string;
9
18
  }
10
19
  export type RuntimeParentActionEligibilityCandidate = Omit<PendingRuntimeParentAction, "actionable" | "rationale" | "eligibility"> & Partial<Pick<PendingRuntimeParentAction, "actionable" | "rationale" | "eligibility">>;
11
- export declare function evaluateRuntimeParentActionEligibility({ action, adapter, runtimeFilter, session, safetyState, isLatestAction, }: RuntimeParentActionEligibilityInput): RuntimeParentActionEligibility;
20
+ export declare function evaluateRuntimeParentActionEligibility({ action, adapter, runtimeFilter, session, safetyState, isLatestAction, capacity, }: RuntimeParentActionEligibilityInput): RuntimeParentActionEligibility;
12
21
  export declare function runtimeParentActionLegacyRationale(eligibility: RuntimeParentActionEligibility): string;
@@ -10,7 +10,7 @@ const EXPECTED_ACTION_KIND_BY_RUNTIME = {
10
10
  "codex-cli": "codex-spawn-agent",
11
11
  "cursor-cli": "cursor-background-agent",
12
12
  };
13
- export function evaluateRuntimeParentActionEligibility({ action, adapter, runtimeFilter, session, safetyState = "unknown", isLatestAction = true, }) {
13
+ export function evaluateRuntimeParentActionEligibility({ action, adapter, runtimeFilter, session, safetyState = "unknown", isLatestAction = true, capacity, }) {
14
14
  const sessionStatus = action.status === "queued" ? "queued" : (session?.status ?? action.status);
15
15
  const reasons = runtimeParentActionSkipReasons({
16
16
  action,
@@ -20,6 +20,7 @@ export function evaluateRuntimeParentActionEligibility({ action, adapter, runtim
20
20
  safetyState,
21
21
  sessionIsStale: Boolean(session?.stale),
22
22
  isLatestAction,
23
+ capacity,
23
24
  });
24
25
  return {
25
26
  status: reasons.length > 0 ? "skipped" : "dispatchable",
@@ -32,6 +33,7 @@ export function evaluateRuntimeParentActionEligibility({ action, adapter, runtim
32
33
  sessionStatus,
33
34
  ...(runtimeFilter ? { runtimeFilter } : {}),
34
35
  safetyState,
36
+ ...(capacity ? { capacity } : {}),
35
37
  },
36
38
  };
37
39
  }
@@ -42,8 +44,9 @@ export function runtimeParentActionLegacyRationale(eligibility) {
42
44
  return (eligibility.reasons[0]?.message ??
43
45
  "parent runtime action is not dispatchable");
44
46
  }
45
- function runtimeParentActionSkipReasons({ action, adapter, runtimeFilter, sessionStatus, safetyState, sessionIsStale, isLatestAction, }) {
47
+ function runtimeParentActionSkipReasons({ action, adapter, runtimeFilter, sessionStatus, safetyState, sessionIsStale, isLatestAction, capacity, }) {
46
48
  const reasons = [];
49
+ addCapacityReason(reasons, capacity);
47
50
  addStatusReasons(reasons, sessionStatus);
48
51
  addStaleOrUnsafeReasons(reasons, {
49
52
  action,
@@ -57,11 +60,21 @@ function runtimeParentActionSkipReasons({ action, adapter, runtimeFilter, sessio
57
60
  addToolPolicyReason(reasons, action, adapter);
58
61
  return reasons;
59
62
  }
63
+ function addCapacityReason(reasons, capacity) {
64
+ if (!capacity || capacity.status !== "queued") {
65
+ return;
66
+ }
67
+ reasons.push(skipReason("queued", capacity.reason ??
68
+ "request is queued until runtime-native subagent capacity is available"));
69
+ }
60
70
  function addStatusReasons(reasons, sessionStatus) {
61
71
  if (sessionStatus === "spawned" || sessionStatus === "active") {
62
72
  reasons.push(skipReason("already-dispatched", `session status ${sessionStatus} already has an active parent dispatch`));
63
73
  }
64
74
  if (sessionStatus === "queued") {
75
+ if (reasons.some((reason) => reason.code === "queued")) {
76
+ return;
77
+ }
65
78
  reasons.push(skipReason("queued", "request is queued until delegation capacity is available"));
66
79
  }
67
80
  if (sessionStatus === "suspended") {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-parent-action-eligibility.js","sourceRoot":"","sources":["../src/runtime-parent-action-eligibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-parent-action-eligibility.js","sourceRoot":"","sources":["../src/runtime-parent-action-eligibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PendingRuntimeParentAction, RuntimeClaudeNativeBridgeResult, RuntimeParentActionEligibility } from "./types.js";
2
+ export interface RuntimeParentActionDispatchFallback {
3
+ summary: string;
4
+ guidance: string;
5
+ lifecycleCommands: PendingRuntimeParentAction["action"]["lifecycleCommands"];
6
+ promptArtifact: string;
7
+ expectedResultArtifact: string;
8
+ }
9
+ export declare function runtimeParentActionFallback(action: PendingRuntimeParentAction, eligibility: RuntimeParentActionEligibility, bridge?: Extract<RuntimeClaudeNativeBridgeResult, {
10
+ status: "unsupported";
11
+ }>): RuntimeParentActionDispatchFallback;
@@ -0,0 +1,12 @@
1
+ import { runtimeParentActionLegacyRationale } from "./runtime-parent-action-eligibility.js";
2
+ export function runtimeParentActionFallback(action, eligibility, bridge) {
3
+ return {
4
+ summary: bridge?.reason ?? runtimeParentActionLegacyRationale(eligibility),
5
+ guidance: bridge?.guidance ??
6
+ "Inspect the prompt artifact, launch the active parent runtime's native subagent tool manually when supported, then record lifecycle with the provided commands. Do not call provider APIs from Orchestra.",
7
+ lifecycleCommands: action.action.lifecycleCommands,
8
+ promptArtifact: action.action.payload.promptArtifact,
9
+ expectedResultArtifact: action.action.payload.expectedResultArtifact,
10
+ };
11
+ }
12
+ //# sourceMappingURL=runtime-parent-action-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-parent-action-fallback.js","sourceRoot":"","sources":["../src/runtime-parent-action-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,wCAAwC,CAAC;AAe5F,MAAM,UAAU,2BAA2B,CACzC,MAAkC,EAClC,WAA2C,EAC3C,MAA4E;IAE5E,OAAO;QACL,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,kCAAkC,CAAC,WAAW,CAAC;QAC1E,QAAQ,EACN,MAAM,EAAE,QAAQ;YAChB,2MAA2M;QAC7M,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;QAClD,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;QACpD,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB;KACrE,CAAC;AACJ,CAAC"}
@@ -204,6 +204,14 @@ export interface RuntimeParentActionEligibilityChecked {
204
204
  sessionStatus?: RuntimeDelegationSessionStatus;
205
205
  runtimeFilter?: string;
206
206
  safetyState: RuntimeParentActionSafetyState;
207
+ capacity?: {
208
+ status: "available" | "reserved" | "queued";
209
+ activeSessions: number;
210
+ maxConcurrentDelegates: number;
211
+ activeTaskSessions: number;
212
+ maxSpawnsPerTask: number;
213
+ reason?: string;
214
+ };
207
215
  }
208
216
  export interface RuntimeParentActionEligibility {
209
217
  status: RuntimeParentActionEligibilityStatus;
@@ -226,6 +226,17 @@ non-Claude, or callback-unavailable contexts return fallback guidance and do not
226
226
  claim native execution. Orchestra does not call Claude Code, Anthropic APIs, or
227
227
  another provider API.
228
228
 
229
+ Runtime-native dispatch also enforces delegation capacity before calling parent
230
+ runtime tools. The dispatcher evaluates actions sequentially, reserves only the
231
+ oldest eligible requested sessions within `maxConcurrentDelegates` and
232
+ `maxSpawnsPerTask`, keeps suspended sessions from opening extra capacity, and
233
+ leaves over-capacity actions queued with structured `checked.capacity` metadata.
234
+ When lifecycle events complete, fail, time out, cancel, or close an active
235
+ session, the next queued action can be promoted to a requested parent action and
236
+ dispatched on the next bounded auto-dispatch pass. This prevents several squads
237
+ or gates from flooding the parent runtime at once while still allowing
238
+ background work to continue as capacity becomes available.
239
+
229
240
  Runtime lifecycle watching is adapter-driven. Each inspected session reports a
230
241
  `watcher` object with adapter id, detection mode, support level, fallback
231
242
  behavior, and the reason a native callback is unavailable. `codex-cli`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jterrats/open-orchestra",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  "extensions/vscode-open-orchestra",