@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.
Files changed (191) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/README.md +4 -4
  3. package/dist/builtin/intercom/CHANGELOG.md +42 -0
  4. package/dist/builtin/intercom/README.md +18 -17
  5. package/dist/builtin/intercom/broker/broker.ts +43 -18
  6. package/dist/builtin/intercom/broker/client.ts +138 -7
  7. package/dist/builtin/intercom/broker/group-isolation.ts +3 -3
  8. package/dist/builtin/intercom/broker/group-membership.ts +55 -0
  9. package/dist/builtin/intercom/broker/presence-handler.ts +62 -50
  10. package/dist/builtin/intercom/broker/send-handler.ts +2 -3
  11. package/dist/builtin/intercom/group.ts +40 -0
  12. package/dist/builtin/intercom/index.bundle.mjs +490 -183
  13. package/dist/builtin/intercom/package.json +2 -2
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +16 -10
  15. package/dist/builtin/intercom/types.ts +24 -2
  16. package/dist/builtin/mcp/index.bundle.mjs +202 -52
  17. package/dist/builtin/mcp/package.json +2 -2
  18. package/dist/builtin/subagents/CHANGELOG.md +51 -0
  19. package/dist/builtin/subagents/README.md +3 -3
  20. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  21. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  22. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  23. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  24. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  27. package/dist/builtin/subagents/agents/debugger.md +1 -1
  28. package/dist/builtin/subagents/agents/worker.md +1 -1
  29. package/dist/builtin/subagents/package.json +3 -3
  30. package/dist/builtin/subagents/src/extension/index.bundle.mjs +422 -140
  31. package/dist/builtin/web-access/index.bundle.mjs +202 -52
  32. package/dist/builtin/web-access/package.json +2 -2
  33. package/dist/builtin/workflows/CHANGELOG.md +70 -0
  34. package/dist/builtin/workflows/README.md +2 -2
  35. package/dist/builtin/workflows/builtin/{chunk-h5e65g7g.js → chunk-3y1hmzw6.js} +36 -6
  36. package/dist/builtin/workflows/builtin/{chunk-nqr34qp3.js → chunk-6rbajjf5.js} +7 -1
  37. package/dist/builtin/workflows/builtin/{chunk-qe6bfpbd.js → chunk-bz1c9732.js} +15 -3
  38. package/dist/builtin/workflows/builtin/{chunk-8v8wmb7z.js → chunk-dattsgxg.js} +1 -1
  39. package/dist/builtin/workflows/builtin/{chunk-17zk6ffd.js → chunk-gdx0avpx.js} +355 -67
  40. package/dist/builtin/workflows/builtin/{chunk-rbnj9621.js → chunk-w9c7rkrk.js} +1 -1
  41. package/dist/builtin/workflows/builtin/goal.js +3 -3
  42. package/dist/builtin/workflows/builtin/index.js +5 -5
  43. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  44. package/dist/builtin/workflows/builtin/ralph.js +3 -3
  45. package/dist/builtin/workflows/package.json +2 -2
  46. package/dist/builtin/workflows/src/extension/index.bundle.mjs +531 -143
  47. package/dist/builtin/workflows/src/index.js +212 -72
  48. package/dist/cli/args.js +6 -6
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/cli/config-selector.d.ts.map +1 -1
  51. package/dist/cli/config-selector.js +2 -1
  52. package/dist/cli/config-selector.js.map +1 -1
  53. package/dist/cli/session-picker.d.ts +2 -1
  54. package/dist/cli/session-picker.d.ts.map +1 -1
  55. package/dist/cli/session-picker.js +3 -2
  56. package/dist/cli/session-picker.js.map +1 -1
  57. package/dist/cli/startup-ui.d.ts.map +1 -1
  58. package/dist/cli/startup-ui.js +2 -1
  59. package/dist/cli/startup-ui.js.map +1 -1
  60. package/dist/core/agent-session-methods.d.ts +1 -0
  61. package/dist/core/agent-session-methods.d.ts.map +1 -1
  62. package/dist/core/agent-session-methods.js.map +1 -1
  63. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  64. package/dist/core/agent-session-post-tool-compaction.js +3 -6
  65. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  66. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  67. package/dist/core/agent-session-prompt.js +3 -1
  68. package/dist/core/agent-session-prompt.js.map +1 -1
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +6 -3
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-state.d.ts.map +1 -1
  73. package/dist/core/agent-session-state.js +7 -5
  74. package/dist/core/agent-session-state.js.map +1 -1
  75. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  76. package/dist/core/agent-session-tool-hooks.js +37 -23
  77. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  78. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  79. package/dist/core/agent-session-tool-registry.js +9 -2
  80. package/dist/core/agent-session-tool-registry.js.map +1 -1
  81. package/dist/core/agent-session.d.ts +2 -0
  82. package/dist/core/agent-session.d.ts.map +1 -1
  83. package/dist/core/agent-session.js +2 -0
  84. package/dist/core/agent-session.js.map +1 -1
  85. package/dist/core/builtin-packages.d.ts +4 -0
  86. package/dist/core/builtin-packages.d.ts.map +1 -1
  87. package/dist/core/builtin-packages.js +22 -1
  88. package/dist/core/builtin-packages.js.map +1 -1
  89. package/dist/core/callback-activity.d.ts.map +1 -1
  90. package/dist/core/callback-activity.js +6 -3
  91. package/dist/core/callback-activity.js.map +1 -1
  92. package/dist/core/extensions/loader-core.d.ts +1 -0
  93. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  94. package/dist/core/extensions/loader-core.js +11 -1
  95. package/dist/core/extensions/loader-core.js.map +1 -1
  96. package/dist/core/extensions/loader.d.ts +1 -1
  97. package/dist/core/extensions/loader.d.ts.map +1 -1
  98. package/dist/core/extensions/loader.js +1 -1
  99. package/dist/core/extensions/loader.js.map +1 -1
  100. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  101. package/dist/core/extensions/runner-registries.js +9 -4
  102. package/dist/core/extensions/runner-registries.js.map +1 -1
  103. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  104. package/dist/core/extensions/runner-shortcuts.js +1 -0
  105. package/dist/core/extensions/runner-shortcuts.js.map +1 -1
  106. package/dist/core/keybindings.d.ts +5 -0
  107. package/dist/core/keybindings.d.ts.map +1 -1
  108. package/dist/core/keybindings.js +4 -0
  109. package/dist/core/keybindings.js.map +1 -1
  110. package/dist/core/mandatory-resource-loader.d.ts +6 -0
  111. package/dist/core/mandatory-resource-loader.d.ts.map +1 -0
  112. package/dist/core/mandatory-resource-loader.js +94 -0
  113. package/dist/core/mandatory-resource-loader.js.map +1 -0
  114. package/dist/core/mandatory-runtime-tools.d.ts +10 -0
  115. package/dist/core/mandatory-runtime-tools.d.ts.map +1 -0
  116. package/dist/core/mandatory-runtime-tools.js +31 -0
  117. package/dist/core/mandatory-runtime-tools.js.map +1 -0
  118. package/dist/core/model-resolver-defaults.js +1 -1
  119. package/dist/core/model-resolver-defaults.js.map +1 -1
  120. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  121. package/dist/core/resource-loader-reload.js +24 -13
  122. package/dist/core/resource-loader-reload.js.map +1 -1
  123. package/dist/core/sdk.d.ts.map +1 -1
  124. package/dist/core/sdk.js +2 -0
  125. package/dist/core/sdk.js.map +1 -1
  126. package/dist/core/settings-manager-ui-accessors.d.ts +4 -1
  127. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  128. package/dist/core/settings-manager-ui-accessors.js +22 -0
  129. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  130. package/dist/core/settings-types.d.ts +4 -0
  131. package/dist/core/settings-types.d.ts.map +1 -1
  132. package/dist/core/settings-types.js.map +1 -1
  133. package/dist/core/slash-commands.js +1 -1
  134. package/dist/core/slash-commands.js.map +1 -1
  135. package/dist/main-session.d.ts.map +1 -1
  136. package/dist/main-session.js +3 -2
  137. package/dist/main-session.js.map +1 -1
  138. package/dist/main.d.ts.map +1 -1
  139. package/dist/main.js +6 -0
  140. package/dist/main.js.map +1 -1
  141. package/dist/modes/interactive/components/fast-mode-selector.js +2 -2
  142. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  143. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  144. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  145. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  146. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  147. package/dist/modes/interactive/components/settings-selector-items.js +7 -0
  148. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  149. package/dist/modes/interactive/components/settings-selector-types.d.ts +2 -0
  150. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  151. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  152. package/dist/modes/interactive/interactive-agent-events.js +2 -1
  153. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  154. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  155. package/dist/modes/interactive/interactive-deferred-startup.js +1 -0
  156. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  157. package/dist/modes/interactive/interactive-input-handling.js +3 -0
  158. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  159. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  160. package/dist/modes/interactive/interactive-mode-base.js +15 -1
  161. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  162. package/dist/modes/interactive/interactive-mode-surface.d.ts +6 -1
  163. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  164. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  165. package/dist/modes/interactive/interactive-selectors.js +6 -1
  166. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  167. package/dist/modes/interactive/interactive-session-runtime.js +3 -0
  168. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  169. package/dist/modes/interactive/interactive-slash-commands.js +7 -12
  170. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  171. package/dist/modes/interactive/interactive-tui.d.ts +1 -0
  172. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  173. package/dist/modes/interactive/interactive-tui.js +16 -0
  174. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  175. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  176. package/dist/modes/rpc/rpc-session-binding.js +2 -0
  177. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  178. package/docs/compaction.md +1 -1
  179. package/docs/environment-variables.md +2 -0
  180. package/docs/extensions.md +1 -1
  181. package/docs/intercom.md +29 -24
  182. package/docs/keybindings.md +5 -2
  183. package/docs/packages.md +1 -1
  184. package/docs/providers.md +2 -2
  185. package/docs/sdk.md +9 -7
  186. package/docs/settings.md +9 -3
  187. package/docs/subagents.md +2 -2
  188. package/docs/usage.md +7 -6
  189. package/docs/workflows.md +11 -7
  190. package/npm-shrinkwrap.json +59 -77
  191. package/package.json +7 -7
