@bastani/atomic 0.9.58-alpha.1 → 0.9.58
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 +5 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/README.md +3 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +163 -33
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/core/child-session-options.d.ts.map +1 -1
- package/dist/core/child-session-options.js +3 -1
- package/dist/core/child-session-options.js.map +1 -1
- package/dist/core/sdk-types.d.ts +6 -1
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.js +4 -2
- package/dist/core/sdk.js.map +1 -1
- package/docs/sdk.md +3 -1
- package/docs/subagents/reference.md +2 -0
- package/npm-shrinkwrap.json +32 -32
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,7 @@ Task heartbeats, stage chats that work on local workers, and a local worker pool
|
|
|
11
11
|
- **A local worker pool that holds up under load:** reloading workflows or starting other runs no longer fails a running root's children with `Stale lease for run <id>`, a busy machine no longer fails stages on delivery or lease errors, `/workflow pause` pauses a root's stages even while its own steps run, and an overloaded machine starts stages one at a time, tunable with `workflows.localWorkers.maxLoadPerCpu` ([#4138](https://github.com/bastani-inc/atomic/pull/4138), [#4145](https://github.com/bastani-inc/atomic/pull/4145), [#4146](https://github.com/bastani-inc/atomic/pull/4146))
|
|
12
12
|
- **Resuming pooled runs:** a root that runs children on local workers resumes from a new process, including one paused or failed by 0.9.57, and runs again the children that failed on a pool fault instead of replaying the failure ([#4146](https://github.com/bastani-inc/atomic/pull/4146))
|
|
13
13
|
- **Stopped tasks finish:** a shell stopped with `kill`, from `/tasks` or with Esc no longer stays "stopping" in the Tasks indicator forever; it ends as failed with the resource that could not be cleaned up ([#4142](https://github.com/bastani-inc/atomic/pull/4142))
|
|
14
|
+
- **Subagents that start and run as asked:** a subagent launched with an effort such as `model: "openai/gpt-5.5:xhigh"`, or from a chat turn that a workflow started, no longer stays `running` with no session, and one whose session still does not start within 5 minutes fails with the cause. An effort applies exactly where the model supports it, including on a fallback that starts in place of the requested model, and `status` lists only the children your session launched ([#4148](https://github.com/bastani-inc/atomic/pull/4148), [#4150](https://github.com/bastani-inc/atomic/pull/4150))
|
|
14
15
|
- **Quieter PDF fetches:** pdf.js font warnings such as `Warning: TT: undefined function: 32` no longer print over the terminal UI when a PDF is fetched ([#4136](https://github.com/bastani-inc/atomic/pull/4136))
|
|
15
16
|
|
|
16
17
|
### Added
|
|
@@ -27,6 +28,10 @@ Task heartbeats, stage chats that work on local workers, and a local worker pool
|
|
|
27
28
|
- `/workflow pause` pauses a root's stages on local workers even while the root's own steps run, instead of reporting `No active stages to pause`, and pause or resume no longer fails with `Worker control acknowledgement unresolved` on a busy machine; the result says how many stages have not confirmed the pause yet. ([#4145](https://github.com/bastani-inc/atomic/pull/4145))
|
|
28
29
|
- Resuming a workflow root that runs children on local workers, including one paused or failed by 0.9.57, runs again the children an earlier process failed on a fault of the pool itself instead of replaying their failure, and a paused root with durable progress says it can be resumed from a new process. ([#4146](https://github.com/bastani-inc/atomic/pull/4146))
|
|
29
30
|
- On an overloaded machine, stages of workflow children on local workers start one at a time, at most one every 5 seconds, instead of all at once while earlier ones are still starting. Tune or turn off with `workflows.localWorkers.maxLoadPerCpu` (default `3`, `0` off). ([#4146](https://github.com/bastani-inc/atomic/pull/4146))
|
|
31
|
+
- A subagent launched from a chat turn that a running workflow started, for example with its completion notice, no longer stays `running` for good with no session, transcript or Intercom name. Its session waited for a permit from that workflow's resource admission (such as `admission.host.minFreeMemoryBytes` on a busy host) that it never received. A child session built from `getChildSessionOptions()` now takes its parent's admission or none, never one a `withResourceAdmission` scope the parent's turn happened to run in; SDK callers can pass `resourceAdmission: null` for a session that takes no permit inside such a scope. ([#4148](https://github.com/bastani-inc/atomic/pull/4148))
|
|
32
|
+
- A subagent whose session does not start within 5 minutes now fails with `Subagent session did not start within 5 min (still <step>)` instead of staying `running`, and `subagent({ action: "status" })` shows it failed with that cause, in its text and its expanded card. ([#4148](https://github.com/bastani-inc/atomic/pull/4148), [#4150](https://github.com/bastani-inc/atomic/pull/4150))
|
|
33
|
+
- A subagent launched with an effort, such as `model: "openai/gpt-5.5:xhigh"`, runs at exactly that effort on a model that supports it, and at that model's default level (its `modelThinkingLevels` entry, else `defaultThinkingLevel`) on one that does not, instead of the nearest level. A model its fallback chain switches to follows the same rule, so a fallback no longer drops the child to the default level silently, and a fallback the child starts on because the requested model's provider has no auth runs at its own effort. ([#4148](https://github.com/bastani-inc/atomic/pull/4148), [#4150](https://github.com/bastani-inc/atomic/pull/4150))
|
|
34
|
+
- `subagent({ action: "status" })` lists only the children this session launched, each with the child id `pause`, `resume` and `quit` take (`· id <run-id>:<n>`), and those actions also take the listed path. It no longer lists children of other sessions in the same process, such as a workflow stage's, that `quit` then refused with `this session launched no such child`, and `status` with a child id finds the child. ([#4148](https://github.com/bastani-inc/atomic/pull/4148))
|
|
30
35
|
|
|
31
36
|
## [0.9.58-alpha.1] - 2026-11-01
|
|
32
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.58
|
|
3
|
+
"version": "0.9.58",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension providing a private coordination channel between parent and child agent sessions. Fork of: https://github.com/nicobailon/pi-intercom",
|
|
6
6
|
"contributors": [
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
- Running subagents now send the parent periodic task heartbeats (every 15 minutes by default) with their current tool call, time since their last activity, and turn, tool-call and token counts. Set `heartbeatMs` on a `subagent` call, or on a `tasks` entry, to change a child's cadence; `0` turns it off.
|
|
10
10
|
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- A subagent launched from a chat turn that a running workflow started no longer stays `running` for good with no session: its session no longer waits on that workflow's resource admission. A subagent whose session still does not start within 5 minutes fails with `Subagent session did not start within 5 min (still <step>)`, and `status` shows the cause in its text and its expanded card. ([#4148](https://github.com/bastani-inc/atomic/pull/4148), [#4150](https://github.com/bastani-inc/atomic/pull/4150))
|
|
14
|
+
- A subagent launched with an effort, such as `model: "openai/gpt-5.5:xhigh"`, runs at exactly that effort on a model that supports it, and at that model's default level on one that does not; each model in its fallback chain follows the same rule instead of falling back to the default level, including a fallback the child starts on in place of a requested model whose provider has no auth. ([#4148](https://github.com/bastani-inc/atomic/pull/4148), [#4150](https://github.com/bastani-inc/atomic/pull/4150))
|
|
15
|
+
- `status` lists only the children this session launched, with the child id `pause`, `resume` and `quit` take, and those actions also take the listed path; `status` with a child id finds the child. ([#4148](https://github.com/bastani-inc/atomic/pull/4148))
|
|
16
|
+
|
|
11
17
|
## [0.9.58-alpha.1] - 2026-11-01
|
|
12
18
|
|
|
13
19
|
### Added
|
|
@@ -570,6 +570,8 @@ subagent({ action: "quit", id: "<child-id>" })
|
|
|
570
570
|
subagent({ action: "quit", all: true })
|
|
571
571
|
```
|
|
572
572
|
|
|
573
|
+
`status` lists the children this session launched that are still in this process, each as `<run-id>/<agent>_<n> — <state> (loaded|cold) · id <child-id>`, with the cause of a failed or interrupted child after it; `pause`, `resume` and `quit` take the child id or that path, and `status` takes either to show one child. Children other sessions in the same process launched, such as a workflow stage's, are not listed, since this session cannot control them. A child whose session has not started within 5 minutes fails with `Subagent session did not start within 5 min (still <step>)` instead of staying running.
|
|
574
|
+
|
|
573
575
|
`pause` stops a child and holds its queued messages until `resume`; `quit` stops it gracefully, including a child already paused by you or with its workflow stage. Both stay resumable while the session or workflow stage that launched the child can still resume it, as do children stopped because their workflow stage was paused or quit, including by Atomic exiting or a session switch. `resume` reopens the child's own session under the same id and Intercom name. A paused, quit, or interrupted child receives `message` once as its next prompt and then continues where it left off; a completed or failed child receives `message` as one fresh prompt. Without `message`, every resumable child, including a completed or failed one, is asked to continue where it left off. Children cancelled for good (owner or batch cancellation, including a `/tasks` stop, and the removed `kill` action), children whose workflow stage ended (the stage finished, or its run ended or was cancelled; this covers all of that stage's children, including ones you paused or quit), and children reported gone after a restart cannot be resumed: `resume` returns an error that says why, and follow-up work requires a fresh launch with explicit context. A parallel child waiting for a reply is not terminal and continues in its original execution. Parent cancellation of a still-running child uses the interrupted/abort state: receipts and progress present it as cancelled rather than failed, persisted metadata keeps the abort cause, and bounded partial findings remain available. Migrate old subagent calls from `action: "kill"` or `action: "interrupt"` to `action: "quit"`; the old actions are rejected with `The subagent action "kill" was removed. Use { action: "quit", id } to stop a child gracefully; it stays resumable with { action: "resume", id, message? }.` (naming the action that was used). Host interrupt APIs are unchanged.
|
|
574
576
|
|
|
575
577
|
## Worktree isolation
|
|
@@ -814,7 +816,7 @@ The main runtime files are:
|
|
|
814
816
|
|
|
815
817
|
### Suffix-first reasoning levels
|
|
816
818
|
|
|
817
|
-
Reasoning levels are configured suffix-first using the `model_name:thinking_effort` syntax on `model` and each `fallbackModels` entry: `model: claude-sonnet-4:high` and `fallbackModels: claude-sonnet-4:medium, gpt-5:low, claude-haiku-4:off`. Canonical efforts are `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. `xhigh`
|
|
819
|
+
Reasoning levels are configured suffix-first using the `model_name:thinking_effort` syntax on `model` and each `fallbackModels` entry: `model: claude-sonnet-4:high` and `fallbackModels: claude-sonnet-4:medium, gpt-5:low, claude-haiku-4:off`. Canonical efforts are `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. A child runs at exactly the effort it was launched with on a model that supports it; a model that does not support it, `xhigh` or `max` on many models, runs at its own default level instead (its `modelThinkingLevels` setting, else `defaultThinkingLevel`). Fallback models follow the same rule, using their own suffix or, without one, the launch's effort. The older `thinking` field is deprecated; it remains supported as a legacy default only when a model candidate has no suffix, and a suffix always wins.
|
|
818
820
|
|
|
819
821
|
Migrate legacy `thinking` frontmatter by folding the effort into `model` and `fallbackModels`:
|
|
820
822
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.58
|
|
3
|
+
"version": "0.9.58",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for delegating tasks to subagents with parallel execution. Fork of: https://github.com/nicobailon/pi-subagents",
|
|
6
6
|
"contributors": [
|
|
@@ -8939,6 +8939,13 @@ function subagentChildCardRecord(childId, taskId) {
|
|
|
8939
8939
|
const id = childId ?? childIdsByTaskId.get(taskId);
|
|
8940
8940
|
return id === undefined ? undefined : latest.get(id);
|
|
8941
8941
|
}
|
|
8942
|
+
function observedSubagentRunIds(ownerSessionId) {
|
|
8943
|
+
const runIds = new Set;
|
|
8944
|
+
for (const record of latest.values())
|
|
8945
|
+
if (record.owner?.sessionId === ownerSessionId)
|
|
8946
|
+
runIds.add(record.runId);
|
|
8947
|
+
return runIds;
|
|
8948
|
+
}
|
|
8942
8949
|
function watchSubagentChildCard(card, invalidate, key, ownerSessionId) {
|
|
8943
8950
|
invalidators.set(card, invalidate);
|
|
8944
8951
|
const cards = watchers.get(key) ?? new Set;
|
|
@@ -11825,7 +11832,10 @@ import {
|
|
|
11825
11832
|
import {
|
|
11826
11833
|
SubagentControl
|
|
11827
11834
|
} from "@bastani/atomic-natives";
|
|
11828
|
-
import {
|
|
11835
|
+
import {
|
|
11836
|
+
clampThinkingLevel,
|
|
11837
|
+
getSupportedThinkingLevels
|
|
11838
|
+
} from "@bastani/pi-ai/compat";
|
|
11829
11839
|
|
|
11830
11840
|
// dist/builtin/subagents/src/agents/skills.ts
|
|
11831
11841
|
import * as fs14 from "node:fs";
|
|
@@ -12566,6 +12576,23 @@ function createInProcessChildPromptBehavior(policy) {
|
|
|
12566
12576
|
}
|
|
12567
12577
|
|
|
12568
12578
|
// dist/builtin/subagents/src/runs/inprocess/runner.ts
|
|
12579
|
+
var SUBAGENT_SESSION_START_TIMEOUT_MS = 5 * 60000;
|
|
12580
|
+
function formatStartTimeout(ms) {
|
|
12581
|
+
return ms % 60000 === 0 ? `${ms / 60000} min` : `${Math.max(1, Math.round(ms / 1000))}s`;
|
|
12582
|
+
}
|
|
12583
|
+
var DEFAULT_THINKING_LEVEL = "medium";
|
|
12584
|
+
function explicitEffortFor(model, requested, settings) {
|
|
12585
|
+
if (getSupportedThinkingLevels(model).includes(requested))
|
|
12586
|
+
return requested;
|
|
12587
|
+
return clampThinkingLevel(model, settings.getModelThinkingLevel(model.provider, model.id) ?? settings.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);
|
|
12588
|
+
}
|
|
12589
|
+
function pinFallbackEffort(entry, requested, settings, resolve) {
|
|
12590
|
+
const resolved = resolve?.(entry);
|
|
12591
|
+
if (!resolved)
|
|
12592
|
+
return entry;
|
|
12593
|
+
const { baseModel } = splitKnownThinkingSuffix(entry.trim());
|
|
12594
|
+
return `${baseModel}:${explicitEffortFor(resolved.model, resolved.thinkingLevel ?? requested, settings)}`;
|
|
12595
|
+
}
|
|
12569
12596
|
function modelIdForCandidate(candidate, fallbackModel) {
|
|
12570
12597
|
return candidate.modelId ?? (candidate.model ? `${candidate.model.provider}/${candidate.model.id}` : undefined) ?? (fallbackModel ? `${fallbackModel.provider}/${fallbackModel.id}` : undefined);
|
|
12571
12598
|
}
|
|
@@ -13018,12 +13045,23 @@ class SubagentControlRuntime {
|
|
|
13018
13045
|
delivered = new Set;
|
|
13019
13046
|
deliveredEnvelopes = new Map;
|
|
13020
13047
|
killedChildren = new Set;
|
|
13048
|
+
childIds = new Map;
|
|
13021
13049
|
nextAttemptId = 1;
|
|
13022
13050
|
constructor(parent, sessionRoot, runningCapacity) {
|
|
13023
13051
|
this.parent = { ...parent };
|
|
13024
13052
|
this.sessionRoot = trustedSessionRoot(this.parent, sessionRoot);
|
|
13025
13053
|
this.native = new SubagentControl(this.parent.path, runningCapacity);
|
|
13026
13054
|
}
|
|
13055
|
+
childIdOf(pathValue) {
|
|
13056
|
+
return this.childIds.get(pathValue);
|
|
13057
|
+
}
|
|
13058
|
+
pathOfChildId(childId) {
|
|
13059
|
+
let latest;
|
|
13060
|
+
for (const [pathValue, id] of this.childIds)
|
|
13061
|
+
if (id === childId)
|
|
13062
|
+
latest = pathValue;
|
|
13063
|
+
return latest;
|
|
13064
|
+
}
|
|
13027
13065
|
registerAgents(agents) {
|
|
13028
13066
|
for (const agent of agents)
|
|
13029
13067
|
this.native.registerAgent(agent.name);
|
|
@@ -13041,6 +13079,8 @@ class SubagentControlRuntime {
|
|
|
13041
13079
|
if (!native.child)
|
|
13042
13080
|
return refusal(native);
|
|
13043
13081
|
const identity = native.child;
|
|
13082
|
+
if (spec.childId !== undefined)
|
|
13083
|
+
this.childIds.set(identity.path, spec.childId);
|
|
13044
13084
|
const childModePolicy = resolveChildModePolicy(spec);
|
|
13045
13085
|
const sessionDir = spec.sessionManager?.getSessionDir() || sessionDirectory(this.sessionRoot, identity.path);
|
|
13046
13086
|
mkdirSync7(sessionDir, { recursive: true });
|
|
@@ -13183,9 +13223,34 @@ class SubagentControlRuntime {
|
|
|
13183
13223
|
signals.interrupt.addEventListener("abort", interruptListener, {
|
|
13184
13224
|
once: true
|
|
13185
13225
|
});
|
|
13226
|
+
const startTimeoutMs = admitted.spec.sessionStartTimeoutMs ?? SUBAGENT_SESSION_START_TIMEOUT_MS;
|
|
13227
|
+
const startDeadline = new AbortController;
|
|
13228
|
+
let startPhase = "opening its session";
|
|
13229
|
+
const startTimer = setTimeout(() => startDeadline.abort(new Error(`Subagent session did not start within ${formatStartTimeout(startTimeoutMs)} (still ${startPhase}); it was stopped before its task ran.`)), startTimeoutMs);
|
|
13230
|
+
const beforeStartDeadline = (phase, work, abandon) => {
|
|
13231
|
+
startPhase = phase;
|
|
13232
|
+
return new Promise((resolve, reject) => {
|
|
13233
|
+
const expire = () => {
|
|
13234
|
+
work.then((late) => abandon?.(late), () => {
|
|
13235
|
+
return;
|
|
13236
|
+
});
|
|
13237
|
+
reject(startDeadline.signal.reason);
|
|
13238
|
+
};
|
|
13239
|
+
if (startDeadline.signal.aborted)
|
|
13240
|
+
return expire();
|
|
13241
|
+
startDeadline.signal.addEventListener("abort", expire, { once: true });
|
|
13242
|
+
work.then((value) => {
|
|
13243
|
+
startDeadline.signal.removeEventListener("abort", expire);
|
|
13244
|
+
resolve(value);
|
|
13245
|
+
}, (error) => {
|
|
13246
|
+
startDeadline.signal.removeEventListener("abort", expire);
|
|
13247
|
+
reject(error);
|
|
13248
|
+
});
|
|
13249
|
+
});
|
|
13250
|
+
};
|
|
13186
13251
|
try {
|
|
13187
13252
|
const workflow = workflowMetadataFromContext(admitted.spec.parent?.orchestrationContext);
|
|
13188
|
-
const sessionManager = admitted.sessionManager ?
|
|
13253
|
+
const sessionManager = await beforeStartDeadline("opening its session", admitted.sessionManager ? SessionManager3.open(admitted.sessionManager.getSessionStore(), admitted.sessionManager.getSessionId(), admitted.policy.cwd) : SessionManager3.create(admitted.policy.cwd, admitted.sessionDir, workflow ? { internal: true, workflow } : { internal: true }));
|
|
13189
13254
|
transcriptManager = sessionManager;
|
|
13190
13255
|
taskHooks?.bindTranscript?.(sessionManager);
|
|
13191
13256
|
const childSession = {
|
|
@@ -13195,7 +13260,7 @@ class SubagentControlRuntime {
|
|
|
13195
13260
|
taskHooks?.bindChildSession?.(childSession);
|
|
13196
13261
|
admitted.spec.onChildSession?.(childSession);
|
|
13197
13262
|
if (workflow)
|
|
13198
|
-
await sessionManager.markSessionInternal(workflow);
|
|
13263
|
+
await beforeStartDeadline("opening its session", sessionManager.markSessionInternal(workflow));
|
|
13199
13264
|
const launchLeafId = sessionManager.getLeafId();
|
|
13200
13265
|
ownMessages = () => messagesSinceLaunch(sessionManager, launchLeafId);
|
|
13201
13266
|
let created;
|
|
@@ -13221,6 +13286,13 @@ class SubagentControlRuntime {
|
|
|
13221
13286
|
} : inherited.extensionBindings;
|
|
13222
13287
|
const agentDir = inherited.agentDir ?? getAgentDir2();
|
|
13223
13288
|
const settingsManager = inherited.settingsManager ?? SettingsManager.create(admitted.policy.cwd, agentDir);
|
|
13289
|
+
const requested = admitted.spec.requestedThinking;
|
|
13290
|
+
const startSuffix = splitKnownThinkingSuffix(candidate.modelId ?? "").thinkingSuffix.slice(1);
|
|
13291
|
+
const startEffort = THINKING_LEVELS.find((level) => level === startSuffix) ?? requested;
|
|
13292
|
+
const explicitEffort = requested === undefined || startEffort === undefined ? {} : {
|
|
13293
|
+
...inherited.model ? { thinkingLevel: explicitEffortFor(inherited.model, startEffort, settingsManager) } : {},
|
|
13294
|
+
fallbackModels: (inherited.fallbackModels ?? settingsManager.getFallbackModels() ?? []).map((entry) => pinFallbackEffort(entry, requested, settingsManager, admitted.spec.resolveCandidateModel))
|
|
13295
|
+
};
|
|
13224
13296
|
const resourceLoader = new DefaultResourceLoader(inProcessChildResourceLoaderOptions({
|
|
13225
13297
|
cwd: admitted.policy.cwd,
|
|
13226
13298
|
agentDir,
|
|
@@ -13230,7 +13302,7 @@ class SubagentControlRuntime {
|
|
|
13230
13302
|
resourceLoaderInheritanceSnapshot: admitted.spec.parent?.resourceLoaderInheritanceSnapshot,
|
|
13231
13303
|
orchestrationContext: admitted.spec.parent?.orchestrationContext
|
|
13232
13304
|
}));
|
|
13233
|
-
await resourceLoader.reload();
|
|
13305
|
+
await beforeStartDeadline("loading its resources", resourceLoader.reload());
|
|
13234
13306
|
const selectedSkills = resolveSkillsFromCatalog([...admitted.policy.skills], resourceLoader.getSkillCatalog(), admitted.policy.cwd);
|
|
13235
13307
|
skillReport = {
|
|
13236
13308
|
...selectedSkills.resolved.length > 0 ? { skills: selectedSkills.resolved.map((skill) => skill.name) } : {},
|
|
@@ -13242,26 +13314,28 @@ class SubagentControlRuntime {
|
|
|
13242
13314
|
const skillInjection = buildSkillInjection(selectedSkills.resolved);
|
|
13243
13315
|
const promptBehavior = createInProcessChildPromptBehavior(admitted.policy);
|
|
13244
13316
|
const systemPromptTransform = createInProcessChildSystemPromptTransform(admitted.policy, skillInjection);
|
|
13245
|
-
created = {
|
|
13246
|
-
|
|
13247
|
-
|
|
13248
|
-
|
|
13249
|
-
|
|
13250
|
-
|
|
13251
|
-
|
|
13252
|
-
|
|
13253
|
-
|
|
13254
|
-
|
|
13255
|
-
|
|
13256
|
-
|
|
13257
|
-
|
|
13258
|
-
|
|
13259
|
-
|
|
13260
|
-
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13317
|
+
created = await beforeStartDeadline("creating its agent session, which includes any wait for a resource-admission permit", createAgentSession({
|
|
13318
|
+
...inherited,
|
|
13319
|
+
...explicitEffort,
|
|
13320
|
+
extensionBindings,
|
|
13321
|
+
customTools: admitted.policy.customTools ?? inherited.customTools,
|
|
13322
|
+
resourceLoader,
|
|
13323
|
+
resourceAdmissionSignal: AbortSignal.any([signals.abort, signals.interrupt, startDeadline.signal]),
|
|
13324
|
+
subagentPolicy: {
|
|
13325
|
+
...admitted.policy,
|
|
13326
|
+
executionEnded: executionEnded.signal,
|
|
13327
|
+
...!childAllowsIntercom(inherited) ? { intercom: undefined, intercomGroup: undefined } : {}
|
|
13328
|
+
},
|
|
13329
|
+
settingsManager,
|
|
13330
|
+
orchestrationContext: admitted.spec.parent?.orchestrationContext,
|
|
13331
|
+
sessionManager,
|
|
13332
|
+
systemPromptTransform,
|
|
13333
|
+
initialContextTransform: promptBehavior.initialContextTransform
|
|
13334
|
+
}), (late) => void late.session.dispose().catch(() => {
|
|
13335
|
+
return;
|
|
13336
|
+
}));
|
|
13264
13337
|
}
|
|
13338
|
+
clearTimeout(startTimer);
|
|
13265
13339
|
session = created.session;
|
|
13266
13340
|
const transcriptSession = session;
|
|
13267
13341
|
let observedStreamingMessage;
|
|
@@ -13493,6 +13567,7 @@ class SubagentControlRuntime {
|
|
|
13493
13567
|
...skillReport
|
|
13494
13568
|
};
|
|
13495
13569
|
} finally {
|
|
13570
|
+
clearTimeout(startTimer);
|
|
13496
13571
|
executionEnded.abort();
|
|
13497
13572
|
signals.abort.removeEventListener("abort", abortListener);
|
|
13498
13573
|
signals.interrupt.removeEventListener("abort", interruptListener);
|
|
@@ -13680,11 +13755,24 @@ function findSubagentControl(id) {
|
|
|
13680
13755
|
if (direct)
|
|
13681
13756
|
return direct;
|
|
13682
13757
|
for (const control of controls.values()) {
|
|
13758
|
+
if (control.pathOfChildId(id) !== undefined)
|
|
13759
|
+
return control;
|
|
13683
13760
|
if (control.native.listChildren().some((child) => child.path === id))
|
|
13684
13761
|
return control;
|
|
13685
13762
|
}
|
|
13686
13763
|
return;
|
|
13687
13764
|
}
|
|
13765
|
+
function subagentChildPath(control, id) {
|
|
13766
|
+
return control.pathOfChildId(id) ?? id;
|
|
13767
|
+
}
|
|
13768
|
+
function subagentChildIdOfPath(id) {
|
|
13769
|
+
for (const control of controls.values()) {
|
|
13770
|
+
const childId = control.childIdOf(id);
|
|
13771
|
+
if (childId !== undefined)
|
|
13772
|
+
return childId;
|
|
13773
|
+
}
|
|
13774
|
+
return;
|
|
13775
|
+
}
|
|
13688
13776
|
function listSubagentControls() {
|
|
13689
13777
|
return [...controls.values()];
|
|
13690
13778
|
}
|
|
@@ -14030,6 +14118,8 @@ async function runSingleInProcess(runtimeCwd, agent, task, options) {
|
|
|
14030
14118
|
const resolvedCandidate = candidate ? options.resolveCandidateModel?.(candidate) : undefined;
|
|
14031
14119
|
if (options.modelRoute && !resolvedCandidate)
|
|
14032
14120
|
throw new Error("Subagent auto-selected model could not be resolved before execution. Retry explicitly with the current catalog.");
|
|
14121
|
+
const requestedSuffix = splitKnownThinkingSuffix(options.modelOverride ?? agent.model ?? "").thinkingSuffix.slice(1);
|
|
14122
|
+
const requestedThinking = options.modelRoute ? undefined : THINKING_LEVELS.find((level) => level === requestedSuffix);
|
|
14033
14123
|
const orchestrationContext = workflowOrchestrationContext(options);
|
|
14034
14124
|
const outputSnapshot = captureSingleOutputSnapshot(options.outputPath);
|
|
14035
14125
|
const parent = {
|
|
@@ -14056,6 +14146,7 @@ ${task}`);
|
|
|
14056
14146
|
const testSession = options.testSession ?? defaultTestSession();
|
|
14057
14147
|
const spec = {
|
|
14058
14148
|
taskName: agent.name,
|
|
14149
|
+
childId: `${options.runId}:${options.index ?? 0}`,
|
|
14059
14150
|
task,
|
|
14060
14151
|
agent,
|
|
14061
14152
|
cwd,
|
|
@@ -14069,6 +14160,11 @@ ${task}`);
|
|
|
14069
14160
|
...options.progressPath ? { progressPath: options.progressPath } : {},
|
|
14070
14161
|
...options.progressArtifactPath ? { progressArtifactPath: options.progressArtifactPath } : options.progressPath && artifactsDir ? { progressArtifactPath: options.progressPath } : {},
|
|
14071
14162
|
...artifactPaths?.outputPath ? { outputArtifactPath: artifactPaths.outputPath } : {},
|
|
14163
|
+
...options.sessionStartTimeoutMs === undefined ? {} : { sessionStartTimeoutMs: options.sessionStartTimeoutMs },
|
|
14164
|
+
...requestedThinking === undefined ? {} : {
|
|
14165
|
+
requestedThinking,
|
|
14166
|
+
...options.resolveCandidateModel ? { resolveCandidateModel: options.resolveCandidateModel } : {}
|
|
14167
|
+
},
|
|
14072
14168
|
tools: agent.tools,
|
|
14073
14169
|
mcpDirectTools: agent.mcpDirectTools,
|
|
14074
14170
|
skills: options.skills ?? agent.skills,
|
|
@@ -15898,34 +15994,52 @@ function handleSubagentControlNotice(input) {
|
|
|
15898
15994
|
function canonicalChildren(control) {
|
|
15899
15995
|
return [...control.listChildren()].sort((left, right) => left.path.localeCompare(right.path));
|
|
15900
15996
|
}
|
|
15997
|
+
function settledCause(control, path, status) {
|
|
15998
|
+
if (status !== "error" && status !== "interrupted")
|
|
15999
|
+
return;
|
|
16000
|
+
const cause = control.getDeliveredResult(path)?.cause?.replace(/\s+/g, " ").trim();
|
|
16001
|
+
return cause || undefined;
|
|
16002
|
+
}
|
|
15901
16003
|
function childLines(control, id) {
|
|
15902
|
-
if (!control)
|
|
15903
|
-
return [];
|
|
15904
16004
|
if (id) {
|
|
15905
|
-
const
|
|
16005
|
+
const path = subagentChildPath(control, id);
|
|
16006
|
+
const child = control.findChild(path);
|
|
15906
16007
|
if (!child)
|
|
15907
16008
|
return [];
|
|
15908
|
-
const delivered = control.getDeliveredResult(
|
|
16009
|
+
const delivered = control.getDeliveredResult(path);
|
|
16010
|
+
const childId = control.childIdOf(path);
|
|
16011
|
+
const cause = settledCause(control, path, child.status);
|
|
15909
16012
|
return [
|
|
16013
|
+
...childId ? [`Id: ${childId}`] : [],
|
|
15910
16014
|
`Child: ${child.path}`,
|
|
15911
16015
|
`Parent: ${child.parentPath}`,
|
|
15912
16016
|
`Task: ${child.taskName}`,
|
|
15913
16017
|
`Depth: ${child.depth}`,
|
|
15914
16018
|
`Status: ${child.status}`,
|
|
16019
|
+
...cause ? [`Cause: ${cause}`] : [],
|
|
15915
16020
|
`Residency: ${child.loaded ? "loaded" : "cold"}`,
|
|
15916
16021
|
...delivered?.sessionFile ? [`Session: ${delivered.sessionFile}`] : []
|
|
15917
16022
|
];
|
|
15918
16023
|
}
|
|
15919
|
-
return control.listChildren().map((child) =>
|
|
16024
|
+
return control.listChildren().map((child) => {
|
|
16025
|
+
const childId = control.childIdOf(child.path);
|
|
16026
|
+
const cause = settledCause(control, child.path, child.status);
|
|
16027
|
+
return `${child.path} — ${child.status} (${child.loaded ? "loaded" : "cold"})${childId ? ` · id ${childId}` : ""}${cause ? ` · ${cause}` : ""}`;
|
|
16028
|
+
});
|
|
15920
16029
|
}
|
|
15921
16030
|
function statusGroup(control, id) {
|
|
16031
|
+
const path = id === undefined ? undefined : subagentChildPath(control, id);
|
|
15922
16032
|
return {
|
|
15923
16033
|
parentPath: control.parent.path,
|
|
15924
|
-
children: canonicalChildren(control).filter((child) => !
|
|
16034
|
+
children: canonicalChildren(control).filter((child) => !path || path === control.parent.path || child.path === path).map((child) => {
|
|
15925
16035
|
const delivered = control.getDeliveredResult(child.path);
|
|
15926
16036
|
const metadata = control.getChildMetadata(child.path) ?? delivered;
|
|
16037
|
+
const childId = control.childIdOf(child.path);
|
|
16038
|
+
const failure = settledCause(control, child.path, child.status);
|
|
15927
16039
|
return {
|
|
15928
16040
|
...child,
|
|
16041
|
+
...childId === undefined ? {} : { childId },
|
|
16042
|
+
...failure === undefined ? {} : { failure },
|
|
15929
16043
|
sessionFile: delivered?.sessionFile,
|
|
15930
16044
|
...metadata?.model === undefined ? {} : { model: metadata.model },
|
|
15931
16045
|
...metadata?.thinking === undefined ? {} : { thinking: metadata.thinking }
|
|
@@ -15933,10 +16047,11 @@ function statusGroup(control, id) {
|
|
|
15933
16047
|
})
|
|
15934
16048
|
};
|
|
15935
16049
|
}
|
|
15936
|
-
function inspectInProcessChildStatus(id) {
|
|
16050
|
+
function inspectInProcessChildStatus(id, ownsRun) {
|
|
16051
|
+
const owned = (control) => ownsRun?.(control.parent.path) ?? true;
|
|
15937
16052
|
if (id) {
|
|
15938
16053
|
const control = findSubagentControl(id);
|
|
15939
|
-
if (!control)
|
|
16054
|
+
if (!control || !owned(control))
|
|
15940
16055
|
return;
|
|
15941
16056
|
const text = id === control.parent.path ? [`Parent: ${control.parent.path}`, ...childLines(control)].join(`
|
|
15942
16057
|
`) : childLines(control, id).join(`
|
|
@@ -15948,7 +16063,7 @@ function inspectInProcessChildStatus(id) {
|
|
|
15948
16063
|
details: { mode: "management", results: [], statusGroups: [statusGroup(control, id)] }
|
|
15949
16064
|
};
|
|
15950
16065
|
}
|
|
15951
|
-
const controls = listSubagentControls();
|
|
16066
|
+
const controls = listSubagentControls().filter(owned);
|
|
15952
16067
|
const lines = controls.flatMap((control) => [`Parent: ${control.parent.path}`, ...childLines(control)]);
|
|
15953
16068
|
if (lines.length === 0)
|
|
15954
16069
|
return;
|
|
@@ -17561,10 +17676,22 @@ function liveTaskIds(host) {
|
|
|
17561
17676
|
function ownedRecords(ctx) {
|
|
17562
17677
|
return readSubagentChildRecords(ctx.sessionManager.getEntries(), subagentChildOwner(ctx).sessionId);
|
|
17563
17678
|
}
|
|
17679
|
+
async function subagentRunsLaunchedBy(ctx) {
|
|
17680
|
+
const owner = subagentChildOwner(ctx).sessionId;
|
|
17681
|
+
await subagentChildRecordsAppended(owner);
|
|
17682
|
+
const runIds = observedSubagentRunIds(owner);
|
|
17683
|
+
for (const record of ownedRecords(ctx).values())
|
|
17684
|
+
runIds.add(record.runId);
|
|
17685
|
+
return runIds;
|
|
17686
|
+
}
|
|
17564
17687
|
function resolveRecord(records, id) {
|
|
17565
17688
|
const direct = findSubagentChildRecord(records, id);
|
|
17566
17689
|
if (direct)
|
|
17567
17690
|
return direct;
|
|
17691
|
+
const listedAs = subagentChildIdOfPath(id.trim());
|
|
17692
|
+
const byPath = listedAs === undefined ? undefined : records.get(listedAs);
|
|
17693
|
+
if (byPath)
|
|
17694
|
+
return byPath;
|
|
17568
17695
|
const inRun = [...records.values()].filter((record) => record.runId === id.trim());
|
|
17569
17696
|
if (inRun.length === 1)
|
|
17570
17697
|
return inRun[0];
|
|
@@ -17905,7 +18032,8 @@ async function handleManagementRequest(input) {
|
|
|
17905
18032
|
if (action === "status") {
|
|
17906
18033
|
const targetRunId = paramsWithResolvedCwd.id ?? paramsWithResolvedCwd.runId;
|
|
17907
18034
|
const foreground = getForegroundControl(deps.state, targetRunId);
|
|
17908
|
-
const
|
|
18035
|
+
const launched = await subagentRunsLaunchedBy(ctx);
|
|
18036
|
+
const live = inspectInProcessChildStatus(targetRunId, (runId) => launched.has(runId)) ?? (foreground ? foregroundStatusResult(foreground) : undefined);
|
|
17909
18037
|
if (awaitingResume.length > 0) {
|
|
17910
18038
|
const liveText = live?.content.map((part) => part.type === "text" ? part.text : "").join(`
|
|
17911
18039
|
`);
|
|
@@ -19263,11 +19391,13 @@ function childStatusLines(child, expanded, theme, width) {
|
|
|
19263
19391
|
return [
|
|
19264
19392
|
heading,
|
|
19265
19393
|
...metadata,
|
|
19394
|
+
...child.childId ? [theme.fg("dim", ` Id: ${displayText(child.childId)}`)] : [],
|
|
19266
19395
|
theme.fg("dim", ` Path: ${displayText(child.path)}`),
|
|
19267
19396
|
theme.fg("dim", ` Parent: ${displayText(child.parentPath)} · Depth: ${child.depth}`),
|
|
19268
19397
|
theme.fg("dim", ` Task: ${displayText(child.taskName)}`),
|
|
19269
19398
|
theme.fg("dim", ` Residency: ${child.loaded ? "loaded" : "cold"}`),
|
|
19270
19399
|
...child.cause ? [theme.fg("muted", ` Cause: ${displayText(child.cause)}`)] : [],
|
|
19400
|
+
...child.failure ? [theme.fg("error", ` Error: ${displayText(child.failure)}`)] : [],
|
|
19271
19401
|
...child.sessionFile ? [theme.fg("dim", ` Session: ${displayText(child.sessionFile)}`)] : []
|
|
19272
19402
|
];
|
|
19273
19403
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/web-access",
|
|
3
|
-
"version": "0.9.58
|
|
3
|
+
"version": "0.9.58",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
|
|
6
6
|
"contributors": [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-session-options.d.ts","sourceRoot":"","sources":["../../src/core/child-session-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAKhE,2FAA2F;AAC3F,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;AAO5G,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,GAAE,SAAS,MAAM,EAAO,GACxC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"child-session-options.d.ts","sourceRoot":"","sources":["../../src/core/child-session-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAKhE,2FAA2F;AAC3F,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;AAO5G,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,GAAE,SAAS,MAAM,EAAO,GACxC,yBAAyB,CAyD3B"}
|
|
@@ -40,7 +40,9 @@ export function inheritChildSessionOptions(parent, child, availableToolNames = [
|
|
|
40
40
|
return {
|
|
41
41
|
...parent,
|
|
42
42
|
...definedOptions(child),
|
|
43
|
-
|
|
43
|
+
// The parent's admission, or the child's own, is the child's only one: a parent that holds none makes the child
|
|
44
|
+
// hold none, so a `withResourceAdmission` scope the parent's turn happened to start in never gates its child.
|
|
45
|
+
resourceAdmission: parent.resourceAdmission ?? child.resourceAdmission ?? null,
|
|
44
46
|
resourceAdmissionSignal: child.resourceAdmissionSignal,
|
|
45
47
|
resourceAdmissionDelegated: parent.resourceAdmission ? true : child.resourceAdmissionDelegated,
|
|
46
48
|
cwd: resolve(parent.cwd, child.cwd ?? child.sessionManager?.getCwd() ?? "."),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-session-options.js","sourceRoot":"","sources":["../../src/core/child-session-options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"child-session-options.js","sourceRoot":"","sources":["../../src/core/child-session-options.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolve } from \"node:path\";\nimport type { CreateAgentSessionOptions } from \"./sdk-types.ts\";\nimport { applyToolModifiers, getToolListError, isToolModifier } from \"./settings-merge.js\";\nimport { createToolNameMatcher, isMcpToolName } from \"./tool-selection.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.js\";\n\n/** Internal owner-bound adapter seam. Does not admit work or transfer parent authority. */\nexport type ChildSessionOptionsResolver = (options: CreateAgentSessionOptions) => CreateAgentSessionOptions;\n\n/** Optional undefined values retain inheritance; null and other explicit values do not. */\nfunction definedOptions<T extends object>(options: T | undefined): Partial<T> {\n\treturn Object.fromEntries(Object.entries(options ?? {}).filter(([, value]) => value !== undefined)) as Partial<T>;\n}\n\nexport function inheritChildSessionOptions(\n\tparent: CreateAgentSessionOptions,\n\tchild: CreateAgentSessionOptions,\n\tavailableToolNames: readonly string[] = [],\n): CreateAgentSessionOptions {\n\tconst builtins = { ...parent.builtins, ...definedOptions(child.builtins) };\n\tfor (const name of [\"workflows\", \"subagents\", \"mcp\", \"web-access\", \"intercom\"] as const) {\n\t\tif (parent.builtins?.[name] === false) builtins[name] = false;\n\t}\n\tconst ceiling = parent.noTools === \"all\" ? [] : parent.tools;\n\tconst parentAllows = createToolNameMatcher(ceiling ?? []);\n\tconst parentNamesMcp = createToolNameMatcher((ceiling ?? []).filter((entry) => entry.startsWith(\"mcp__\")));\n\tconst toolListError = child.tools ? getToolListError(child.tools) : undefined;\n\tif (toolListError) throw new Error(`Invalid tools option: ${toolListError}`);\n\tconst codingToolNames = new Set<string>(allToolNames);\n\tconst inheritedCustomToolNames = [...new Set([...availableToolNames, ...(ceiling ?? [])])].filter(\n\t\t(name) => !name.includes(\"*\") && !codingToolNames.has(name) && parentAllows(name),\n\t);\n\tconst childToolNames = child.tools?.some(isToolModifier)\n\t\t? applyToolModifiers(\n\t\t\t\t[\n\t\t\t\t\t...((child.noTools ?? parent.noTools)\n\t\t\t\t\t\t? []\n\t\t\t\t\t\t: ((child.settingsManager ?? parent.settingsManager)?.getDefaultTools() ?? getDefaultToolNames())),\n\t\t\t\t\t...inheritedCustomToolNames,\n\t\t\t\t],\n\t\t\t\tchild.tools,\n\t\t\t)\n\t\t: child.tools;\n\tconst childAllows = childToolNames === undefined ? undefined : createToolNameMatcher(childToolNames);\n\tconst tools =\n\t\tceiling === undefined\n\t\t\t? child.tools\n\t\t\t: [...new Set([...availableToolNames, ...ceiling, ...(childToolNames ?? [])])].filter(\n\t\t\t\t\t(name) =>\n\t\t\t\t\t\t!name.includes(\"*\") &&\n\t\t\t\t\t\tparentAllows(name) &&\n\t\t\t\t\t\t(!childAllows || childAllows(name)) &&\n\t\t\t\t\t\t(!isMcpToolName(name) || ceiling.includes(name) || parentNamesMcp(name)),\n\t\t\t\t);\n\tconst parentGate = parent.isFallbackModelAllowed;\n\tconst childGate = child.isFallbackModelAllowed;\n\treturn {\n\t\t...parent,\n\t\t...definedOptions(child),\n\t\t// The parent's admission, or the child's own, is the child's only one: a parent that holds none makes the child\n\t\t// hold none, so a `withResourceAdmission` scope the parent's turn happened to start in never gates its child.\n\t\tresourceAdmission: parent.resourceAdmission ?? child.resourceAdmission ?? null,\n\t\tresourceAdmissionSignal: child.resourceAdmissionSignal,\n\t\tresourceAdmissionDelegated: parent.resourceAdmission ? true : child.resourceAdmissionDelegated,\n\t\tcwd: resolve(parent.cwd!, child.cwd ?? child.sessionManager?.getCwd() ?? \".\"),\n\t\tbuiltins,\n\t\ttools,\n\t\texcludedTools: [...(parent.excludedTools ?? []), ...(child.excludedTools ?? [])],\n\t\tnoTools: parent.noTools === \"all\" ? \"all\" : (child.noTools ?? parent.noTools),\n\t\textensionBindings: { ...parent.extensionBindings, ...definedOptions(child.extensionBindings) },\n\t\tisFallbackModelAllowed:\n\t\t\tparentGate && childGate\n\t\t\t\t? (model, effort) => parentGate(model, effort) && childGate(model, effort)\n\t\t\t\t: (parentGate ?? childGate),\n\t};\n}\n"]}
|
package/dist/core/sdk-types.d.ts
CHANGED
|
@@ -100,7 +100,12 @@ export interface CreateAgentSessionOptions {
|
|
|
100
100
|
* parent's child-session options, so child background shells appear in the parent's `/tasks`.
|
|
101
101
|
*/
|
|
102
102
|
parentCommandTaskOwner?: import("./tasks/child-command-owner.js").ChildCommandTaskOwner;
|
|
103
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Capacity policy for this session and its managed commands. Omitted, the session draws its own permit from the
|
|
105
|
+
* enclosing `withResourceAdmission` scope, if any. `null` means it holds none, even inside such a scope. Child
|
|
106
|
+
* options from `getChildSessionOptions()` carry the parent's admission, or `null` when the parent holds none.
|
|
107
|
+
*/
|
|
108
|
+
resourceAdmission?: ResourceAdmission | null;
|
|
104
109
|
resourceAdmissionSignal?: AbortSignal;
|
|
105
110
|
resourceAdmissionDelegated?: boolean;
|
|
106
111
|
/** Transform the fully constructed base system prompt at session construction. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,\n\t * `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default\n\t * journal file. The caller closes a database or journal it supplies.\n\t */\n\tjournal?: RunJournalOption;\n\n\t/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<Api>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Ordered fallback models as provider/model strings with optional :thinkingLevel suffix.\n\t * Used by main-chat turns and borrowed, planner-only, for compaction range planning when\n\t * the current model cannot produce a usable plan — so a configured candidate may receive\n\t * the compaction transcript. Borrowing never changes the session model or thinking level.\n\t * Default: settings.fallbackModels\n\t */\n\tfallbackModels?: string[];\n\t/** Hard eligibility gate applied before fallback inference, including compaction borrowing. */\n\tisFallbackModelAllowed?: (model: Model<Api>, effort: string | undefined) => boolean;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Tool suppression mode.\n\t *\n\t * - \"all\": no active tools, even with an explicit allowlist\n\t * - \"builtin\": suppress coding-tool defaults only when tools is omitted;\n\t * extension/custom tools remain enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names or patterns where `*` matches any characters.\n\t *\n\t * When omitted, Atomic uses the resolved `defaultTools` setting for the initial\n\t * built-in selection when configured. Otherwise it enables the default\n\t * built-in tools (read, bash, edit, write, find, search, ask_user_question,\n\t * todo). Extension/custom tools remain enabled unless `noTools` changes\n\t * that default. MCP tools stay registered for codemode and tool search unless\n\t * an entry starts with `mcp__`; only matching tools are declared directly.\n\t * `excludedTools` applies afterwards. `noTools: \"all\"` overrides this selection.\n\t * Intercom follows the same selection and suppression rules as other extension tools.\n\t * A list of only `+name`/`-name` entries changes the resolved defaults instead\n\t * of allowlisting tools, and is reapplied on reload. Modifiers take exact names;\n\t * mixing them with plain names or patterns throws. Total suppression still wins.\n\t */\n\ttools?: string[];\n\t/**\n\t * Optional blocklist of tool names or patterns, including MCP tools.\n\t *\n\t * Matching built-in, extension, and SDK custom tools are omitted from the\n\t * final session tool registry and active tool set. Unknown names are ignored.\n\t */\n\texcludedTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\t/** Session storage. Defaults to the resolved settings or the shared local SQLite database. */\n\tsessionStore?: SessionStore | StorageSelection;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Host bindings installed before extension startup. Rebinding does not replay startup. */\n\textensionBindings?: ExtensionBindings;\n\t/** Session-scoped orchestration policy exposed to extension/tool handlers. */\n\torchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child. */\n\tsubagentPolicy?: SubagentChildPolicy;\n\t/**\n\t * Internal: parent-issued shell task owner for an in-process subagent child. Supplied by the\n\t * parent's child-session options, so child background shells appear in the parent's `/tasks`.\n\t */\n\tparentCommandTaskOwner?: import(\"./tasks/child-command-owner.js\").ChildCommandTaskOwner;\n\tresourceAdmission?: ResourceAdmission;\n\tresourceAdmissionSignal?: AbortSignal;\n\tresourceAdmissionDelegated?: boolean;\n\t/** Transform the fully constructed base system prompt at session construction. */\n\tsystemPromptTransform?: (prompt: string) => string;\n\t/** Filter inherited session messages before they enter the new AgentSession. */\n\tinitialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];\n}\n\nexport interface ResourceAdmissionRequest {\n\treadonly delegated?: boolean;\n}\n\nexport interface ResourceProcessIdentity {\n\treadonly kind: \"unix-process-group\";\n\treadonly id: number;\n}\n\nexport type ResourcePermit = (() => Promise<void>) & {\n\tbindProcess?: (identity: ResourceProcessIdentity) => Promise<void>;\n};\n\nexport interface ResourceAdmission {\n\tacquire(\n\t\tkind: \"session\" | \"process\",\n\t\tsignal?: AbortSignal,\n\t\trequest?: ResourceAdmissionRequest,\n\t): Promise<ResourcePermit>;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning when a restored or configured model cannot be selected. */\n\tmodelFallbackMessage?: string;\n\t/** Semantic reason for modelFallbackMessage; suitable for mode control flow. */\n\tmodelFallbackReason?: ModelFallbackReason;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,\n\t * `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default\n\t * journal file. The caller closes a database or journal it supplies.\n\t */\n\tjournal?: RunJournalOption;\n\n\t/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<Api>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Ordered fallback models as provider/model strings with optional :thinkingLevel suffix.\n\t * Used by main-chat turns and borrowed, planner-only, for compaction range planning when\n\t * the current model cannot produce a usable plan — so a configured candidate may receive\n\t * the compaction transcript. Borrowing never changes the session model or thinking level.\n\t * Default: settings.fallbackModels\n\t */\n\tfallbackModels?: string[];\n\t/** Hard eligibility gate applied before fallback inference, including compaction borrowing. */\n\tisFallbackModelAllowed?: (model: Model<Api>, effort: string | undefined) => boolean;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Tool suppression mode.\n\t *\n\t * - \"all\": no active tools, even with an explicit allowlist\n\t * - \"builtin\": suppress coding-tool defaults only when tools is omitted;\n\t * extension/custom tools remain enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names or patterns where `*` matches any characters.\n\t *\n\t * When omitted, Atomic uses the resolved `defaultTools` setting for the initial\n\t * built-in selection when configured. Otherwise it enables the default\n\t * built-in tools (read, bash, edit, write, find, search, ask_user_question,\n\t * todo). Extension/custom tools remain enabled unless `noTools` changes\n\t * that default. MCP tools stay registered for codemode and tool search unless\n\t * an entry starts with `mcp__`; only matching tools are declared directly.\n\t * `excludedTools` applies afterwards. `noTools: \"all\"` overrides this selection.\n\t * Intercom follows the same selection and suppression rules as other extension tools.\n\t * A list of only `+name`/`-name` entries changes the resolved defaults instead\n\t * of allowlisting tools, and is reapplied on reload. Modifiers take exact names;\n\t * mixing them with plain names or patterns throws. Total suppression still wins.\n\t */\n\ttools?: string[];\n\t/**\n\t * Optional blocklist of tool names or patterns, including MCP tools.\n\t *\n\t * Matching built-in, extension, and SDK custom tools are omitted from the\n\t * final session tool registry and active tool set. Unknown names are ignored.\n\t */\n\texcludedTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\t/** Session storage. Defaults to the resolved settings or the shared local SQLite database. */\n\tsessionStore?: SessionStore | StorageSelection;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Host bindings installed before extension startup. Rebinding does not replay startup. */\n\textensionBindings?: ExtensionBindings;\n\t/** Session-scoped orchestration policy exposed to extension/tool handlers. */\n\torchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child. */\n\tsubagentPolicy?: SubagentChildPolicy;\n\t/**\n\t * Internal: parent-issued shell task owner for an in-process subagent child. Supplied by the\n\t * parent's child-session options, so child background shells appear in the parent's `/tasks`.\n\t */\n\tparentCommandTaskOwner?: import(\"./tasks/child-command-owner.js\").ChildCommandTaskOwner;\n\t/**\n\t * Capacity policy for this session and its managed commands. Omitted, the session draws its own permit from the\n\t * enclosing `withResourceAdmission` scope, if any. `null` means it holds none, even inside such a scope. Child\n\t * options from `getChildSessionOptions()` carry the parent's admission, or `null` when the parent holds none.\n\t */\n\tresourceAdmission?: ResourceAdmission | null;\n\tresourceAdmissionSignal?: AbortSignal;\n\tresourceAdmissionDelegated?: boolean;\n\t/** Transform the fully constructed base system prompt at session construction. */\n\tsystemPromptTransform?: (prompt: string) => string;\n\t/** Filter inherited session messages before they enter the new AgentSession. */\n\tinitialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];\n}\n\nexport interface ResourceAdmissionRequest {\n\treadonly delegated?: boolean;\n}\n\nexport interface ResourceProcessIdentity {\n\treadonly kind: \"unix-process-group\";\n\treadonly id: number;\n}\n\nexport type ResourcePermit = (() => Promise<void>) & {\n\tbindProcess?: (identity: ResourceProcessIdentity) => Promise<void>;\n};\n\nexport interface ResourceAdmission {\n\tacquire(\n\t\tkind: \"session\" | \"process\",\n\t\tsignal?: AbortSignal,\n\t\trequest?: ResourceAdmissionRequest,\n\t): Promise<ResourcePermit>;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning when a restored or configured model cannot be selected. */\n\tmodelFallbackMessage?: string;\n\t/** Semantic reason for modelFallbackMessage; suitable for mode control flow. */\n\tmodelFallbackReason?: ModelFallbackReason;\n}\n"]}
|
package/dist/core/sdk.js
CHANGED
|
@@ -120,7 +120,9 @@ function createScopedSession(options, deferStart, persistInitialState = true) {
|
|
|
120
120
|
};
|
|
121
121
|
if (options.sessionManager)
|
|
122
122
|
ownedSessionManagerStores.delete(options.sessionManager);
|
|
123
|
-
const admission = options.resourceAdmission
|
|
123
|
+
const admission = options.resourceAdmission === null
|
|
124
|
+
? undefined
|
|
125
|
+
: (options.resourceAdmission ?? currentResourceAdmission());
|
|
124
126
|
try {
|
|
125
127
|
acquisition.release = await admission?.acquire("session", options.resourceAdmissionSignal, options.resourceAdmissionDelegated ? { delegated: true } : undefined);
|
|
126
128
|
return await constructAgentSession({
|
|
@@ -609,7 +611,7 @@ async function constructAgentSession(options, deferStart, persistInitialState, a
|
|
|
609
611
|
orchestrationContext: options.orchestrationContext,
|
|
610
612
|
subagentPolicy,
|
|
611
613
|
parentCommandTaskOwner: options.parentCommandTaskOwner,
|
|
612
|
-
resourceAdmission: options.resourceAdmission,
|
|
614
|
+
resourceAdmission: options.resourceAdmission ?? undefined,
|
|
613
615
|
systemPromptTransform: options.systemPromptTransform,
|
|
614
616
|
contextProjectionTransform: options.initialContextTransform,
|
|
615
617
|
});
|
package/dist/core/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAsC,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAqB,kBAAkB,EAAsB,MAAM,+BAA+B,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EACN,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,2BAA2B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAwC,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,cAAc,kBAAkB,CAAC;AAWjC,+EAA+E;AAC/E,8DAA8D;AAC9D,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAEjC,mBAAmB;AAEnB,SAAS,kBAAkB;IAC1B,OAAO,WAAW,EAAE,CAAC;AACtB,CAAC;AAED,4GAA4G;AAC5G,SAAS,yBAAyB,CACjC,OAAoC,EACpC,YAAyC,EACzC,cAA2C;IAE3C,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU;gBAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrF,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAO,GAA8B,EAAE;IAC/E,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,2BAA2B,CAC1C,OAAkC,EAClC,mBAAmB,GAAG,IAAI;IAE1B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAC3B,OAAkC,EAClC,UAAmB,EACnB,mBAAmB,GAAG,IAAI;IAE1B,MAAM,SAAS,GAAG,wBAAwB,CAAC,QAAQ,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5E,OAAO,wBAAwB,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAC3C,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EACxD,KAAK,IAAI,EAAE;YACV,MAAM,WAAW,GAA4D;gBAC5E,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;aACjG,CAAC;YACF,IAAI,OAAO,CAAC,cAAc;gBAAE,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,IAAI,wBAAwB,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACJ,WAAW,CAAC,OAAO,GAAG,MAAM,SAAS,EAAE,OAAO,CAC7C,SAAS,EACT,OAAO,CAAC,uBAAuB,EAC/B,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CACpE,CAAC;gBACF,OAAO,MAAM,qBAAqB,CACjC;oBACC,GAAG,OAAO;oBACV,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,QAAQ;oBAChE,iBAAiB,EAAE,SAAS;iBAC5B,EACD,UAAU,EACV,mBAAmB,EACnB,WAAW,CACX,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,2BAA2B,EAAE,CAAC;gBACrD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;oBACvB,IAAI,CAAC;wBACJ,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAAE,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC,CACD,CAAC;QACF,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IACf,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,OAAkC,EAClC,UAAmB,EACnB,mBAA4B,EAC5B,WAAoE;IAEpE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACzF,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC5C,+EAA+E;IAC/E,iFAAiF;IACjF,6EAA6E;IAC7E,IAAI,gCAAgC,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,cAAc,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,QAAQ,EAAG,CAAC,KAAK,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,cAAc;QAAE,cAAc,GAAG,MAAM,8BAA8B,CAAC,cAAc,CAAC,CAAC;IAE1F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACnG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzF,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE;YAC5C,QAAQ;YACR,QAAQ,EAAE,eAAe,CAAC,WAAW,EAAE;YACvC,YAAY,EAAE,OAAO,CAAC,YAAY;SAClC,CAAC,CAAC;QACH,IAAI,KAAK,KAAK,OAAO,CAAC,YAAY;YAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9D,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,2EAA2E;IAC3E,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,OAAO,CAAC,oBAAoB,EAAE,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACzC,MAAM,cAAc,CAAC,mBAAmB,CAAC;YACxC,KAAK,EAAE,GAAG,CAAC,aAAa;YACxB,OAAO,EAAE,GAAG,CAAC,eAAe;YAC5B,SAAS,EAAE,GAAG,CAAC,iBAAiB;SAChC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,wBAAwB,GAC7B,OAAO,CAAC,oBAAoB,EAAE,IAAI,KAAK,gBAAgB,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC;IACjG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,cAAc,GAAG,IAAI,qBAAqB,CAAC;YAC1C,GAAG;YACH,QAAQ;YACR,eAAe;YACf,mBAAmB,EAAE,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5E,wBAAwB,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAClG;SACD,CAAC,CAAC;QACH,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC/B,CAAC;IACD,IACC,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC;QACxE,CAAC,CAAC,yBAAyB,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC,EAC3F,CAAC;QACF,cAAc,GAAG,MAAM,yBAAyB,CAC/C,cAAc,EACd,GAAG,EACH,QAAQ,EACR,OAAO,CAAC,QAAQ,EAChB,wBAAwB,CACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC1C,cAAc,GAAG,MAAM,2BAA2B,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,gDAAgD;IAChD,MAAM,eAAe,GAAG,cAAc,CAAC,mBAAmB,EAAE,CAAC;IAC7D,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,MAAM,gBAAgB,GAAG,OAAO,CAAC,uBAAuB;QACvD,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;QACnD,CAAC,CAAC,gBAAgB,CAAC;IACpB,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC;IAE5G,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,oBAAwC,CAAC;IAC7C,IAAI,mBAAwF,CAAC;IAE7F,oDAAoD;IACpD,IAAI,CAAC,KAAK,IAAI,kBAAkB,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;QAC3D,KAAK,GAAG,MAAM,6BAA6B,CAC1C,eAAe,CAAC,KAAK,CAAC,QAAQ,EAC9B,eAAe,CAAC,KAAK,CAAC,OAAO,EAC7B,YAAY,CACZ,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,oBAAoB,GAAG,2BAA2B,eAAe,CAAC,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACpH,mBAAmB,GAAG,iBAAiB,CAAC;QACzC,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACrC,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,kBAAkB;YAChC,eAAe,EAAE,eAAe,CAAC,kBAAkB,EAAE;YACrD,cAAc,EAAE,eAAe,CAAC,eAAe,EAAE;YACjD,oBAAoB,EAAE,eAAe,CAAC,uBAAuB,EAAE;YAC/D,mBAAmB,EAAE,eAAe,CAAC,yBAAyB,EAAE;YAChE,YAAY;SACZ,CAAC,CAAC;QACH,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,MAAM,CAAC,cAAc,KAAK,iCAAiC,EAAE,CAAC;gBACjE,oBAAoB,GAAG,MAAM,CAAC,eAAe,CAAC;gBAC9C,mBAAmB,GAAG,MAAM,CAAC,cAAc,CAAC;YAC7C,CAAC;iBAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAClC,oBAAoB,GAAG,MAAM,CAAC,eAAe,IAAI,8BAA8B,EAAE,CAAC;gBAClF,mBAAmB,GAAG,MAAM,CAAC,cAAc,IAAI,qBAAqB,CAAC;YACtE,CAAC;QACF,CAAC;aAAM,IAAI,oBAAoB,EAAE,CAAC;YACjC,oBAAoB,IAAI,WAAW,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAED,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAE1C,sDAAsD;IACtD,IAAI,aAAa,KAAK,SAAS,IAAI,kBAAkB,EAAE,CAAC;QACvD,aAAa,GAAG,gBAAgB;YAC/B,CAAC,CAAE,eAAe,CAAC,aAA+B;YAClD,CAAC,CAAC,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,sBAAsB,CAAC,CAAC;IAC1E,CAAC;IAED,uDAAuD;IACvD,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC;QAC1C,aAAa,GAAG,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACjC,aAAa,GAAG,eAAe,CAAC,uBAAuB,EAAE,IAAI,sBAAsB,CAAC;IACrF,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,aAAa,GAAG,KAAK,CAAC;IACvB,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAkB,CAAC;IAC3E,CAAC;IAED,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAC7G,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9G,MAAM,gBAAgB,GACrB,OAAO,CAAC,OAAO,KAAK,KAAK;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,aAAa;YACd,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,cAAc,GACnB,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;QACjE,CAAC,CAAC;YACA,GAAG,OAAO,CAAC,cAAc;YACzB,KAAK,EAAE,gBAAgB;YACvB,cAAc,EACb,OAAO,CAAC,OAAO,KAAK,KAAK;gBACxB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAChG;QACF,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,MAAM,sBAAsB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAC/G,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CACjC,CAAC;IACF,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9C,MAAM,kBAAkB,GAAG;QAC1B,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,gBAAgB,KAAK,SAAS;YACjC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC,CAAC,EAAE,CAAC;KACN,CAAC;IAEF,IAAI,KAAY,CAAC;IAEjB,IAAI,wBAA+C,CAAC;IAEpD,+FAA+F;IAC/F,MAAM,2BAA2B,GAAG,CAAC,QAAwB,EAAa,EAAE;QAC3E,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,+DAA+D;QAC/D,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC;YACvC,wBAAwB,GAAG,SAAS,CAAC;YACrC,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAW,EAAE;YAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;oBAC1D,IAAI,SAAS,EAAE,CAAC;wBACf,MAAM,eAAe,GAAG,OAAO;6BAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACV,CAAC,CAAC,IAAI,KAAK,OAAO;4BACjB,CAAC,CAAC;gCACA,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,4BAA4B;6BAClC;4BACF,CAAC,CAAC,CAAC,CACJ;6BACA,MAAM,CACN,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;wBACb,wDAAwD;wBACxD,CAAC,CACA,CAAC,CAAC,IAAI,KAAK,MAAM;4BACjB,CAAC,CAAC,IAAI,KAAK,4BAA4B;4BACvC,CAAC,GAAG,CAAC;4BACL,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;4BACzB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAoC,CAAC,IAAI,KAAK,4BAA4B,CACpF,CACF,CAAC;wBACH,kFAAkF;wBAClF,mFAAmF;wBACnF,0CAA0C;wBAC1C,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,eAAe,EAAa,CAAC;oBACxD,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,wBAAwB,GAAG,QAAQ,CAAC;QACpC,OAAO,QAAQ,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAkC,EAAE,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,WAAW,CAClC;QACC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YAChD,MAAM,SAAS,GAAG,YAAY,CAAC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,OAAO,iBAAiB,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,SAAS;gBACzD,SAAS,EAAE,OAAO,KAAK,SAAS;gBAChC,CAAC,CAAC,SAAS,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;gBACzD,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC;gBACrD,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;KACD,EACD,cAAc,EACd,GAAG,EAAE,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAC3C,KAAK,EAAE,KAAK,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;IACvE,CAAC,EACD,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC/C,CAAC;IAEF,MAAM,yBAAyB,GAA0E,KAAK,EAC7G,IAAI,EACJ,KAAK,EACJ,EAAE;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,uBAAuB,CAAC;YAAE,OAAO;QAC1D,MAAM,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,KAAK,GAAG,IAAI,KAAK,CAAC;QACjB,YAAY,EAAE;YACb,YAAY,EAAE,EAAE;YAChB,KAAK;YACL,aAAa;YACb,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,gBAAgB;SAC1B;QACD,YAAY,EAAE,2BAA2B;QACzC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE;YACjD,MAAM,qBAAqB,GAAG,aAAa,EAAE,qBAAqB,IAAI,yBAAyB,CAAC;YAChG,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBAC1B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE;oBAC3D,MAAM,EAAE,aAAa,EAAE,MAAM;oBAC7B,GAAG,EAAE,aAAa,EAAE,GAAG;oBACvB,MAAM,EAAE,aAAa,EAAE,MAAM;iBAC7B,CAAC,CAAC;gBACH,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;gBACjG,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,CAAC;oBAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,IAAI,GAAG;oBACZ,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;oBAC/B,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,OAAO;oBAC3D,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO;oBACjC,GAAG,EAAE,UAAU,EAAE,GAAG;iBACpB,CAAC;gBACF,MAAM,YAAY,GACjB,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;oBAC3D,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;oBACrC,CAAC,CAAC,KAAK,CAAC;gBACV,MAAM,qBAAqB,GAAG,eAAe,CAAC,wBAAwB,EAAE,CAAC;gBACzE,MAAM,iBAAiB,GAAG,eAAe,CAAC,oBAAoB,EAAE,CAAC;gBACjE,qEAAqE;gBACrE,oDAAoD;gBACpD,MAAM,kBAAkB,GAAG,iBAAiB,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;gBACpF,MAAM,SAAS,GAAG,aAAa,EAAE,SAAS,IAAI,qBAAqB,CAAC,SAAS,IAAI,kBAAkB,CAAC;gBACpG,MAAM,yBAAyB,GAC9B,aAAa,EAAE,yBAAyB,IAAI,eAAe,CAAC,4BAA4B,EAAE,CAAC;gBAC5F,MAAM,gBAAgB,GAAG,aAAa,EAAE,gBAAgB,IAAI,eAAe,CAAC,mBAAmB,EAAE,CAAC;gBAClG,uGAAuG;gBACvG,+CAA+C;gBAC/C,MAAM,cAAc,GAAG,YAAY,CAClC,YAAY,CAAC,yBAAyB,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAC7F,aAAa,EAAE,OAAO,CACtB,CAAC;gBACF,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBAClE,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC;gBAChD,MAAM,gBAAgB,GAAG,YAAY,EAAE,WAAW,CAAC,yBAAyB,CAAC;oBAC5E,CAAC,CAAC,MAAM,YAAY,CAAC,yBAAyB,CAAC,aAAa,IAAI,EAAE,CAAC;oBACnE,CAAC,CAAC,aAAa,CAAC;gBACjB,MAAM,iBAAiB,GAAG,YAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC1F,MAAM,mBAAmB,GACxB,iBAAiB,EAAE,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,KAAK,iBAAiB,CAAC,GAAG,CAAC;gBAC7F,MAAM,gBAAgB,GAAG,mBAAmB;oBAC3C,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBAC9E,8FAA8F;gBAC9F,2FAA2F;gBAC3F,qFAAqF;gBACrF,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,CAAC,mBAAmB,IAAI,CAAC,UAAU,EAAE,CAAC;oBACjF,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChG,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;gBACzE,6FAA6F;gBAC7F,MAAM,cAAc,GACnB,aAAa,EAAE,cAAc;oBAC7B,CAAC,iBAAiB,KAAK,MAAM;wBAC5B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,iBAAiB;4BACnB,CAAC,CAAC,wBAAwB,CAAC,YAAY,CAAC;4BACxC,CAAC,CAAC,iBAAiB,KAAK,MAAM;gCAC7B,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,OAAO,CAAC,CAAC;gBACf,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,SAAS,EAAE;oBACpE,GAAG,aAAa;oBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG;oBACH,cAAc;oBACd,SAAS;oBACT,yBAAyB;oBACzB,gBAAgB;oBAChB,mGAAmG;oBACnG,QAAQ,EAAE,iBAAiB,CAAC,eAAe,CAAC;oBAC5C,UAAU,EAAE,aAAa,EAAE,UAAU,IAAI,qBAAqB,CAAC,UAAU;oBACzE,eAAe,EAAE,aAAa,EAAE,eAAe,IAAI,qBAAqB,CAAC,eAAe;oBACxF,OAAO,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBACH,MAAM,eAAe,GACpB,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,CAAC,mBAAmB,IAAI,iBAAiB,EAAE,OAAO,KAAK,SAAS,CAAC;gBAC1G,MAAM,cAAc,GAAoC;oBACvD,GAAG,sBAAsB;oBACzB,qBAAqB;oBACrB,mBAAmB,EAAE;wBACpB,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,KAAK,IAAI,EAAE;4BACrB,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;4BAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;wBACnE,CAAC;wBACD,YAAY,EAAE,eAAe;4BAC5B,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAC3C,mBAAmB,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;4BAC7D,CAAC,CAAC,SAAS;qBACZ;iBACD,CAAC;gBACF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC;YAC7E,CAAC,CAAC;YACF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7F,IAAI,aAAa,EAAE,SAAS,KAAK,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAoC;oBACpD,GAAG,sBAAsB;oBACzB,mBAAmB,EAAE;wBACpB,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,cAAc,CAAC,mBAAmB,EAAE,SAAS;qBACxD;iBACD,CAAC;gBACF,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;oBAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;oBAClC,OAAO,CACN,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO;wBACjC,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC;wBACtC,CAAE,OAAkD,CAAC,uBAAuB;wBAC5E,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,QAAQ;wBACpC,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;wBACvB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CACzE,CAAC;gBACH,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,0FAA0F;YAC1F,uFAAuF;YACvF,mBAAmB;YACnB,OAAO,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACzE,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACnC,MAAM,cAAc,GAAG,wBAAwB,CAAC;YAChD,MAAM,oBAAoB,GAAG,cAAc;gBAC1C,CAAC,CAAC,oCAAoC,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;gBACtE,CAAC,CAAC,OAAO,CAAC;YACX,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;YAC1C,IAAI,YAAqB,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBACrD,YAAY,GAAG,oBAAoB,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACP,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;gBACtF,YAAY,GAAG,cAAc;oBAC5B,CAAC,CAAC,oCAAoC,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC;oBAC/E,CAAC,CAAC,gBAAgB,CAAC;YACrB,CAAC;YACD,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC7E,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC;QACzB,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBACrD,OAAO;YACR,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,yBAAyB;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aACzB,CAAC,CAAC;QACJ,CAAC;QACD,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE;QACxC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3E,OAAO,gCAAgC,CAAC,WAAW,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;QAC/C,SAAS,EAAE,eAAe,CAAC,YAAY,EAAE;QACzC,eAAe,EAAE,eAAe,CAAC,kBAAkB,EAAE;QACrD,eAAe,EAAE,eAAe,CAAC,wBAAwB,EAAE,CAAC,eAAe;KAC3E,CAAC,CAAC;IACH,0GAA0G;IAC1G,yBAAyB,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE9D,kFAAkF;IAClF,IAAI,mBAAmB,EAAE,CAAC;QACzB,IAAI,kBAAkB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,MAAM,cAAc,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAC/D,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,cAAc,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,kCAAkC,EAAE,CAAC;IAC3E,IAAI,OAAqB,CAAC;IAC1B,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC;QACJ,OAAO,GAAG,IAAI,YAAY,CAAC;YAC1B,KAAK;YACL,cAAc;YACd,eAAe;YACf,GAAG;YACH,eAAe,EAAE,OAAO,CAAC,OAAO;YAChC,eAAe,EAAE,QAAQ;YACzB,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9B,0BAA0B,CACzB;gBACC,GAAG;gBACH,QAAQ;gBACR,YAAY;gBACZ,eAAe;gBACf,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,eAAe,CAAC,iBAAiB,EAAE;gBAC7E,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,aAAa,EAAE,kBAAkB;gBACjC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE;gBACjE,sBAAsB,EAAE,qBAAqB;gBAC7C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;aAC5C,EACD,KAAK,EACL,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C;YACF,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,eAAe,CAAC,iBAAiB,EAAE;YAC7E,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,cAAc;YACd,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY;YACZ,WAAW;YACX,sBAAsB;YACtB,gBAAgB,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAClG,oBAAoB,EAAE,aAAa;YACnC,gBAAgB;YAChB,iBAAiB,EAAE,OAAO,CAAC,aAAa;YACxC,kBAAkB;YAClB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;YAClD,cAAc;YACd,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;YACpD,0BAA0B,EAAE,OAAO,CAAC,uBAAuB;SAC3D,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,+FAA+F;QAC/F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,QAAQ,CAAC,MAAM;YAClB,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,0DAA0D,CAAC,CAAC;QAC5G,MAAM,KAAK,CAAC;IACb,CAAC;IACD,uFAAuF;IACvF,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;IAChD,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU;QAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACtF,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,wBAAwB,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACzF,uBAAuB,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAChE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACvC,OAAkD,CAAC,MAAM,CAAC;gBAC1D,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,cAAc;aACtB,CAAC;YACF,gBAAgB,CAAC,MAAM,EAAE;SACzB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzG,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,CAAC;YACzC,MAAM,IAAI,cAAc,CACvB,MAAM,EACN,4BAA4B,CAAC,uDAAuD,EAAE,MAAM,CAAC,CAC7F,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACvB,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACnD,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;IAC/B,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACtD,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;IACjC,CAAC;IACD,IAAI,CAAC;QACJ,gFAAgF;QAChF,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,QAAQ,CAAC,MAAM;YAClB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,EAAE;gBACxF,IAAI,EAAE,gBAAgB;aACtB,CAAC,CAAC;QACJ,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;gBACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChD,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YACH,IAAI,OAAO;gBACV,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;oBAC/F,IAAI,EAAE,oBAAoB;iBAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;AACF,CAAC","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { getOpenCodeSessionHeaders } from \"@bastani/pi-ai\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { markRuntimeStreamFunction } from \"./agent-session-models.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { getClientIdentity } from \"./client-identity.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport { startupCleanupFailureMessage } from \"./extension-startup-failure.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { currentResourceAdmission } from \"./resource-admission-scope.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\townedSessionManagerStores,\n\townedSessionPermits,\n\townedSessionStores,\n\tsessionGenerationClosing,\n\tsessionLifetime,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { resolveSessionStore } from \"./session-storage.js\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { applyToolModifiers, getToolListError, isToolModifier } from \"./settings-merge.js\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { validateProcessStorage } from \"./storage/process-selection.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { createToolNameMatcher } from \"./tool-selection.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.js\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport { withResourceAdmission } from \"./resource-admission-scope.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type {\n\tAtomicBuiltin,\n\tCreateAgentSessionOptions,\n\tCreateAgentSessionResult,\n\tResourceAdmission,\n\tResourceAdmissionRequest,\n\tResourcePermit,\n\tResourceProcessIdentity,\n} from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true, persistInitialState);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\tconst acquisition: { store?: SessionStore; release?: () => Promise<void> } = {\n\t\t\t\t\tstore: options.sessionManager ? ownedSessionManagerStores.get(options.sessionManager) : undefined,\n\t\t\t\t};\n\t\t\t\tif (options.sessionManager) ownedSessionManagerStores.delete(options.sessionManager);\n\t\t\t\tconst admission = options.resourceAdmission ?? currentResourceAdmission();\n\t\t\t\ttry {\n\t\t\t\t\tacquisition.release = await admission?.acquire(\n\t\t\t\t\t\t\"session\",\n\t\t\t\t\t\toptions.resourceAdmissionSignal,\n\t\t\t\t\t\toptions.resourceAdmissionDelegated ? { delegated: true } : undefined,\n\t\t\t\t\t);\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\textensionBindings: options.extensionBindings ?? context.bindings,\n\t\t\t\t\t\t\tresourceAdmission: admission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t\tpersistInitialState,\n\t\t\t\t\t\tacquisition,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failures = await rollbackFactoryAcquisitions();\n\t\t\t\t\tif (acquisition.store) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait acquisition.store.close();\n\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\tfailures.push(cause);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!failures.length) await acquisition.release?.();\n\t\t\t\t\tthrow factoryRollbackError(error, failures);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState: boolean,\n\tacquisition: { store?: SessionStore; release?: () => Promise<void> },\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tvalidateProcessStorage(agentDir);\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tlet sessionManager = options.sessionManager;\n\tif (!sessionManager) {\n\t\tconst store = await resolveSessionStore(cwd, {\n\t\t\tagentDir,\n\t\t\tsettings: settingsManager.getSettings(),\n\t\t\tsessionStore: options.sessionStore,\n\t\t});\n\t\tif (store !== options.sessionStore) acquisition.store = store;\n\t\tsessionManager = await SessionManager.create(store, cwd);\n\t}\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tawait sessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst toolListError = options.tools ? getToolListError(options.tools) : undefined;\n\tif (toolListError) throw new Error(`Invalid tools option: ${toolListError}`);\n\tconst defaultToolNames = options.noTools ? [] : (settingsManager.getDefaultTools() ?? getDefaultToolNames());\n\tconst toolModifiers = options.tools?.some(isToolModifier) ? options.tools : undefined;\n\tconst selectedToolNames = toolModifiers ? applyToolModifiers(defaultToolNames, toolModifiers) : options.tools;\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\"\n\t\t\t? []\n\t\t\t: toolModifiers\n\t\t\t\t? undefined\n\t\t\t\t: options.tools === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst isExcludedTool = options.excludedTools ? createToolNameMatcher(options.excludedTools) : undefined;\n\tconst initialActiveToolNames = (options.noTools === \"all\" ? [] : (selectedToolNames ?? defaultToolNames)).filter(\n\t\t(name) => !isExcludedTool?.(name),\n\t);\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\textension?.aliasOf === undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tconst prepare = async () => {\n\t\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\t\tenv: streamOptions?.env,\n\t\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\t});\n\t\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst auth = {\n\t\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\t\tenv: authResult?.env,\n\t\t\t\t};\n\t\t\t\tconst requestModel =\n\t\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl\n\t\t\t\t\t\t? { ...model, baseUrl: auth.baseUrl }\n\t\t\t\t\t\t: model;\n\t\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\t\t// The OpenCode session header joins here, not in `ModelRuntimeStreaming`, so `before_provider_headers`\n\t\t\t\t// handlers see it and can change or remove it.\n\t\t\t\tconst requestHeaders = mergeHeaders(\n\t\t\t\t\tmergeHeaders(getOpenCodeSessionHeaders(requestModel, streamOptions?.sessionId), auth.headers),\n\t\t\t\t\tstreamOptions?.headers,\n\t\t\t\t);\n\t\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t\t: mergedHeaders;\n\t\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\t\tconst usesExtensionStream =\n\t\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t\t? assembledHeaders\n\t\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\t\tconst cacheRetention =\n\t\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t\t? \"none\"\n\t\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t\t: \"short\");\n\t\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t\t...streamOptions,\n\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\tenv,\n\t\t\t\t\tcacheRetention,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\t\tstreamDeadlineMs,\n\t\t\t\t\t// Replaces the agent loop's default identity; read per request so telemetry changes apply at once.\n\t\t\t\t\tidentity: getClientIdentity(settingsManager),\n\t\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\t\theaders: transportHeaders,\n\t\t\t\t});\n\t\t\t\tconst nativeFastRoute =\n\t\t\t\t\tfastRoute?.serviceTier !== undefined && !usesExtensionStream && extensionProvider?.aliasOf === undefined;\n\t\t\t\tconst requestOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tonProviderStreamEvent,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: async () => {\n\t\t\t\t\t\t\tconst next = await prepare();\n\t\t\t\t\t\t\treturn { model: next.requestModel, options: next.requestOptions };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstreamSimple: nativeFastRoute\n\t\t\t\t\t\t\t? (routeModel, routeContext, routeOptions) =>\n\t\t\t\t\t\t\t\t\tstreamWithFastRoute(routeModel, routeContext, routeOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn { authResult, requestModel, fastRouteStreamOptions, requestOptions };\n\t\t\t};\n\t\t\tconst { authResult, requestModel, fastRouteStreamOptions, requestOptions } = await prepare();\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tconst warmOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: requestOptions.preparedRequestAuth?.reprepare,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: warmOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, requestOptions);\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\t// This stream resolves auth through modelRuntime, so summaries must not pre-resolve it (upstream #11520).\n\tmarkRuntimeStreamFunction(agent.streamFunction, modelRuntime);\n\n\t// The isolated host mirrors child-owned storage without writing startup metadata.\n\tif (persistInitialState) {\n\t\tif (hasExistingSession) {\n\t\t\tif (!hasThinkingEntry) {\n\t\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t\t}\n\t\t} else {\n\t\t\tif (model) {\n\t\t\t\tawait sessionManager.appendModelChange(model.provider, model.id);\n\t\t\t}\n\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tworkflowJournal: options.journal,\n\t\t\tstorageAgentDir: agentDir,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t\tresourceAdmission: options.resourceAdmission,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t\tsession.getAllTools().map((tool) => tool.name),\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: (options.tools === undefined || toolModifiers !== undefined) && !options.noTools,\n\t\t\tdefaultToolModifiers: toolModifiers,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tresourceAdmission: options.resourceAdmission,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length) {\n\t\t\tconst errors = [error, ...cleanupErrors];\n\t\t\tthrow new AggregateError(\n\t\t\t\terrors,\n\t\t\t\tstartupCleanupFailureMessage(\"Extension startup failed and rollback reported errors\", errors),\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t});\n\tif (acquisition.store) {\n\t\townedSessionStores.set(session, acquisition.store);\n\t\tacquisition.store = undefined;\n\t}\n\tif (acquisition.release) {\n\t\townedSessionPermits.set(session, acquisition.release);\n\t\tacquisition.release = undefined;\n\t}\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { getOpenCodeSessionHeaders } from \"@bastani/pi-ai\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { markRuntimeStreamFunction } from \"./agent-session-models.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { getClientIdentity } from \"./client-identity.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport { startupCleanupFailureMessage } from \"./extension-startup-failure.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { currentResourceAdmission } from \"./resource-admission-scope.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\townedSessionManagerStores,\n\townedSessionPermits,\n\townedSessionStores,\n\tsessionGenerationClosing,\n\tsessionLifetime,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { resolveSessionStore } from \"./session-storage.js\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { applyToolModifiers, getToolListError, isToolModifier } from \"./settings-merge.js\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { validateProcessStorage } from \"./storage/process-selection.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { createToolNameMatcher } from \"./tool-selection.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.js\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport { withResourceAdmission } from \"./resource-admission-scope.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type {\n\tAtomicBuiltin,\n\tCreateAgentSessionOptions,\n\tCreateAgentSessionResult,\n\tResourceAdmission,\n\tResourceAdmissionRequest,\n\tResourcePermit,\n\tResourceProcessIdentity,\n} from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true, persistInitialState);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\tconst acquisition: { store?: SessionStore; release?: () => Promise<void> } = {\n\t\t\t\t\tstore: options.sessionManager ? ownedSessionManagerStores.get(options.sessionManager) : undefined,\n\t\t\t\t};\n\t\t\t\tif (options.sessionManager) ownedSessionManagerStores.delete(options.sessionManager);\n\t\t\t\tconst admission =\n\t\t\t\t\toptions.resourceAdmission === null\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: (options.resourceAdmission ?? currentResourceAdmission());\n\t\t\t\ttry {\n\t\t\t\t\tacquisition.release = await admission?.acquire(\n\t\t\t\t\t\t\"session\",\n\t\t\t\t\t\toptions.resourceAdmissionSignal,\n\t\t\t\t\t\toptions.resourceAdmissionDelegated ? { delegated: true } : undefined,\n\t\t\t\t\t);\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\textensionBindings: options.extensionBindings ?? context.bindings,\n\t\t\t\t\t\t\tresourceAdmission: admission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t\tpersistInitialState,\n\t\t\t\t\t\tacquisition,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failures = await rollbackFactoryAcquisitions();\n\t\t\t\t\tif (acquisition.store) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait acquisition.store.close();\n\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\tfailures.push(cause);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!failures.length) await acquisition.release?.();\n\t\t\t\t\tthrow factoryRollbackError(error, failures);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState: boolean,\n\tacquisition: { store?: SessionStore; release?: () => Promise<void> },\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tvalidateProcessStorage(agentDir);\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tlet sessionManager = options.sessionManager;\n\tif (!sessionManager) {\n\t\tconst store = await resolveSessionStore(cwd, {\n\t\t\tagentDir,\n\t\t\tsettings: settingsManager.getSettings(),\n\t\t\tsessionStore: options.sessionStore,\n\t\t});\n\t\tif (store !== options.sessionStore) acquisition.store = store;\n\t\tsessionManager = await SessionManager.create(store, cwd);\n\t}\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tawait sessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst toolListError = options.tools ? getToolListError(options.tools) : undefined;\n\tif (toolListError) throw new Error(`Invalid tools option: ${toolListError}`);\n\tconst defaultToolNames = options.noTools ? [] : (settingsManager.getDefaultTools() ?? getDefaultToolNames());\n\tconst toolModifiers = options.tools?.some(isToolModifier) ? options.tools : undefined;\n\tconst selectedToolNames = toolModifiers ? applyToolModifiers(defaultToolNames, toolModifiers) : options.tools;\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\"\n\t\t\t? []\n\t\t\t: toolModifiers\n\t\t\t\t? undefined\n\t\t\t\t: options.tools === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst isExcludedTool = options.excludedTools ? createToolNameMatcher(options.excludedTools) : undefined;\n\tconst initialActiveToolNames = (options.noTools === \"all\" ? [] : (selectedToolNames ?? defaultToolNames)).filter(\n\t\t(name) => !isExcludedTool?.(name),\n\t);\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\textension?.aliasOf === undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tconst prepare = async () => {\n\t\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\t\tenv: streamOptions?.env,\n\t\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\t});\n\t\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst auth = {\n\t\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\t\tenv: authResult?.env,\n\t\t\t\t};\n\t\t\t\tconst requestModel =\n\t\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl\n\t\t\t\t\t\t? { ...model, baseUrl: auth.baseUrl }\n\t\t\t\t\t\t: model;\n\t\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\t\t// The OpenCode session header joins here, not in `ModelRuntimeStreaming`, so `before_provider_headers`\n\t\t\t\t// handlers see it and can change or remove it.\n\t\t\t\tconst requestHeaders = mergeHeaders(\n\t\t\t\t\tmergeHeaders(getOpenCodeSessionHeaders(requestModel, streamOptions?.sessionId), auth.headers),\n\t\t\t\t\tstreamOptions?.headers,\n\t\t\t\t);\n\t\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t\t: mergedHeaders;\n\t\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\t\tconst usesExtensionStream =\n\t\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t\t? assembledHeaders\n\t\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\t\tconst cacheRetention =\n\t\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t\t? \"none\"\n\t\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t\t: \"short\");\n\t\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t\t...streamOptions,\n\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\tenv,\n\t\t\t\t\tcacheRetention,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\t\tstreamDeadlineMs,\n\t\t\t\t\t// Replaces the agent loop's default identity; read per request so telemetry changes apply at once.\n\t\t\t\t\tidentity: getClientIdentity(settingsManager),\n\t\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\t\theaders: transportHeaders,\n\t\t\t\t});\n\t\t\t\tconst nativeFastRoute =\n\t\t\t\t\tfastRoute?.serviceTier !== undefined && !usesExtensionStream && extensionProvider?.aliasOf === undefined;\n\t\t\t\tconst requestOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tonProviderStreamEvent,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: async () => {\n\t\t\t\t\t\t\tconst next = await prepare();\n\t\t\t\t\t\t\treturn { model: next.requestModel, options: next.requestOptions };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstreamSimple: nativeFastRoute\n\t\t\t\t\t\t\t? (routeModel, routeContext, routeOptions) =>\n\t\t\t\t\t\t\t\t\tstreamWithFastRoute(routeModel, routeContext, routeOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn { authResult, requestModel, fastRouteStreamOptions, requestOptions };\n\t\t\t};\n\t\t\tconst { authResult, requestModel, fastRouteStreamOptions, requestOptions } = await prepare();\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tconst warmOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: requestOptions.preparedRequestAuth?.reprepare,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: warmOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, requestOptions);\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\t// This stream resolves auth through modelRuntime, so summaries must not pre-resolve it (upstream #11520).\n\tmarkRuntimeStreamFunction(agent.streamFunction, modelRuntime);\n\n\t// The isolated host mirrors child-owned storage without writing startup metadata.\n\tif (persistInitialState) {\n\t\tif (hasExistingSession) {\n\t\t\tif (!hasThinkingEntry) {\n\t\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t\t}\n\t\t} else {\n\t\t\tif (model) {\n\t\t\t\tawait sessionManager.appendModelChange(model.provider, model.id);\n\t\t\t}\n\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tworkflowJournal: options.journal,\n\t\t\tstorageAgentDir: agentDir,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t\tresourceAdmission: options.resourceAdmission,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t\tsession.getAllTools().map((tool) => tool.name),\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: (options.tools === undefined || toolModifiers !== undefined) && !options.noTools,\n\t\t\tdefaultToolModifiers: toolModifiers,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tresourceAdmission: options.resourceAdmission ?? undefined,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length) {\n\t\t\tconst errors = [error, ...cleanupErrors];\n\t\t\tthrow new AggregateError(\n\t\t\t\terrors,\n\t\t\t\tstartupCleanupFailureMessage(\"Extension startup failed and rollback reported errors\", errors),\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t});\n\tif (acquisition.store) {\n\t\townedSessionStores.set(session, acquisition.store);\n\t\tacquisition.store = undefined;\n\t}\n\tif (acquisition.release) {\n\t\townedSessionPermits.set(session, acquisition.release);\n\t\tacquisition.release = undefined;\n\t}\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
|
package/docs/sdk.md
CHANGED
|
@@ -193,7 +193,9 @@ On Unix, Atomic calls `permit.bindProcess({ kind: "unix-process-group", id })` o
|
|
|
193
193
|
|
|
194
194
|
A parent session keeps its permit while it waits for a child, so a child that queued for a permit could wait on its own parent. Atomic marks child sessions (subagents and other sessions built from `getChildSessionOptions()`) with `request.delegated`. For those requests, grant a permit immediately or throw. Never queue them or exceed the cap. A cap of one, or a cap filled by parents, therefore rejects delegation with your error instead of stalling. Set the cap above the number of parents that can be live at once if you need children to run.
|
|
195
195
|
|
|
196
|
-
Use `withResourceAdmission(resourceAdmission, async () => { ... })` to apply a service to SDK sessions and managed commands launched within an asynchronous operation, including commands using an existing task owner. An explicit session service wins for that session; commands in the operation use its scoped service.
|
|
196
|
+
Use `withResourceAdmission(resourceAdmission, async () => { ... })` to apply a service to SDK sessions and managed commands launched within an asynchronous operation, including commands using an existing task owner. An explicit session service wins for that session; commands in the operation use its scoped service. Pass `resourceAdmission: null` for a session that takes no permit even inside such a scope.
|
|
197
|
+
|
|
198
|
+
A child session built from `getChildSessionOptions()` uses only its parent's service, or none when its parent holds none: a scope the parent's turn happens to run in never applies to the parent's children.
|
|
197
199
|
|
|
198
200
|
### Session storage
|
|
199
201
|
|
|
@@ -122,6 +122,8 @@ A fallback may send the same prompt and context to a different provider. Choose
|
|
|
122
122
|
|
|
123
123
|
Set the reasoning effort for each candidate with a `model_name:thinking_effort` suffix on `model` and every `fallbackModels` entry. Valid efforts are `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`, as in `atomic --model sonnet:high`. `xhigh` and `max` require support from the selected model.
|
|
124
124
|
|
|
125
|
+
A child launched with an effort, on `model` or a `subagent` call's `model` such as `openai/gpt-5.5:xhigh`, runs at exactly that effort on a model that supports it. A model that does not support it runs at its own default level instead: its `modelThinkingLevels` entry in settings, else `defaultThinkingLevel`. Every model the child can fall back to follows the same rule, with its own suffix when its entry has one and the launch's effort when it has none, so a fallback never silently runs at another level.
|
|
126
|
+
|
|
125
127
|
```markdown
|
|
126
128
|
---
|
|
127
129
|
name: deep-reviewer
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.58
|
|
3
|
+
"version": "0.9.58",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bastani/atomic",
|
|
9
|
-
"version": "0.9.58
|
|
9
|
+
"version": "0.9.58",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@bastani/atomic-natives": "0.9.58
|
|
13
|
-
"@bastani/pi-ai": "0.9.58
|
|
12
|
+
"@bastani/atomic-natives": "0.9.58",
|
|
13
|
+
"@bastani/pi-ai": "0.9.58",
|
|
14
14
|
"@earendil-works/pi-agent-core": "1.4.0",
|
|
15
15
|
"@earendil-works/pi-codemode": "1.4.0",
|
|
16
16
|
"@earendil-works/pi-tui": "1.4.0",
|
|
@@ -427,18 +427,18 @@
|
|
|
427
427
|
}
|
|
428
428
|
},
|
|
429
429
|
"node_modules/@bastani/atomic-natives": {
|
|
430
|
-
"version": "0.9.58
|
|
431
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.58
|
|
430
|
+
"version": "0.9.58",
|
|
431
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.58.tgz",
|
|
432
432
|
"license": "MIT",
|
|
433
433
|
"optionalDependencies": {
|
|
434
|
-
"@bastani/atomic-natives-darwin-arm64": "0.9.58
|
|
435
|
-
"@bastani/atomic-natives-darwin-x64": "0.9.58
|
|
436
|
-
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.58
|
|
437
|
-
"@bastani/atomic-natives-linux-arm64-musl": "0.9.58
|
|
438
|
-
"@bastani/atomic-natives-linux-x64-gnu": "0.9.58
|
|
439
|
-
"@bastani/atomic-natives-linux-x64-musl": "0.9.58
|
|
440
|
-
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.58
|
|
441
|
-
"@bastani/atomic-natives-win32-x64-msvc": "0.9.58
|
|
434
|
+
"@bastani/atomic-natives-darwin-arm64": "0.9.58",
|
|
435
|
+
"@bastani/atomic-natives-darwin-x64": "0.9.58",
|
|
436
|
+
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.58",
|
|
437
|
+
"@bastani/atomic-natives-linux-arm64-musl": "0.9.58",
|
|
438
|
+
"@bastani/atomic-natives-linux-x64-gnu": "0.9.58",
|
|
439
|
+
"@bastani/atomic-natives-linux-x64-musl": "0.9.58",
|
|
440
|
+
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.58",
|
|
441
|
+
"@bastani/atomic-natives-win32-x64-msvc": "0.9.58"
|
|
442
442
|
},
|
|
443
443
|
"engines": {
|
|
444
444
|
"bun": ">=1.4.2",
|
|
@@ -446,8 +446,8 @@
|
|
|
446
446
|
}
|
|
447
447
|
},
|
|
448
448
|
"node_modules/@bastani/atomic-natives-darwin-arm64": {
|
|
449
|
-
"version": "0.9.58
|
|
450
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.58
|
|
449
|
+
"version": "0.9.58",
|
|
450
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.58.tgz",
|
|
451
451
|
"license": "MIT",
|
|
452
452
|
"os": [
|
|
453
453
|
"darwin"
|
|
@@ -458,8 +458,8 @@
|
|
|
458
458
|
"optional": true
|
|
459
459
|
},
|
|
460
460
|
"node_modules/@bastani/atomic-natives-darwin-x64": {
|
|
461
|
-
"version": "0.9.58
|
|
462
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.58
|
|
461
|
+
"version": "0.9.58",
|
|
462
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.58.tgz",
|
|
463
463
|
"license": "MIT",
|
|
464
464
|
"os": [
|
|
465
465
|
"darwin"
|
|
@@ -470,8 +470,8 @@
|
|
|
470
470
|
"optional": true
|
|
471
471
|
},
|
|
472
472
|
"node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
|
|
473
|
-
"version": "0.9.58
|
|
474
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.58
|
|
473
|
+
"version": "0.9.58",
|
|
474
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.58.tgz",
|
|
475
475
|
"license": "MIT",
|
|
476
476
|
"os": [
|
|
477
477
|
"linux"
|
|
@@ -485,8 +485,8 @@
|
|
|
485
485
|
"optional": true
|
|
486
486
|
},
|
|
487
487
|
"node_modules/@bastani/atomic-natives-linux-arm64-musl": {
|
|
488
|
-
"version": "0.9.58
|
|
489
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.58
|
|
488
|
+
"version": "0.9.58",
|
|
489
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.58.tgz",
|
|
490
490
|
"license": "MIT",
|
|
491
491
|
"os": [
|
|
492
492
|
"linux"
|
|
@@ -500,8 +500,8 @@
|
|
|
500
500
|
"optional": true
|
|
501
501
|
},
|
|
502
502
|
"node_modules/@bastani/atomic-natives-linux-x64-gnu": {
|
|
503
|
-
"version": "0.9.58
|
|
504
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.58
|
|
503
|
+
"version": "0.9.58",
|
|
504
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.58.tgz",
|
|
505
505
|
"license": "MIT",
|
|
506
506
|
"os": [
|
|
507
507
|
"linux"
|
|
@@ -515,8 +515,8 @@
|
|
|
515
515
|
"optional": true
|
|
516
516
|
},
|
|
517
517
|
"node_modules/@bastani/atomic-natives-linux-x64-musl": {
|
|
518
|
-
"version": "0.9.58
|
|
519
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.58
|
|
518
|
+
"version": "0.9.58",
|
|
519
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.58.tgz",
|
|
520
520
|
"license": "MIT",
|
|
521
521
|
"os": [
|
|
522
522
|
"linux"
|
|
@@ -530,8 +530,8 @@
|
|
|
530
530
|
"optional": true
|
|
531
531
|
},
|
|
532
532
|
"node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
|
|
533
|
-
"version": "0.9.58
|
|
534
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.58
|
|
533
|
+
"version": "0.9.58",
|
|
534
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.58.tgz",
|
|
535
535
|
"license": "MIT",
|
|
536
536
|
"os": [
|
|
537
537
|
"win32"
|
|
@@ -542,8 +542,8 @@
|
|
|
542
542
|
"optional": true
|
|
543
543
|
},
|
|
544
544
|
"node_modules/@bastani/atomic-natives-win32-x64-msvc": {
|
|
545
|
-
"version": "0.9.58
|
|
546
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.58
|
|
545
|
+
"version": "0.9.58",
|
|
546
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.58.tgz",
|
|
547
547
|
"license": "MIT",
|
|
548
548
|
"os": [
|
|
549
549
|
"win32"
|
|
@@ -554,8 +554,8 @@
|
|
|
554
554
|
"optional": true
|
|
555
555
|
},
|
|
556
556
|
"node_modules/@bastani/pi-ai": {
|
|
557
|
-
"version": "0.9.58
|
|
558
|
-
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.58
|
|
557
|
+
"version": "0.9.58",
|
|
558
|
+
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.58.tgz",
|
|
559
559
|
"license": "MIT",
|
|
560
560
|
"dependencies": {
|
|
561
561
|
"@anthropic-ai/sdk": "0.129.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.58
|
|
3
|
+
"version": "0.9.58",
|
|
4
4
|
"description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"atomicConfig": {
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@bastani/atomic-natives": "0.9.58
|
|
93
|
-
"@bastani/pi-ai": "0.9.58
|
|
92
|
+
"@bastani/atomic-natives": "0.9.58",
|
|
93
|
+
"@bastani/pi-ai": "0.9.58",
|
|
94
94
|
"@earendil-works/pi-agent-core": "1.4.0",
|
|
95
95
|
"@earendil-works/pi-codemode": "1.4.0",
|
|
96
96
|
"@earendil-works/pi-tui": "1.4.0",
|