@gajae-code/coding-agent 0.18.10 → 0.18.12
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 +295 -0
- package/dist/types/async/job-manager.d.ts +7 -3
- package/dist/types/async/result-formatting.d.ts +2 -0
- package/dist/types/autoresearch/git.d.ts +1 -1
- package/dist/types/capability/fs.d.ts +2 -2
- package/dist/types/cli/accounts-cli.d.ts +2 -2
- package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
- package/dist/types/cli/install-activation.d.ts +10 -4
- package/dist/types/cli/public-command-errors.d.ts +1 -0
- package/dist/types/cli/update-cli.d.ts +14 -1
- package/dist/types/cli-ordinary.d.ts +2 -2
- package/dist/types/commands/accounts.d.ts +2 -1
- package/dist/types/commands/migrate.d.ts +1 -1
- package/dist/types/commands/sdk.d.ts +5 -0
- package/dist/types/commit/changelog/index.d.ts +1 -0
- package/dist/types/config/autorouting-tier-map.d.ts +30 -0
- package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
- package/dist/types/config/config-hot-reload.d.ts +39 -0
- package/dist/types/config/file-lock.d.ts +8 -1
- package/dist/types/config/model-discovery-manager.d.ts +2 -0
- package/dist/types/config/model-profile-activation.d.ts +62 -6
- package/dist/types/config/model-registry.d.ts +56 -5
- package/dist/types/config/model-resolver.d.ts +2 -0
- package/dist/types/config/models-config-schema.d.ts +10 -0
- package/dist/types/config/settings-schema.d.ts +46 -3
- package/dist/types/config/settings.d.ts +33 -1
- package/dist/types/dap/config.d.ts +8 -4
- package/dist/types/debug/system-info.d.ts +6 -1
- package/dist/types/discovery/mcp-compat.d.ts +3 -1
- package/dist/types/edit/modes/patch.d.ts +5 -0
- package/dist/types/edit/modes/replace.d.ts +3 -0
- package/dist/types/exec/bash-executor.d.ts +12 -0
- package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
- package/dist/types/migrate/adapters/codex.d.ts +2 -1
- package/dist/types/migrate/adapters/index.d.ts +10 -1
- package/dist/types/migrate/executor.d.ts +3 -1
- package/dist/types/migrate/types.d.ts +15 -3
- package/dist/types/modes/components/settings-selector.d.ts +6 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
- package/dist/types/modes/theme/theme.d.ts +1 -0
- package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
- package/dist/types/runtime-mcp/manager.d.ts +7 -0
- package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
- package/dist/types/sdk/broker/broker-exit.d.ts +2 -2
- package/dist/types/sdk/broker/broker.d.ts +7 -1
- package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
- package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
- package/dist/types/sdk/broker/ensure.d.ts +136 -7
- package/dist/types/sdk/broker/hop.d.ts +36 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
- package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
- package/dist/types/sdk/broker/session-index.d.ts +4 -1
- package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
- package/dist/types/sdk/bus/index.d.ts +23 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
- package/dist/types/sdk/cli/session-cli.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.d.ts +32 -0
- package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
- package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
- package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
- package/dist/types/sdk/session-list.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +58 -2
- package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
- package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
- package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
- package/dist/types/session/messages.d.ts +5 -1
- package/dist/types/session/session-manager.d.ts +13 -3
- package/dist/types/session/startup-auth-config.d.ts +24 -2
- package/dist/types/session/streaming-output.d.ts +11 -0
- package/dist/types/session/terminal-abort.d.ts +3 -1
- package/dist/types/session-import/service.d.ts +1 -1
- package/dist/types/skill-state/workflow-mutation-guard.d.ts +7 -3
- package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
- package/dist/types/task/executor.d.ts +19 -2
- package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
- package/dist/types/tools/atomic-file-write.d.ts +9 -7
- package/dist/types/tools/bash-allowed-prefixes.d.ts +11 -0
- package/dist/types/tools/descriptors.d.ts +2 -0
- package/dist/types/tools/fetch.d.ts +1 -1
- package/dist/types/tools/index.d.ts +2 -0
- package/dist/types/tools/python.d.ts +1 -1
- package/dist/types/tools/report-issue.d.ts +41 -0
- package/dist/types/tools/subagent.d.ts +23 -0
- package/dist/types/web/scrapers/types.d.ts +8 -1
- package/dist/types/web/search/providers/insane.d.ts +7 -1
- package/dist/types/web/search/providers/searxng.d.ts +5 -0
- package/package.json +8 -8
- package/scripts/build-binary.ts +2 -1
- package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
- package/scripts/generate-docs-index.ts +8 -1
- package/scripts/generate-sdk-operation-inventory.ts +22 -4
- package/src/async/job-manager.ts +356 -56
- package/src/async/result-formatting.ts +40 -0
- package/src/autoresearch/git.ts +9 -2
- package/src/autoresearch/prompts/prompt-setup.md +1 -1
- package/src/capability/fs.ts +27 -19
- package/src/capability/index.ts +2 -2
- package/src/cli/accounts-cli.ts +176 -8
- package/src/cli/auth-broker-cli.ts +21 -11
- package/src/cli/doctor/install-repairs.ts +35 -5
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/install-activation.ts +47 -4
- package/src/cli/migrate-cli.ts +7 -5
- package/src/cli/public-command-errors.ts +4 -0
- package/src/cli/root-flags.ts +2 -2
- package/src/cli/stats-cli.ts +9 -5
- package/src/cli/update-cli.ts +224 -7
- package/src/cli-ordinary.ts +7 -2
- package/src/commands/accounts.ts +10 -5
- package/src/commands/migrate.ts +3 -3
- package/src/commands/sdk.ts +199 -42
- package/src/commands/ultragoal.ts +16 -8
- package/src/commit/changelog/index.ts +39 -1
- package/src/commit/message.ts +10 -3
- package/src/config/autorouting-tier-map.ts +30 -0
- package/src/config/config-hot-reload-trust.ts +148 -0
- package/src/config/config-hot-reload.ts +734 -0
- package/src/config/file-lock.ts +216 -56
- package/src/config/model-bindings-applier.ts +85 -47
- package/src/config/model-discovery-manager.ts +10 -0
- package/src/config/model-profile-activation.ts +716 -113
- package/src/config/model-registry.ts +1334 -158
- package/src/config/model-resolver.ts +3 -1
- package/src/config/models-config-schema.ts +6 -0
- package/src/config/settings-schema.ts +60 -3
- package/src/config/settings.ts +458 -24
- package/src/coordinator-mcp/policy.ts +26 -1
- package/src/crash/sanitize.ts +4 -0
- package/src/customization/import.ts +3 -1
- package/src/dap/config.ts +31 -11
- package/src/dap/defaults.json +1 -1
- package/src/debug/crash-diagnostics.ts +2 -1
- package/src/debug/report-bundle.ts +19 -0
- package/src/debug/system-info.ts +8 -3
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
- package/src/discovery/agents-md.ts +1 -1
- package/src/discovery/helpers.ts +1 -2
- package/src/discovery/mcp-compat.ts +120 -17
- package/src/edit/apply-patch/index.ts +12 -1
- package/src/edit/index.ts +13 -17
- package/src/edit/modes/patch.ts +187 -8
- package/src/edit/modes/replace.ts +136 -0
- package/src/eval/js/context-manager.ts +29 -3
- package/src/eval/js/worker-entry.ts +51 -18
- package/src/eval/py/executor.ts +14 -4
- package/src/eval/py/runner.py +144 -5
- package/src/exec/bash-executor.ts +81 -4
- package/src/exec/bash-shell-guardian.ts +4 -1
- package/src/exec/bash-shell-supervisor.ts +8 -4
- package/src/exec/isolated-shell.ts +5 -1
- package/src/export/html/index.ts +46 -6
- package/src/extensibility/custom-tools/wrapper.ts +3 -1
- package/src/extensibility/extensions/loader.ts +8 -1
- package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
- package/src/gjc-runtime/gc-runtime.ts +33 -6
- package/src/gjc-runtime/launch-tmux.ts +7 -2
- package/src/gjc-runtime/launch-worktree.test.ts +148 -0
- package/src/gjc-runtime/launch-worktree.ts +101 -14
- package/src/gjc-runtime/managed-owner-admission.ts +46 -2
- package/src/gjc-runtime/session-resolution.ts +38 -6
- package/src/gjc-runtime/session-state-lock.ts +59 -14
- package/src/gjc-runtime/state-runtime.ts +23 -19
- package/src/hooks/native-skill-hook.ts +14 -11
- package/src/internal-urls/docs-index.generated.ts +14 -13
- package/src/internal-urls/local-protocol.ts +142 -8
- package/src/lsp/index.ts +29 -0
- package/src/lsp/workspace-path.ts +23 -0
- package/src/migrate/action-planner.ts +57 -0
- package/src/migrate/adapters/claude-code.ts +23 -4
- package/src/migrate/adapters/codex.ts +22 -4
- package/src/migrate/adapters/index.ts +22 -4
- package/src/migrate/adapters/opencode.ts +6 -1
- package/src/migrate/executor.ts +84 -7
- package/src/migrate/report.ts +19 -2
- package/src/migrate/types.ts +14 -4
- package/src/modes/DESIGN.md +51 -0
- package/src/modes/acp/permission-mode.ts +18 -1
- package/src/modes/components/assistant-message.ts +55 -1
- package/src/modes/components/settings-selector.ts +103 -37
- package/src/modes/controllers/command-controller.ts +38 -2
- package/src/modes/controllers/plan-mode-controller.ts +17 -7
- package/src/modes/controllers/selector-controller.ts +62 -6
- package/src/modes/interactive-mode.ts +68 -0
- package/src/modes/theme/theme.ts +15 -0
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/read.md +1 -1
- package/src/prompts/tools/report-issue.md +13 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/runtime-credential-selector.ts +2 -2
- package/src/runtime-mcp/content-limits.ts +7 -0
- package/src/runtime-mcp/manager-pool.test.ts +5 -4
- package/src/runtime-mcp/manager.ts +32 -0
- package/src/runtime-mcp/oauth-flow.ts +32 -6
- package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
- package/src/runtime-mcp/render.ts +16 -1
- package/src/runtime-mcp/tool-bridge.ts +126 -17
- package/src/sdk/broker/broker-exit.ts +8 -5
- package/src/sdk/broker/broker.ts +342 -82
- package/src/sdk/broker/daemon-entry.ts +338 -116
- package/src/sdk/broker/doctor-restart.ts +2 -1
- package/src/sdk/broker/ensure.ts +1143 -265
- package/src/sdk/broker/hop.ts +274 -0
- package/src/sdk/broker/lifecycle-ledger.ts +35 -11
- package/src/sdk/broker/lock-host-identity.ts +29 -0
- package/src/sdk/broker/session-index.ts +62 -12
- package/src/sdk/bus/chat-command-policy.ts +16 -3
- package/src/sdk/bus/index.ts +52 -21
- package/src/sdk/bus/reconciliation-store.ts +201 -8
- package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
- package/src/sdk/cli/session-cli.ts +21 -6
- package/src/sdk/host/session-runtime.test.ts +118 -23
- package/src/sdk/host/session-runtime.ts +352 -47
- package/src/sdk/lifecycle/service.ts +1 -0
- package/src/sdk/prompt-deadline-flush.ts +78 -5
- package/src/sdk/prompt-deadline-manager.ts +68 -14
- package/src/sdk/protocol/adapter-validation.ts +53 -11
- package/src/sdk/protocol/operation-inventory.generated.json +101 -2
- package/src/sdk/reconciliation-extensions.ts +1 -0
- package/src/sdk/session-list.ts +1 -0
- package/src/sdk/session.ts +114 -61
- package/src/session/agent-session.ts +1043 -81
- package/src/session/internal/managed-session-scope.ts +126 -39
- package/src/session/internal/managed-session-storage.ts +14 -11
- package/src/session/internal/native-publish-outcome.ts +5 -1
- package/src/session/messages.ts +47 -6
- package/src/session/session-manager.ts +236 -14
- package/src/session/startup-auth-config.ts +116 -8
- package/src/session/streaming-output.ts +262 -4
- package/src/session/terminal-abort.ts +14 -2
- package/src/session-import/service.ts +1 -0
- package/src/skill-state/workflow-mutation-guard.ts +491 -32
- package/src/slash-commands/builtin-registry.ts +15 -3
- package/src/slash-commands/helpers/credential-switch.ts +10 -5
- package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
- package/src/task/executor.ts +103 -12
- package/src/task/index.ts +389 -175
- package/src/tools/ast-edit-write-path.ts +64 -0
- package/src/tools/ast-edit.ts +18 -1
- package/src/tools/atomic-file-write.ts +46 -15
- package/src/tools/auto-generated-guard.ts +3 -0
- package/src/tools/bash-allowed-prefixes.ts +153 -5
- package/src/tools/bash-interactive.ts +14 -2
- package/src/tools/bash.ts +14 -0
- package/src/tools/debug.ts +7 -6
- package/src/tools/descriptors.test.ts +44 -0
- package/src/tools/descriptors.ts +34 -2
- package/src/tools/fetch.ts +3 -2
- package/src/tools/index.ts +2 -0
- package/src/tools/output-meta.ts +23 -2
- package/src/tools/python.ts +1 -1
- package/src/tools/read.ts +17 -35
- package/src/tools/report-issue.ts +184 -0
- package/src/tools/subagent-render.ts +114 -12
- package/src/tools/subagent.ts +108 -1
- package/src/tools/todo-write.ts +41 -3
- package/src/tools/tool-catalog.generated.ts +31 -3
- package/src/tools/write.ts +35 -3
- package/src/utils/commit-message-generator.ts +9 -2
- package/src/utils/file-mentions.ts +29 -1
- package/src/utils/title-generator.ts +7 -2
- package/src/web/scrapers/index.ts +3 -1
- package/src/web/scrapers/types.ts +8 -0
- package/src/web/scrapers/youtube.ts +3 -2
- package/src/web/search/providers/insane.ts +91 -28
- package/src/web/search/providers/searxng.ts +62 -10
package/src/task/executor.ts
CHANGED
|
@@ -51,6 +51,7 @@ import { buildSkillPromptMessage, type Skill } from "../extensibility/skills";
|
|
|
51
51
|
import { sessionRoot } from "../gjc-runtime/session-layout";
|
|
52
52
|
import type { HindsightSessionState } from "../hindsight/state";
|
|
53
53
|
import type { LocalProtocolOptions } from "../internal-urls";
|
|
54
|
+
import type { PlanModeState } from "../plan-mode/state";
|
|
54
55
|
import subagentSystemPromptTemplate from "../prompts/system/subagent-system-prompt.md" with { type: "text" };
|
|
55
56
|
import subagentUserPromptTemplate from "../prompts/system/subagent-user-prompt.md" with { type: "text" };
|
|
56
57
|
import submitReminderTemplate from "../prompts/system/subagent-yield-reminder.md" with { type: "text" };
|
|
@@ -59,6 +60,7 @@ import { discoverAuthStorage } from "../sdk";
|
|
|
59
60
|
import type { AgentSession, AgentSessionEvent, ForkContextSeed } from "../session/agent-session";
|
|
60
61
|
import { ArtifactManager } from "../session/artifacts";
|
|
61
62
|
import type { AuthStorage } from "../session/auth-storage";
|
|
63
|
+
import type { ClientBridge } from "../session/client-bridge";
|
|
62
64
|
import { SKILL_PROMPT_MESSAGE_TYPE } from "../session/messages";
|
|
63
65
|
import { SessionManager, type SessionMemoryMode } from "../session/session-manager";
|
|
64
66
|
import { FileSessionStorage } from "../session/session-storage";
|
|
@@ -300,6 +302,21 @@ export interface ExecutorOptions {
|
|
|
300
302
|
* the same immutable child settings snapshot.
|
|
301
303
|
*/
|
|
302
304
|
inheritedServiceTier?: ServiceTier;
|
|
305
|
+
/**
|
|
306
|
+
* Parent ACP/SDK approval mode. `deny` and `prompt` replace the child
|
|
307
|
+
* default (`allow`) before the first prompt. `allow` is that default.
|
|
308
|
+
*/
|
|
309
|
+
sdkPermissionMode?: "prompt" | "allow" | "deny";
|
|
310
|
+
/**
|
|
311
|
+
* Parent plan-mode state. Copied onto the child before the first prompt so
|
|
312
|
+
* `enforcePlanModeWrite` still refuses product-file writes.
|
|
313
|
+
*/
|
|
314
|
+
planModeState?: PlanModeState;
|
|
315
|
+
/**
|
|
316
|
+
* Parent client bridge. Only `requestPermission` is copied onto the child.
|
|
317
|
+
* Terminal, filesystem, and deferAgentInitiatedTurns stay on the parent.
|
|
318
|
+
*/
|
|
319
|
+
clientBridge?: ClientBridge;
|
|
303
320
|
/** Override local:// protocol options so subagent shares parent's local:// root */
|
|
304
321
|
localProtocolOptions?: LocalProtocolOptions;
|
|
305
322
|
/**
|
|
@@ -342,28 +359,32 @@ export interface ExecutorOptions {
|
|
|
342
359
|
export class ManagedTaskPersistence {
|
|
343
360
|
readonly #artifacts: ArtifactManager;
|
|
344
361
|
readonly #taskId: string;
|
|
362
|
+
readonly #getArtifacts: () => ArtifactManager;
|
|
345
363
|
|
|
346
|
-
constructor(artifacts: ArtifactManager, taskId: string) {
|
|
364
|
+
constructor(artifacts: ArtifactManager, taskId: string, getArtifacts: () => ArtifactManager = () => artifacts) {
|
|
347
365
|
this.#artifacts = artifacts;
|
|
348
366
|
this.#taskId = validateAllocatedTaskId(taskId);
|
|
367
|
+
this.#getArtifacts = getArtifacts;
|
|
349
368
|
if (!artifacts.getManagedSubtreeRootAuthority())
|
|
350
369
|
throw new Error("Managed task persistence authority is unavailable");
|
|
351
370
|
}
|
|
352
371
|
|
|
353
372
|
async openSession(cwd: string, sessionMemoryMode: SessionMemoryMode = "shadow"): Promise<SessionManager> {
|
|
354
|
-
const
|
|
373
|
+
const artifacts = this.#getArtifacts();
|
|
374
|
+
const store = artifacts.getManagedStore();
|
|
355
375
|
if (!store) throw new Error("Managed task persistence authority is unavailable");
|
|
356
|
-
|
|
357
|
-
const sessionFile = path.join(
|
|
376
|
+
artifacts.assertManagedBinding();
|
|
377
|
+
const sessionFile = path.join(artifacts.dir, `${this.#taskId}.jsonl`);
|
|
358
378
|
const session = await SessionManager.openNestedManaged(
|
|
359
379
|
sessionFile,
|
|
360
|
-
SessionManager.nestedManagedDestination(store,
|
|
380
|
+
SessionManager.nestedManagedDestination(store, artifacts.dir),
|
|
361
381
|
store,
|
|
362
382
|
undefined,
|
|
363
383
|
cwd,
|
|
364
384
|
sessionMemoryMode,
|
|
365
385
|
);
|
|
366
|
-
|
|
386
|
+
artifacts.assertManagedBinding();
|
|
387
|
+
session.registerManagedTranscriptRelocationResolver(this.#getArtifacts);
|
|
367
388
|
return session;
|
|
368
389
|
}
|
|
369
390
|
async openStagedSession(attemptId = this.#taskId): Promise<SessionManager> {
|
|
@@ -385,8 +406,10 @@ export class ManagedTaskPersistence {
|
|
|
385
406
|
}
|
|
386
407
|
|
|
387
408
|
async publishOutput(rawOutput: string, metadata: Uint8Array): Promise<void> {
|
|
388
|
-
|
|
389
|
-
|
|
409
|
+
const artifacts = this.#getArtifacts();
|
|
410
|
+
artifacts.assertManagedBinding();
|
|
411
|
+
await withArtifactManagerFinalizationTurn(artifacts, () =>
|
|
412
|
+
artifacts.publishManagedOutputGeneration(
|
|
390
413
|
`${this.#taskId}.md.selector.json`,
|
|
391
414
|
`${this.#taskId}.md`,
|
|
392
415
|
Buffer.from(rawOutput, "utf8"),
|
|
@@ -396,8 +419,12 @@ export class ManagedTaskPersistence {
|
|
|
396
419
|
}
|
|
397
420
|
}
|
|
398
421
|
|
|
399
|
-
export function createManagedTaskPersistence(
|
|
400
|
-
|
|
422
|
+
export function createManagedTaskPersistence(
|
|
423
|
+
artifacts: ArtifactManager,
|
|
424
|
+
taskId: string,
|
|
425
|
+
getArtifacts?: () => ArtifactManager,
|
|
426
|
+
): ManagedTaskPersistence {
|
|
427
|
+
return new ManagedTaskPersistence(artifacts, taskId, getArtifacts);
|
|
401
428
|
}
|
|
402
429
|
|
|
403
430
|
const MAX_REVIEW_FINDINGS_ARTIFACT_BYTES = 16 * 1024 * 1024;
|
|
@@ -1006,6 +1033,16 @@ function autoroutingAttemptDisposition(failure: AutoroutingPreflightFailure): {
|
|
|
1006
1033
|
return { code: "unclassified_terminal", advance: false };
|
|
1007
1034
|
}
|
|
1008
1035
|
|
|
1036
|
+
/** Permission callback only. Terminal, filesystem, and defer flags stay on the parent. */
|
|
1037
|
+
function permissionOnlyBridge(bridge: ClientBridge | undefined): ClientBridge | undefined {
|
|
1038
|
+
if (!bridge?.requestPermission || bridge.capabilities.requestPermission !== true) return undefined;
|
|
1039
|
+
const requestPermission = bridge.requestPermission.bind(bridge);
|
|
1040
|
+
return {
|
|
1041
|
+
capabilities: { requestPermission: true },
|
|
1042
|
+
requestPermission: (toolCall, options, signal) => requestPermission(toolCall, options, signal),
|
|
1043
|
+
};
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1009
1046
|
export async function runSubprocessOnce(options: ExecutorOptions): Promise<SingleResult> {
|
|
1010
1047
|
const {
|
|
1011
1048
|
cwd,
|
|
@@ -1739,9 +1776,14 @@ export async function runSubprocessOnce(options: ExecutorOptions): Promise<Singl
|
|
|
1739
1776
|
});
|
|
1740
1777
|
let modelRegistry = options.modelRegistry ?? ownedModelRegistry!;
|
|
1741
1778
|
const authStorage = modelRegistry.authStorage;
|
|
1742
|
-
if
|
|
1779
|
+
// Reject if both authStorage and modelRegistry are provided with different instances.
|
|
1780
|
+
if (
|
|
1781
|
+
options.authStorage !== undefined &&
|
|
1782
|
+
options.modelRegistry !== undefined &&
|
|
1783
|
+
options.authStorage !== authStorage
|
|
1784
|
+
) {
|
|
1743
1785
|
throw new Error(
|
|
1744
|
-
"options.authStorage and options.modelRegistry.authStorage must be the same instance
|
|
1786
|
+
"options.authStorage and options.modelRegistry.authStorage must be the same instance or one must be omitted",
|
|
1745
1787
|
);
|
|
1746
1788
|
}
|
|
1747
1789
|
checkAbort();
|
|
@@ -2101,6 +2143,22 @@ export async function runSubprocessOnce(options: ExecutorOptions): Promise<Singl
|
|
|
2101
2143
|
);
|
|
2102
2144
|
|
|
2103
2145
|
activeSession = session;
|
|
2146
|
+
// Plan mode is session state, not a tool-list filter. Copy it before the
|
|
2147
|
+
// first prompt so product writes hit the same read-only guard as the parent.
|
|
2148
|
+
if (options.planModeState?.enabled) {
|
|
2149
|
+
session.setPlanModeState({
|
|
2150
|
+
enabled: true,
|
|
2151
|
+
planFilePath: options.planModeState.planFilePath,
|
|
2152
|
+
...(options.planModeState.workflow ? { workflow: options.planModeState.workflow } : {}),
|
|
2153
|
+
...(options.planModeState.reentry !== undefined ? { reentry: options.planModeState.reentry } : {}),
|
|
2154
|
+
});
|
|
2155
|
+
}
|
|
2156
|
+
// `allow` is the child default. deny/prompt must be copied before the first prompt.
|
|
2157
|
+
if (options.sdkPermissionMode === "deny" || options.sdkPermissionMode === "prompt") {
|
|
2158
|
+
session.setSdkPermissionMode(options.sdkPermissionMode);
|
|
2159
|
+
}
|
|
2160
|
+
const approvalBridge = permissionOnlyBridge(options.clientBridge);
|
|
2161
|
+
if (approvalBridge) session.setClientBridge(approvalBridge);
|
|
2104
2162
|
const configuredChildChain = parentFallbackSelector ? [parentFallbackSelector] : modelPatterns;
|
|
2105
2163
|
session.setConfiguredModelChain("default", configuredChildChain, "subagent", agent.name, true);
|
|
2106
2164
|
if (!parentFallbackSelector) {
|
|
@@ -2881,6 +2939,39 @@ function preflightTerminalResult(
|
|
|
2881
2939
|
|
|
2882
2940
|
/** Run routed initial tasks through the bounded probe/durable candidate ledger. */
|
|
2883
2941
|
export async function runSubprocess(options: ExecutorOptions): Promise<SingleResult> {
|
|
2942
|
+
// Resume routing resolves credentials before dispatch; do not let an unexpected
|
|
2943
|
+
// lookup exception bypass terminalization just because the initial probe ledger is off.
|
|
2944
|
+
if (
|
|
2945
|
+
(options.runMode ?? "initial") !== "initial" &&
|
|
2946
|
+
options.autoroutingCandidates &&
|
|
2947
|
+
options.autoroutingPreflightErrors
|
|
2948
|
+
) {
|
|
2949
|
+
const failedSelector = options.autoroutingCandidates.find(selector =>
|
|
2950
|
+
options.autoroutingPreflightErrors?.has(selector),
|
|
2951
|
+
);
|
|
2952
|
+
if (failedSelector) {
|
|
2953
|
+
const preflightError = options.autoroutingPreflightErrors.get(failedSelector);
|
|
2954
|
+
const failure = classifyAutoroutingPreflightFailure(preflightError, "auth_resolve");
|
|
2955
|
+
const { code } = autoroutingAttemptDisposition(failure);
|
|
2956
|
+
const skips = buildBoundedRoutingSkips(options.autoroutingSkips);
|
|
2957
|
+
const routedOptions = options.routing ? { ...options.routing, ...skips } : options.routing;
|
|
2958
|
+
return preflightTerminalResult(
|
|
2959
|
+
{ ...options, routing: routedOptions },
|
|
2960
|
+
[{ selector: failedSelector, phase: "probe", code }],
|
|
2961
|
+
"preflight_exhausted",
|
|
2962
|
+
);
|
|
2963
|
+
}
|
|
2964
|
+
}
|
|
2965
|
+
if ((options.runMode ?? "initial") !== "initial" && options.autoroutingCandidates?.length === 0 && options.routing) {
|
|
2966
|
+
const skippedCandidates = options.autoroutingSkips?.filter(skip => skip.code === "credential_unavailable") ?? [];
|
|
2967
|
+
return preflightTerminalResult(
|
|
2968
|
+
{ ...options, routing: { ...options.routing, ...buildBoundedRoutingSkips(options.autoroutingSkips) } },
|
|
2969
|
+
skippedCandidates
|
|
2970
|
+
.slice(0, 6)
|
|
2971
|
+
.map(skip => ({ selector: skip.selector, phase: "probe", code: "credential_unavailable" })),
|
|
2972
|
+
"all_candidates_skipped",
|
|
2973
|
+
);
|
|
2974
|
+
}
|
|
2884
2975
|
if (
|
|
2885
2976
|
!options.autoroutingPreflight ||
|
|
2886
2977
|
(options.runMode ?? "initial") !== "initial" ||
|