@@ -9230,11 +9230,13 @@ function runSynchronousCallback(descriptor, callback) {
9230
9230
  }
9231
9231
  }
9232
9232
  async function runCallback(descriptor, callback) {
9233
+ if (!reporter)
9234
+ return callback();
9235
+ await yieldToEventLoop();
9233
9236
  const active = beginActivity(descriptor);
9234
9237
  if (!active)
9235
9238
  return callback();
9236
9239
  try {
9237
- await yieldToEventLoop();
9238
9240
  return await callback();
9239
9241
  } finally {
9240
9242
  active.reporter.finished(active.activity.id);
@@ -11966,12 +11968,34 @@ var init_runner_events = __esm(() => {
11966
11968
  init_callback_activity();
11967
11969
  });
11968
11970
 
11971
+ // src/core/mandatory-runtime-tools.ts
11972
+ function isTrustedMandatoryRuntimeTool(registration) {
11973
+ return MANDATORY_TOOL_NAMES.has(registration.definition.name) && TRUSTED_MANDATORY_DEFINITIONS.has(registration.definition);
11974
+ }
11975
+ function isMandatoryRuntimeTool(name) {
11976
+ return MANDATORY_TOOL_NAMES.has(name);
11977
+ }
11978
+ function appendRegisteredMandatoryTools(tools, registry) {
11979
+ for (const name of MANDATORY_TOOL_NAMES) {
11980
+ const tool = registry.get(name);
11981
+ if (tool && !tools.some((candidate) => candidate.name === name))
11982
+ tools.push(tool);
11983
+ }
11984
+ return tools;
11985
+ }
11986
+ var MANDATORY_TOOL_NAMES, TRUSTED_MANDATORY_DEFINITIONS;
11987
+ var init_mandatory_runtime_tools = __esm(() => {
11988
+ MANDATORY_TOOL_NAMES = new Set(["intercom"]);
11989
+ TRUSTED_MANDATORY_DEFINITIONS = new WeakSet;
11990
+ });
11991
+
11969
11992
  // src/core/extensions/runner-registries.ts
11970
11993
  function collectRegisteredTools(extensions) {
11971
11994
  const toolsByName = new Map;
11972
11995
  for (const ext of extensions) {
11973
11996
  for (const tool of ext.tools.values()) {
11974
- if (!toolsByName.has(tool.definition.name)) {
11997
+ const existing = toolsByName.get(tool.definition.name);
11998
+ if (!existing || isMandatoryRuntimeTool(tool.definition.name) && isTrustedMandatoryRuntimeTool(tool)) {
11975
11999
  toolsByName.set(tool.definition.name, tool);
11976
12000
  }
11977
12001
  }
@@ -11979,13 +12003,16 @@ function collectRegisteredTools(extensions) {
11979
12003
  return Array.from(toolsByName.values());
11980
12004
  }
11981
12005
  function findToolDefinition(extensions, toolName) {
12006
+ let first;
11982
12007
  for (const ext of extensions) {
11983
12008
  const tool = ext.tools.get(toolName);
11984
- if (tool) {
12009
+ if (!tool)
12010
+ continue;
12011
+ first ??= tool;
12012
+ if (isMandatoryRuntimeTool(toolName) && isTrustedMandatoryRuntimeTool(tool))
11985
12013
  return tool.definition;
11986
- }
11987
12014
  }
11988
- return;
12015
+ return first?.definition;
11989
12016
  }
11990
12017
  function collectFlags(extensions) {
11991
12018
  const allFlags = new Map;
@@ -12053,6 +12080,9 @@ function resolveRegisteredCommands(extensions) {
12053
12080
  return { ...command, invocationName };
12054
12081
  });
12055
12082
  }
12083
+ var init_runner_registries = __esm(() => {
12084
+ init_mandatory_runtime_tools();
12085
+ });
12056
12086
 
12057
12087
  // src/core/extensions/runner-shortcuts.ts
12058
12088
  function resolveExtensionShortcuts(extensions, resolvedKeybindings, hasUI) {
@@ -12116,6 +12146,7 @@ var init_runner_shortcuts = __esm(() => {
12116
12146
  "app.thinking.toggle",
12117
12147
  "app.editor.external",
12118
12148
  "app.message.followUp",
12149
+ "app.message.copy",
12119
12150
  "tui.input.submit",
12120
12151
  "tui.select.confirm",
12121
12152
  "tui.select.cancel",
@@ -12579,6 +12610,7 @@ var init_runner = __esm(() => {
12579
12610
  init_loader_runtime();
12580
12611
  init_runner_context();
12581
12612
  init_runner_events();
12613
+ init_runner_registries();
12582
12614
  init_runner_shortcuts();
12583
12615
  init_runner_ui();
12584
12616
  init_stale_context();
@@ -14782,11 +14814,13 @@ async function _runAgentContinue() {
14782
14814
  }
14783
14815
  async function _continueQueuedAgentMessages() {
14784
14816
  await this._agentEventQueue;
14785
- while (!this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
14817
+ while (!this._stopAfterTurnBlockedContinuation && !this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
14786
14818
  await this.agent.continue();
14787
14819
  await this.waitForRetry();
14788
14820
  await this._agentEventQueue;
14789
14821
  }
14822
+ if (this._stopAfterTurnBlockedContinuation)
14823
+ return;
14790
14824
  await answerAdmittedQueuedMessage(this);
14791
14825
  }
14792
14826
  async function answerAdmittedQueuedMessage(session) {
@@ -16177,14 +16211,13 @@ function getToolDefinition(name) {
16177
16211
  }
16178
16212
  function setActiveToolsByName(toolNames) {
16179
16213
  const tools = [];
16180
- const validToolNames = [];
16181
16214
  for (const name of toolNames) {
16182
16215
  const tool = this._toolRegistry.get(name);
16183
- if (tool) {
16216
+ if (tool)
16184
16217
  tools.push(tool);
16185
- validToolNames.push(name);
16186
- }
16187
16218
  }
16219
+ appendRegisteredMandatoryTools(tools, this._toolRegistry);
16220
+ const validToolNames = tools.map((tool) => tool.name);
16188
16221
  this.agent.state.tools = tools;
16189
16222
  this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
16190
16223
  this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
@@ -16241,7 +16274,7 @@ function _rebuildSystemPrompt(toolNames) {
16241
16274
  customPrompt: loaderSystemPrompt,
16242
16275
  appendSystemPrompt,
16243
16276
  selectedTools: validToolNames,
16244
- excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames) : undefined,
16277
+ excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames).filter((name) => !isMandatoryRuntimeTool(name)) : undefined,
16245
16278
  toolSnippets,
16246
16279
  promptGuidelines
16247
16280
  };
@@ -16254,6 +16287,7 @@ function _refreshBaseSystemPromptFromActiveTools() {
16254
16287
  }
16255
16288
  var agentSessionStateMethods;
16256
16289
  var init_agent_session_state = __esm(() => {
16290
+ init_mandatory_runtime_tools();
16257
16291
  init_skill_catalog();
16258
16292
  init_system_prompt();
16259
16293
  agentSessionStateMethods = {
@@ -17281,6 +17315,17 @@ function _installAgentToolHooks() {
17281
17315
  }
17282
17316
  function _installAgentNextTurnRefresh() {
17283
17317
  const previousPrepareNextTurnWithContext = this.agent.prepareNextTurnWithContext ?? (this.agent.prepareNextTurn ? async (_turn, signal) => await this.agent.prepareNextTurn?.(signal) : undefined);
17318
+ const previousShouldStopAfterTurn = this.agent.shouldStopAfterTurn;
17319
+ this.agent.shouldStopAfterTurn = async (turn, signal) => {
17320
+ const toolCallIds = turn.message.content.filter((part) => part.type === "toolCall").map((part) => part.id);
17321
+ const terminatingBatch = toolCallIds.length > 0 && toolCallIds.every((id) => this._terminatingToolCallIds.has(id));
17322
+ for (const id of toolCallIds)
17323
+ this._terminatingToolCallIds.delete(id);
17324
+ const shouldStop = await previousShouldStopAfterTurn?.(turn, signal) ?? false;
17325
+ this._stopAfterTurnBlockedContinuation = shouldStop;
17326
+ await settleFallbackAfterTurn(this, turn, terminatingBatch);
17327
+ return shouldStop;
17328
+ };
17284
17329
  const previousTransformContext = this.agent.transformContext;
17285
17330
  this.agent.transformContext = async (messages, signal) => {
17286
17331
  const transformed = previousTransformContext ? await previousTransformContext(messages, signal) : messages;
@@ -17288,24 +17333,17 @@ function _installAgentNextTurnRefresh() {
17288
17333
  assertToolPairingInvariant(guarded);
17289
17334
  return guarded;
17290
17335
  };
17291
- this.agent.prepareNextTurnWithContext = async (turn, signal) => {
17292
- const previousSnapshot = await previousPrepareNextTurnWithContext?.(turn, signal);
17293
- const previousContext = previousSnapshot?.context ?? turn.context;
17294
- const toolCallIds = turn.message.content.filter((part) => part.type === "toolCall").map((part) => part.id);
17295
- const terminatingBatch = toolCallIds.length > 0 && toolCallIds.every((id) => this._terminatingToolCallIds.has(id));
17296
- for (const id of toolCallIds)
17297
- this._terminatingToolCallIds.delete(id);
17298
- const messages = turn.toolResults.length > 0 && !terminatingBatch ? await this._preflightPostToolContext(previousContext.messages, signal) : previousContext.messages;
17299
- const preserveFallbackForFailure = turn.message.role === "assistant" && !this.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || this._isEmptyCompletion?.(turn.message) === true || this._isSafetyRefusal?.(turn.message) === true);
17300
- if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
17301
- await this._agentEventQueue;
17302
- await this._settleFallbackModelScope();
17303
- }
17336
+ const prepareTurn = async (turn, signal) => {
17337
+ const compactedMessages = turn.toolResults.length > 0 ? await this._preflightPostToolContext(turn.context.messages, signal) : turn.context.messages;
17338
+ const compactedContext = compactedMessages === turn.context.messages ? turn.context : { ...turn.context, messages: compactedMessages };
17339
+ const preparedTurn = compactedContext === turn.context ? turn : { ...turn, context: compactedContext };
17340
+ const previousSnapshot = await previousPrepareNextTurnWithContext?.(preparedTurn, signal);
17341
+ const previousContext = previousSnapshot?.context ?? compactedContext;
17304
17342
  return {
17305
17343
  ...previousSnapshot,
17306
17344
  context: {
17307
17345
  ...previousContext,
17308
- messages,
17346
+ messages: previousContext.messages,
17309
17347
  systemPrompt: this._systemPromptOverride ?? this._baseSystemPrompt,
17310
17348
  tools: this.agent.state.tools.slice()
17311
17349
  },
@@ -17313,6 +17351,14 @@ function _installAgentNextTurnRefresh() {
17313
17351
  thinkingLevel: this.agent.state.thinkingLevel
17314
17352
  };
17315
17353
  };
17354
+ this.agent.prepareNextTurnWithContext = prepareTurn;
17355
+ }
17356
+ async function settleFallbackAfterTurn(session, turn, terminatingBatch) {
17357
+ const preserveFallbackForFailure = turn.message.role === "assistant" && !session.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || session._isEmptyCompletion?.(turn.message) === true || session._isSafetyRefusal?.(turn.message) === true);
17358
+ if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
17359
+ await session._agentEventQueue;
17360
+ await session._settleFallbackModelScope();
17361
+ }
17316
17362
  }
17317
17363
  var agentSessionToolHooksMethods;
17318
17364
  var init_agent_session_tool_hooks = __esm(() => {
@@ -17395,6 +17441,7 @@ var init_loader_virtual_modules = __esm(() => {
17395
17441
  });
17396
17442
 
17397
17443
  // src/core/extensions/loader-core.ts
17444
+ var runtimeEventBuses;
17398
17445
  var init_loader_core = __esm(() => {
17399
17446
  init_event_loop();
17400
17447
  init_paths();
@@ -17404,6 +17451,7 @@ var init_loader_core = __esm(() => {
17404
17451
  init_loader_resources();
17405
17452
  init_loader_runtime();
17406
17453
  init_loader_virtual_modules();
17454
+ runtimeEventBuses = new WeakMap;
17407
17455
  });
17408
17456
 
17409
17457
  // src/core/package-manager-manifest.ts
@@ -22497,7 +22545,7 @@ class FastModeSelectorComponent {
22497
22545
  }
22498
22546
  invalidate() {}
22499
22547
  render(width) {
22500
- const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "Codex fast mode")), width)];
22548
+ const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "Fast mode")), width)];
22501
22549
  for (const line of wrapTextWithAnsi3(DESCRIPTION, Math.max(20, width))) {
22502
22550
  lines.push(theme.fg("muted", line));
22503
22551
  }
@@ -22580,7 +22628,7 @@ class FastModeSelectorComponent {
22580
22628
  return this.getFocusedRow() === row ? theme.fg("muted", text) : theme.fg("dim", text);
22581
22629
  }
22582
22630
  }
22583
- var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "Priority tier for supported OpenAI and shared ChatGPT Codex transports.", ROW_DETAILS;
22631
+ var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "Use faster routing for the selected model when supported by its provider.", ROW_DETAILS;
22584
22632
  var init_fast_mode_selector = __esm(() => {
22585
22633
  init_theme();
22586
22634
  ROWS = ["chat", "workflow"];
@@ -23807,6 +23855,10 @@ var init_keybindings = __esm(() => {
23807
23855
  defaultKeys: windowsKeybindings ? "alt+q" : "alt+up",
23808
23856
  description: "Restore queued messages"
23809
23857
  },
23858
+ "app.message.copy": {
23859
+ defaultKeys: "ctrl+x",
23860
+ description: "Copy fullscreen selection or last agent message"
23861
+ },
23810
23862
  "app.clipboard.pasteImage": {
23811
23863
  defaultKeys: windowsKeybindings ? "alt+v" : "ctrl+v",
23812
23864
  description: "Paste image from clipboard (text fallback)"
@@ -25192,6 +25244,9 @@ function createSettingsChangeHandler(callbacks) {
25192
25244
  case "fullscreen-exit-output":
25193
25245
  callbacks.onFullscreenExitOutputChange(newValue);
25194
25246
  break;
25247
+ case "fullscreen-copy-on-select":
25248
+ callbacks.onFullscreenCopyOnSelectChange(newValue === "true");
25249
+ break;
25195
25250
  case "editor-padding":
25196
25251
  callbacks.onEditorPaddingXChange(parseInt(newValue, 10));
25197
25252
  break;
@@ -25579,6 +25634,13 @@ function insertUiToggles(items, config) {
25579
25634
  values: ["transcript", "resume-hint"]
25580
25635
  });
25581
25636
  insertAfter(items, "fullscreen-exit-output", {
25637
+ id: "fullscreen-copy-on-select",
25638
+ label: "Fullscreen copy on select",
25639
+ description: "Copy selected transcript text automatically on mouse release",
25640
+ currentValue: config.fullscreenCopyOnSelect ? "true" : "false",
25641
+ values: ["true", "false"]
25642
+ });
25643
+ insertAfter(items, "fullscreen-copy-on-select", {
25582
25644
  id: "editor-padding",
25583
25645
  label: "Editor padding",
25584
25646
  description: "Horizontal padding for input editor (0-3)",
@@ -38653,6 +38715,8 @@ function _refreshToolRegistry(options) {
38653
38715
  const allowedToolNames = this._allowedToolNames;
38654
38716
  const excludedToolNames = this._excludedToolNames;
38655
38717
  const isExposedTool = (name) => {
38718
+ if (isMandatoryRuntimeTool(name))
38719
+ return true;
38656
38720
  if (allowedToolNames && !allowedToolNames.has(name)) {
38657
38721
  return false;
38658
38722
  }
@@ -38661,10 +38725,10 @@ function _refreshToolRegistry(options) {
38661
38725
  }
38662
38726
  return true;
38663
38727
  };
38664
- const registeredTools = this._extensionRunner.getAllRegisteredTools();
38728
+ const registeredTools = this._extensionRunner.getAllRegisteredTools().filter((tool) => !isMandatoryRuntimeTool(tool.definition.name) || isTrustedMandatoryRuntimeTool(tool));
38665
38729
  const allCustomTools = [
38666
38730
  ...registeredTools,
38667
- ...this._customTools.map((definition) => ({
38731
+ ...this._customTools.filter((definition) => !isMandatoryRuntimeTool(definition.name)).map((definition) => ({
38668
38732
  definition,
38669
38733
  sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" })
38670
38734
  }))
@@ -38785,6 +38849,7 @@ function _buildRuntime(options) {
38785
38849
  var agentSessionToolRegistryMethods;
38786
38850
  var init_agent_session_tool_registry = __esm(() => {
38787
38851
  init_extensions();
38852
+ init_mandatory_runtime_tools();
38788
38853
  init_model_registry();
38789
38854
  init_tools();
38790
38855
  init_session_temp_dir();
@@ -39627,6 +39692,7 @@ class AgentSessionBase {
39627
39692
  _postToolCompactionPreflightError = undefined;
39628
39693
  _pendingPostToolCompactionGuard = undefined;
39629
39694
  _terminatingToolCallIds = new Set;
39695
+ _stopAfterTurnBlockedContinuation = false;
39630
39696
  _disposed = false;
39631
39697
  _branchSummaryAbortController = undefined;
39632
39698
  _sessionSummaryAbortController = undefined;
@@ -39775,11 +39841,12 @@ var init_builtin_packages = __esm(() => {
39775
39841
  { packageName: "@bastani/subagents", workspaceDirName: "subagents", distDirName: "subagents" },
39776
39842
  { packageName: "@bastani/mcp", workspaceDirName: "mcp", distDirName: "mcp" },
39777
39843
  { packageName: "@bastani/web-access", workspaceDirName: "web-access", distDirName: "web-access" },
39778
- { packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom" }
39844
+ { packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom", mandatory: true }
39779
39845
  ];
39780
39846
  BUILTIN_PACKAGES = WORKSPACE_BUILTINS.map((spec) => ({
39781
39847
  packageName: spec.packageName,
39782
39848
  distDirName: spec.distDirName,
39849
+ mandatory: spec.mandatory === true,
39783
39850
  requiredEntries: requiredEntriesForBuiltin(spec.distDirName),
39784
39851
  sourceCandidates: ({ here, packageDir, isSourceCheckout }) => isSourceCheckout ? [join37(packageDir, "..", spec.workspaceDirName), join37(here, "..", "..", "..", spec.workspaceDirName)] : []
39785
39852
  }));
@@ -43098,7 +43165,9 @@ var init_resource_loader_extensions = __esm(() => {
43098
43165
  var init_resource_loader_reload = __esm(() => {
43099
43166
  init_event_loop();
43100
43167
  init_paths();
43168
+ init_builtin_packages();
43101
43169
  init_loader();
43170
+ init_mandatory_runtime_tools();
43102
43171
  init_resource_loader_assets();
43103
43172
  init_resource_loader_context_files();
43104
43173
  init_resource_loader_discovery();
@@ -44255,6 +44324,28 @@ var init_settings_manager_ui_accessors = __esm(() => {
44255
44324
  state.markModified("fullscreenExitOutput");
44256
44325
  state.save();
44257
44326
  },
44327
+ getFullscreenCopyOnSelect() {
44328
+ return settingsInternals(this).settings.fullscreenCopyOnSelect !== false;
44329
+ },
44330
+ setFullscreenCopyOnSelect(enabled) {
44331
+ const state = settingsInternals(this);
44332
+ state.globalSettings.fullscreenCopyOnSelect = enabled;
44333
+ state.markModified("fullscreenCopyOnSelect");
44334
+ state.save();
44335
+ },
44336
+ getTerminalCapabilityOverrides() {
44337
+ const terminal = settingsInternals(this).settings.terminal;
44338
+ const overrides = {};
44339
+ if (typeof terminal?.hyperlinks === "boolean")
44340
+ overrides.hyperlinks = terminal.hyperlinks;
44341
+ if (terminal?.images === "kitty" || terminal?.images === "iterm2")
44342
+ overrides.images = terminal.images;
44343
+ else if (terminal?.images === false)
44344
+ overrides.images = null;
44345
+ if (typeof terminal?.trueColor === "boolean")
44346
+ overrides.trueColor = terminal.trueColor;
44347
+ return overrides;
44348
+ },
44258
44349
  getEditorPaddingX() {
44259
44350
  return settingsInternals(this).settings.editorPaddingX ?? 0;
44260
44351
  },
@@ -44400,6 +44491,14 @@ var init_resource_loader = __esm(() => {
44400
44491
  init_resource_loader_core();
44401
44492
  init_skill_catalog();
44402
44493
  });
44494
+ // src/core/mandatory-resource-loader.ts
44495
+ var init_mandatory_resource_loader = __esm(() => {
44496
+ init_builtin_packages();
44497
+ init_loader();
44498
+ init_mandatory_runtime_tools();
44499
+ init_skill_catalog();
44500
+ });
44501
+
44403
44502
  // src/core/model-resolver-defaults.ts
44404
44503
  function findPreferredAvailableModel(availableModels) {
44405
44504
  for (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {
@@ -44440,7 +44539,7 @@ var init_model_resolver_defaults = __esm(() => {
44440
44539
  huggingface: "moonshotai/Kimi-K2.6",
44441
44540
  fireworks: "accounts/fireworks/models/kimi-k2p6",
44442
44541
  together: "moonshotai/Kimi-K2.6",
44443
- baseten: "zai-org/GLM-5.2",
44542
+ baseten: "zai-org/GLM-5.3",
44444
44543
  opencode: "kimi-k2.6",
44445
44544
  "opencode-go": "kimi-k2.6",
44446
44545
  "kimi-coding": "kimi-for-coding",
@@ -45098,6 +45197,7 @@ var init_session_cwd = __esm(() => {
45098
45197
  var init_agent_session_services = __esm(() => {
45099
45198
  init_config();
45100
45199
  init_paths();
45200
+ init_mandatory_resource_loader();
45101
45201
  init_model_runtime();
45102
45202
  init_resource_loader();
45103
45203
  init_sdk();
@@ -45434,6 +45534,7 @@ var init_sdk = __esm(() => {
45434
45534
  init_agent_session();
45435
45535
  init_auth_guidance();
45436
45536
  init_codex_fast_mode();
45537
+ init_mandatory_resource_loader();
45437
45538
  init_messages();
45438
45539
  init_model_resolver();
45439
45540
  init_model_runtime();
@@ -45537,7 +45638,12 @@ var init_list_models = __esm(() => {
45537
45638
  });
45538
45639
 
45539
45640
  // src/cli/startup-ui.ts
45540
- import { ProcessTerminal, setKeybindings, TuiMainScreen } from "@earendil-works/pi-tui";
45641
+ import {
45642
+ ProcessTerminal,
45643
+ setCapabilityOverrides,
45644
+ setKeybindings,
45645
+ TuiMainScreen
45646
+ } from "@earendil-works/pi-tui";
45541
45647
  var init_startup_ui = __esm(() => {
45542
45648
  init_config();
45543
45649
  init_keybindings();
@@ -45625,7 +45731,7 @@ var init_main_first_time_setup = __esm(() => {
45625
45731
  init_startup_ui();
45626
45732
  });
45627
45733
  // src/cli/session-picker.ts
45628
- import { ProcessTerminal as ProcessTerminal2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
45734
+ import { ProcessTerminal as ProcessTerminal2, setCapabilityOverrides as setCapabilityOverrides2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
45629
45735
  var init_session_picker = __esm(() => {
45630
45736
  init_config();
45631
45737
  init_keybindings();
@@ -45633,7 +45739,7 @@ var init_session_picker = __esm(() => {
45633
45739
  });
45634
45740
 
45635
45741
  // src/main-session.ts
45636
- import { ProcessTerminal as ProcessTerminal3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
45742
+ import { ProcessTerminal as ProcessTerminal3, setCapabilityOverrides as setCapabilityOverrides3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
45637
45743
  import chalk10 from "chalk";
45638
45744
  var init_main_session = __esm(() => {
45639
45745
  init_session_picker();
@@ -48451,7 +48557,7 @@ var init_slash_commands = __esm(() => {
48451
48557
  { name: "tree", description: "Navigate session tree (switch branches)" },
48452
48558
  { name: "thinking", description: "Set thinking level", argumentHint: "<level>" },
48453
48559
  { name: "scoped-models", description: "Enable/disable models for ctrl+p cycling" },
48454
- { name: "fast", description: "Configure OpenAI fast mode for chat and workflows in supported models" },
48560
+ { name: "fast", description: "Configure fast mode for chat and workflows on supported models" },
48455
48561
  { name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
48456
48562
  { name: "import", description: "Import and resume a session from a JSONL file" },
48457
48563
  { name: "share", description: "Share session as a secret GitHub gist" },
@@ -49077,6 +49183,7 @@ function createFullscreenTui(options) {
49077
49183
  openUrl: openBrowser
49078
49184
  }),
49079
49185
  onRightClickPaste: options.onRightClickPaste,
49186
+ copyOnSelect: options.copyOnSelect,
49080
49187
  copySelection: options.copySelection ?? copySelectionToHostClipboard
49081
49188
  }, options.shouldHandleViewportInput, options.onOverlayUnhandledInput);
49082
49189
  }
@@ -49118,7 +49225,7 @@ function createInteractiveTuiReference(getTui) {
49118
49225
  getPrototypeOf: () => Reflect.getPrototypeOf(getTui())
49119
49226
  });
49120
49227
  }
49121
- var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
49228
+ var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, overlayOwnedSelections, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
49122
49229
  var init_interactive_tui = __esm(() => {
49123
49230
  init_clipboard();
49124
49231
  init_open_browser();
@@ -49127,6 +49234,7 @@ var init_interactive_tui = __esm(() => {
49127
49234
  viewportInputGates = new WeakMap;
49128
49235
  overlayUnhandledInputHandlers = new WeakMap;
49129
49236
  viewportInputReplays = new WeakSet;
49237
+ overlayOwnedSelections = new WeakSet;
49130
49238
  viewportInputSubscriptions = new WeakMap;
49131
49239
  SGR_MOUSE_SEQUENCE = /^\x1b\[<(\d+);\d+;\d+([Mm])/;
49132
49240
  LEFT_MOUSE_MODIFIER_MASK = 4 | 8 | 16;
@@ -49142,8 +49250,20 @@ var init_interactive_tui = __esm(() => {
49142
49250
  deferral.shouldDeferViewportInputToOverlay = () => !viewportInputReplays.has(this) && deferToOverlay?.() === true;
49143
49251
  }
49144
49252
  applyLineResets(lines) {
49253
+ if (overlayOwnedSelections.has(this) && !this.isFocusedOverlay())
49254
+ this.clearOverlayOwnedSelection();
49145
49255
  return stripOverlayActiveRowMarker(super.applyLineResets(lines));
49146
49256
  }
49257
+ clearOverlayOwnedSelection() {
49258
+ const selection = this;
49259
+ selection.selectionAnchor = undefined;
49260
+ selection.selectionFocus = undefined;
49261
+ selection.selectionInitialRange = undefined;
49262
+ selection.selectionPressActive = false;
49263
+ selection.selectionDragged = false;
49264
+ selection.lastClick = undefined;
49265
+ overlayOwnedSelections.delete(this);
49266
+ }
49147
49267
  isPiTuiMouseSequence(data) {
49148
49268
  if (parseMouseSequences(data))
49149
49269
  return true;
@@ -49220,6 +49340,7 @@ var init_interactive_tui = __esm(() => {
49220
49340
  if (isLeftMouseButton(sequence))
49221
49341
  viewportListener(sequence.data);
49222
49342
  }
49343
+ overlayOwnedSelections.add(this);
49223
49344
  }
49224
49345
  replayViewportInput(viewportListener, data) {
49225
49346
  viewportInputReplays.add(this);
@@ -49287,7 +49408,11 @@ var init_interactive_tui = __esm(() => {
49287
49408
  });
49288
49409
 
49289
49410
  // src/modes/interactive/interactive-mode-base.ts
49290
- import { isKeyRelease as isKeyRelease3, isViewportTUI } from "@earendil-works/pi-tui";
49411
+ import {
49412
+ isKeyRelease as isKeyRelease3,
49413
+ isViewportTUI,
49414
+ setCapabilityOverrides as setCapabilityOverrides4
49415
+ } from "@earendil-works/pi-tui";
49291
49416
  function isFullscreenViewportAction(data, keybindings) {
49292
49417
  return FULLSCREEN_VIEWPORT_ACTIONS.some((action) => keybindings.matches(data, action));
49293
49418
  }
@@ -49348,6 +49473,18 @@ class InteractiveModeBase {
49348
49473
  return false;
49349
49474
  return this.defaultEditor.handleInput(data);
49350
49475
  }
49476
+ setFullscreenCopyOnSelect(enabled) {
49477
+ if (this.renderer.mode === "fullscreen")
49478
+ this.renderer.setCopyOnSelect(enabled);
49479
+ }
49480
+ getFullscreenCopyOnSelect() {
49481
+ return this.renderer.mode === "fullscreen" ? this.renderer.getCopyOnSelect() : undefined;
49482
+ }
49483
+ async copyActiveFullscreenSelection() {
49484
+ if (this.renderer.mode !== "fullscreen" || !this.renderer.hasActiveSelection())
49485
+ return;
49486
+ return this.renderer.copyActiveSelectionToClipboard();
49487
+ }
49351
49488
  onRightClickPaste = () => {
49352
49489
  this.handleRightClickPaste();
49353
49490
  };
@@ -49547,11 +49684,13 @@ class InteractiveModeBase {
49547
49684
  await this.rebindCurrentSession();
49548
49685
  await this.themeController.applyFromSettings();
49549
49686
  });
49687
+ setCapabilityOverrides4(this.settingsManager.getTerminalCapabilityOverrides());
49550
49688
  this.version = VERSION;
49551
49689
  this.renderer = createInteractiveTui({
49552
49690
  showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
49553
49691
  logDirectory: runtimeHost.services.agentDir,
49554
49692
  terminal: options.terminal,
49693
+ copyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
49555
49694
  onRightClickPaste: this.onRightClickPaste,
49556
49695
  shouldHandleViewportInput: this.shouldHandleViewportInput,
49557
49696
  onOverlayUnhandledInput: this.onOverlayUnhandledInput,
@@ -50674,6 +50813,7 @@ var init_interactive_deferred_startup = __esm(() => {
50674
50813
  try {
50675
50814
  await this.bindCurrentSessionExtensions();
50676
50815
  await this.session.reload({ reason: "startup" });
50816
+ this.applyRuntimeSettings();
50677
50817
  this.rebuildChatFromMessages();
50678
50818
  if (!this.promptTurnWorkingLoaderActive) {
50679
50819
  this.stopWorkingLoader();
@@ -51362,6 +51502,7 @@ ${warningLines}`, 0, 0));
51362
51502
  });
51363
51503
 
51364
51504
  // src/modes/interactive/interactive-session-runtime.ts
51505
+ import { setCapabilityOverrides as setCapabilityOverrides5 } from "@earendil-works/pi-tui";
51365
51506
  var init_interactive_session_runtime = __esm(() => {
51366
51507
  init_interactive_mode_base();
51367
51508
  init_interactive_mode_deps();
@@ -51448,6 +51589,8 @@ var init_interactive_session_runtime = __esm(() => {
51448
51589
  }
51449
51590
  };
51450
51591
  InteractiveModeBase.prototype.applyRuntimeSettings = function() {
51592
+ setCapabilityOverrides5(this.settingsManager.getTerminalCapabilityOverrides());
51593
+ this.setFullscreenCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());
51451
51594
  this.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());
51452
51595
  this.footer.setSession(this.session);
51453
51596
  this.usageMeter.setSession(this.session);
@@ -52964,6 +53107,9 @@ var init_interactive_input_handling = __esm(() => {
52964
53107
  });
52965
53108
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
52966
53109
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
53110
+ this.defaultEditor.onAction("app.message.copy", () => {
53111
+ this.handleCopyCommand({ preferSelection: true });
53112
+ });
52967
53113
  this.defaultEditor.onAction("app.session.new", () => this.handleClearCommand());
52968
53114
  this.defaultEditor.onAction("app.session.tree", () => this.showTreeSelector());
52969
53115
  this.defaultEditor.onAction("app.session.fork", () => this.showUserMessageSelector());
@@ -53871,7 +54017,8 @@ var init_interactive_agent_events = __esm(() => {
53871
54017
  } else if (event.reason === "manual") {
53872
54018
  this.manualCompactionTakeoverPending = false;
53873
54019
  }
53874
- if (!manualTakeoverPending && this.settingsManager.getShowTerminalProgress()) {
54020
+ const resumesActiveRun = event.midTurn && !event.aborted && !event.errorMessage && !manualTakeoverPending;
54021
+ if (!manualTakeoverPending && !resumesActiveRun && this.settingsManager.getShowTerminalProgress()) {
53875
54022
  this.ui.terminal.setProgress(false);
53876
54023
  }
53877
54024
  if (!manualTakeoverPending && this.autoCompactionEscapeHandlerSaved) {
@@ -54887,7 +55034,7 @@ var init_interactive_selectors = __esm(() => {
54887
55034
  };
54888
55035
  InteractiveModeBase.prototype.showFastModeSelector = function() {
54889
55036
  if (!this.hasCodexFastModeSupportedModels()) {
54890
- this.showWarning("Codex fast mode requires a supported OpenAI or shared ChatGPT Codex transport model.");
55037
+ this.showWarning("Fast mode isn't available for any configured model.");
54891
55038
  return;
54892
55039
  }
54893
55040
  this.showSelector((done) => {
@@ -54946,6 +55093,7 @@ var init_interactive_selectors = __esm(() => {
54946
55093
  showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
54947
55094
  fullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),
54948
55095
  fullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),
55096
+ fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
54949
55097
  editorPaddingX: this.settingsManager.getEditorPaddingX(),
54950
55098
  outputPad: this.settingsManager.getOutputPad(),
54951
55099
  showCacheMissNotices: this.settingsManager.getShowCacheMissNotices(),
@@ -55063,6 +55211,10 @@ var init_interactive_selectors = __esm(() => {
55063
55211
  onFullscreenExitOutputChange: (output) => {
55064
55212
  this.settingsManager.setFullscreenExitOutput(output);
55065
55213
  },
55214
+ onFullscreenCopyOnSelectChange: (enabled) => {
55215
+ this.settingsManager.setFullscreenCopyOnSelect(enabled);
55216
+ this.setFullscreenCopyOnSelect(enabled);
55217
+ },
55066
55218
  onEditorPaddingXChange: (padding) => {
55067
55219
  this.settingsManager.setEditorPaddingX(padding);
55068
55220
  this.defaultEditor.setPaddingX(padding);
@@ -56049,18 +56201,8 @@ var init_interactive_slash_commands = __esm(() => {
56049
56201
  activeHeader.setExpanded(this.toolOutputExpanded);
56050
56202
  }
56051
56203
  setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
56052
- this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();
56204
+ this.applyRuntimeSettings();
56053
56205
  await this.themeController.applyFromSettings();
56054
- const editorPaddingX = this.settingsManager.getEditorPaddingX();
56055
- const autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();
56056
- this.defaultEditor.setPaddingX(editorPaddingX);
56057
- this.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);
56058
- if (this.editor !== this.defaultEditor) {
56059
- this.editor.setPaddingX?.(editorPaddingX);
56060
- this.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);
56061
- }
56062
- this.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());
56063
- this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
56064
56206
  this.setupAutocompleteProvider();
56065
56207
  const runner = this.session.extensionRunner;
56066
56208
  this.setupExtensionShortcuts(runner);
@@ -56253,7 +56395,12 @@ Gist: ${hyperlink3(gistUrl, gistUrl)}`);
56253
56395
  }
56254
56396
  }
56255
56397
  };
56256
- InteractiveModeBase.prototype.handleCopyCommand = async function() {
56398
+ InteractiveModeBase.prototype.handleCopyCommand = async function(options = {}) {
56399
+ if (options.preferSelection && this.getFullscreenCopyOnSelect() === false) {
56400
+ const selectionCopied = await this.copyActiveFullscreenSelection();
56401
+ if (selectionCopied !== undefined)
56402
+ return;
56403
+ }
56257
56404
  const text = this.session.getLastAssistantText();
56258
56405
  if (!text) {
56259
56406
  this.showError("No agent messages to copy yet.");
@@ -56800,6 +56947,7 @@ var init_rpc_extension_ui = __esm(() => {
56800
56947
  });
56801
56948
 
56802
56949
  // src/modes/rpc/rpc-session-binding.ts
56950
+ import { setCapabilityOverrides as setCapabilityOverrides6 } from "@earendil-works/pi-tui";
56803
56951
  var init_rpc_session_binding = __esm(() => {
56804
56952
  init_footer_data_provider();
56805
56953
  init_output_guard();
@@ -56876,7 +57024,7 @@ var init_config_selector = __esm(() => {
56876
57024
  });
56877
57025
 
56878
57026
  // src/cli/config-selector.ts
56879
- import { ProcessTerminal as ProcessTerminal6, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
57027
+ import { ProcessTerminal as ProcessTerminal6, setCapabilityOverrides as setCapabilityOverrides7, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
56880
57028
  var init_config_selector2 = __esm(() => {
56881
57029
  init_config_selector();
56882
57030
  init_theme();
@@ -56923,6 +57071,7 @@ var init_package_manager_cli = __esm(() => {
56923
57071
  });
56924
57072
 
56925
57073
  // src/main.ts
57074
+ import { setCapabilityOverrides as setCapabilityOverrides8 } from "@earendil-works/pi-tui";
56926
57075
  import chalk15 from "chalk";
56927
57076
  var init_main = __esm(() => {
56928
57077
  init_args();
@@ -56937,6 +57086,7 @@ var init_main = __esm(() => {
56937
57086
  init_auth_storage();
56938
57087
  init_builtin_packages();
56939
57088
  init_http_dispatcher();
57089
+ init_mandatory_resource_loader();
56940
57090
  init_model_resolver();
56941
57091
  init_model_runtime();
56942
57092
  init_output_guard();