@bastani/atomic 0.9.16-alpha.9 → 0.9.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +120 -0
- package/README.md +4 -4
- package/dist/builtin/intercom/CHANGELOG.md +42 -0
- package/dist/builtin/intercom/README.md +18 -17
- package/dist/builtin/intercom/broker/broker.ts +43 -18
- package/dist/builtin/intercom/broker/client.ts +138 -7
- package/dist/builtin/intercom/broker/group-isolation.ts +3 -3
- package/dist/builtin/intercom/broker/group-membership.ts +55 -0
- package/dist/builtin/intercom/broker/presence-handler.ts +62 -50
- package/dist/builtin/intercom/broker/send-handler.ts +2 -3
- package/dist/builtin/intercom/group.ts +40 -0
- package/dist/builtin/intercom/index.bundle.mjs +490 -183
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/skills/intercom/SKILL.md +16 -10
- package/dist/builtin/intercom/types.ts +24 -2
- package/dist/builtin/mcp/index.bundle.mjs +202 -52
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/CHANGELOG.md +51 -0
- package/dist/builtin/subagents/README.md +3 -3
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +422 -140
- package/dist/builtin/web-access/index.bundle.mjs +202 -52
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +70 -0
- package/dist/builtin/workflows/README.md +2 -2
- package/dist/builtin/workflows/builtin/{chunk-h5e65g7g.js → chunk-3y1hmzw6.js} +36 -6
- package/dist/builtin/workflows/builtin/{chunk-nqr34qp3.js → chunk-6rbajjf5.js} +7 -1
- package/dist/builtin/workflows/builtin/{chunk-qe6bfpbd.js → chunk-bz1c9732.js} +15 -3
- package/dist/builtin/workflows/builtin/{chunk-8v8wmb7z.js → chunk-dattsgxg.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-17zk6ffd.js → chunk-gdx0avpx.js} +355 -67
- package/dist/builtin/workflows/builtin/{chunk-rbnj9621.js → chunk-w9c7rkrk.js} +1 -1
- package/dist/builtin/workflows/builtin/goal.js +3 -3
- package/dist/builtin/workflows/builtin/index.js +5 -5
- package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
- package/dist/builtin/workflows/builtin/ralph.js +3 -3
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +531 -143
- package/dist/builtin/workflows/src/index.js +212 -72
- package/dist/cli/args.js +6 -6
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +2 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/session-picker.d.ts +2 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +3 -2
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +2 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +1 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +3 -6
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +3 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +6 -3
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +7 -5
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +37 -23
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +9 -2
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/builtin-packages.d.ts +4 -0
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +22 -1
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/callback-activity.d.ts.map +1 -1
- package/dist/core/callback-activity.js +6 -3
- package/dist/core/callback-activity.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts +1 -0
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +11 -1
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner-registries.d.ts.map +1 -1
- package/dist/core/extensions/runner-registries.js +9 -4
- package/dist/core/extensions/runner-registries.js.map +1 -1
- package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
- package/dist/core/extensions/runner-shortcuts.js +1 -0
- package/dist/core/extensions/runner-shortcuts.js.map +1 -1
- package/dist/core/keybindings.d.ts +5 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +4 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mandatory-resource-loader.d.ts +6 -0
- package/dist/core/mandatory-resource-loader.d.ts.map +1 -0
- package/dist/core/mandatory-resource-loader.js +94 -0
- package/dist/core/mandatory-resource-loader.js.map +1 -0
- package/dist/core/mandatory-runtime-tools.d.ts +10 -0
- package/dist/core/mandatory-runtime-tools.d.ts.map +1 -0
- package/dist/core/mandatory-runtime-tools.js +31 -0
- package/dist/core/mandatory-runtime-tools.js.map +1 -0
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +24 -13
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +4 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +22 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +4 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/main-session.d.ts.map +1 -1
- package/dist/main-session.js +3 -2
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +2 -2
- package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +7 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +2 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +1 -0
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +3 -0
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +15 -1
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +6 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +6 -1
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +3 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +7 -12
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +1 -0
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +16 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +2 -0
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/docs/compaction.md +1 -1
- package/docs/environment-variables.md +2 -0
- package/docs/extensions.md +1 -1
- package/docs/intercom.md +29 -24
- package/docs/keybindings.md +5 -2
- package/docs/packages.md +1 -1
- package/docs/providers.md +2 -2
- package/docs/sdk.md +9 -7
- package/docs/settings.md +9 -3
- package/docs/subagents.md +2 -2
- package/docs/usage.md +7 -6
- package/docs/workflows.md +11 -7
- package/npm-shrinkwrap.json +59 -77
- package/package.json +7 -7
|
@@ -1126,15 +1126,15 @@ ${chalk.bold("Options:")}
|
|
|
1126
1126
|
--name, -n <name> Set session display name
|
|
1127
1127
|
--models <patterns> Comma-separated model patterns for ctrl+p cycling
|
|
1128
1128
|
Supports globs (anthropic/*, *sonnet*) and fuzzy matching
|
|
1129
|
-
--no-tools, -nt Disable
|
|
1129
|
+
--no-tools, -nt Disable every tool except mandatory ordinary intercom
|
|
1130
1130
|
--no-builtin-tools, -nbt Disable built-in tools by default but keep extension/custom tools enabled
|
|
1131
|
-
--tools, -t <tools> Comma-separated allowlist of tool names
|
|
1132
|
-
|
|
1133
|
-
--exclude-tools, -xt <tools> Comma-separated denylist of tool names
|
|
1134
|
-
|
|
1131
|
+
--tools, -t <tools> Comma-separated allowlist of non-mandatory tool names
|
|
1132
|
+
Mandatory ordinary intercom remains available
|
|
1133
|
+
--exclude-tools, -xt <tools> Comma-separated denylist of non-mandatory tool names
|
|
1134
|
+
Mandatory ordinary intercom cannot be excluded
|
|
1135
1135
|
--thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max
|
|
1136
1136
|
--extension, -e <path> Load an extension file (can be used multiple times)
|
|
1137
|
-
--no-extensions, -ne Disable extension discovery
|
|
1137
|
+
--no-extensions, -ne Disable optional extension discovery; mandatory bundled Intercom remains loaded
|
|
1138
1138
|
--skill <path> Load a skill file or directory (can be used multiple times)
|
|
1139
1139
|
--no-skills, -ns Disable skills discovery and loading
|
|
1140
1140
|
--prompt-template <path> Load a prompt template file or directory (can be used multiple times)
|
|
@@ -10019,11 +10019,13 @@ function runSynchronousCallback(descriptor, callback) {
|
|
|
10019
10019
|
}
|
|
10020
10020
|
}
|
|
10021
10021
|
async function runCallback(descriptor, callback) {
|
|
10022
|
+
if (!reporter)
|
|
10023
|
+
return callback();
|
|
10024
|
+
await yieldToEventLoop();
|
|
10022
10025
|
const active = beginActivity(descriptor);
|
|
10023
10026
|
if (!active)
|
|
10024
10027
|
return callback();
|
|
10025
10028
|
try {
|
|
10026
|
-
await yieldToEventLoop();
|
|
10027
10029
|
return await callback();
|
|
10028
10030
|
} finally {
|
|
10029
10031
|
active.reporter.finished(active.activity.id);
|
|
@@ -13013,12 +13015,45 @@ var init_runner_events = __esm(() => {
|
|
|
13013
13015
|
init_callback_activity();
|
|
13014
13016
|
});
|
|
13015
13017
|
|
|
13018
|
+
// src/core/mandatory-runtime-tools.ts
|
|
13019
|
+
function markTrustedMandatoryRuntimeExtension(extension) {
|
|
13020
|
+
extension.sourceInfo = { ...extension.sourceInfo, configurationOrigin: "bundled" };
|
|
13021
|
+
for (const registration of extension.tools.values()) {
|
|
13022
|
+
registration.sourceInfo = extension.sourceInfo;
|
|
13023
|
+
if (MANDATORY_TOOL_NAMES.has(registration.definition.name)) {
|
|
13024
|
+
TRUSTED_MANDATORY_DEFINITIONS.add(registration.definition);
|
|
13025
|
+
}
|
|
13026
|
+
}
|
|
13027
|
+
for (const command of extension.commands.values())
|
|
13028
|
+
command.sourceInfo = extension.sourceInfo;
|
|
13029
|
+
}
|
|
13030
|
+
function isTrustedMandatoryRuntimeTool(registration) {
|
|
13031
|
+
return MANDATORY_TOOL_NAMES.has(registration.definition.name) && TRUSTED_MANDATORY_DEFINITIONS.has(registration.definition);
|
|
13032
|
+
}
|
|
13033
|
+
function isMandatoryRuntimeTool(name) {
|
|
13034
|
+
return MANDATORY_TOOL_NAMES.has(name);
|
|
13035
|
+
}
|
|
13036
|
+
function appendRegisteredMandatoryTools(tools, registry) {
|
|
13037
|
+
for (const name of MANDATORY_TOOL_NAMES) {
|
|
13038
|
+
const tool = registry.get(name);
|
|
13039
|
+
if (tool && !tools.some((candidate) => candidate.name === name))
|
|
13040
|
+
tools.push(tool);
|
|
13041
|
+
}
|
|
13042
|
+
return tools;
|
|
13043
|
+
}
|
|
13044
|
+
var MANDATORY_TOOL_NAMES, TRUSTED_MANDATORY_DEFINITIONS;
|
|
13045
|
+
var init_mandatory_runtime_tools = __esm(() => {
|
|
13046
|
+
MANDATORY_TOOL_NAMES = new Set(["intercom"]);
|
|
13047
|
+
TRUSTED_MANDATORY_DEFINITIONS = new WeakSet;
|
|
13048
|
+
});
|
|
13049
|
+
|
|
13016
13050
|
// src/core/extensions/runner-registries.ts
|
|
13017
13051
|
function collectRegisteredTools(extensions) {
|
|
13018
13052
|
const toolsByName = new Map;
|
|
13019
13053
|
for (const ext of extensions) {
|
|
13020
13054
|
for (const tool of ext.tools.values()) {
|
|
13021
|
-
|
|
13055
|
+
const existing = toolsByName.get(tool.definition.name);
|
|
13056
|
+
if (!existing || isMandatoryRuntimeTool(tool.definition.name) && isTrustedMandatoryRuntimeTool(tool)) {
|
|
13022
13057
|
toolsByName.set(tool.definition.name, tool);
|
|
13023
13058
|
}
|
|
13024
13059
|
}
|
|
@@ -13026,13 +13061,16 @@ function collectRegisteredTools(extensions) {
|
|
|
13026
13061
|
return Array.from(toolsByName.values());
|
|
13027
13062
|
}
|
|
13028
13063
|
function findToolDefinition(extensions, toolName) {
|
|
13064
|
+
let first;
|
|
13029
13065
|
for (const ext of extensions) {
|
|
13030
13066
|
const tool = ext.tools.get(toolName);
|
|
13031
|
-
if (tool)
|
|
13067
|
+
if (!tool)
|
|
13068
|
+
continue;
|
|
13069
|
+
first ??= tool;
|
|
13070
|
+
if (isMandatoryRuntimeTool(toolName) && isTrustedMandatoryRuntimeTool(tool))
|
|
13032
13071
|
return tool.definition;
|
|
13033
|
-
}
|
|
13034
13072
|
}
|
|
13035
|
-
return;
|
|
13073
|
+
return first?.definition;
|
|
13036
13074
|
}
|
|
13037
13075
|
function collectFlags(extensions) {
|
|
13038
13076
|
const allFlags = new Map;
|
|
@@ -13100,6 +13138,9 @@ function resolveRegisteredCommands(extensions) {
|
|
|
13100
13138
|
return { ...command, invocationName };
|
|
13101
13139
|
});
|
|
13102
13140
|
}
|
|
13141
|
+
var init_runner_registries = __esm(() => {
|
|
13142
|
+
init_mandatory_runtime_tools();
|
|
13143
|
+
});
|
|
13103
13144
|
|
|
13104
13145
|
// src/core/extensions/runner-shortcuts.ts
|
|
13105
13146
|
function resolveExtensionShortcuts(extensions, resolvedKeybindings, hasUI) {
|
|
@@ -13163,6 +13204,7 @@ var init_runner_shortcuts = __esm(() => {
|
|
|
13163
13204
|
"app.thinking.toggle",
|
|
13164
13205
|
"app.editor.external",
|
|
13165
13206
|
"app.message.followUp",
|
|
13207
|
+
"app.message.copy",
|
|
13166
13208
|
"tui.input.submit",
|
|
13167
13209
|
"tui.select.confirm",
|
|
13168
13210
|
"tui.select.cancel",
|
|
@@ -13654,6 +13696,7 @@ var init_runner = __esm(() => {
|
|
|
13654
13696
|
init_loader_runtime();
|
|
13655
13697
|
init_runner_context();
|
|
13656
13698
|
init_runner_events();
|
|
13699
|
+
init_runner_registries();
|
|
13657
13700
|
init_runner_shortcuts();
|
|
13658
13701
|
init_runner_ui();
|
|
13659
13702
|
init_stale_context();
|
|
@@ -15886,11 +15929,13 @@ async function _runAgentContinue() {
|
|
|
15886
15929
|
}
|
|
15887
15930
|
async function _continueQueuedAgentMessages() {
|
|
15888
15931
|
await this._agentEventQueue;
|
|
15889
|
-
while (!this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
|
|
15932
|
+
while (!this._stopAfterTurnBlockedContinuation && !this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
|
|
15890
15933
|
await this.agent.continue();
|
|
15891
15934
|
await this.waitForRetry();
|
|
15892
15935
|
await this._agentEventQueue;
|
|
15893
15936
|
}
|
|
15937
|
+
if (this._stopAfterTurnBlockedContinuation)
|
|
15938
|
+
return;
|
|
15894
15939
|
await answerAdmittedQueuedMessage(this);
|
|
15895
15940
|
}
|
|
15896
15941
|
async function answerAdmittedQueuedMessage(session) {
|
|
@@ -17598,14 +17643,13 @@ function getToolDefinition(name) {
|
|
|
17598
17643
|
}
|
|
17599
17644
|
function setActiveToolsByName(toolNames) {
|
|
17600
17645
|
const tools = [];
|
|
17601
|
-
const validToolNames = [];
|
|
17602
17646
|
for (const name of toolNames) {
|
|
17603
17647
|
const tool = this._toolRegistry.get(name);
|
|
17604
|
-
if (tool)
|
|
17648
|
+
if (tool)
|
|
17605
17649
|
tools.push(tool);
|
|
17606
|
-
validToolNames.push(name);
|
|
17607
|
-
}
|
|
17608
17650
|
}
|
|
17651
|
+
appendRegisteredMandatoryTools(tools, this._toolRegistry);
|
|
17652
|
+
const validToolNames = tools.map((tool) => tool.name);
|
|
17609
17653
|
this.agent.state.tools = tools;
|
|
17610
17654
|
this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
|
|
17611
17655
|
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
@@ -17662,7 +17706,7 @@ function _rebuildSystemPrompt(toolNames) {
|
|
|
17662
17706
|
customPrompt: loaderSystemPrompt,
|
|
17663
17707
|
appendSystemPrompt,
|
|
17664
17708
|
selectedTools: validToolNames,
|
|
17665
|
-
excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames) : undefined,
|
|
17709
|
+
excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames).filter((name) => !isMandatoryRuntimeTool(name)) : undefined,
|
|
17666
17710
|
toolSnippets,
|
|
17667
17711
|
promptGuidelines
|
|
17668
17712
|
};
|
|
@@ -17675,6 +17719,7 @@ function _refreshBaseSystemPromptFromActiveTools() {
|
|
|
17675
17719
|
}
|
|
17676
17720
|
var agentSessionStateMethods;
|
|
17677
17721
|
var init_agent_session_state = __esm(() => {
|
|
17722
|
+
init_mandatory_runtime_tools();
|
|
17678
17723
|
init_skill_catalog();
|
|
17679
17724
|
init_system_prompt();
|
|
17680
17725
|
agentSessionStateMethods = {
|
|
@@ -18702,6 +18747,17 @@ function _installAgentToolHooks() {
|
|
|
18702
18747
|
}
|
|
18703
18748
|
function _installAgentNextTurnRefresh() {
|
|
18704
18749
|
const previousPrepareNextTurnWithContext = this.agent.prepareNextTurnWithContext ?? (this.agent.prepareNextTurn ? async (_turn, signal) => await this.agent.prepareNextTurn?.(signal) : undefined);
|
|
18750
|
+
const previousShouldStopAfterTurn = this.agent.shouldStopAfterTurn;
|
|
18751
|
+
this.agent.shouldStopAfterTurn = async (turn, signal) => {
|
|
18752
|
+
const toolCallIds = turn.message.content.filter((part) => part.type === "toolCall").map((part) => part.id);
|
|
18753
|
+
const terminatingBatch = toolCallIds.length > 0 && toolCallIds.every((id) => this._terminatingToolCallIds.has(id));
|
|
18754
|
+
for (const id of toolCallIds)
|
|
18755
|
+
this._terminatingToolCallIds.delete(id);
|
|
18756
|
+
const shouldStop = await previousShouldStopAfterTurn?.(turn, signal) ?? false;
|
|
18757
|
+
this._stopAfterTurnBlockedContinuation = shouldStop;
|
|
18758
|
+
await settleFallbackAfterTurn(this, turn, terminatingBatch);
|
|
18759
|
+
return shouldStop;
|
|
18760
|
+
};
|
|
18705
18761
|
const previousTransformContext = this.agent.transformContext;
|
|
18706
18762
|
this.agent.transformContext = async (messages, signal) => {
|
|
18707
18763
|
const transformed = previousTransformContext ? await previousTransformContext(messages, signal) : messages;
|
|
@@ -18709,24 +18765,17 @@ function _installAgentNextTurnRefresh() {
|
|
|
18709
18765
|
assertToolPairingInvariant(guarded);
|
|
18710
18766
|
return guarded;
|
|
18711
18767
|
};
|
|
18712
|
-
|
|
18713
|
-
const
|
|
18714
|
-
const
|
|
18715
|
-
const
|
|
18716
|
-
const
|
|
18717
|
-
|
|
18718
|
-
this._terminatingToolCallIds.delete(id);
|
|
18719
|
-
const messages = turn.toolResults.length > 0 && !terminatingBatch ? await this._preflightPostToolContext(previousContext.messages, signal) : previousContext.messages;
|
|
18720
|
-
const preserveFallbackForFailure = turn.message.role === "assistant" && !this.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || this._isEmptyCompletion?.(turn.message) === true || this._isSafetyRefusal?.(turn.message) === true);
|
|
18721
|
-
if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
|
|
18722
|
-
await this._agentEventQueue;
|
|
18723
|
-
await this._settleFallbackModelScope();
|
|
18724
|
-
}
|
|
18768
|
+
const prepareTurn = async (turn, signal) => {
|
|
18769
|
+
const compactedMessages = turn.toolResults.length > 0 ? await this._preflightPostToolContext(turn.context.messages, signal) : turn.context.messages;
|
|
18770
|
+
const compactedContext = compactedMessages === turn.context.messages ? turn.context : { ...turn.context, messages: compactedMessages };
|
|
18771
|
+
const preparedTurn = compactedContext === turn.context ? turn : { ...turn, context: compactedContext };
|
|
18772
|
+
const previousSnapshot = await previousPrepareNextTurnWithContext?.(preparedTurn, signal);
|
|
18773
|
+
const previousContext = previousSnapshot?.context ?? compactedContext;
|
|
18725
18774
|
return {
|
|
18726
18775
|
...previousSnapshot,
|
|
18727
18776
|
context: {
|
|
18728
18777
|
...previousContext,
|
|
18729
|
-
messages,
|
|
18778
|
+
messages: previousContext.messages,
|
|
18730
18779
|
systemPrompt: this._systemPromptOverride ?? this._baseSystemPrompt,
|
|
18731
18780
|
tools: this.agent.state.tools.slice()
|
|
18732
18781
|
},
|
|
@@ -18734,6 +18783,14 @@ function _installAgentNextTurnRefresh() {
|
|
|
18734
18783
|
thinkingLevel: this.agent.state.thinkingLevel
|
|
18735
18784
|
};
|
|
18736
18785
|
};
|
|
18786
|
+
this.agent.prepareNextTurnWithContext = prepareTurn;
|
|
18787
|
+
}
|
|
18788
|
+
async function settleFallbackAfterTurn(session, turn, terminatingBatch) {
|
|
18789
|
+
const preserveFallbackForFailure = turn.message.role === "assistant" && !session.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || session._isEmptyCompletion?.(turn.message) === true || session._isSafetyRefusal?.(turn.message) === true);
|
|
18790
|
+
if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
|
|
18791
|
+
await session._agentEventQueue;
|
|
18792
|
+
await session._settleFallbackModelScope();
|
|
18793
|
+
}
|
|
18737
18794
|
}
|
|
18738
18795
|
var agentSessionToolHooksMethods;
|
|
18739
18796
|
var init_agent_session_tool_hooks = __esm(() => {
|
|
@@ -19631,6 +19688,14 @@ var init_loader_virtual_modules = __esm(() => {
|
|
|
19631
19688
|
|
|
19632
19689
|
// src/core/extensions/loader-core.ts
|
|
19633
19690
|
import * as path7 from "node:path";
|
|
19691
|
+
function getExtensionRuntimeEventBus(runtime) {
|
|
19692
|
+
let eventBus = runtimeEventBuses.get(runtime);
|
|
19693
|
+
if (!eventBus) {
|
|
19694
|
+
eventBus = createEventBus();
|
|
19695
|
+
runtimeEventBuses.set(runtime, eventBus);
|
|
19696
|
+
}
|
|
19697
|
+
return eventBus;
|
|
19698
|
+
}
|
|
19634
19699
|
function createExtension(extensionPath, resolvedPath) {
|
|
19635
19700
|
const source = extensionPath.startsWith("<") && extensionPath.endsWith(">") ? extensionPath.slice(1, -1).split(":")[0] || "temporary" : "local";
|
|
19636
19701
|
const baseDir = extensionPath.startsWith("<") ? undefined : path7.dirname(resolvedPath);
|
|
@@ -19696,6 +19761,7 @@ async function loadExtensionsInternal(paths, cwd, eventBus, workflowResourceProv
|
|
|
19696
19761
|
const resolvedCwd = cacheToken?.cwd ?? resolvePath(cwd);
|
|
19697
19762
|
const resolvedEventBus = eventBus ?? createEventBus();
|
|
19698
19763
|
const resolvedRuntime = runtime ?? createExtensionRuntime();
|
|
19764
|
+
runtimeEventBuses.set(resolvedRuntime, resolvedEventBus);
|
|
19699
19765
|
let processedExtensionCount = 0;
|
|
19700
19766
|
let lastYieldAt = Date.now();
|
|
19701
19767
|
for (const extPath of paths) {
|
|
@@ -19727,7 +19793,7 @@ async function loadExtensions(paths, cwd, eventBus, workflowResourceProvider = e
|
|
|
19727
19793
|
async function loadExtensionsCached(paths, cwd, eventBus, workflowResourceProvider = emptyWorkflowResourceProvider, runtime, resourceLoaderInheritanceSnapshotProvider) {
|
|
19728
19794
|
return loadExtensionsInternal(paths, cwd, eventBus, workflowResourceProvider, runtime, resourceLoaderInheritanceSnapshotProvider, true);
|
|
19729
19795
|
}
|
|
19730
|
-
var INTER_EXTENSION_YIELD_THRESHOLD_MS = 16;
|
|
19796
|
+
var runtimeEventBuses, INTER_EXTENSION_YIELD_THRESHOLD_MS = 16;
|
|
19731
19797
|
var init_loader_core = __esm(() => {
|
|
19732
19798
|
init_event_loop();
|
|
19733
19799
|
init_paths();
|
|
@@ -19737,6 +19803,7 @@ var init_loader_core = __esm(() => {
|
|
|
19737
19803
|
init_loader_resources();
|
|
19738
19804
|
init_loader_runtime();
|
|
19739
19805
|
init_loader_virtual_modules();
|
|
19806
|
+
runtimeEventBuses = new WeakMap;
|
|
19740
19807
|
});
|
|
19741
19808
|
|
|
19742
19809
|
// src/core/package-manager-manifest.ts
|
|
@@ -28275,7 +28342,7 @@ class FastModeSelectorComponent {
|
|
|
28275
28342
|
}
|
|
28276
28343
|
invalidate() {}
|
|
28277
28344
|
render(width) {
|
|
28278
|
-
const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "
|
|
28345
|
+
const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "Fast mode")), width)];
|
|
28279
28346
|
for (const line of wrapTextWithAnsi3(DESCRIPTION, Math.max(20, width))) {
|
|
28280
28347
|
lines.push(theme.fg("muted", line));
|
|
28281
28348
|
}
|
|
@@ -28358,7 +28425,7 @@ class FastModeSelectorComponent {
|
|
|
28358
28425
|
return this.getFocusedRow() === row ? theme.fg("muted", text) : theme.fg("dim", text);
|
|
28359
28426
|
}
|
|
28360
28427
|
}
|
|
28361
|
-
var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "
|
|
28428
|
+
var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "Use faster routing for the selected model when supported by its provider.", ROW_DETAILS;
|
|
28362
28429
|
var init_fast_mode_selector = __esm(() => {
|
|
28363
28430
|
init_theme();
|
|
28364
28431
|
ROWS = ["chat", "workflow"];
|
|
@@ -29664,6 +29731,10 @@ var init_keybindings = __esm(() => {
|
|
|
29664
29731
|
defaultKeys: windowsKeybindings ? "alt+q" : "alt+up",
|
|
29665
29732
|
description: "Restore queued messages"
|
|
29666
29733
|
},
|
|
29734
|
+
"app.message.copy": {
|
|
29735
|
+
defaultKeys: "ctrl+x",
|
|
29736
|
+
description: "Copy fullscreen selection or last agent message"
|
|
29737
|
+
},
|
|
29667
29738
|
"app.clipboard.pasteImage": {
|
|
29668
29739
|
defaultKeys: windowsKeybindings ? "alt+v" : "ctrl+v",
|
|
29669
29740
|
description: "Paste image from clipboard (text fallback)"
|
|
@@ -31056,6 +31127,9 @@ function createSettingsChangeHandler(callbacks) {
|
|
|
31056
31127
|
case "fullscreen-exit-output":
|
|
31057
31128
|
callbacks.onFullscreenExitOutputChange(newValue);
|
|
31058
31129
|
break;
|
|
31130
|
+
case "fullscreen-copy-on-select":
|
|
31131
|
+
callbacks.onFullscreenCopyOnSelectChange(newValue === "true");
|
|
31132
|
+
break;
|
|
31059
31133
|
case "editor-padding":
|
|
31060
31134
|
callbacks.onEditorPaddingXChange(parseInt(newValue, 10));
|
|
31061
31135
|
break;
|
|
@@ -31443,6 +31517,13 @@ function insertUiToggles(items, config) {
|
|
|
31443
31517
|
values: ["transcript", "resume-hint"]
|
|
31444
31518
|
});
|
|
31445
31519
|
insertAfter(items, "fullscreen-exit-output", {
|
|
31520
|
+
id: "fullscreen-copy-on-select",
|
|
31521
|
+
label: "Fullscreen copy on select",
|
|
31522
|
+
description: "Copy selected transcript text automatically on mouse release",
|
|
31523
|
+
currentValue: config.fullscreenCopyOnSelect ? "true" : "false",
|
|
31524
|
+
values: ["true", "false"]
|
|
31525
|
+
});
|
|
31526
|
+
insertAfter(items, "fullscreen-copy-on-select", {
|
|
31446
31527
|
id: "editor-padding",
|
|
31447
31528
|
label: "Editor padding",
|
|
31448
31529
|
description: "Horizontal padding for input editor (0-3)",
|
|
@@ -44720,6 +44801,8 @@ function _refreshToolRegistry(options) {
|
|
|
44720
44801
|
const allowedToolNames = this._allowedToolNames;
|
|
44721
44802
|
const excludedToolNames = this._excludedToolNames;
|
|
44722
44803
|
const isExposedTool = (name) => {
|
|
44804
|
+
if (isMandatoryRuntimeTool(name))
|
|
44805
|
+
return true;
|
|
44723
44806
|
if (allowedToolNames && !allowedToolNames.has(name)) {
|
|
44724
44807
|
return false;
|
|
44725
44808
|
}
|
|
@@ -44728,10 +44811,10 @@ function _refreshToolRegistry(options) {
|
|
|
44728
44811
|
}
|
|
44729
44812
|
return true;
|
|
44730
44813
|
};
|
|
44731
|
-
const registeredTools = this._extensionRunner.getAllRegisteredTools();
|
|
44814
|
+
const registeredTools = this._extensionRunner.getAllRegisteredTools().filter((tool) => !isMandatoryRuntimeTool(tool.definition.name) || isTrustedMandatoryRuntimeTool(tool));
|
|
44732
44815
|
const allCustomTools = [
|
|
44733
44816
|
...registeredTools,
|
|
44734
|
-
...this._customTools.map((definition) => ({
|
|
44817
|
+
...this._customTools.filter((definition) => !isMandatoryRuntimeTool(definition.name)).map((definition) => ({
|
|
44735
44818
|
definition,
|
|
44736
44819
|
sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" })
|
|
44737
44820
|
}))
|
|
@@ -44852,6 +44935,7 @@ function _buildRuntime(options) {
|
|
|
44852
44935
|
var agentSessionToolRegistryMethods;
|
|
44853
44936
|
var init_agent_session_tool_registry = __esm(() => {
|
|
44854
44937
|
init_extensions();
|
|
44938
|
+
init_mandatory_runtime_tools();
|
|
44855
44939
|
init_model_registry();
|
|
44856
44940
|
init_tools();
|
|
44857
44941
|
init_session_temp_dir();
|
|
@@ -45694,6 +45778,7 @@ class AgentSessionBase {
|
|
|
45694
45778
|
_postToolCompactionPreflightError = undefined;
|
|
45695
45779
|
_pendingPostToolCompactionGuard = undefined;
|
|
45696
45780
|
_terminatingToolCallIds = new Set;
|
|
45781
|
+
_stopAfterTurnBlockedContinuation = false;
|
|
45697
45782
|
_disposed = false;
|
|
45698
45783
|
_branchSummaryAbortController = undefined;
|
|
45699
45784
|
_sessionSummaryAbortController = undefined;
|
|
@@ -46281,6 +46366,23 @@ function getBuiltinPackagePaths() {
|
|
|
46281
46366
|
return packageDir ? [packageDir] : [];
|
|
46282
46367
|
});
|
|
46283
46368
|
}
|
|
46369
|
+
function getMandatoryBuiltinPackagePaths() {
|
|
46370
|
+
const context = getBuiltinPackageCandidateContext();
|
|
46371
|
+
return BUILTIN_PACKAGES.filter((descriptor) => descriptor.mandatory).flatMap((descriptor) => {
|
|
46372
|
+
const packageDir = firstExistingPackageDir([...descriptor.sourceCandidates(context), ...distCandidates(context, descriptor)], descriptor);
|
|
46373
|
+
return packageDir ? [packageDir] : [];
|
|
46374
|
+
});
|
|
46375
|
+
}
|
|
46376
|
+
function getMandatoryBuiltinExtensionPaths() {
|
|
46377
|
+
return getMandatoryBuiltinPackagePaths().flatMap((packageDir) => {
|
|
46378
|
+
try {
|
|
46379
|
+
const manifest = JSON.parse(stripBom(readFileSync21(join43(packageDir, "package.json"), "utf-8")));
|
|
46380
|
+
return (manifest.atomic?.extensions ?? manifest.pi?.extensions ?? []).map((entry) => resolve12(packageDir, entry));
|
|
46381
|
+
} catch {
|
|
46382
|
+
return [];
|
|
46383
|
+
}
|
|
46384
|
+
});
|
|
46385
|
+
}
|
|
46284
46386
|
var WORKSPACE_BUILTINS, BUILTIN_PACKAGES;
|
|
46285
46387
|
var init_builtin_packages = __esm(() => {
|
|
46286
46388
|
init_config();
|
|
@@ -46291,11 +46393,12 @@ var init_builtin_packages = __esm(() => {
|
|
|
46291
46393
|
{ packageName: "@bastani/subagents", workspaceDirName: "subagents", distDirName: "subagents" },
|
|
46292
46394
|
{ packageName: "@bastani/mcp", workspaceDirName: "mcp", distDirName: "mcp" },
|
|
46293
46395
|
{ packageName: "@bastani/web-access", workspaceDirName: "web-access", distDirName: "web-access" },
|
|
46294
|
-
{ packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom" }
|
|
46396
|
+
{ packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom", mandatory: true }
|
|
46295
46397
|
];
|
|
46296
46398
|
BUILTIN_PACKAGES = WORKSPACE_BUILTINS.map((spec) => ({
|
|
46297
46399
|
packageName: spec.packageName,
|
|
46298
46400
|
distDirName: spec.distDirName,
|
|
46401
|
+
mandatory: spec.mandatory === true,
|
|
46299
46402
|
requiredEntries: requiredEntriesForBuiltin(spec.distDirName),
|
|
46300
46403
|
sourceCandidates: ({ here, packageDir, isSourceCheckout }) => isSourceCheckout ? [join43(packageDir, "..", spec.workspaceDirName), join43(here, "..", "..", "..", spec.workspaceDirName)] : []
|
|
46301
46404
|
}));
|
|
@@ -52270,6 +52373,13 @@ function getEnabledResources(resources, metadataByPath) {
|
|
|
52270
52373
|
function getEnabledPaths(resources, metadataByPath) {
|
|
52271
52374
|
return getEnabledResources(resources, metadataByPath).map((r) => r.path);
|
|
52272
52375
|
}
|
|
52376
|
+
function getBuiltinExtensionPaths(resources, metadataByPath, noExtensions) {
|
|
52377
|
+
for (const resource of resources) {
|
|
52378
|
+
if (!metadataByPath.has(resource.path))
|
|
52379
|
+
metadataByPath.set(resource.path, resource.metadata);
|
|
52380
|
+
}
|
|
52381
|
+
return noExtensions ? [] : resources.filter((resource) => resource.enabled).map((resource) => resource.path);
|
|
52382
|
+
}
|
|
52273
52383
|
function mapSkillPath(resource, metadataByPath) {
|
|
52274
52384
|
if (resource.metadata.source !== "auto" && resource.metadata.origin !== "package") {
|
|
52275
52385
|
return resource.path;
|
|
@@ -52313,12 +52423,12 @@ async function loadProjectTrustExtensions(loader) {
|
|
|
52313
52423
|
const metadataByPath = new Map;
|
|
52314
52424
|
const cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);
|
|
52315
52425
|
const enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);
|
|
52316
|
-
const builtinEnabledExtensions =
|
|
52426
|
+
const builtinEnabledExtensions = getBuiltinExtensionPaths(builtinPackagePaths.extensions, metadataByPath, state.noExtensions);
|
|
52317
52427
|
const workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);
|
|
52318
52428
|
state.workflowResources = workflowResources;
|
|
52319
52429
|
const workflowResourceProvider = createWorkflowResourceProvider(loader);
|
|
52320
52430
|
const inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);
|
|
52321
|
-
const extensionPaths =
|
|
52431
|
+
const extensionPaths = mergeResourcePaths(state.cwd, cliEnabledExtensions, state.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions]);
|
|
52322
52432
|
const extensionsResult = await loadExtensionsCached(extensionPaths, state.cwd, state.eventBus, workflowResourceProvider, undefined, inheritanceSnapshotProvider);
|
|
52323
52433
|
const inlineExtensions = await loadExtensionFactories(loader, extensionsResult.runtime, workflowResourceProvider, inheritanceSnapshotProvider);
|
|
52324
52434
|
extensionsResult.extensions.push(...inlineExtensions.extensions);
|
|
@@ -52398,7 +52508,7 @@ async function reloadDefaultResourceLoader(loader, options) {
|
|
|
52398
52508
|
const enabledSkillResources = getEnabledResources(resolvedPaths.skills, metadataByPath);
|
|
52399
52509
|
const enabledPrompts = getEnabledPaths(resolvedPaths.prompts, metadataByPath);
|
|
52400
52510
|
const enabledThemes = getEnabledPaths(resolvedPaths.themes, metadataByPath);
|
|
52401
|
-
const builtinEnabledExtensions =
|
|
52511
|
+
const builtinEnabledExtensions = getBuiltinExtensionPaths(builtinPackagePaths.extensions, metadataByPath, state.noExtensions);
|
|
52402
52512
|
const builtinEnabledSkillResources = state.noSkills ? [] : getEnabledResources(builtinPackagePaths.skills, metadataByPath);
|
|
52403
52513
|
const builtinEnabledPrompts = state.noPromptTemplates ? [] : getEnabledPaths(builtinPackagePaths.prompts, metadataByPath);
|
|
52404
52514
|
const builtinEnabledThemes = state.noThemes ? [] : getEnabledPaths(builtinPackagePaths.themes, metadataByPath);
|
|
@@ -52412,9 +52522,13 @@ async function reloadDefaultResourceLoader(loader, options) {
|
|
|
52412
52522
|
const workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);
|
|
52413
52523
|
state.workflowResources = workflowResources;
|
|
52414
52524
|
const workflowResourceProvider = createWorkflowResourceProvider(loader);
|
|
52415
|
-
const extensionPaths =
|
|
52525
|
+
const extensionPaths = mergeResourcePaths(state.cwd, cliEnabledExtensions, state.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions]);
|
|
52416
52526
|
const inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);
|
|
52417
52527
|
const extensionsResult = options?.deferExtensions ? { extensions: [], errors: [], runtime: createExtensionRuntime() } : await loadFinalExtensionSet(loader, extensionPaths, preTrustExtensions, workflowResourceProvider, inheritanceSnapshotProvider);
|
|
52528
|
+
const mandatoryExtensionPaths = new Set(getMandatoryBuiltinExtensionPaths().map((path16) => resolvePath(path16, state.cwd, { normalizeUnicodeSpaces: true })));
|
|
52529
|
+
const loadedMandatoryExtensions = new Set(extensionsResult.extensions.filter((extension) => mandatoryExtensionPaths.has(resolvePath(extension.resolvedPath, state.cwd, { normalizeUnicodeSpaces: true }))));
|
|
52530
|
+
for (const extension of loadedMandatoryExtensions)
|
|
52531
|
+
markTrustedMandatoryRuntimeExtension(extension);
|
|
52418
52532
|
for (const p of state.additionalExtensionPaths) {
|
|
52419
52533
|
if (isLocalPath(p)) {
|
|
52420
52534
|
const resolved = resolveResourcePath(state.cwd, p);
|
|
@@ -52425,6 +52539,12 @@ async function reloadDefaultResourceLoader(loader, options) {
|
|
|
52425
52539
|
}
|
|
52426
52540
|
state.extensionsResult = state.extensionsOverride ? state.extensionsOverride(extensionsResult) : extensionsResult;
|
|
52427
52541
|
applyExtensionSourceInfo(loader, state.extensionsResult.extensions, metadataByPath);
|
|
52542
|
+
for (const extension of state.extensionsResult.extensions) {
|
|
52543
|
+
const registration = extension.tools.get("intercom");
|
|
52544
|
+
if (loadedMandatoryExtensions.has(extension) && registration && isTrustedMandatoryRuntimeTool(registration)) {
|
|
52545
|
+
markTrustedMandatoryRuntimeExtension(extension);
|
|
52546
|
+
}
|
|
52547
|
+
}
|
|
52428
52548
|
resolveInheritedExtensionOverlaps(state.extensionsResult);
|
|
52429
52549
|
const skillPaths = state.noSkills ? mergeResourcePaths(state.cwd, cliEnabledSkills, state.additionalSkillPaths) : mergeResourcePaths(state.cwd, [...cliEnabledSkills, ...enabledSkills, ...builtinEnabledSkills], state.additionalSkillPaths);
|
|
52430
52550
|
state.lastSkillPaths = skillPaths;
|
|
@@ -52504,7 +52624,9 @@ async function reloadDefaultResourceLoader(loader, options) {
|
|
|
52504
52624
|
var init_resource_loader_reload = __esm(() => {
|
|
52505
52625
|
init_event_loop();
|
|
52506
52626
|
init_paths();
|
|
52627
|
+
init_builtin_packages();
|
|
52507
52628
|
init_loader();
|
|
52629
|
+
init_mandatory_runtime_tools();
|
|
52508
52630
|
init_resource_loader_assets();
|
|
52509
52631
|
init_resource_loader_context_files();
|
|
52510
52632
|
init_resource_loader_discovery();
|
|
@@ -53661,6 +53783,28 @@ var init_settings_manager_ui_accessors = __esm(() => {
|
|
|
53661
53783
|
state.markModified("fullscreenExitOutput");
|
|
53662
53784
|
state.save();
|
|
53663
53785
|
},
|
|
53786
|
+
getFullscreenCopyOnSelect() {
|
|
53787
|
+
return settingsInternals(this).settings.fullscreenCopyOnSelect !== false;
|
|
53788
|
+
},
|
|
53789
|
+
setFullscreenCopyOnSelect(enabled) {
|
|
53790
|
+
const state = settingsInternals(this);
|
|
53791
|
+
state.globalSettings.fullscreenCopyOnSelect = enabled;
|
|
53792
|
+
state.markModified("fullscreenCopyOnSelect");
|
|
53793
|
+
state.save();
|
|
53794
|
+
},
|
|
53795
|
+
getTerminalCapabilityOverrides() {
|
|
53796
|
+
const terminal = settingsInternals(this).settings.terminal;
|
|
53797
|
+
const overrides = {};
|
|
53798
|
+
if (typeof terminal?.hyperlinks === "boolean")
|
|
53799
|
+
overrides.hyperlinks = terminal.hyperlinks;
|
|
53800
|
+
if (terminal?.images === "kitty" || terminal?.images === "iterm2")
|
|
53801
|
+
overrides.images = terminal.images;
|
|
53802
|
+
else if (terminal?.images === false)
|
|
53803
|
+
overrides.images = null;
|
|
53804
|
+
if (typeof terminal?.trueColor === "boolean")
|
|
53805
|
+
overrides.trueColor = terminal.trueColor;
|
|
53806
|
+
return overrides;
|
|
53807
|
+
},
|
|
53664
53808
|
getEditorPaddingX() {
|
|
53665
53809
|
return settingsInternals(this).settings.editorPaddingX ?? 0;
|
|
53666
53810
|
},
|
|
@@ -54211,6 +54355,105 @@ function restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model) {
|
|
|
54211
54355
|
return { ...payload, messages: nextPayloadMessages };
|
|
54212
54356
|
}
|
|
54213
54357
|
|
|
54358
|
+
// src/core/mandatory-resource-loader.ts
|
|
54359
|
+
function hasTrustedIntercom(extension) {
|
|
54360
|
+
const registration = extension.tools.get("intercom");
|
|
54361
|
+
return registration !== undefined && isTrustedMandatoryRuntimeTool(registration);
|
|
54362
|
+
}
|
|
54363
|
+
async function restoreMandatoryExtensions(target, cwd) {
|
|
54364
|
+
if (target.extensions.some(hasTrustedIntercom))
|
|
54365
|
+
return target;
|
|
54366
|
+
const loaded = await loadExtensions(getMandatoryBuiltinExtensionPaths(), cwd, getExtensionRuntimeEventBus(target.runtime), undefined, target.runtime);
|
|
54367
|
+
for (const extension of loaded.extensions)
|
|
54368
|
+
markTrustedMandatoryRuntimeExtension(extension);
|
|
54369
|
+
const restored = {
|
|
54370
|
+
...target,
|
|
54371
|
+
extensions: [...target.extensions, ...loaded.extensions],
|
|
54372
|
+
errors: [...target.errors, ...loaded.errors]
|
|
54373
|
+
};
|
|
54374
|
+
if (!restored.extensions.some(hasTrustedIntercom)) {
|
|
54375
|
+
const detail = loaded.errors.map(({ error }) => error).join("; ") || "extension did not register intercom";
|
|
54376
|
+
throw new Error(`Mandatory bundled Intercom is unavailable: ${detail}`);
|
|
54377
|
+
}
|
|
54378
|
+
return restored;
|
|
54379
|
+
}
|
|
54380
|
+
|
|
54381
|
+
class MandatoryResourceLoader {
|
|
54382
|
+
delegate;
|
|
54383
|
+
cwd;
|
|
54384
|
+
extensionsResult;
|
|
54385
|
+
toolOnly = false;
|
|
54386
|
+
constructor(delegate, cwd, extensionsResult) {
|
|
54387
|
+
this.delegate = delegate;
|
|
54388
|
+
this.cwd = cwd;
|
|
54389
|
+
this.extensionsResult = extensionsResult;
|
|
54390
|
+
}
|
|
54391
|
+
limitToTool() {
|
|
54392
|
+
this.toolOnly = true;
|
|
54393
|
+
this.removeLocalInteractionSurfaces();
|
|
54394
|
+
}
|
|
54395
|
+
removeLocalInteractionSurfaces() {
|
|
54396
|
+
const extension = this.extensionsResult.extensions.find(hasTrustedIntercom);
|
|
54397
|
+
extension?.commands.delete("intercom");
|
|
54398
|
+
extension?.shortcuts.delete("alt+m");
|
|
54399
|
+
}
|
|
54400
|
+
getExtensions() {
|
|
54401
|
+
return this.extensionsResult;
|
|
54402
|
+
}
|
|
54403
|
+
getSkills() {
|
|
54404
|
+
return this.delegate.getSkills();
|
|
54405
|
+
}
|
|
54406
|
+
getSkillCatalog() {
|
|
54407
|
+
return this.delegate.getSkillCatalog?.() ?? buildSkillCatalog(this.delegate.getSkills().skills);
|
|
54408
|
+
}
|
|
54409
|
+
getPrompts() {
|
|
54410
|
+
return this.delegate.getPrompts();
|
|
54411
|
+
}
|
|
54412
|
+
getThemes() {
|
|
54413
|
+
return this.delegate.getThemes();
|
|
54414
|
+
}
|
|
54415
|
+
getAgentsFiles() {
|
|
54416
|
+
return this.delegate.getAgentsFiles();
|
|
54417
|
+
}
|
|
54418
|
+
getSystemPrompt() {
|
|
54419
|
+
return this.delegate.getSystemPrompt();
|
|
54420
|
+
}
|
|
54421
|
+
getSystemPromptSource() {
|
|
54422
|
+
return this.delegate.getSystemPromptSource();
|
|
54423
|
+
}
|
|
54424
|
+
getAppendSystemPrompt() {
|
|
54425
|
+
return this.delegate.getAppendSystemPrompt();
|
|
54426
|
+
}
|
|
54427
|
+
getAppendSystemPromptSources() {
|
|
54428
|
+
return this.delegate.getAppendSystemPromptSources();
|
|
54429
|
+
}
|
|
54430
|
+
extendResources(paths) {
|
|
54431
|
+
return this.delegate.extendResources(paths);
|
|
54432
|
+
}
|
|
54433
|
+
async reload(options) {
|
|
54434
|
+
await this.delegate.reload(options);
|
|
54435
|
+
this.extensionsResult = await restoreMandatoryExtensions(this.delegate.getExtensions(), this.cwd);
|
|
54436
|
+
if (this.toolOnly)
|
|
54437
|
+
this.removeLocalInteractionSurfaces();
|
|
54438
|
+
}
|
|
54439
|
+
}
|
|
54440
|
+
async function withMandatoryResourceLoader(loader, cwd) {
|
|
54441
|
+
if (loader instanceof MandatoryResourceLoader)
|
|
54442
|
+
return loader;
|
|
54443
|
+
const extensionsResult = await restoreMandatoryExtensions(loader.getExtensions(), cwd);
|
|
54444
|
+
return new MandatoryResourceLoader(loader, cwd, extensionsResult);
|
|
54445
|
+
}
|
|
54446
|
+
function limitMandatoryIntercomToTool(loader) {
|
|
54447
|
+
if (loader instanceof MandatoryResourceLoader)
|
|
54448
|
+
loader.limitToTool();
|
|
54449
|
+
}
|
|
54450
|
+
var init_mandatory_resource_loader = __esm(() => {
|
|
54451
|
+
init_builtin_packages();
|
|
54452
|
+
init_loader();
|
|
54453
|
+
init_mandatory_runtime_tools();
|
|
54454
|
+
init_skill_catalog();
|
|
54455
|
+
});
|
|
54456
|
+
|
|
54214
54457
|
// src/core/model-resolver-defaults.ts
|
|
54215
54458
|
function findPreferredAvailableModel(availableModels) {
|
|
54216
54459
|
for (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {
|
|
@@ -54251,7 +54494,7 @@ var init_model_resolver_defaults = __esm(() => {
|
|
|
54251
54494
|
huggingface: "moonshotai/Kimi-K2.6",
|
|
54252
54495
|
fireworks: "accounts/fireworks/models/kimi-k2p6",
|
|
54253
54496
|
together: "moonshotai/Kimi-K2.6",
|
|
54254
|
-
baseten: "zai-org/GLM-5.
|
|
54497
|
+
baseten: "zai-org/GLM-5.3",
|
|
54255
54498
|
opencode: "kimi-k2.6",
|
|
54256
54499
|
"opencode-go": "kimi-k2.6",
|
|
54257
54500
|
"kimi-coding": "kimi-for-coding",
|
|
@@ -55040,14 +55283,16 @@ async function createAgentSessionServices(options) {
|
|
|
55040
55283
|
const settingsSpan = startTimingSpan("createAgentSessionServices.settingsManager");
|
|
55041
55284
|
const settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);
|
|
55042
55285
|
endTimingSpan(settingsSpan);
|
|
55043
|
-
const
|
|
55044
|
-
|
|
55286
|
+
const resourceLoaderOptions = options.resourceLoaderOptions ?? {};
|
|
55287
|
+
const defaultResourceLoader = new DefaultResourceLoader({
|
|
55288
|
+
...resourceLoaderOptions,
|
|
55045
55289
|
cwd,
|
|
55046
55290
|
agentDir,
|
|
55047
55291
|
settingsManager
|
|
55048
55292
|
});
|
|
55049
55293
|
const reloadSpan = startTimingSpan("createAgentSessionServices.resourceLoader.reload");
|
|
55050
|
-
await
|
|
55294
|
+
await defaultResourceLoader.reload(options.resourceLoaderReloadOptions);
|
|
55295
|
+
const resourceLoader = await withMandatoryResourceLoader(defaultResourceLoader, cwd);
|
|
55051
55296
|
endTimingSpan(reloadSpan);
|
|
55052
55297
|
const diagnostics = [];
|
|
55053
55298
|
const providerSpan = startTimingSpan("createAgentSessionServices.providerRegistrations");
|
|
@@ -55100,6 +55345,7 @@ async function createAgentSessionFromServices(options) {
|
|
|
55100
55345
|
var init_agent_session_services = __esm(() => {
|
|
55101
55346
|
init_config();
|
|
55102
55347
|
init_paths();
|
|
55348
|
+
init_mandatory_resource_loader();
|
|
55103
55349
|
init_model_runtime();
|
|
55104
55350
|
init_resource_loader();
|
|
55105
55351
|
init_sdk();
|
|
@@ -55482,6 +55728,7 @@ async function createAgentSession(options = {}) {
|
|
|
55482
55728
|
await resourceLoader.reload();
|
|
55483
55729
|
time("resourceLoader.reload");
|
|
55484
55730
|
}
|
|
55731
|
+
resourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);
|
|
55485
55732
|
const existingSession = sessionManager.buildSessionContext();
|
|
55486
55733
|
const repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });
|
|
55487
55734
|
const existingMessages = options.initialContextTransform ? options.initialContextTransform(repairedMessages) : repairedMessages;
|
|
@@ -55707,6 +55954,7 @@ var init_sdk = __esm(() => {
|
|
|
55707
55954
|
init_agent_session();
|
|
55708
55955
|
init_auth_guidance();
|
|
55709
55956
|
init_codex_fast_mode();
|
|
55957
|
+
init_mandatory_resource_loader();
|
|
55710
55958
|
init_messages();
|
|
55711
55959
|
init_model_resolver();
|
|
55712
55960
|
init_model_runtime();
|
|
@@ -56283,8 +56531,14 @@ var init_list_models = __esm(() => {
|
|
|
56283
56531
|
|
|
56284
56532
|
// src/cli/startup-ui.ts
|
|
56285
56533
|
import { existsSync as existsSync45 } from "node:fs";
|
|
56286
|
-
import {
|
|
56534
|
+
import {
|
|
56535
|
+
ProcessTerminal,
|
|
56536
|
+
setCapabilityOverrides,
|
|
56537
|
+
setKeybindings,
|
|
56538
|
+
TuiMainScreen
|
|
56539
|
+
} from "@earendil-works/pi-tui";
|
|
56287
56540
|
function createStartupTui(settingsManager) {
|
|
56541
|
+
setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides());
|
|
56288
56542
|
initTheme(settingsManager.getTheme());
|
|
56289
56543
|
setKeybindings(KeybindingsManager.create());
|
|
56290
56544
|
const ui = new TuiMainScreen(new ProcessTerminal, settingsManager.getShowHardwareCursor(), getAgentDir());
|
|
@@ -58114,8 +58368,9 @@ async function applyCliRuntimeApiKey(modelRuntime, providerId, apiKey, signal) {
|
|
|
58114
58368
|
}
|
|
58115
58369
|
|
|
58116
58370
|
// src/cli/session-picker.ts
|
|
58117
|
-
import { ProcessTerminal as ProcessTerminal2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
|
|
58118
|
-
async function selectSession(currentSessionsLoader, allSessionsLoader) {
|
|
58371
|
+
import { ProcessTerminal as ProcessTerminal2, setCapabilityOverrides as setCapabilityOverrides2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
|
|
58372
|
+
async function selectSession(currentSessionsLoader, allSessionsLoader, settingsManager) {
|
|
58373
|
+
setCapabilityOverrides2(settingsManager.getTerminalCapabilityOverrides());
|
|
58119
58374
|
return new Promise((resolve23) => {
|
|
58120
58375
|
const ui = new TuiMainScreen2(new ProcessTerminal2, undefined, getAgentDir());
|
|
58121
58376
|
const keybindings = KeybindingsManager.create();
|
|
@@ -58153,7 +58408,7 @@ var init_session_picker = __esm(() => {
|
|
|
58153
58408
|
|
|
58154
58409
|
// src/main-session.ts
|
|
58155
58410
|
import { createInterface as createInterface3 } from "node:readline";
|
|
58156
|
-
import { ProcessTerminal as ProcessTerminal3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
|
|
58411
|
+
import { ProcessTerminal as ProcessTerminal3, setCapabilityOverrides as setCapabilityOverrides3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
|
|
58157
58412
|
import chalk10 from "chalk";
|
|
58158
58413
|
async function findLocalSessionByExactId(sessionId, cwd, sessionDir) {
|
|
58159
58414
|
const localSessions = await SessionManager.list(cwd, sessionDir);
|
|
@@ -58292,7 +58547,7 @@ async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
|
58292
58547
|
if (parsed.resume) {
|
|
58293
58548
|
initTheme(settingsManager.getTheme(), true);
|
|
58294
58549
|
try {
|
|
58295
|
-
const selectedPath = await selectSession((onProgress) => SessionManager.list(cwd, sessionDir, onProgress), (onProgress) => SessionManager.listAll(sessionDir, onProgress));
|
|
58550
|
+
const selectedPath = await selectSession((onProgress) => SessionManager.list(cwd, sessionDir, onProgress), (onProgress) => SessionManager.listAll(sessionDir, onProgress), settingsManager);
|
|
58296
58551
|
if (!selectedPath) {
|
|
58297
58552
|
console.log(chalk10.dim("No session selected"));
|
|
58298
58553
|
process.exit(0);
|
|
@@ -58315,6 +58570,7 @@ async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
|
58315
58570
|
return SessionManager.create(cwd, sessionDir, { id: parsed.sessionId });
|
|
58316
58571
|
}
|
|
58317
58572
|
async function promptForMissingSessionCwd(issue, settingsManager) {
|
|
58573
|
+
setCapabilityOverrides3(settingsManager.getTerminalCapabilityOverrides());
|
|
58318
58574
|
initTheme(settingsManager.getTheme());
|
|
58319
58575
|
setKeybindings3(KeybindingsManager.create());
|
|
58320
58576
|
return new Promise((resolve23) => {
|
|
@@ -61900,7 +62156,7 @@ var init_slash_commands = __esm(() => {
|
|
|
61900
62156
|
{ name: "tree", description: "Navigate session tree (switch branches)" },
|
|
61901
62157
|
{ name: "thinking", description: "Set thinking level", argumentHint: "<level>" },
|
|
61902
62158
|
{ name: "scoped-models", description: "Enable/disable models for ctrl+p cycling" },
|
|
61903
|
-
{ name: "fast", description: "Configure
|
|
62159
|
+
{ name: "fast", description: "Configure fast mode for chat and workflows on supported models" },
|
|
61904
62160
|
{ name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
|
|
61905
62161
|
{ name: "import", description: "Import and resume a session from a JSONL file" },
|
|
61906
62162
|
{ name: "share", description: "Share session as a secret GitHub gist" },
|
|
@@ -62536,6 +62792,7 @@ function createFullscreenTui(options) {
|
|
|
62536
62792
|
openUrl: openBrowser
|
|
62537
62793
|
}),
|
|
62538
62794
|
onRightClickPaste: options.onRightClickPaste,
|
|
62795
|
+
copyOnSelect: options.copyOnSelect,
|
|
62539
62796
|
copySelection: options.copySelection ?? copySelectionToHostClipboard
|
|
62540
62797
|
}, options.shouldHandleViewportInput, options.onOverlayUnhandledInput);
|
|
62541
62798
|
}
|
|
@@ -62577,7 +62834,7 @@ function createInteractiveTuiReference(getTui) {
|
|
|
62577
62834
|
getPrototypeOf: () => Reflect.getPrototypeOf(getTui())
|
|
62578
62835
|
});
|
|
62579
62836
|
}
|
|
62580
|
-
var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
|
|
62837
|
+
var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, overlayOwnedSelections, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
|
|
62581
62838
|
var init_interactive_tui = __esm(() => {
|
|
62582
62839
|
init_clipboard();
|
|
62583
62840
|
init_open_browser();
|
|
@@ -62586,6 +62843,7 @@ var init_interactive_tui = __esm(() => {
|
|
|
62586
62843
|
viewportInputGates = new WeakMap;
|
|
62587
62844
|
overlayUnhandledInputHandlers = new WeakMap;
|
|
62588
62845
|
viewportInputReplays = new WeakSet;
|
|
62846
|
+
overlayOwnedSelections = new WeakSet;
|
|
62589
62847
|
viewportInputSubscriptions = new WeakMap;
|
|
62590
62848
|
SGR_MOUSE_SEQUENCE = /^\x1b\[<(\d+);\d+;\d+([Mm])/;
|
|
62591
62849
|
LEFT_MOUSE_MODIFIER_MASK = 4 | 8 | 16;
|
|
@@ -62601,8 +62859,20 @@ var init_interactive_tui = __esm(() => {
|
|
|
62601
62859
|
deferral.shouldDeferViewportInputToOverlay = () => !viewportInputReplays.has(this) && deferToOverlay?.() === true;
|
|
62602
62860
|
}
|
|
62603
62861
|
applyLineResets(lines) {
|
|
62862
|
+
if (overlayOwnedSelections.has(this) && !this.isFocusedOverlay())
|
|
62863
|
+
this.clearOverlayOwnedSelection();
|
|
62604
62864
|
return stripOverlayActiveRowMarker(super.applyLineResets(lines));
|
|
62605
62865
|
}
|
|
62866
|
+
clearOverlayOwnedSelection() {
|
|
62867
|
+
const selection = this;
|
|
62868
|
+
selection.selectionAnchor = undefined;
|
|
62869
|
+
selection.selectionFocus = undefined;
|
|
62870
|
+
selection.selectionInitialRange = undefined;
|
|
62871
|
+
selection.selectionPressActive = false;
|
|
62872
|
+
selection.selectionDragged = false;
|
|
62873
|
+
selection.lastClick = undefined;
|
|
62874
|
+
overlayOwnedSelections.delete(this);
|
|
62875
|
+
}
|
|
62606
62876
|
isPiTuiMouseSequence(data) {
|
|
62607
62877
|
if (parseMouseSequences(data))
|
|
62608
62878
|
return true;
|
|
@@ -62679,6 +62949,7 @@ var init_interactive_tui = __esm(() => {
|
|
|
62679
62949
|
if (isLeftMouseButton(sequence))
|
|
62680
62950
|
viewportListener(sequence.data);
|
|
62681
62951
|
}
|
|
62952
|
+
overlayOwnedSelections.add(this);
|
|
62682
62953
|
}
|
|
62683
62954
|
replayViewportInput(viewportListener, data) {
|
|
62684
62955
|
viewportInputReplays.add(this);
|
|
@@ -62746,7 +63017,11 @@ var init_interactive_tui = __esm(() => {
|
|
|
62746
63017
|
});
|
|
62747
63018
|
|
|
62748
63019
|
// src/modes/interactive/interactive-mode-base.ts
|
|
62749
|
-
import {
|
|
63020
|
+
import {
|
|
63021
|
+
isKeyRelease as isKeyRelease3,
|
|
63022
|
+
isViewportTUI,
|
|
63023
|
+
setCapabilityOverrides as setCapabilityOverrides4
|
|
63024
|
+
} from "@earendil-works/pi-tui";
|
|
62750
63025
|
function isFullscreenViewportAction(data, keybindings) {
|
|
62751
63026
|
return FULLSCREEN_VIEWPORT_ACTIONS.some((action) => keybindings.matches(data, action));
|
|
62752
63027
|
}
|
|
@@ -62807,6 +63082,18 @@ class InteractiveModeBase {
|
|
|
62807
63082
|
return false;
|
|
62808
63083
|
return this.defaultEditor.handleInput(data);
|
|
62809
63084
|
}
|
|
63085
|
+
setFullscreenCopyOnSelect(enabled) {
|
|
63086
|
+
if (this.renderer.mode === "fullscreen")
|
|
63087
|
+
this.renderer.setCopyOnSelect(enabled);
|
|
63088
|
+
}
|
|
63089
|
+
getFullscreenCopyOnSelect() {
|
|
63090
|
+
return this.renderer.mode === "fullscreen" ? this.renderer.getCopyOnSelect() : undefined;
|
|
63091
|
+
}
|
|
63092
|
+
async copyActiveFullscreenSelection() {
|
|
63093
|
+
if (this.renderer.mode !== "fullscreen" || !this.renderer.hasActiveSelection())
|
|
63094
|
+
return;
|
|
63095
|
+
return this.renderer.copyActiveSelectionToClipboard();
|
|
63096
|
+
}
|
|
62810
63097
|
onRightClickPaste = () => {
|
|
62811
63098
|
this.handleRightClickPaste();
|
|
62812
63099
|
};
|
|
@@ -63006,11 +63293,13 @@ class InteractiveModeBase {
|
|
|
63006
63293
|
await this.rebindCurrentSession();
|
|
63007
63294
|
await this.themeController.applyFromSettings();
|
|
63008
63295
|
});
|
|
63296
|
+
setCapabilityOverrides4(this.settingsManager.getTerminalCapabilityOverrides());
|
|
63009
63297
|
this.version = VERSION;
|
|
63010
63298
|
this.renderer = createInteractiveTui({
|
|
63011
63299
|
showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
|
|
63012
63300
|
logDirectory: runtimeHost.services.agentDir,
|
|
63013
63301
|
terminal: options.terminal,
|
|
63302
|
+
copyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
|
|
63014
63303
|
onRightClickPaste: this.onRightClickPaste,
|
|
63015
63304
|
shouldHandleViewportInput: this.shouldHandleViewportInput,
|
|
63016
63305
|
onOverlayUnhandledInput: this.onOverlayUnhandledInput,
|
|
@@ -64133,6 +64422,7 @@ var init_interactive_deferred_startup = __esm(() => {
|
|
|
64133
64422
|
try {
|
|
64134
64423
|
await this.bindCurrentSessionExtensions();
|
|
64135
64424
|
await this.session.reload({ reason: "startup" });
|
|
64425
|
+
this.applyRuntimeSettings();
|
|
64136
64426
|
this.rebuildChatFromMessages();
|
|
64137
64427
|
if (!this.promptTurnWorkingLoaderActive) {
|
|
64138
64428
|
this.stopWorkingLoader();
|
|
@@ -64821,6 +65111,7 @@ ${warningLines}`, 0, 0));
|
|
|
64821
65111
|
});
|
|
64822
65112
|
|
|
64823
65113
|
// src/modes/interactive/interactive-session-runtime.ts
|
|
65114
|
+
import { setCapabilityOverrides as setCapabilityOverrides5 } from "@earendil-works/pi-tui";
|
|
64824
65115
|
var init_interactive_session_runtime = __esm(() => {
|
|
64825
65116
|
init_interactive_mode_base();
|
|
64826
65117
|
init_interactive_mode_deps();
|
|
@@ -64907,6 +65198,8 @@ var init_interactive_session_runtime = __esm(() => {
|
|
|
64907
65198
|
}
|
|
64908
65199
|
};
|
|
64909
65200
|
InteractiveModeBase.prototype.applyRuntimeSettings = function() {
|
|
65201
|
+
setCapabilityOverrides5(this.settingsManager.getTerminalCapabilityOverrides());
|
|
65202
|
+
this.setFullscreenCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());
|
|
64910
65203
|
this.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());
|
|
64911
65204
|
this.footer.setSession(this.session);
|
|
64912
65205
|
this.usageMeter.setSession(this.session);
|
|
@@ -66423,6 +66716,9 @@ var init_interactive_input_handling = __esm(() => {
|
|
|
66423
66716
|
});
|
|
66424
66717
|
this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
|
|
66425
66718
|
this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
|
|
66719
|
+
this.defaultEditor.onAction("app.message.copy", () => {
|
|
66720
|
+
this.handleCopyCommand({ preferSelection: true });
|
|
66721
|
+
});
|
|
66426
66722
|
this.defaultEditor.onAction("app.session.new", () => this.handleClearCommand());
|
|
66427
66723
|
this.defaultEditor.onAction("app.session.tree", () => this.showTreeSelector());
|
|
66428
66724
|
this.defaultEditor.onAction("app.session.fork", () => this.showUserMessageSelector());
|
|
@@ -67330,7 +67626,8 @@ var init_interactive_agent_events = __esm(() => {
|
|
|
67330
67626
|
} else if (event.reason === "manual") {
|
|
67331
67627
|
this.manualCompactionTakeoverPending = false;
|
|
67332
67628
|
}
|
|
67333
|
-
|
|
67629
|
+
const resumesActiveRun = event.midTurn && !event.aborted && !event.errorMessage && !manualTakeoverPending;
|
|
67630
|
+
if (!manualTakeoverPending && !resumesActiveRun && this.settingsManager.getShowTerminalProgress()) {
|
|
67334
67631
|
this.ui.terminal.setProgress(false);
|
|
67335
67632
|
}
|
|
67336
67633
|
if (!manualTakeoverPending && this.autoCompactionEscapeHandlerSaved) {
|
|
@@ -68346,7 +68643,7 @@ var init_interactive_selectors = __esm(() => {
|
|
|
68346
68643
|
};
|
|
68347
68644
|
InteractiveModeBase.prototype.showFastModeSelector = function() {
|
|
68348
68645
|
if (!this.hasCodexFastModeSupportedModels()) {
|
|
68349
|
-
this.showWarning("
|
|
68646
|
+
this.showWarning("Fast mode isn't available for any configured model.");
|
|
68350
68647
|
return;
|
|
68351
68648
|
}
|
|
68352
68649
|
this.showSelector((done) => {
|
|
@@ -68405,6 +68702,7 @@ var init_interactive_selectors = __esm(() => {
|
|
|
68405
68702
|
showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
|
|
68406
68703
|
fullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),
|
|
68407
68704
|
fullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),
|
|
68705
|
+
fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
|
|
68408
68706
|
editorPaddingX: this.settingsManager.getEditorPaddingX(),
|
|
68409
68707
|
outputPad: this.settingsManager.getOutputPad(),
|
|
68410
68708
|
showCacheMissNotices: this.settingsManager.getShowCacheMissNotices(),
|
|
@@ -68522,6 +68820,10 @@ var init_interactive_selectors = __esm(() => {
|
|
|
68522
68820
|
onFullscreenExitOutputChange: (output) => {
|
|
68523
68821
|
this.settingsManager.setFullscreenExitOutput(output);
|
|
68524
68822
|
},
|
|
68823
|
+
onFullscreenCopyOnSelectChange: (enabled) => {
|
|
68824
|
+
this.settingsManager.setFullscreenCopyOnSelect(enabled);
|
|
68825
|
+
this.setFullscreenCopyOnSelect(enabled);
|
|
68826
|
+
},
|
|
68525
68827
|
onEditorPaddingXChange: (padding) => {
|
|
68526
68828
|
this.settingsManager.setEditorPaddingX(padding);
|
|
68527
68829
|
this.defaultEditor.setPaddingX(padding);
|
|
@@ -69508,18 +69810,8 @@ var init_interactive_slash_commands = __esm(() => {
|
|
|
69508
69810
|
activeHeader.setExpanded(this.toolOutputExpanded);
|
|
69509
69811
|
}
|
|
69510
69812
|
setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
|
|
69511
|
-
this.
|
|
69813
|
+
this.applyRuntimeSettings();
|
|
69512
69814
|
await this.themeController.applyFromSettings();
|
|
69513
|
-
const editorPaddingX = this.settingsManager.getEditorPaddingX();
|
|
69514
|
-
const autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();
|
|
69515
|
-
this.defaultEditor.setPaddingX(editorPaddingX);
|
|
69516
|
-
this.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);
|
|
69517
|
-
if (this.editor !== this.defaultEditor) {
|
|
69518
|
-
this.editor.setPaddingX?.(editorPaddingX);
|
|
69519
|
-
this.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);
|
|
69520
|
-
}
|
|
69521
|
-
this.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());
|
|
69522
|
-
this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
|
|
69523
69815
|
this.setupAutocompleteProvider();
|
|
69524
69816
|
const runner = this.session.extensionRunner;
|
|
69525
69817
|
this.setupExtensionShortcuts(runner);
|
|
@@ -69712,7 +70004,12 @@ Gist: ${hyperlink3(gistUrl, gistUrl)}`);
|
|
|
69712
70004
|
}
|
|
69713
70005
|
}
|
|
69714
70006
|
};
|
|
69715
|
-
InteractiveModeBase.prototype.handleCopyCommand = async function() {
|
|
70007
|
+
InteractiveModeBase.prototype.handleCopyCommand = async function(options = {}) {
|
|
70008
|
+
if (options.preferSelection && this.getFullscreenCopyOnSelect() === false) {
|
|
70009
|
+
const selectionCopied = await this.copyActiveFullscreenSelection();
|
|
70010
|
+
if (selectionCopied !== undefined)
|
|
70011
|
+
return;
|
|
70012
|
+
}
|
|
69716
70013
|
const text = this.session.getLastAssistantText();
|
|
69717
70014
|
if (!text) {
|
|
69718
70015
|
this.showError("No agent messages to copy yet.");
|
|
@@ -73766,6 +74063,8 @@ var init_rpc_extension_ui = __esm(() => {
|
|
|
73766
74063
|
});
|
|
73767
74064
|
|
|
73768
74065
|
// src/modes/rpc/rpc-session-binding.ts
|
|
74066
|
+
import { setCapabilityOverrides as setCapabilityOverrides6 } from "@earendil-works/pi-tui";
|
|
74067
|
+
|
|
73769
74068
|
class RpcSessionBinding {
|
|
73770
74069
|
session;
|
|
73771
74070
|
unsubscribe;
|
|
@@ -73809,6 +74108,7 @@ class RpcSessionBinding {
|
|
|
73809
74108
|
this.session = this.runtimeHost.session;
|
|
73810
74109
|
this.disposeSubscriptions();
|
|
73811
74110
|
const session = this.session;
|
|
74111
|
+
setCapabilityOverrides6(session.settingsManager.getTerminalCapabilityOverrides());
|
|
73812
74112
|
this.renderService?.bindSession(session);
|
|
73813
74113
|
this.footerDataProvider = new FooterDataProvider(session.sessionManager.getCwd());
|
|
73814
74114
|
const models = session.scopedModels.length > 0 ? session.scopedModels.map((scoped) => scoped.model) : session.modelRuntime.getAvailableSnapshot();
|
|
@@ -74704,8 +75004,9 @@ var init_config_selector = __esm(() => {
|
|
|
74704
75004
|
});
|
|
74705
75005
|
|
|
74706
75006
|
// src/cli/config-selector.ts
|
|
74707
|
-
import { ProcessTerminal as ProcessTerminal6, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
|
|
75007
|
+
import { ProcessTerminal as ProcessTerminal6, setCapabilityOverrides as setCapabilityOverrides7, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
|
|
74708
75008
|
async function selectConfig(options) {
|
|
75009
|
+
setCapabilityOverrides7(options.settingsManager.getTerminalCapabilityOverrides());
|
|
74709
75010
|
initTheme(options.settingsManager.getTheme(), true);
|
|
74710
75011
|
return new Promise((resolve23) => {
|
|
74711
75012
|
const ui = new TuiMainScreen8(new ProcessTerminal6, undefined, options.agentDir);
|
|
@@ -75558,6 +75859,7 @@ var init_package_manager_cli = __esm(() => {
|
|
|
75558
75859
|
});
|
|
75559
75860
|
|
|
75560
75861
|
// src/main.ts
|
|
75862
|
+
import { setCapabilityOverrides as setCapabilityOverrides8 } from "@earendil-works/pi-tui";
|
|
75561
75863
|
import chalk15 from "chalk";
|
|
75562
75864
|
function authCheckErrorMessage(error) {
|
|
75563
75865
|
return error instanceof AuthCommandError ? error.message : "Failed to check provider readiness";
|
|
@@ -75792,6 +76094,7 @@ async function main(argv, options) {
|
|
|
75792
76094
|
startupEarlyInputCapture = undefined;
|
|
75793
76095
|
}
|
|
75794
76096
|
const startupSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: startupProjectTrusted });
|
|
76097
|
+
setCapabilityOverrides8(startupSettingsManager.getTerminalCapabilityOverrides());
|
|
75795
76098
|
const startupSettingsDiagnostics = collectSettingsDiagnostics(startupSettingsManager, "startup session lookup");
|
|
75796
76099
|
if (appMode === "interactive" && parsed.useTheme !== undefined) {
|
|
75797
76100
|
startupSettingsManager.applyOverrides({ theme: parsed.useTheme });
|
|
@@ -75926,6 +76229,8 @@ async function main(argv, options) {
|
|
|
75926
76229
|
extensionFactories: isolateInteractiveHost ? undefined : extensionFactories
|
|
75927
76230
|
}
|
|
75928
76231
|
});
|
|
76232
|
+
if (isolateInteractiveHost)
|
|
76233
|
+
limitMandatoryIntercomToTool(services2.resourceLoader);
|
|
75929
76234
|
const { settingsManager: settingsManager2, modelRuntime: modelRuntime2, resourceLoader: resourceLoader2 } = services2;
|
|
75930
76235
|
const diagnostics = [
|
|
75931
76236
|
...services2.diagnostics,
|
|
@@ -75988,6 +76293,7 @@ async function main(argv, options) {
|
|
|
75988
76293
|
endTimingSpan(runtimeCreationSpan);
|
|
75989
76294
|
const { services, session, modelFallbackMessage } = runtime;
|
|
75990
76295
|
const { settingsManager, modelRuntime, resourceLoader } = services;
|
|
76296
|
+
setCapabilityOverrides8(settingsManager.getTerminalCapabilityOverrides());
|
|
75991
76297
|
applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy);
|
|
75992
76298
|
configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());
|
|
75993
76299
|
if (parsed.help) {
|
|
@@ -76119,6 +76425,7 @@ var init_main = __esm(() => {
|
|
|
76119
76425
|
init_auth_storage();
|
|
76120
76426
|
init_builtin_packages();
|
|
76121
76427
|
init_http_dispatcher();
|
|
76428
|
+
init_mandatory_resource_loader();
|
|
76122
76429
|
init_model_resolver();
|
|
76123
76430
|
init_model_runtime();
|
|
76124
76431
|
init_output_guard();
|
|
@@ -77969,9 +78276,6 @@ function defaultIntercomExtensionDir(agentDir = defaultAgentDir()) {
|
|
|
77969
78276
|
function bundledIntercomExtensionDir() {
|
|
77970
78277
|
return path21.resolve(path21.dirname(fileURLToPath5(import.meta.url)), "..", "..", "..", "intercom");
|
|
77971
78278
|
}
|
|
77972
|
-
function defaultIntercomConfigPath(agentDir = defaultAgentDir()) {
|
|
77973
|
-
return path21.join(agentDir, "intercom", "config.json");
|
|
77974
|
-
}
|
|
77975
78279
|
function defaultSubagentConfigDir(agentDir = defaultAgentDir()) {
|
|
77976
78280
|
return path21.join(agentDir, "extensions", "subagent");
|
|
77977
78281
|
}
|
|
@@ -78021,16 +78325,6 @@ function resolveIntercomBridgeConfig(value) {
|
|
|
78021
78325
|
instructionFile: typeof value.instructionFile === "string" ? value.instructionFile : ""
|
|
78022
78326
|
};
|
|
78023
78327
|
}
|
|
78024
|
-
function intercomConfigStatus(configPath) {
|
|
78025
|
-
if (!fs18.existsSync(configPath))
|
|
78026
|
-
return { enabled: true };
|
|
78027
|
-
try {
|
|
78028
|
-
const parsed = JSON.parse(fs18.readFileSync(configPath, "utf-8"));
|
|
78029
|
-
return { enabled: parsed.enabled !== false };
|
|
78030
|
-
} catch (error) {
|
|
78031
|
-
return { enabled: true, error };
|
|
78032
|
-
}
|
|
78033
|
-
}
|
|
78034
78328
|
function readJsonBestEffort(filePath) {
|
|
78035
78329
|
try {
|
|
78036
78330
|
return JSON.parse(fs18.readFileSync(filePath, "utf-8"));
|
|
@@ -78166,25 +78460,6 @@ function resolveIntercomExtensionDir(input2, agentDir) {
|
|
|
78166
78460
|
return legacyDir;
|
|
78167
78461
|
return configuredPiIntercomPackageDir(input2, agentDir) ?? legacyDir;
|
|
78168
78462
|
}
|
|
78169
|
-
function extensionSandboxAllowsIntercom(extensions, extensionDir) {
|
|
78170
|
-
if (extensions === undefined)
|
|
78171
|
-
return true;
|
|
78172
|
-
const intercomDir = path21.resolve(extensionDir).replaceAll("\\", "/").toLowerCase();
|
|
78173
|
-
for (const entry of extensions) {
|
|
78174
|
-
const normalized = entry.trim().replaceAll("\\", "/").toLowerCase();
|
|
78175
|
-
if (normalized === "pi-intercom")
|
|
78176
|
-
return true;
|
|
78177
|
-
if (normalized === intercomDir)
|
|
78178
|
-
return true;
|
|
78179
|
-
if (normalized.startsWith(`${intercomDir}/`))
|
|
78180
|
-
return true;
|
|
78181
|
-
if (normalized.endsWith("/pi-intercom"))
|
|
78182
|
-
return true;
|
|
78183
|
-
if (normalized.includes("/pi-intercom/"))
|
|
78184
|
-
return true;
|
|
78185
|
-
}
|
|
78186
|
-
return false;
|
|
78187
|
-
}
|
|
78188
78463
|
function expandTilde(filePath) {
|
|
78189
78464
|
return filePath.startsWith("~/") ? path21.join(os7.homedir(), filePath.slice(2)) : filePath;
|
|
78190
78465
|
}
|
|
@@ -78227,13 +78502,6 @@ function resolveIntercomBridge(input2) {
|
|
|
78227
78502
|
if (!fs18.existsSync(extensionDir)) {
|
|
78228
78503
|
return { active: false, mode, extensionDir, instruction: defaultInstruction };
|
|
78229
78504
|
}
|
|
78230
|
-
const configPath = path21.resolve(input2.configPath ?? defaultIntercomConfigPath(agentDir));
|
|
78231
|
-
const intercomStatus = intercomConfigStatus(configPath);
|
|
78232
|
-
if (intercomStatus.error)
|
|
78233
|
-
console.warn(`Failed to parse intercom config at '${configPath}'. Assuming enabled.`, intercomStatus.error);
|
|
78234
|
-
if (!intercomStatus.enabled) {
|
|
78235
|
-
return { active: false, mode, extensionDir, instruction: defaultInstruction };
|
|
78236
|
-
}
|
|
78237
78505
|
const instruction = buildIntercomBridgeInstruction(orchestratorTarget, resolveInstructionTemplate(config.instructionFile, settingsDir));
|
|
78238
78506
|
return {
|
|
78239
78507
|
active: true,
|
|
@@ -78246,8 +78514,6 @@ function resolveIntercomBridge(input2) {
|
|
|
78246
78514
|
function applyIntercomBridgeToAgent(agent, bridge) {
|
|
78247
78515
|
if (!bridge.active || !bridge.orchestratorTarget)
|
|
78248
78516
|
return agent;
|
|
78249
|
-
if (!extensionSandboxAllowsIntercom(agent.extensions, bridge.extensionDir))
|
|
78250
|
-
return agent;
|
|
78251
78517
|
const bridgeTools = ["intercom", "contact_supervisor"];
|
|
78252
78518
|
const tools = agent.tools ? [...agent.tools, ...bridgeTools.filter((tool) => !agent.tools?.includes(tool))] : agent.tools;
|
|
78253
78519
|
const instruction = bridge.instruction;
|
|
@@ -80096,23 +80362,45 @@ function getSubagentCodexFastModeSettings(cwd) {
|
|
|
80096
80362
|
return { chat: false, workflow: false };
|
|
80097
80363
|
}
|
|
80098
80364
|
}
|
|
80099
|
-
function
|
|
80365
|
+
function modelIdentityFromModelId(model) {
|
|
80100
80366
|
if (!model)
|
|
80101
80367
|
return;
|
|
80102
80368
|
const { baseModel } = splitKnownThinkingSuffix(model);
|
|
80103
|
-
|
|
80369
|
+
const slash = baseModel.indexOf("/");
|
|
80370
|
+
if (slash <= 0 || slash === baseModel.length - 1)
|
|
80104
80371
|
return;
|
|
80105
|
-
return baseModel.
|
|
80372
|
+
return { provider: baseModel.slice(0, slash), id: baseModel.slice(slash + 1) };
|
|
80373
|
+
}
|
|
80374
|
+
function resolvedIdentityMatches(resolved, model) {
|
|
80375
|
+
if (!model)
|
|
80376
|
+
return true;
|
|
80377
|
+
const parsed = modelIdentityFromModelId(model);
|
|
80378
|
+
if (!parsed)
|
|
80379
|
+
return false;
|
|
80380
|
+
if (parsed.provider !== resolved.provider)
|
|
80381
|
+
return false;
|
|
80382
|
+
return resolved.id === undefined || parsed.id === resolved.id;
|
|
80383
|
+
}
|
|
80384
|
+
function identityForFastMode(input2) {
|
|
80385
|
+
if (input2.resolvedModel && resolvedIdentityMatches(input2.resolvedModel, input2.model)) {
|
|
80386
|
+
return input2.resolvedModel;
|
|
80387
|
+
}
|
|
80388
|
+
if (input2.model) {
|
|
80389
|
+
const resolved = input2.resolveModel?.(input2.model);
|
|
80390
|
+
if (resolved)
|
|
80391
|
+
return resolved;
|
|
80392
|
+
}
|
|
80393
|
+
return modelIdentityFromModelId(input2.model);
|
|
80106
80394
|
}
|
|
80107
|
-
function resolveSubagentCodexFastModeScope(
|
|
80108
|
-
return
|
|
80395
|
+
function resolveSubagentCodexFastModeScope(orchestrationContext) {
|
|
80396
|
+
return orchestrationContext?.kind === "workflow-stage" ? "workflow" : "chat";
|
|
80109
80397
|
}
|
|
80110
80398
|
function resolveSubagentModelFastMode(input2) {
|
|
80111
|
-
const
|
|
80112
|
-
if (!
|
|
80399
|
+
const model = identityForFastMode(input2);
|
|
80400
|
+
if (!model)
|
|
80113
80401
|
return false;
|
|
80114
80402
|
const settings = input2.settings ?? getSubagentCodexFastModeSettings(input2.cwd);
|
|
80115
|
-
return shouldApplyCodexFastModeForScope(
|
|
80403
|
+
return shouldApplyCodexFastModeForScope(model, settings, input2.scope ?? "chat", input2.copilotCredential);
|
|
80116
80404
|
}
|
|
80117
80405
|
|
|
80118
80406
|
// dist/builtin/subagents/src/shared/jsonl-writer.ts
|
|
@@ -80292,10 +80580,11 @@ function thinkingLevelForSession(session) {
|
|
|
80292
80580
|
function initialThinkingForAttempt(model, configuredThinking) {
|
|
80293
80581
|
return resolveEffectiveThinking(model, configuredThinking) ?? configuredThinking;
|
|
80294
80582
|
}
|
|
80295
|
-
function defaultFastModeForChild(cwd, context,
|
|
80583
|
+
function defaultFastModeForChild(cwd, context, resolvedModel) {
|
|
80296
80584
|
const settings = getSubagentCodexFastModeSettings(cwd);
|
|
80297
|
-
const scope = resolveSubagentCodexFastModeScope(
|
|
80298
|
-
|
|
80585
|
+
const scope = resolveSubagentCodexFastModeScope(context);
|
|
80586
|
+
const copilotCredential = readStoredCredential("github-copilot");
|
|
80587
|
+
return (model) => resolveSubagentModelFastMode({ model, resolvedModel, cwd, settings, scope, copilotCredential });
|
|
80299
80588
|
}
|
|
80300
80589
|
var EMPTY_STATS = {
|
|
80301
80590
|
sessionFile: undefined,
|
|
@@ -81053,7 +81342,7 @@ class SubagentControlRuntime {
|
|
|
81053
81342
|
startAttempt(admitted, candidate, signals, options = {}) {
|
|
81054
81343
|
const initialModel = modelIdForCandidate(candidate, admitted.policy.model);
|
|
81055
81344
|
const initialThinking = initialThinkingForAttempt(initialModel, candidate.thinkingLevel ?? admitted.policy.thinkingLevel);
|
|
81056
|
-
const fastModeForModel = options.fastModeForModel ?? defaultFastModeForChild(admitted.policy.cwd, admitted.spec.parent?.orchestrationContext,
|
|
81345
|
+
const fastModeForModel = options.fastModeForModel ?? defaultFastModeForChild(admitted.policy.cwd, admitted.spec.parent?.orchestrationContext, candidate.model);
|
|
81057
81346
|
const running = {
|
|
81058
81347
|
id: this.nextAttemptId++,
|
|
81059
81348
|
child: admitted,
|
|
@@ -83909,6 +84198,7 @@ ${worktreeSuffix}` : childContent;
|
|
|
83909
84198
|
}
|
|
83910
84199
|
|
|
83911
84200
|
// dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts
|
|
84201
|
+
init_src();
|
|
83912
84202
|
import { existsSync as existsSync63, statSync as statSync21 } from "node:fs";
|
|
83913
84203
|
import { join as join92 } from "node:path";
|
|
83914
84204
|
|
|
@@ -84133,17 +84423,12 @@ function progressFor(agent, task, outcome, startedAt, fastMode) {
|
|
|
84133
84423
|
...outcome.status === "interrupted" && isParentCancellation(outcome.cause) ? { cause: outcome.cause } : {}
|
|
84134
84424
|
};
|
|
84135
84425
|
}
|
|
84136
|
-
function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths,
|
|
84426
|
+
function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastModeForModel) {
|
|
84137
84427
|
const status = outcome.status;
|
|
84138
84428
|
const output = outcome.status === "ok" ? outcome.output : outcome.envelope;
|
|
84139
84429
|
const model = outcome.model;
|
|
84140
84430
|
const thinking = outcome.thinking;
|
|
84141
|
-
const fastModeEnabled =
|
|
84142
|
-
model,
|
|
84143
|
-
cwd: fastMode.cwd,
|
|
84144
|
-
settings: fastMode.settings,
|
|
84145
|
-
scope: fastMode.scope
|
|
84146
|
-
});
|
|
84431
|
+
const fastModeEnabled = fastModeForModel(model);
|
|
84147
84432
|
const result2 = {
|
|
84148
84433
|
agent: agent.name,
|
|
84149
84434
|
task,
|
|
@@ -84221,13 +84506,18 @@ async function runSingleInProcess(runtimeCwd, agent, task, options) {
|
|
|
84221
84506
|
const inheritsDispatchConfig = agent.model === undefined && (agent.fallbackModels === undefined || agent.fallbackModels.length === 0) && options.modelOverride === undefined;
|
|
84222
84507
|
const resolvedCandidate = candidate ? options.resolveCandidateModel?.(candidate) : undefined;
|
|
84223
84508
|
const fastModeSettings = getSubagentCodexFastModeSettings(cwd);
|
|
84509
|
+
const copilotCredential = readStoredCredential("github-copilot");
|
|
84224
84510
|
const orchestrationContext = workflowOrchestrationContext(options);
|
|
84225
|
-
const fastModeScope = resolveSubagentCodexFastModeScope(
|
|
84511
|
+
const fastModeScope = resolveSubagentCodexFastModeScope(orchestrationContext);
|
|
84512
|
+
const resolveModel = (modelId) => options.resolveCandidateModel?.(modelId)?.model;
|
|
84226
84513
|
const fastModeForModel = (model) => resolveSubagentModelFastMode({
|
|
84227
84514
|
model,
|
|
84515
|
+
resolvedModel: resolvedCandidate?.model,
|
|
84516
|
+
resolveModel,
|
|
84228
84517
|
cwd,
|
|
84229
84518
|
settings: fastModeSettings,
|
|
84230
|
-
scope: fastModeScope
|
|
84519
|
+
scope: fastModeScope,
|
|
84520
|
+
copilotCredential
|
|
84231
84521
|
});
|
|
84232
84522
|
const parent = {
|
|
84233
84523
|
path: options.runId,
|
|
@@ -84360,11 +84650,7 @@ ${task}`);
|
|
|
84360
84650
|
detachCleanup();
|
|
84361
84651
|
parentAskCleanup();
|
|
84362
84652
|
running.promise.then(async (continuedOutcome) => {
|
|
84363
|
-
const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths,
|
|
84364
|
-
cwd,
|
|
84365
|
-
settings: fastModeSettings,
|
|
84366
|
-
scope: fastModeScope
|
|
84367
|
-
});
|
|
84653
|
+
const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths, fastModeForModel);
|
|
84368
84654
|
await control.deliverChildResult({
|
|
84369
84655
|
path: continuedOutcome.path,
|
|
84370
84656
|
status: continuedOutcome.status,
|
|
@@ -84426,11 +84712,7 @@ ${task}`);
|
|
|
84426
84712
|
detachCleanup();
|
|
84427
84713
|
parentAskCleanup();
|
|
84428
84714
|
const outcome = winner.value;
|
|
84429
|
-
const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths,
|
|
84430
|
-
cwd,
|
|
84431
|
-
settings: fastModeSettings,
|
|
84432
|
-
scope: fastModeScope
|
|
84433
|
-
});
|
|
84715
|
+
const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastModeForModel);
|
|
84434
84716
|
if (filteredCandidates.skippedAttempts.length)
|
|
84435
84717
|
result2.modelAttempts = [...filteredCandidates.skippedAttempts, ...result2.modelAttempts ?? []];
|
|
84436
84718
|
await control.deliverChildResult({
|