@gajae-code/coding-agent 0.14.2 → 0.15.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/CHANGELOG.md +120 -1
- package/dist/types/async/job-manager.d.ts +4 -1
- package/dist/types/autoresearch/dashboard.d.ts +29 -4
- package/dist/types/autoresearch/data-context.d.ts +25 -0
- package/dist/types/autoresearch/git.d.ts +65 -7
- package/dist/types/autoresearch/harness.d.ts +58 -0
- package/dist/types/autoresearch/prompts.d.ts +51 -0
- package/dist/types/autoresearch/runs.d.ts +173 -0
- package/dist/types/autoresearch/types.d.ts +9 -139
- package/dist/types/capability/types.d.ts +20 -0
- package/dist/types/cli/accounts-cli.d.ts +1 -0
- package/dist/types/commands/{rlm.d.ts → autoresearch.d.ts} +2 -4
- package/dist/types/config/autorouting-contract.d.ts +146 -0
- package/dist/types/config/autorouting-generator.d.ts +40 -0
- package/dist/types/config/autorouting-tier-map.d.ts +16844 -0
- package/dist/types/config/autorouting.d.ts +35 -0
- package/dist/types/config/model-discovery-manager.d.ts +8 -1
- package/dist/types/config/model-registry.d.ts +30 -1
- package/dist/types/config/provider-selection-policy.d.ts +23 -0
- package/dist/types/config/settings-schema.d.ts +61 -3
- package/dist/types/config/settings.d.ts +3 -0
- package/dist/types/coordinator/contract.d.ts +1 -1
- package/dist/types/coordinator-mcp/durability.d.ts +29 -0
- package/dist/types/coordinator-mcp/event-webhook.d.ts +50 -0
- package/dist/types/coordinator-mcp/question-state.d.ts +1 -1
- package/dist/types/coordinator-mcp/server.d.ts +14 -0
- package/dist/types/crash/index-store.d.ts +3 -0
- package/dist/types/crash/record-loader.d.ts +2 -0
- package/dist/types/crash/upstream/relay.d.ts +5 -3
- package/dist/types/cursor.d.ts +12 -0
- package/dist/types/defaults/gjc-defaults.d.ts +35 -1
- package/dist/types/defaults/gjc-skills.generated.d.ts +1 -1
- package/dist/types/discovery/helpers.d.ts +1 -1
- package/dist/types/edit/index.d.ts +2 -1
- package/dist/types/eval/py/executor.d.ts +2 -0
- package/dist/types/extensibility/extensions/loader.d.ts +32 -0
- package/dist/types/extensibility/gjc-plugins/types.d.ts +1 -1
- package/dist/types/extensibility/skills.d.ts +2 -0
- package/dist/types/gjc-runtime/autoresearch-runtime.d.ts +194 -0
- package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
- package/dist/types/gjc-runtime/psmux-detect.d.ts +1 -1
- package/dist/types/gjc-runtime/python-transcript.d.ts +19 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +2 -8
- package/dist/types/gjc-runtime/session-layout.d.ts +6 -3
- package/dist/types/gjc-runtime/state-renderer.d.ts +0 -22
- package/dist/types/gjc-runtime/state-schema.d.ts +7 -7
- package/dist/types/gjc-runtime/tmux-common.d.ts +2 -2
- package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +38 -1
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +2 -24
- package/dist/types/gjc-runtime/ultragoal-validation-policy.d.ts +73 -0
- package/dist/types/gjc-runtime/workflow-recovery-projection.d.ts +100 -0
- package/dist/types/hooks/skill-keywords.d.ts +1 -1
- package/dist/types/main.d.ts +0 -10
- package/dist/types/modes/acp/acp-agent.d.ts +13 -6
- package/dist/types/modes/components/model-selector.d.ts +14 -0
- package/dist/types/modes/components/skill-hud/render.d.ts +6 -1
- package/dist/types/modes/components/smart-routing-panel.d.ts +82 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +14 -0
- package/dist/types/modes/interactive-mode.d.ts +3 -0
- package/dist/types/modes/types.d.ts +9 -0
- package/dist/types/rlm/artifacts.d.ts +4 -4
- package/dist/types/runtime/optional-runtime-services.d.ts +2 -1
- package/dist/types/runtime/workspace-tree-service.d.ts +5 -1
- package/dist/types/runtime-mcp/config.d.ts +6 -0
- package/dist/types/runtime-mcp/manager.d.ts +10 -0
- package/dist/types/sdk/acp/adapter.d.ts +0 -4
- package/dist/types/sdk/broker/broker.d.ts +1 -1
- package/dist/types/sdk/broker/lifecycle.d.ts +57 -2
- package/dist/types/sdk/broker/session-index.d.ts +15 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +6 -0
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -0
- package/dist/types/sdk/bus/index.d.ts +8 -0
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +2 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -2
- package/dist/types/sdk/client/client.d.ts +39 -4
- package/dist/types/sdk/host/host.d.ts +1 -0
- package/dist/types/sdk/host/internal-autorouting-state.d.ts +3 -0
- package/dist/types/sdk/host/model-pin.d.ts +29 -0
- package/dist/types/sdk/host/session-runtime.d.ts +2 -1
- package/dist/types/sdk/lifecycle-session.d.ts +13 -0
- package/dist/types/sdk/router/session-router.d.ts +27 -1
- package/dist/types/sdk/session.d.ts +11 -1
- package/dist/types/session/agent-session.d.ts +36 -6
- package/dist/types/session/artifacts.d.ts +16 -1
- package/dist/types/session/internal/managed-session-storage.d.ts +7 -0
- package/dist/types/session/session-manager.d.ts +84 -2
- package/dist/types/session/session-staging-paths.d.ts +3 -0
- package/dist/types/skill-state/canonical-skills.d.ts +1 -1
- package/dist/types/skill-state/workflow-hud.d.ts +12 -21
- package/dist/types/skill-state/workflow-mutation-guard.d.ts +1 -0
- package/dist/types/slash-commands/helpers/autorouting-status.d.ts +8 -0
- package/dist/types/system-prompt.d.ts +23 -0
- package/dist/types/task/executor.d.ts +35 -4
- package/dist/types/task/index.d.ts +17 -3
- package/dist/types/task/receipt.d.ts +3 -1
- package/dist/types/task/types.d.ts +144 -0
- package/dist/types/tools/atomic-file-write.d.ts +72 -0
- package/dist/types/tools/descriptors.d.ts +1 -0
- package/dist/types/tools/index.d.ts +36 -1
- package/dist/types/tools/move-session.d.ts +40 -0
- package/dist/types/tools/python.d.ts +12 -0
- package/dist/types/tools/resource-gc.d.ts +0 -3
- package/dist/types/tools/search.d.ts +8 -1
- package/dist/types/tools/skill.d.ts +9 -4
- package/dist/types/tools/subagent.d.ts +33 -3
- package/dist/types/utils/xml-escape.d.ts +2 -0
- package/dist/types/workflow/workflow-intent-diff.d.ts +2 -2
- package/dist/types/workflow/workflow-intent-report-consumer.d.ts +1 -1
- package/package.json +11 -12
- package/scripts/build-sdk-package-smoke.ts +7 -5
- package/scripts/check-autorouting-tier-map.ts +183 -0
- package/scripts/generate-sdk-operation-inventory.ts +12 -0
- package/scripts/generate-tool-catalog.ts +40 -5
- package/src/async/job-manager.ts +5 -2
- package/src/autoresearch/dashboard.ts +134 -314
- package/src/autoresearch/data-context.ts +35 -0
- package/src/autoresearch/git.ts +186 -26
- package/src/autoresearch/{helpers.ts → harness.ts} +65 -40
- package/src/autoresearch/{prompt-setup.md → prompts/prompt-setup.md} +7 -7
- package/src/autoresearch/prompts/prompt.md +103 -0
- package/src/autoresearch/prompts.ts +126 -0
- package/src/autoresearch/runs.ts +708 -0
- package/src/autoresearch/types.ts +9 -150
- package/src/capability/index.ts +4 -4
- package/src/capability/types.ts +20 -0
- package/src/cli/accounts-cli.ts +21 -5
- package/src/cli/config-cli.ts +25 -1
- package/src/cli/fast-help.ts +1 -2
- package/src/cli/list-models.ts +5 -8
- package/src/cli/setup-cli.ts +8 -0
- package/src/cli.ts +2 -21
- package/src/commands/autoresearch.ts +33 -0
- package/src/commands/coordinator.ts +15 -0
- package/src/commands/launch.ts +2 -4
- package/src/commands/quick-lane.ts +1 -1
- package/src/commands/sdk.ts +24 -0
- package/src/commands/state.ts +1 -1
- package/src/config/autorouting-contract.ts +474 -0
- package/src/config/autorouting-generator.ts +238 -0
- package/src/config/autorouting-tier-map.ts +6108 -0
- package/src/config/autorouting.ts +120 -0
- package/src/config/model-discovery-manager.ts +42 -11
- package/src/config/model-registry.ts +348 -68
- package/src/config/provider-selection-policy.ts +60 -9
- package/src/config/settings-schema.ts +195 -6
- package/src/config/settings.ts +62 -1
- package/src/config.ts +2 -3
- package/src/coordinator/contract.ts +0 -1
- package/src/coordinator-mcp/codex-handoff.ts +68 -42
- package/src/coordinator-mcp/durability.ts +200 -0
- package/src/coordinator-mcp/event-webhook.ts +278 -0
- package/src/coordinator-mcp/question-state.ts +109 -46
- package/src/coordinator-mcp/server.ts +932 -504
- package/src/crash/index-store.ts +126 -22
- package/src/crash/record-loader.ts +7 -0
- package/src/crash/upstream/relay.ts +82 -34
- package/src/cursor.ts +84 -1
- package/src/debug/index.ts +26 -0
- package/src/defaults/gjc/skills/autoresearch/SKILL.md +116 -0
- package/src/defaults/gjc/skills/autoresearch/auto-critic.md +46 -0
- package/src/defaults/gjc/skills/autoresearch/auto-iterate.md +42 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +17 -37
- package/src/defaults/gjc/skills/ralplan/SKILL.md +21 -18
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +6 -17
- package/src/defaults/gjc/skills/ultragoal/ai-slop-cleaner.md +2 -2
- package/src/defaults/gjc-defaults.ts +89 -2
- package/src/defaults/gjc-skills.generated.ts +24 -17
- package/src/discovery/builtin.ts +18 -5
- package/src/discovery/helpers.ts +6 -6
- package/src/edit/index.ts +5 -2
- package/src/eval/py/executor.ts +8 -0
- package/src/extensibility/extensions/loader.ts +135 -13
- package/src/extensibility/extensions/wrapper.ts +1 -2
- package/src/extensibility/gjc-plugins/schema.ts +1 -1
- package/src/extensibility/runtime-skill-discovery.ts +2 -2
- package/src/extensibility/skill-management.ts +2 -3
- package/src/extensibility/skills.ts +16 -8
- package/src/gjc-runtime/autoresearch-runtime.ts +1509 -0
- package/src/gjc-runtime/gc-render.ts +0 -1
- package/src/gjc-runtime/gc-runtime.ts +1 -11
- package/src/gjc-runtime/launch-tmux.ts +3 -3
- package/src/gjc-runtime/psmux-detect.ts +2 -2
- package/src/gjc-runtime/python-transcript.ts +58 -0
- package/src/gjc-runtime/ralplan-runtime.ts +6 -18
- package/src/gjc-runtime/session-layout.ts +18 -7
- package/src/gjc-runtime/session-state-sidecar.ts +58 -9
- package/src/gjc-runtime/state-renderer.ts +0 -38
- package/src/gjc-runtime/state-runtime.ts +43 -22
- package/src/gjc-runtime/state-schema.ts +1 -1
- package/src/gjc-runtime/tmux-common.ts +7 -7
- package/src/gjc-runtime/ultragoal-change-set.ts +232 -11
- package/src/gjc-runtime/ultragoal-runtime.ts +309 -114
- package/src/gjc-runtime/ultragoal-validation-policy.ts +247 -0
- package/src/gjc-runtime/workflow-command-ref.ts +15 -11
- package/src/gjc-runtime/workflow-manifest.generated.json +413 -532
- package/src/gjc-runtime/workflow-manifest.ts +43 -83
- package/src/gjc-runtime/workflow-recovery-projection.ts +616 -0
- package/src/hooks/skill-keywords.ts +3 -3
- package/src/hooks/skill-state.ts +2 -2
- package/src/internal-urls/docs-index.generated.ts +26 -24
- package/src/lsp/index.ts +25 -5
- package/src/main.ts +2 -27
- package/src/modes/acp/acp-agent.ts +200 -75
- package/src/modes/components/model-selector.ts +216 -13
- package/src/modes/components/oauth-selector.ts +5 -5
- package/src/modes/components/skill-hud/render.ts +173 -35
- package/src/modes/components/smart-routing-panel.ts +531 -0
- package/src/modes/components/tool-status-header.ts +6 -3
- package/src/modes/controllers/command-controller.ts +17 -7
- package/src/modes/controllers/input-controller.ts +44 -9
- package/src/modes/controllers/runtime-mcp-command-controller.ts +4 -0
- package/src/modes/controllers/selector-controller.ts +298 -65
- package/src/modes/interactive-mode.ts +8 -1
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +1 -1
- package/src/modes/types.ts +9 -1
- package/src/prompts/agents/planner.md +1 -1
- package/src/prompts/system/system-prompt.md +1 -1
- package/src/prompts/system/volatile-project-context.md +2 -1
- package/src/prompts/tools/move-session.md +15 -0
- package/src/prompts/tools/python.md +12 -0
- package/src/prompts/tools/skill-discovery.md +1 -1
- package/src/prompts/tools/skill.md +2 -2
- package/src/prompts/tools/task-summary.md +1 -0
- package/src/prompts/tools/task.md +6 -0
- package/src/rlm/artifacts.ts +12 -10
- package/src/runtime/optional-runtime-services.ts +3 -2
- package/src/runtime/workspace-tree-service.ts +11 -3
- package/src/runtime-mcp/config.ts +8 -1
- package/src/runtime-mcp/manager.ts +33 -0
- package/src/sdk/acp/adapter.ts +48 -1
- package/src/sdk/broker/broker.ts +30 -2
- package/src/sdk/broker/discovery.ts +217 -2
- package/src/sdk/broker/lifecycle.ts +385 -59
- package/src/sdk/broker/session-index.ts +243 -48
- package/src/sdk/broker/transport.ts +1 -0
- package/src/sdk/bus/chat-daemon-control.ts +8 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +5 -0
- package/src/sdk/bus/index.ts +208 -11
- package/src/sdk/bus/kind-aware-reconciliation.ts +16 -0
- package/src/sdk/bus/reconciliation-store.ts +27 -5
- package/src/sdk/bus/telegram-daemon-contract.ts +12 -2
- package/src/sdk/client/client.ts +204 -22
- package/src/sdk/host/host.ts +16 -0
- package/src/sdk/host/internal-autorouting-state.ts +13 -0
- package/src/sdk/host/model-pin.ts +101 -0
- package/src/sdk/host/reverse-leases.ts +2 -1
- package/src/sdk/host/session-runtime.test.ts +224 -1
- package/src/sdk/host/session-runtime.ts +125 -37
- package/src/sdk/lifecycle/service.ts +3 -1
- package/src/sdk/lifecycle-session.ts +42 -1
- package/src/sdk/protocol/operation-inventory.generated.json +66 -0
- package/src/sdk/router/session-router.ts +375 -36
- package/src/sdk/session.ts +547 -47
- package/src/session/account-inventory.ts +1 -1
- package/src/session/agent-session.ts +765 -189
- package/src/session/artifacts.ts +234 -4
- package/src/session/internal/managed-session-storage.ts +91 -4
- package/src/session/provider-safety-stop-hint.ts +3 -2
- package/src/session/session-manager.ts +775 -16
- package/src/session/session-staging-paths.ts +8 -0
- package/src/setup/hermes/templates/operator-instructions.v1.md +0 -1
- package/src/setup/host-plugin-setup.ts +2 -2
- package/src/skill-state/active-state.ts +2 -2
- package/src/skill-state/canonical-skills.ts +1 -1
- package/src/skill-state/initial-phase.ts +1 -1
- package/src/skill-state/workflow-hud.ts +41 -41
- package/src/skill-state/workflow-mutation-guard.ts +26 -7
- package/src/slash-commands/builtin-registry.ts +77 -0
- package/src/slash-commands/helpers/autorouting-status.ts +55 -0
- package/src/system-prompt.ts +102 -5
- package/src/task/discovery.ts +2 -3
- package/src/task/executor.ts +617 -43
- package/src/task/index.ts +262 -15
- package/src/task/receipt.ts +30 -0
- package/src/task/render.ts +11 -1
- package/src/task/types.ts +316 -0
- package/src/tools/atomic-file-write.ts +594 -0
- package/src/tools/bisect.ts +3 -2
- package/src/tools/descriptors.test.ts +3 -0
- package/src/tools/descriptors.ts +24 -0
- package/src/tools/image-gen.ts +5 -1
- package/src/tools/index.ts +62 -5
- package/src/tools/move-session.ts +107 -0
- package/src/tools/python.ts +205 -0
- package/src/tools/read.ts +88 -15
- package/src/tools/renderers.ts +2 -0
- package/src/tools/resource-gc.ts +8 -177
- package/src/tools/search.ts +30 -6
- package/src/tools/skill-discovery.ts +1 -0
- package/src/tools/skill.ts +37 -7
- package/src/tools/subagent-render.ts +119 -13
- package/src/tools/subagent.ts +91 -74
- package/src/tools/tool-catalog.generated.ts +64 -2
- package/src/tools/write.ts +16 -12
- package/src/utils/xml-escape.ts +14 -0
- package/src/web/search/providers/codex.ts +2 -2
- package/src/workflow/workflow-intent-diff.ts +13 -12
- package/src/workflow/workflow-intent-report-consumer.ts +6 -6
- package/dist/types/autoresearch/helpers.d.ts +0 -24
- package/dist/types/autoresearch/index.d.ts +0 -2
- package/dist/types/autoresearch/state.d.ts +0 -17
- package/dist/types/autoresearch/storage.d.ts +0 -142
- package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
- package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
- package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
- package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
- package/dist/types/commands/team.d.ts +0 -24
- package/dist/types/gjc-runtime/team-gc.d.ts +0 -7
- package/dist/types/gjc-runtime/team-launch.d.ts +0 -61
- package/dist/types/gjc-runtime/team-notify.d.ts +0 -45
- package/dist/types/gjc-runtime/team-runtime.d.ts +0 -336
- package/dist/types/gjc-runtime/team-store.d.ts +0 -168
- package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +0 -43
- package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +0 -92
- package/dist/types/gjc-runtime/team-workers.d.ts +0 -83
- package/dist/types/rlm/index.d.ts +0 -47
- package/dist/types/rlm/preset.d.ts +0 -23
- package/dist/types/rlm/python-tool.d.ts +0 -16
- package/src/autoresearch/command-resume.md +0 -14
- package/src/autoresearch/index.ts +0 -536
- package/src/autoresearch/prompt.md +0 -103
- package/src/autoresearch/resume-message.md +0 -10
- package/src/autoresearch/state.ts +0 -273
- package/src/autoresearch/storage.ts +0 -699
- package/src/autoresearch/tools/init-experiment.ts +0 -272
- package/src/autoresearch/tools/log-experiment.ts +0 -524
- package/src/autoresearch/tools/run-experiment.ts +0 -475
- package/src/autoresearch/tools/update-notes.ts +0 -109
- package/src/commands/rlm.ts +0 -19
- package/src/commands/team.ts +0 -238
- package/src/defaults/gjc/skills/deep-interview/auto-research-greenfield.md +0 -42
- package/src/defaults/gjc/skills/team/SKILL.md +0 -467
- package/src/gjc-runtime/team-gc.ts +0 -49
- package/src/gjc-runtime/team-launch.ts +0 -404
- package/src/gjc-runtime/team-notify.ts +0 -326
- package/src/gjc-runtime/team-runtime.ts +0 -5923
- package/src/gjc-runtime/team-store.ts +0 -878
- package/src/gjc-runtime/team-worker-heartbeat.ts +0 -149
- package/src/gjc-runtime/team-worker-memory-guard.ts +0 -363
- package/src/gjc-runtime/team-workers.ts +0 -1123
- package/src/prompts/system/rlm-report-command.md +0 -1
- package/src/prompts/system/rlm-research.md +0 -23
- package/src/rlm/index.ts +0 -365
- package/src/rlm/preset.ts +0 -76
- package/src/rlm/python-tool.ts +0 -68
|
@@ -14,6 +14,7 @@ import { resolveModelChainWithAuth, splitSelectorThinkingSuffix } from "../../co
|
|
|
14
14
|
import { type ModelSelectorValue, normalizeModelSelectorValue } from "../../config/model-selector-value";
|
|
15
15
|
import { type Settings, validateSettingPatch } from "../../config/settings";
|
|
16
16
|
import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from "../../extensibility/extensions";
|
|
17
|
+
import { normalizeGoal } from "../../goals/state";
|
|
17
18
|
import {
|
|
18
19
|
boundTerminalRetentionState,
|
|
19
20
|
findOwnedRegistrationsForTurn,
|
|
@@ -45,6 +46,7 @@ import {
|
|
|
45
46
|
import { type ControlSurface, controlRequestFromFrame, dispatchControl } from "./control";
|
|
46
47
|
import { BROKER_RUNTIME_CLOSE_CAPABILITY_FIELD } from "./control/runtime-gate";
|
|
47
48
|
import { SessionSdkHost, type SessionSdkHostOptions } from "./host";
|
|
49
|
+
import { clearAutoroutingInactive, isAutoroutingInactive, markAutoroutingInactive } from "./internal-autorouting-state";
|
|
48
50
|
import { CursorRegistry, QueryHandlers, RevisionStore, type SessionSurface } from "./query";
|
|
49
51
|
import {
|
|
50
52
|
createSdkCapabilities,
|
|
@@ -385,9 +387,10 @@ export interface CreateSdkSessionRuntimeOptions {
|
|
|
385
387
|
stateRoot: string;
|
|
386
388
|
token: string;
|
|
387
389
|
}): SessionSdkTransport | Promise<SessionSdkTransport>;
|
|
388
|
-
onSdkRequest?: SessionSdkHostOptions["onRequest"];
|
|
389
390
|
/** Session settings; enables `config.patch` application on this runtime. */
|
|
390
391
|
settings?: Settings;
|
|
392
|
+
/** Callback for diagnostics and lifecycle request observation. */
|
|
393
|
+
onSdkRequest?: SessionSdkHostOptions["onRequest"];
|
|
391
394
|
/** Mutable shadow of patched config values merged into query readback. */
|
|
392
395
|
configOverrides?: Map<string, unknown>;
|
|
393
396
|
/** Private session-owned terminal-abort capabilities; never exposed on ExtensionContext. */
|
|
@@ -869,6 +872,48 @@ function createQuerySurface(
|
|
|
869
872
|
throw error;
|
|
870
873
|
}
|
|
871
874
|
};
|
|
875
|
+
const getDurableGoalState = (): { kind: "state"; state: unknown } | { kind: "empty" } | { kind: "unavailable" } => {
|
|
876
|
+
// A recreated SDK host can observe the session before its in-memory goal
|
|
877
|
+
// projection is hydrated. The latest mode_change is the durable authority;
|
|
878
|
+
// never borrow a goal from another session or an older branch.
|
|
879
|
+
let branch: ReturnType<ExtensionContext["sessionManager"]["getBranch"]>;
|
|
880
|
+
try {
|
|
881
|
+
branch = ctx.sessionManager.getBranch();
|
|
882
|
+
} catch {
|
|
883
|
+
return { kind: "unavailable" };
|
|
884
|
+
}
|
|
885
|
+
for (const entry of branch.toReversed()) {
|
|
886
|
+
if (entry.type !== "mode_change") continue;
|
|
887
|
+
if (entry.mode !== "goal" && entry.mode !== "goal_paused") return { kind: "empty" };
|
|
888
|
+
const goal = normalizeGoal(entry.data?.goal);
|
|
889
|
+
if (!goal) return { kind: "unavailable" };
|
|
890
|
+
return { kind: "state", state: { enabled: entry.mode === "goal", mode: "active", goal } };
|
|
891
|
+
}
|
|
892
|
+
return { kind: "empty" };
|
|
893
|
+
};
|
|
894
|
+
const getGoalState = (): unknown => {
|
|
895
|
+
const liveState =
|
|
896
|
+
typeof (ctx as Partial<ExtensionContext>).getGoalState === "function" ? ctx.getGoalState() : undefined;
|
|
897
|
+
if (liveState !== undefined) return liveState;
|
|
898
|
+
const durableState = getDurableGoalState();
|
|
899
|
+
if (durableState.kind === "state") return durableState.state;
|
|
900
|
+
if (durableState.kind === "unavailable")
|
|
901
|
+
return {
|
|
902
|
+
enabled: false,
|
|
903
|
+
goal: null,
|
|
904
|
+
reason: "goal_state_unavailable",
|
|
905
|
+
recoverable: true,
|
|
906
|
+
message:
|
|
907
|
+
"The authoritative goal state could not be recovered from this session. Reconnect or resume the session before retrying.",
|
|
908
|
+
};
|
|
909
|
+
return {
|
|
910
|
+
enabled: false,
|
|
911
|
+
goal: null,
|
|
912
|
+
reason: "no_active_goal",
|
|
913
|
+
message:
|
|
914
|
+
"No goal is active in this session: goal mode has not created or resumed a goal, so no goal snapshot exists yet.",
|
|
915
|
+
};
|
|
916
|
+
};
|
|
872
917
|
return {
|
|
873
918
|
getTranscriptEntries: () =>
|
|
874
919
|
typeof (ctx as Partial<ExtensionContext>).getTranscript === "function" ? ctx.getTranscript() : [],
|
|
@@ -877,8 +922,7 @@ function createQuerySurface(
|
|
|
877
922
|
systemPrompt: ctx.getSystemPrompt(),
|
|
878
923
|
...getLiveState(),
|
|
879
924
|
}),
|
|
880
|
-
getGoalState
|
|
881
|
-
typeof (ctx as Partial<ExtensionContext>).getGoalState === "function" ? ctx.getGoalState() : undefined,
|
|
925
|
+
getGoalState,
|
|
882
926
|
getTodoState: () =>
|
|
883
927
|
typeof (ctx as Partial<ExtensionContext>).getTodoState === "function" ? ctx.getTodoState() : [],
|
|
884
928
|
getDiff,
|
|
@@ -1222,6 +1266,7 @@ function createControlSurface(
|
|
|
1222
1266
|
settings?: Settings,
|
|
1223
1267
|
configOverrides?: Map<string, unknown>,
|
|
1224
1268
|
configRevision: { current: number } = { current: 0 },
|
|
1269
|
+
getRuntimeHost: () => SessionSdkHost | undefined = () => undefined,
|
|
1225
1270
|
terminalAbortSeams?: SdkOnlyTerminalAbortSeams,
|
|
1226
1271
|
terminalPublicationCapture?: { resolvers?: Array<(observed: boolean) => void> },
|
|
1227
1272
|
activePromptOwnerHolder?: { connectionIds?: ReadonlySet<string> },
|
|
@@ -2351,8 +2396,8 @@ function createControlSurface(
|
|
|
2351
2396
|
// Follow-ups never start inline; ownership correlates at promotion.
|
|
2352
2397
|
true,
|
|
2353
2398
|
),
|
|
2354
|
-
abort: () => {
|
|
2355
|
-
ctx.abort();
|
|
2399
|
+
abort: async () => {
|
|
2400
|
+
await Promise.resolve(ctx.abort()).catch(() => undefined);
|
|
2356
2401
|
return { aborted: true };
|
|
2357
2402
|
},
|
|
2358
2403
|
abortTerminal: terminalAbort,
|
|
@@ -2477,10 +2522,24 @@ function createControlSurface(
|
|
|
2477
2522
|
}
|
|
2478
2523
|
if (!settings) return unavailable("config.patch")();
|
|
2479
2524
|
const applyPatch = async () => {
|
|
2525
|
+
const wasAutoroutingInactive =
|
|
2526
|
+
settings.get("task.autorouting.enabled") === true && !settings.getEffectiveAutorouting().active;
|
|
2480
2527
|
const entries = Object.entries(patch as Record<string, unknown>);
|
|
2481
2528
|
for (const [key, value] of entries) settings.set(key as never, value as never);
|
|
2482
2529
|
if (configOverrides) for (const [key, value] of entries) configOverrides.set(key, value);
|
|
2483
2530
|
configRevision.current += 1;
|
|
2531
|
+
const isAutoroutingInactiveNow =
|
|
2532
|
+
settings.get("task.autorouting.enabled") === true && !settings.getEffectiveAutorouting().active;
|
|
2533
|
+
if (isAutoroutingInactiveNow && !wasAutoroutingInactive) {
|
|
2534
|
+
const host = getRuntimeHost();
|
|
2535
|
+
if (host) {
|
|
2536
|
+
markAutoroutingInactive(host);
|
|
2537
|
+
if (host.started) host.emitAutoroutingInactiveNotice();
|
|
2538
|
+
}
|
|
2539
|
+
} else if (!isAutoroutingInactiveNow && wasAutoroutingInactive) {
|
|
2540
|
+
const host = getRuntimeHost();
|
|
2541
|
+
if (host) clearAutoroutingInactive(host);
|
|
2542
|
+
}
|
|
2484
2543
|
return { patched: entries.map(([key]) => key), revision: String(configRevision.current) };
|
|
2485
2544
|
};
|
|
2486
2545
|
// Serialize config mutations against synthetic profile activation and
|
|
@@ -2573,6 +2632,13 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2573
2632
|
waitForGateResolutionQuiescence: () => Promise<void>;
|
|
2574
2633
|
activeInvocation?: { kind: InvocationKind; correlation: InvocationCorrelation };
|
|
2575
2634
|
drainedInvocations?: Array<{ kind: InvocationKind; correlation: InvocationCorrelation }>;
|
|
2635
|
+
openLifecycleBatches: Array<{
|
|
2636
|
+
invocations: Array<{
|
|
2637
|
+
kind: InvocationKind;
|
|
2638
|
+
correlation: InvocationCorrelation;
|
|
2639
|
+
connectionId: string | undefined;
|
|
2640
|
+
}>;
|
|
2641
|
+
}>;
|
|
2576
2642
|
disposeGate?: () => void;
|
|
2577
2643
|
}
|
|
2578
2644
|
| undefined;
|
|
@@ -2594,6 +2660,28 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2594
2660
|
const emitLifecycle = async (type: "agent_start" | "agent_end", ctx: ExtensionContext): Promise<void> => {
|
|
2595
2661
|
const current = active;
|
|
2596
2662
|
if (!current) return;
|
|
2663
|
+
const adoptLifecycleBatch = (
|
|
2664
|
+
batch:
|
|
2665
|
+
| Array<{
|
|
2666
|
+
kind: InvocationKind;
|
|
2667
|
+
correlation: InvocationCorrelation;
|
|
2668
|
+
connectionId: string | undefined;
|
|
2669
|
+
}>
|
|
2670
|
+
| undefined,
|
|
2671
|
+
): void => {
|
|
2672
|
+
if (!batch || batch.length === 0) {
|
|
2673
|
+
current.activeInvocation = undefined;
|
|
2674
|
+
current.drainedInvocations = undefined;
|
|
2675
|
+
activePromptOwnerHolder.connectionIds = undefined;
|
|
2676
|
+
return;
|
|
2677
|
+
}
|
|
2678
|
+
current.activeInvocation = batch[0];
|
|
2679
|
+
current.drainedInvocations = batch.map(({ kind, correlation }) => ({ kind, correlation }));
|
|
2680
|
+
const owners = new Set<string>();
|
|
2681
|
+
for (const entry of batch) if (entry.connectionId !== undefined) owners.add(entry.connectionId);
|
|
2682
|
+
activePromptOwnerHolder.connectionIds = owners;
|
|
2683
|
+
};
|
|
2684
|
+
let transitions: Array<{ kind: InvocationKind; correlation: InvocationCorrelation }> = [];
|
|
2597
2685
|
if (type === "agent_start") {
|
|
2598
2686
|
// Drain EVERY entry admitted for this run: a continuation may promote
|
|
2599
2687
|
// several follow-ups (each with its own requester correlation) into one
|
|
@@ -2603,19 +2691,24 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2603
2691
|
// continuation agent_start with an empty queue leaves the current owner
|
|
2604
2692
|
// untouched (review thread P1).
|
|
2605
2693
|
const drained = current.pending.splice(0);
|
|
2606
|
-
current.activeInvocation = drained[0];
|
|
2607
2694
|
if (drained.length > 0) {
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
// the full batch for the transition pass below (review thread P1).
|
|
2614
|
-
current.drainedInvocations = drained.map(({ kind, correlation }) => ({ kind, correlation }));
|
|
2615
|
-
}
|
|
2616
|
-
if (current.activeInvocation?.kind === "prompt") {
|
|
2617
|
-
current.deadlineManager.onAccepted(current.activeInvocation.correlation);
|
|
2695
|
+
current.openLifecycleBatches.push({ invocations: drained });
|
|
2696
|
+
adoptLifecycleBatch(drained);
|
|
2697
|
+
if (current.activeInvocation?.kind === "prompt") {
|
|
2698
|
+
current.deadlineManager.onAccepted(current.activeInvocation.correlation);
|
|
2699
|
+
}
|
|
2618
2700
|
}
|
|
2701
|
+
transitions = drained.map(({ kind, correlation }) => ({ kind, correlation }));
|
|
2702
|
+
} else {
|
|
2703
|
+
// Pair this agent_end with the oldest unmatched start. A delayed
|
|
2704
|
+
// aborted-turn end that lands after a successor agent_start must
|
|
2705
|
+
// terminalize the aborted invocation, never the successor.
|
|
2706
|
+
const ended = current.openLifecycleBatches[0];
|
|
2707
|
+
transitions = ended
|
|
2708
|
+
? ended.invocations.map(({ kind, correlation }) => ({ kind, correlation }))
|
|
2709
|
+
: current.activeInvocation
|
|
2710
|
+
? [current.activeInvocation]
|
|
2711
|
+
: [];
|
|
2619
2712
|
}
|
|
2620
2713
|
// Observe whether the lifecycle publication actually landed: a terminal
|
|
2621
2714
|
// abort awaits this result so its durable row only claims
|
|
@@ -2624,12 +2717,6 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2624
2717
|
// recorded as observed=false, never rethrown into the api handler.
|
|
2625
2718
|
let observed = true;
|
|
2626
2719
|
try {
|
|
2627
|
-
const transitions =
|
|
2628
|
-
current.drainedInvocations && current.drainedInvocations.length > 0
|
|
2629
|
-
? current.drainedInvocations
|
|
2630
|
-
: current.activeInvocation
|
|
2631
|
-
? [current.activeInvocation]
|
|
2632
|
-
: [];
|
|
2633
2720
|
for (const invocation of transitions) {
|
|
2634
2721
|
await current.reconciliation.noteTransition(invocation.kind, invocation.correlation, { type } as never);
|
|
2635
2722
|
if ((type as string) === "agent_end" || (type as string) === "agent_failed") {
|
|
@@ -2641,20 +2728,10 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2641
2728
|
observed = false;
|
|
2642
2729
|
}
|
|
2643
2730
|
if (type === "agent_end") {
|
|
2644
|
-
if (current.
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
if (inv.kind === "prompt") current.deadlineManager.clear(inv.correlation);
|
|
2649
|
-
}
|
|
2650
|
-
current.activeInvocation = undefined;
|
|
2651
|
-
current.drainedInvocations = undefined;
|
|
2652
|
-
// The turn is over: no connection owns it anymore. Clearing here means
|
|
2653
|
-
// an abort against a later agent-initiated turn (monitor/cron
|
|
2654
|
-
// follow-up) finds no owner and fails closed, instead of letting the
|
|
2655
|
-
// previous prompt's owner stop a turn it did not submit (review
|
|
2656
|
-
// thread P1).
|
|
2657
|
-
activePromptOwnerHolder.connectionIds = undefined;
|
|
2731
|
+
if (current.openLifecycleBatches.length > 0) current.openLifecycleBatches.shift();
|
|
2732
|
+
for (const invocation of transitions)
|
|
2733
|
+
if (invocation.kind === "prompt") current.deadlineManager.clear(invocation.correlation);
|
|
2734
|
+
adoptLifecycleBatch(current.openLifecycleBatches[0]?.invocations);
|
|
2658
2735
|
// Resolve EVERY concurrent waiter for the aborted turn: the turn emits
|
|
2659
2736
|
// exactly one agent_end, and each admitted abort of it must observe the
|
|
2660
2737
|
// same publication result rather than a single latest-wins slot (review
|
|
@@ -2728,6 +2805,13 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2728
2805
|
correlation: InvocationCorrelation;
|
|
2729
2806
|
connectionId: string | undefined;
|
|
2730
2807
|
}> = [];
|
|
2808
|
+
const openLifecycleBatches: Array<{
|
|
2809
|
+
invocations: Array<{
|
|
2810
|
+
kind: InvocationKind;
|
|
2811
|
+
correlation: InvocationCorrelation;
|
|
2812
|
+
connectionId: string | undefined;
|
|
2813
|
+
}>;
|
|
2814
|
+
}> = [];
|
|
2731
2815
|
const configRevision = { current: 0 };
|
|
2732
2816
|
let acceptingGateResolutions = true;
|
|
2733
2817
|
const inFlightGateResolutions = new Set<Promise<unknown>>();
|
|
@@ -2754,6 +2838,7 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2754
2838
|
settings: options.settings,
|
|
2755
2839
|
});
|
|
2756
2840
|
const queryHandlers = new QueryHandlers(surfaceFactory.query, sessionId, revisions, cursors);
|
|
2841
|
+
let runtime: SessionSdkSessionRuntime;
|
|
2757
2842
|
const controlSurface = createControlSurface(
|
|
2758
2843
|
ctx,
|
|
2759
2844
|
api,
|
|
@@ -2778,6 +2863,7 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2778
2863
|
options.settings,
|
|
2779
2864
|
options.configOverrides,
|
|
2780
2865
|
configRevision,
|
|
2866
|
+
() => runtime?.host,
|
|
2781
2867
|
options.terminalAbortSeams,
|
|
2782
2868
|
terminalPublicationCapture,
|
|
2783
2869
|
activePromptOwnerHolder,
|
|
@@ -2793,7 +2879,6 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2793
2879
|
() => acceptingGateResolutions,
|
|
2794
2880
|
trackGateResolution,
|
|
2795
2881
|
);
|
|
2796
|
-
let runtime: SessionSdkSessionRuntime;
|
|
2797
2882
|
const installProviderDefinitions = (capability: string, definitions: unknown): void => {
|
|
2798
2883
|
if (capability === "permission") {
|
|
2799
2884
|
ctx.setSdkPermissionProvider?.(async (toolCall, permissionOptions, signal) => {
|
|
@@ -2969,6 +3054,7 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
2969
3054
|
if (request.operation === "session.close" && response.ok === true) ctx.shutdown();
|
|
2970
3055
|
},
|
|
2971
3056
|
});
|
|
3057
|
+
if (isAutoroutingInactive(api)) markAutoroutingInactive(runtime.host);
|
|
2972
3058
|
const disposeGate = ctx.workflowGate?.onGateEmitted?.(gate =>
|
|
2973
3059
|
runtime.emitEvent({ kind: "workflow_gate", payload: gate }),
|
|
2974
3060
|
);
|
|
@@ -3003,6 +3089,7 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
3003
3089
|
steerReconciliation,
|
|
3004
3090
|
deadlineManager,
|
|
3005
3091
|
pending,
|
|
3092
|
+
openLifecycleBatches,
|
|
3006
3093
|
registerBroker,
|
|
3007
3094
|
fenceGateResolutions: () => {
|
|
3008
3095
|
acceptingGateResolutions = false;
|
|
@@ -3031,6 +3118,7 @@ export function createSdkSessionRuntimeExtension(api: ExtensionAPI, options: Cre
|
|
|
3031
3118
|
steerReconciliation,
|
|
3032
3119
|
deadlineManager,
|
|
3033
3120
|
pending,
|
|
3121
|
+
openLifecycleBatches,
|
|
3034
3122
|
registerBroker,
|
|
3035
3123
|
fenceGateResolutions: () => {
|
|
3036
3124
|
acceptingGateResolutions = false;
|
|
@@ -421,7 +421,9 @@ function sessionResult(value: unknown, expectedSessionId?: string): SessionLifec
|
|
|
421
421
|
note?: string;
|
|
422
422
|
} = { sessionId };
|
|
423
423
|
if (typeof record.cwd === "string") result.cwd = record.cwd;
|
|
424
|
-
|
|
424
|
+
const endpointGeneration = record.endpointGeneration;
|
|
425
|
+
if (typeof endpointGeneration === "number" && Number.isSafeInteger(endpointGeneration) && endpointGeneration > 0)
|
|
426
|
+
result.endpointGeneration = endpointGeneration;
|
|
425
427
|
if (typeof record.reused === "boolean") result.reused = record.reused;
|
|
426
428
|
if (typeof record.note === "string") result.note = record.note;
|
|
427
429
|
return result;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseModelString } from "../config/model-resolver";
|
|
1
2
|
import type { AgentSession } from "../session/agent-session";
|
|
2
3
|
import { type CreateAgentSessionOptions, createAgentSession } from "./session";
|
|
3
4
|
import {
|
|
@@ -29,6 +30,19 @@ export type CreateLifecycleAgentSessionResult =
|
|
|
29
30
|
* unbounded LLM work, so deferral is an invariant rather than a caller choice.
|
|
30
31
|
*/
|
|
31
32
|
export type CreateLifecycleAgentSessionOptions = Omit<CreateAgentSessionOptions, "deferMemoryBackendStartup"> & {
|
|
33
|
+
/**
|
|
34
|
+
* Explicit model pin (#4707): the coordinator-resolved `provider/model`
|
|
35
|
+
* selector, forwarded as {@link CreateAgentSessionOptions.modelPattern} so
|
|
36
|
+
* the session resolves it through the same staged selector resolver the CLI
|
|
37
|
+
* `--model` flag uses (after extension providers register).
|
|
38
|
+
*
|
|
39
|
+
* Resolution is strict: if this child's registry cannot resolve the pin to
|
|
40
|
+
* exactly this model, construction fails and the partial session is
|
|
41
|
+
* disposed instead of continuing into startup profile application, which
|
|
42
|
+
* would otherwise activate `modelProfile.default`/`mpreset` while the
|
|
43
|
+
* coordinator reports the requested pin.
|
|
44
|
+
*/
|
|
45
|
+
modelId?: string;
|
|
32
46
|
/**
|
|
33
47
|
* Startup budget for ACP lifecycle MCP launches, in milliseconds. Set only
|
|
34
48
|
* when the lifecycle request supplies `mcpServers`; ordinary consumers keep
|
|
@@ -50,9 +64,13 @@ export async function createLifecycleAgentSession(
|
|
|
50
64
|
const rollback = new SdkStartupRollbackTracker();
|
|
51
65
|
const capability = new SdkStartupCapability(rollback, options.readiness ?? "immediate");
|
|
52
66
|
try {
|
|
53
|
-
const { mcpStartupTimeoutMs, readiness: _readiness, ...sessionOptions } = options;
|
|
67
|
+
const { modelId, mcpStartupTimeoutMs, readiness: _readiness, ...sessionOptions } = options;
|
|
54
68
|
const internalOptions = {
|
|
55
69
|
...sessionOptions,
|
|
70
|
+
// Explicit model pin (#4707): resolve through the staged selector
|
|
71
|
+
// resolver after extension providers register (modelPattern), so the
|
|
72
|
+
// pin matches CLI `--model` semantics instead of bypassing them.
|
|
73
|
+
...(modelId !== undefined ? { modelPattern: modelId } : {}),
|
|
56
74
|
// Memory startup (rollout summarisation) issues one LLM request per
|
|
57
75
|
// claimed rollout, so its duration scales with the backlog. Keeping it
|
|
58
76
|
// inside the broker's readiness window is what kills the child at the
|
|
@@ -65,6 +83,29 @@ export async function createLifecycleAgentSession(
|
|
|
65
83
|
[lifecycleMcpStartupTimeoutOption]?: number;
|
|
66
84
|
};
|
|
67
85
|
const result = await createAgentSession(internalOptions);
|
|
86
|
+
// Explicit model pin (#4707) is a guarantee, not a preference. The
|
|
87
|
+
// coordinator validated the selector against its own registry; this child
|
|
88
|
+
// owns the registry that actually serves requests, and the two can drift
|
|
89
|
+
// (a model removed, a provider disabled, an extension that failed to
|
|
90
|
+
// register). On drift `createAgentSession` returns a session with no model
|
|
91
|
+
// plus a fallback warning, and the startup profile pass that runs next
|
|
92
|
+
// would activate `modelProfile.default`/`mpreset` instead — publishing
|
|
93
|
+
// success on a model the caller never asked for. Fail before readiness and
|
|
94
|
+
// before any profile application, and dispose the partial session.
|
|
95
|
+
if (modelId !== undefined) {
|
|
96
|
+
const active = result.session.model;
|
|
97
|
+
const activeSelector = active ? `${active.provider}/${active.id}` : undefined;
|
|
98
|
+
const expected = parseModelString(modelId);
|
|
99
|
+
const expectedSelector = expected ? `${expected.provider}/${expected.id}` : modelId;
|
|
100
|
+
if (!activeSelector || activeSelector.toLowerCase() !== expectedSelector.toLowerCase()) {
|
|
101
|
+
await result.session.dispose().catch(() => {});
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Model "${modelId}" not found. Use --list-models to see available models.${
|
|
104
|
+
activeSelector ? ` Session resolved ${activeSelector} instead.` : ""
|
|
105
|
+
}`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
68
109
|
if (!result.session.extensionRunner)
|
|
69
110
|
capability.settleFailure(capability.normalizeFailure("registration", "runner_absent"));
|
|
70
111
|
if (!result.startDeferredMemoryBackend)
|
|
@@ -1854,6 +1854,17 @@
|
|
|
1854
1854
|
"packages/coding-agent/test/sdk-operation-inventory.test.ts"
|
|
1855
1855
|
]
|
|
1856
1856
|
},
|
|
1857
|
+
{
|
|
1858
|
+
"sourceId": "slash_command:routing",
|
|
1859
|
+
"sourceFile": "packages/coding-agent/src/slash-commands/builtin-registry.ts",
|
|
1860
|
+
"sourceKind": "slash_command",
|
|
1861
|
+
"decision": "exclude",
|
|
1862
|
+
"rationale": "visual/local-only autorouting settings toggle and smart-routing panel entry, not a user-facing SDK control seam",
|
|
1863
|
+
"exclusionMetadata": {
|
|
1864
|
+
"adapterMappings": "not_applicable",
|
|
1865
|
+
"testIds": "not_applicable"
|
|
1866
|
+
}
|
|
1867
|
+
},
|
|
1857
1868
|
{
|
|
1858
1869
|
"sourceId": "slash_command:export",
|
|
1859
1870
|
"sourceFile": "packages/coding-agent/src/slash-commands/builtin-registry.ts",
|
|
@@ -2446,6 +2457,39 @@
|
|
|
2446
2457
|
"testIds": "not_applicable"
|
|
2447
2458
|
}
|
|
2448
2459
|
},
|
|
2460
|
+
{
|
|
2461
|
+
"sourceId": "agent_session:getEffectiveActiveWorkflowSkillState",
|
|
2462
|
+
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
2463
|
+
"sourceKind": "agent_session",
|
|
2464
|
+
"decision": "exclude",
|
|
2465
|
+
"rationale": "internal restored-or-live workflow guard for session rescope, not a user-facing SDK control seam",
|
|
2466
|
+
"exclusionMetadata": {
|
|
2467
|
+
"adapterMappings": "not_applicable",
|
|
2468
|
+
"testIds": "not_applicable"
|
|
2469
|
+
}
|
|
2470
|
+
},
|
|
2471
|
+
{
|
|
2472
|
+
"sourceId": "agent_session:replaceOwnedMcpManager",
|
|
2473
|
+
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
2474
|
+
"sourceKind": "agent_session",
|
|
2475
|
+
"decision": "exclude",
|
|
2476
|
+
"rationale": "internal cwd-rebinding helper for owned MCP authority after move_session, not a user-facing SDK control seam",
|
|
2477
|
+
"exclusionMetadata": {
|
|
2478
|
+
"adapterMappings": "not_applicable",
|
|
2479
|
+
"testIds": "not_applicable"
|
|
2480
|
+
}
|
|
2481
|
+
},
|
|
2482
|
+
{
|
|
2483
|
+
"sourceId": "agent_session:replaceNamedCustomTools",
|
|
2484
|
+
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
2485
|
+
"sourceKind": "agent_session",
|
|
2486
|
+
"decision": "exclude",
|
|
2487
|
+
"rationale": "internal cwd-rebinding helper for named custom tools after move_session, not a user-facing SDK control seam",
|
|
2488
|
+
"exclusionMetadata": {
|
|
2489
|
+
"adapterMappings": "not_applicable",
|
|
2490
|
+
"testIds": "not_applicable"
|
|
2491
|
+
}
|
|
2492
|
+
},
|
|
2449
2493
|
{
|
|
2450
2494
|
"sourceId": "agent_session:getActiveSkillPhase",
|
|
2451
2495
|
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
@@ -3693,6 +3737,28 @@
|
|
|
3693
3737
|
"testIds": "not_applicable"
|
|
3694
3738
|
}
|
|
3695
3739
|
},
|
|
3740
|
+
{
|
|
3741
|
+
"sourceId": "agent_session:replaceSkills",
|
|
3742
|
+
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
3743
|
+
"sourceKind": "agent_session",
|
|
3744
|
+
"decision": "exclude",
|
|
3745
|
+
"rationale": "internal cwd-rebinding helper for session skills after move_session, not a user-facing SDK control seam",
|
|
3746
|
+
"exclusionMetadata": {
|
|
3747
|
+
"adapterMappings": "not_applicable",
|
|
3748
|
+
"testIds": "not_applicable"
|
|
3749
|
+
}
|
|
3750
|
+
},
|
|
3751
|
+
{
|
|
3752
|
+
"sourceId": "agent_session:retireWorkspaceTreeForRescope",
|
|
3753
|
+
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|
|
3754
|
+
"sourceKind": "agent_session",
|
|
3755
|
+
"decision": "exclude",
|
|
3756
|
+
"rationale": "internal cwd-rebinding helper that retires the cached workspace tree after move_session, not a user-facing SDK control seam",
|
|
3757
|
+
"exclusionMetadata": {
|
|
3758
|
+
"adapterMappings": "not_applicable",
|
|
3759
|
+
"testIds": "not_applicable"
|
|
3760
|
+
}
|
|
3761
|
+
},
|
|
3696
3762
|
{
|
|
3697
3763
|
"sourceId": "agent_session:getTodoPhases",
|
|
3698
3764
|
"sourceFile": "packages/coding-agent/src/session/agent-session.ts",
|