@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
@@ -9224,11 +9224,13 @@ function runSynchronousCallback(descriptor, callback) {
9224
9224
  }
9225
9225
  }
9226
9226
  async function runCallback(descriptor, callback) {
9227
+ if (!reporter)
9228
+ return callback();
9229
+ await yieldToEventLoop();
9227
9230
  const active = beginActivity(descriptor);
9228
9231
  if (!active)
9229
9232
  return callback();
9230
9233
  try {
9231
- await yieldToEventLoop();
9232
9234
  return await callback();
9233
9235
  } finally {
9234
9236
  active.reporter.finished(active.activity.id);
@@ -11960,12 +11962,34 @@ var init_runner_events = __esm(() => {
11960
11962
  init_callback_activity();
11961
11963
  });
11962
11964
 
11965
+ // src/core/mandatory-runtime-tools.ts
11966
+ function isTrustedMandatoryRuntimeTool(registration) {
11967
+ return MANDATORY_TOOL_NAMES.has(registration.definition.name) && TRUSTED_MANDATORY_DEFINITIONS.has(registration.definition);
11968
+ }
11969
+ function isMandatoryRuntimeTool(name) {
11970
+ return MANDATORY_TOOL_NAMES.has(name);
11971
+ }
11972
+ function appendRegisteredMandatoryTools(tools, registry) {
11973
+ for (const name of MANDATORY_TOOL_NAMES) {
11974
+ const tool = registry.get(name);
11975
+ if (tool && !tools.some((candidate) => candidate.name === name))
11976
+ tools.push(tool);
11977
+ }
11978
+ return tools;
11979
+ }
11980
+ var MANDATORY_TOOL_NAMES, TRUSTED_MANDATORY_DEFINITIONS;
11981
+ var init_mandatory_runtime_tools = __esm(() => {
11982
+ MANDATORY_TOOL_NAMES = new Set(["intercom"]);
11983
+ TRUSTED_MANDATORY_DEFINITIONS = new WeakSet;
11984
+ });
11985
+
11963
11986
  // src/core/extensions/runner-registries.ts
11964
11987
  function collectRegisteredTools(extensions) {
11965
11988
  const toolsByName = new Map;
11966
11989
  for (const ext of extensions) {
11967
11990
  for (const tool of ext.tools.values()) {
11968
- if (!toolsByName.has(tool.definition.name)) {
11991
+ const existing = toolsByName.get(tool.definition.name);
11992
+ if (!existing || isMandatoryRuntimeTool(tool.definition.name) && isTrustedMandatoryRuntimeTool(tool)) {
11969
11993
  toolsByName.set(tool.definition.name, tool);
11970
11994
  }
11971
11995
  }
@@ -11973,13 +11997,16 @@ function collectRegisteredTools(extensions) {
11973
11997
  return Array.from(toolsByName.values());
11974
11998
  }
11975
11999
  function findToolDefinition(extensions, toolName) {
12000
+ let first;
11976
12001
  for (const ext of extensions) {
11977
12002
  const tool = ext.tools.get(toolName);
11978
- if (tool) {
12003
+ if (!tool)
12004
+ continue;
12005
+ first ??= tool;
12006
+ if (isMandatoryRuntimeTool(toolName) && isTrustedMandatoryRuntimeTool(tool))
11979
12007
  return tool.definition;
11980
- }
11981
12008
  }
11982
- return;
12009
+ return first?.definition;
11983
12010
  }
11984
12011
  function collectFlags(extensions) {
11985
12012
  const allFlags = new Map;
@@ -12047,6 +12074,9 @@ function resolveRegisteredCommands(extensions) {
12047
12074
  return { ...command, invocationName };
12048
12075
  });
12049
12076
  }
12077
+ var init_runner_registries = __esm(() => {
12078
+ init_mandatory_runtime_tools();
12079
+ });
12050
12080
 
12051
12081
  // src/core/extensions/runner-shortcuts.ts
12052
12082
  function resolveExtensionShortcuts(extensions, resolvedKeybindings, hasUI) {
@@ -12110,6 +12140,7 @@ var init_runner_shortcuts = __esm(() => {
12110
12140
  "app.thinking.toggle",
12111
12141
  "app.editor.external",
12112
12142
  "app.message.followUp",
12143
+ "app.message.copy",
12113
12144
  "tui.input.submit",
12114
12145
  "tui.select.confirm",
12115
12146
  "tui.select.cancel",
@@ -12573,6 +12604,7 @@ var init_runner = __esm(() => {
12573
12604
  init_loader_runtime();
12574
12605
  init_runner_context();
12575
12606
  init_runner_events();
12607
+ init_runner_registries();
12576
12608
  init_runner_shortcuts();
12577
12609
  init_runner_ui();
12578
12610
  init_stale_context();
@@ -14776,11 +14808,13 @@ async function _runAgentContinue() {
14776
14808
  }
14777
14809
  async function _continueQueuedAgentMessages() {
14778
14810
  await this._agentEventQueue;
14779
- while (!this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
14811
+ while (!this._stopAfterTurnBlockedContinuation && !this._queuedMessagesPaused && this.agent.hasQueuedMessages()) {
14780
14812
  await this.agent.continue();
14781
14813
  await this.waitForRetry();
14782
14814
  await this._agentEventQueue;
14783
14815
  }
14816
+ if (this._stopAfterTurnBlockedContinuation)
14817
+ return;
14784
14818
  await answerAdmittedQueuedMessage(this);
14785
14819
  }
14786
14820
  async function answerAdmittedQueuedMessage(session) {
@@ -16171,14 +16205,13 @@ function getToolDefinition(name) {
16171
16205
  }
16172
16206
  function setActiveToolsByName(toolNames) {
16173
16207
  const tools = [];
16174
- const validToolNames = [];
16175
16208
  for (const name of toolNames) {
16176
16209
  const tool = this._toolRegistry.get(name);
16177
- if (tool) {
16210
+ if (tool)
16178
16211
  tools.push(tool);
16179
- validToolNames.push(name);
16180
- }
16181
16212
  }
16213
+ appendRegisteredMandatoryTools(tools, this._toolRegistry);
16214
+ const validToolNames = tools.map((tool) => tool.name);
16182
16215
  this.agent.state.tools = tools;
16183
16216
  this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
16184
16217
  this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
@@ -16235,7 +16268,7 @@ function _rebuildSystemPrompt(toolNames) {
16235
16268
  customPrompt: loaderSystemPrompt,
16236
16269
  appendSystemPrompt,
16237
16270
  selectedTools: validToolNames,
16238
- excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames) : undefined,
16271
+ excludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames).filter((name) => !isMandatoryRuntimeTool(name)) : undefined,
16239
16272
  toolSnippets,
16240
16273
  promptGuidelines
16241
16274
  };
@@ -16248,6 +16281,7 @@ function _refreshBaseSystemPromptFromActiveTools() {
16248
16281
  }
16249
16282
  var agentSessionStateMethods;
16250
16283
  var init_agent_session_state = __esm(() => {
16284
+ init_mandatory_runtime_tools();
16251
16285
  init_skill_catalog();
16252
16286
  init_system_prompt();
16253
16287
  agentSessionStateMethods = {
@@ -17275,6 +17309,17 @@ function _installAgentToolHooks() {
17275
17309
  }
17276
17310
  function _installAgentNextTurnRefresh() {
17277
17311
  const previousPrepareNextTurnWithContext = this.agent.prepareNextTurnWithContext ?? (this.agent.prepareNextTurn ? async (_turn, signal) => await this.agent.prepareNextTurn?.(signal) : undefined);
17312
+ const previousShouldStopAfterTurn = this.agent.shouldStopAfterTurn;
17313
+ this.agent.shouldStopAfterTurn = async (turn, signal) => {
17314
+ const toolCallIds = turn.message.content.filter((part) => part.type === "toolCall").map((part) => part.id);
17315
+ const terminatingBatch = toolCallIds.length > 0 && toolCallIds.every((id) => this._terminatingToolCallIds.has(id));
17316
+ for (const id of toolCallIds)
17317
+ this._terminatingToolCallIds.delete(id);
17318
+ const shouldStop = await previousShouldStopAfterTurn?.(turn, signal) ?? false;
17319
+ this._stopAfterTurnBlockedContinuation = shouldStop;
17320
+ await settleFallbackAfterTurn(this, turn, terminatingBatch);
17321
+ return shouldStop;
17322
+ };
17278
17323
  const previousTransformContext = this.agent.transformContext;
17279
17324
  this.agent.transformContext = async (messages, signal) => {
17280
17325
  const transformed = previousTransformContext ? await previousTransformContext(messages, signal) : messages;
@@ -17282,24 +17327,17 @@ function _installAgentNextTurnRefresh() {
17282
17327
  assertToolPairingInvariant(guarded);
17283
17328
  return guarded;
17284
17329
  };
17285
- this.agent.prepareNextTurnWithContext = async (turn, signal) => {
17286
- const previousSnapshot = await previousPrepareNextTurnWithContext?.(turn, signal);
17287
- const previousContext = previousSnapshot?.context ?? turn.context;
17288
- const toolCallIds = turn.message.content.filter((part) => part.type === "toolCall").map((part) => part.id);
17289
- const terminatingBatch = toolCallIds.length > 0 && toolCallIds.every((id) => this._terminatingToolCallIds.has(id));
17290
- for (const id of toolCallIds)
17291
- this._terminatingToolCallIds.delete(id);
17292
- const messages = turn.toolResults.length > 0 && !terminatingBatch ? await this._preflightPostToolContext(previousContext.messages, signal) : previousContext.messages;
17293
- const preserveFallbackForFailure = turn.message.role === "assistant" && !this.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || this._isEmptyCompletion?.(turn.message) === true || this._isSafetyRefusal?.(turn.message) === true);
17294
- if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
17295
- await this._agentEventQueue;
17296
- await this._settleFallbackModelScope();
17297
- }
17330
+ const prepareTurn = async (turn, signal) => {
17331
+ const compactedMessages = turn.toolResults.length > 0 ? await this._preflightPostToolContext(turn.context.messages, signal) : turn.context.messages;
17332
+ const compactedContext = compactedMessages === turn.context.messages ? turn.context : { ...turn.context, messages: compactedMessages };
17333
+ const preparedTurn = compactedContext === turn.context ? turn : { ...turn, context: compactedContext };
17334
+ const previousSnapshot = await previousPrepareNextTurnWithContext?.(preparedTurn, signal);
17335
+ const previousContext = previousSnapshot?.context ?? compactedContext;
17298
17336
  return {
17299
17337
  ...previousSnapshot,
17300
17338
  context: {
17301
17339
  ...previousContext,
17302
- messages,
17340
+ messages: previousContext.messages,
17303
17341
  systemPrompt: this._systemPromptOverride ?? this._baseSystemPrompt,
17304
17342
  tools: this.agent.state.tools.slice()
17305
17343
  },
@@ -17307,6 +17345,14 @@ function _installAgentNextTurnRefresh() {
17307
17345
  thinkingLevel: this.agent.state.thinkingLevel
17308
17346
  };
17309
17347
  };
17348
+ this.agent.prepareNextTurnWithContext = prepareTurn;
17349
+ }
17350
+ async function settleFallbackAfterTurn(session, turn, terminatingBatch) {
17351
+ const preserveFallbackForFailure = turn.message.role === "assistant" && !session.agent.hasQueuedMessages() && (turn.message.stopReason === "length" || session._isEmptyCompletion?.(turn.message) === true || session._isSafetyRefusal?.(turn.message) === true);
17352
+ if (!preserveFallbackForFailure && (turn.toolResults.length === 0 || terminatingBatch)) {
17353
+ await session._agentEventQueue;
17354
+ await session._settleFallbackModelScope();
17355
+ }
17310
17356
  }
17311
17357
  var agentSessionToolHooksMethods;
17312
17358
  var init_agent_session_tool_hooks = __esm(() => {
@@ -17389,6 +17435,7 @@ var init_loader_virtual_modules = __esm(() => {
17389
17435
  });
17390
17436
 
17391
17437
  // src/core/extensions/loader-core.ts
17438
+ var runtimeEventBuses;
17392
17439
  var init_loader_core = __esm(() => {
17393
17440
  init_event_loop();
17394
17441
  init_paths();
@@ -17398,6 +17445,7 @@ var init_loader_core = __esm(() => {
17398
17445
  init_loader_resources();
17399
17446
  init_loader_runtime();
17400
17447
  init_loader_virtual_modules();
17448
+ runtimeEventBuses = new WeakMap;
17401
17449
  });
17402
17450
 
17403
17451
  // src/core/package-manager-manifest.ts
@@ -22491,7 +22539,7 @@ class FastModeSelectorComponent {
22491
22539
  }
22492
22540
  invalidate() {}
22493
22541
  render(width) {
22494
- const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "Codex fast mode")), width)];
22542
+ const lines = [truncateToWidth10(theme.bold(theme.fg("accent", "Fast mode")), width)];
22495
22543
  for (const line of wrapTextWithAnsi3(DESCRIPTION, Math.max(20, width))) {
22496
22544
  lines.push(theme.fg("muted", line));
22497
22545
  }
@@ -22574,7 +22622,7 @@ class FastModeSelectorComponent {
22574
22622
  return this.getFocusedRow() === row ? theme.fg("muted", text) : theme.fg("dim", text);
22575
22623
  }
22576
22624
  }
22577
- var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "Priority tier for supported OpenAI and shared ChatGPT Codex transports.", ROW_DETAILS;
22625
+ var ROWS, LABEL_WIDTH = 16, DESCRIPTION = "Use faster routing for the selected model when supported by its provider.", ROW_DETAILS;
22578
22626
  var init_fast_mode_selector = __esm(() => {
22579
22627
  init_theme();
22580
22628
  ROWS = ["chat", "workflow"];
@@ -23801,6 +23849,10 @@ var init_keybindings = __esm(() => {
23801
23849
  defaultKeys: windowsKeybindings ? "alt+q" : "alt+up",
23802
23850
  description: "Restore queued messages"
23803
23851
  },
23852
+ "app.message.copy": {
23853
+ defaultKeys: "ctrl+x",
23854
+ description: "Copy fullscreen selection or last agent message"
23855
+ },
23804
23856
  "app.clipboard.pasteImage": {
23805
23857
  defaultKeys: windowsKeybindings ? "alt+v" : "ctrl+v",
23806
23858
  description: "Paste image from clipboard (text fallback)"
@@ -25186,6 +25238,9 @@ function createSettingsChangeHandler(callbacks) {
25186
25238
  case "fullscreen-exit-output":
25187
25239
  callbacks.onFullscreenExitOutputChange(newValue);
25188
25240
  break;
25241
+ case "fullscreen-copy-on-select":
25242
+ callbacks.onFullscreenCopyOnSelectChange(newValue === "true");
25243
+ break;
25189
25244
  case "editor-padding":
25190
25245
  callbacks.onEditorPaddingXChange(parseInt(newValue, 10));
25191
25246
  break;
@@ -25573,6 +25628,13 @@ function insertUiToggles(items, config) {
25573
25628
  values: ["transcript", "resume-hint"]
25574
25629
  });
25575
25630
  insertAfter(items, "fullscreen-exit-output", {
25631
+ id: "fullscreen-copy-on-select",
25632
+ label: "Fullscreen copy on select",
25633
+ description: "Copy selected transcript text automatically on mouse release",
25634
+ currentValue: config.fullscreenCopyOnSelect ? "true" : "false",
25635
+ values: ["true", "false"]
25636
+ });
25637
+ insertAfter(items, "fullscreen-copy-on-select", {
25576
25638
  id: "editor-padding",
25577
25639
  label: "Editor padding",
25578
25640
  description: "Horizontal padding for input editor (0-3)",
@@ -38647,6 +38709,8 @@ function _refreshToolRegistry(options) {
38647
38709
  const allowedToolNames = this._allowedToolNames;
38648
38710
  const excludedToolNames = this._excludedToolNames;
38649
38711
  const isExposedTool = (name) => {
38712
+ if (isMandatoryRuntimeTool(name))
38713
+ return true;
38650
38714
  if (allowedToolNames && !allowedToolNames.has(name)) {
38651
38715
  return false;
38652
38716
  }
@@ -38655,10 +38719,10 @@ function _refreshToolRegistry(options) {
38655
38719
  }
38656
38720
  return true;
38657
38721
  };
38658
- const registeredTools = this._extensionRunner.getAllRegisteredTools();
38722
+ const registeredTools = this._extensionRunner.getAllRegisteredTools().filter((tool) => !isMandatoryRuntimeTool(tool.definition.name) || isTrustedMandatoryRuntimeTool(tool));
38659
38723
  const allCustomTools = [
38660
38724
  ...registeredTools,
38661
- ...this._customTools.map((definition) => ({
38725
+ ...this._customTools.filter((definition) => !isMandatoryRuntimeTool(definition.name)).map((definition) => ({
38662
38726
  definition,
38663
38727
  sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" })
38664
38728
  }))
@@ -38779,6 +38843,7 @@ function _buildRuntime(options) {
38779
38843
  var agentSessionToolRegistryMethods;
38780
38844
  var init_agent_session_tool_registry = __esm(() => {
38781
38845
  init_extensions();
38846
+ init_mandatory_runtime_tools();
38782
38847
  init_model_registry();
38783
38848
  init_tools();
38784
38849
  init_session_temp_dir();
@@ -39621,6 +39686,7 @@ class AgentSessionBase {
39621
39686
  _postToolCompactionPreflightError = undefined;
39622
39687
  _pendingPostToolCompactionGuard = undefined;
39623
39688
  _terminatingToolCallIds = new Set;
39689
+ _stopAfterTurnBlockedContinuation = false;
39624
39690
  _disposed = false;
39625
39691
  _branchSummaryAbortController = undefined;
39626
39692
  _sessionSummaryAbortController = undefined;
@@ -39769,11 +39835,12 @@ var init_builtin_packages = __esm(() => {
39769
39835
  { packageName: "@bastani/subagents", workspaceDirName: "subagents", distDirName: "subagents" },
39770
39836
  { packageName: "@bastani/mcp", workspaceDirName: "mcp", distDirName: "mcp" },
39771
39837
  { packageName: "@bastani/web-access", workspaceDirName: "web-access", distDirName: "web-access" },
39772
- { packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom" }
39838
+ { packageName: "@bastani/intercom", workspaceDirName: "intercom", distDirName: "intercom", mandatory: true }
39773
39839
  ];
39774
39840
  BUILTIN_PACKAGES = WORKSPACE_BUILTINS.map((spec) => ({
39775
39841
  packageName: spec.packageName,
39776
39842
  distDirName: spec.distDirName,
39843
+ mandatory: spec.mandatory === true,
39777
39844
  requiredEntries: requiredEntriesForBuiltin(spec.distDirName),
39778
39845
  sourceCandidates: ({ here, packageDir, isSourceCheckout }) => isSourceCheckout ? [join37(packageDir, "..", spec.workspaceDirName), join37(here, "..", "..", "..", spec.workspaceDirName)] : []
39779
39846
  }));
@@ -43238,7 +43305,9 @@ var init_resource_loader_extensions = __esm(() => {
43238
43305
  var init_resource_loader_reload = __esm(() => {
43239
43306
  init_event_loop();
43240
43307
  init_paths();
43308
+ init_builtin_packages();
43241
43309
  init_loader();
43310
+ init_mandatory_runtime_tools();
43242
43311
  init_resource_loader_assets();
43243
43312
  init_resource_loader_context_files();
43244
43313
  init_resource_loader_discovery();
@@ -44395,6 +44464,28 @@ var init_settings_manager_ui_accessors = __esm(() => {
44395
44464
  state.markModified("fullscreenExitOutput");
44396
44465
  state.save();
44397
44466
  },
44467
+ getFullscreenCopyOnSelect() {
44468
+ return settingsInternals(this).settings.fullscreenCopyOnSelect !== false;
44469
+ },
44470
+ setFullscreenCopyOnSelect(enabled) {
44471
+ const state = settingsInternals(this);
44472
+ state.globalSettings.fullscreenCopyOnSelect = enabled;
44473
+ state.markModified("fullscreenCopyOnSelect");
44474
+ state.save();
44475
+ },
44476
+ getTerminalCapabilityOverrides() {
44477
+ const terminal = settingsInternals(this).settings.terminal;
44478
+ const overrides = {};
44479
+ if (typeof terminal?.hyperlinks === "boolean")
44480
+ overrides.hyperlinks = terminal.hyperlinks;
44481
+ if (terminal?.images === "kitty" || terminal?.images === "iterm2")
44482
+ overrides.images = terminal.images;
44483
+ else if (terminal?.images === false)
44484
+ overrides.images = null;
44485
+ if (typeof terminal?.trueColor === "boolean")
44486
+ overrides.trueColor = terminal.trueColor;
44487
+ return overrides;
44488
+ },
44398
44489
  getEditorPaddingX() {
44399
44490
  return settingsInternals(this).settings.editorPaddingX ?? 0;
44400
44491
  },
@@ -44540,6 +44631,14 @@ var init_resource_loader = __esm(() => {
44540
44631
  init_resource_loader_core();
44541
44632
  init_skill_catalog();
44542
44633
  });
44634
+ // src/core/mandatory-resource-loader.ts
44635
+ var init_mandatory_resource_loader = __esm(() => {
44636
+ init_builtin_packages();
44637
+ init_loader();
44638
+ init_mandatory_runtime_tools();
44639
+ init_skill_catalog();
44640
+ });
44641
+
44543
44642
  // src/core/model-resolver-defaults.ts
44544
44643
  function findPreferredAvailableModel(availableModels) {
44545
44644
  for (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {
@@ -44580,7 +44679,7 @@ var init_model_resolver_defaults = __esm(() => {
44580
44679
  huggingface: "moonshotai/Kimi-K2.6",
44581
44680
  fireworks: "accounts/fireworks/models/kimi-k2p6",
44582
44681
  together: "moonshotai/Kimi-K2.6",
44583
- baseten: "zai-org/GLM-5.2",
44682
+ baseten: "zai-org/GLM-5.3",
44584
44683
  opencode: "kimi-k2.6",
44585
44684
  "opencode-go": "kimi-k2.6",
44586
44685
  "kimi-coding": "kimi-for-coding",
@@ -45238,6 +45337,7 @@ var init_session_cwd = __esm(() => {
45238
45337
  var init_agent_session_services = __esm(() => {
45239
45338
  init_config();
45240
45339
  init_paths();
45340
+ init_mandatory_resource_loader();
45241
45341
  init_model_runtime();
45242
45342
  init_resource_loader();
45243
45343
  init_sdk();
@@ -45574,6 +45674,7 @@ var init_sdk = __esm(() => {
45574
45674
  init_agent_session();
45575
45675
  init_auth_guidance();
45576
45676
  init_codex_fast_mode();
45677
+ init_mandatory_resource_loader();
45577
45678
  init_messages();
45578
45679
  init_model_resolver();
45579
45680
  init_model_runtime();
@@ -45677,7 +45778,12 @@ var init_list_models = __esm(() => {
45677
45778
  });
45678
45779
 
45679
45780
  // src/cli/startup-ui.ts
45680
- import { ProcessTerminal, setKeybindings, TuiMainScreen } from "@earendil-works/pi-tui";
45781
+ import {
45782
+ ProcessTerminal,
45783
+ setCapabilityOverrides,
45784
+ setKeybindings,
45785
+ TuiMainScreen
45786
+ } from "@earendil-works/pi-tui";
45681
45787
  var init_startup_ui = __esm(() => {
45682
45788
  init_config();
45683
45789
  init_keybindings();
@@ -45765,7 +45871,7 @@ var init_main_first_time_setup = __esm(() => {
45765
45871
  init_startup_ui();
45766
45872
  });
45767
45873
  // src/cli/session-picker.ts
45768
- import { ProcessTerminal as ProcessTerminal2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
45874
+ import { ProcessTerminal as ProcessTerminal2, setCapabilityOverrides as setCapabilityOverrides2, setKeybindings as setKeybindings2, TuiMainScreen as TuiMainScreen2 } from "@earendil-works/pi-tui";
45769
45875
  var init_session_picker = __esm(() => {
45770
45876
  init_config();
45771
45877
  init_keybindings();
@@ -45773,7 +45879,7 @@ var init_session_picker = __esm(() => {
45773
45879
  });
45774
45880
 
45775
45881
  // src/main-session.ts
45776
- import { ProcessTerminal as ProcessTerminal3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
45882
+ import { ProcessTerminal as ProcessTerminal3, setCapabilityOverrides as setCapabilityOverrides3, setKeybindings as setKeybindings3, TuiMainScreen as TuiMainScreen3 } from "@earendil-works/pi-tui";
45777
45883
  import chalk10 from "chalk";
45778
45884
  var init_main_session = __esm(() => {
45779
45885
  init_session_picker();
@@ -48591,7 +48697,7 @@ var init_slash_commands = __esm(() => {
48591
48697
  { name: "tree", description: "Navigate session tree (switch branches)" },
48592
48698
  { name: "thinking", description: "Set thinking level", argumentHint: "<level>" },
48593
48699
  { name: "scoped-models", description: "Enable/disable models for ctrl+p cycling" },
48594
- { name: "fast", description: "Configure OpenAI fast mode for chat and workflows in supported models" },
48700
+ { name: "fast", description: "Configure fast mode for chat and workflows on supported models" },
48595
48701
  { name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
48596
48702
  { name: "import", description: "Import and resume a session from a JSONL file" },
48597
48703
  { name: "share", description: "Share session as a secret GitHub gist" },
@@ -49217,6 +49323,7 @@ function createFullscreenTui(options) {
49217
49323
  openUrl: openBrowser
49218
49324
  }),
49219
49325
  onRightClickPaste: options.onRightClickPaste,
49326
+ copyOnSelect: options.copyOnSelect,
49220
49327
  copySelection: options.copySelection ?? copySelectionToHostClipboard
49221
49328
  }, options.shouldHandleViewportInput, options.onOverlayUnhandledInput);
49222
49329
  }
@@ -49258,7 +49365,7 @@ function createInteractiveTuiReference(getTui) {
49258
49365
  getPrototypeOf: () => Reflect.getPrototypeOf(getTui())
49259
49366
  });
49260
49367
  }
49261
- var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
49368
+ var viewportInputListeners, viewportInputGates, overlayUnhandledInputHandlers, viewportInputReplays, overlayOwnedSelections, viewportInputSubscriptions, SGR_MOUSE_SEQUENCE, LEFT_MOUSE_MODIFIER_MASK, AtomicTuiAltScreen, AtomicTuiMainScreen;
49262
49369
  var init_interactive_tui = __esm(() => {
49263
49370
  init_clipboard();
49264
49371
  init_open_browser();
@@ -49267,6 +49374,7 @@ var init_interactive_tui = __esm(() => {
49267
49374
  viewportInputGates = new WeakMap;
49268
49375
  overlayUnhandledInputHandlers = new WeakMap;
49269
49376
  viewportInputReplays = new WeakSet;
49377
+ overlayOwnedSelections = new WeakSet;
49270
49378
  viewportInputSubscriptions = new WeakMap;
49271
49379
  SGR_MOUSE_SEQUENCE = /^\x1b\[<(\d+);\d+;\d+([Mm])/;
49272
49380
  LEFT_MOUSE_MODIFIER_MASK = 4 | 8 | 16;
@@ -49282,8 +49390,20 @@ var init_interactive_tui = __esm(() => {
49282
49390
  deferral.shouldDeferViewportInputToOverlay = () => !viewportInputReplays.has(this) && deferToOverlay?.() === true;
49283
49391
  }
49284
49392
  applyLineResets(lines) {
49393
+ if (overlayOwnedSelections.has(this) && !this.isFocusedOverlay())
49394
+ this.clearOverlayOwnedSelection();
49285
49395
  return stripOverlayActiveRowMarker(super.applyLineResets(lines));
49286
49396
  }
49397
+ clearOverlayOwnedSelection() {
49398
+ const selection = this;
49399
+ selection.selectionAnchor = undefined;
49400
+ selection.selectionFocus = undefined;
49401
+ selection.selectionInitialRange = undefined;
49402
+ selection.selectionPressActive = false;
49403
+ selection.selectionDragged = false;
49404
+ selection.lastClick = undefined;
49405
+ overlayOwnedSelections.delete(this);
49406
+ }
49287
49407
  isPiTuiMouseSequence(data) {
49288
49408
  if (parseMouseSequences(data))
49289
49409
  return true;
@@ -49360,6 +49480,7 @@ var init_interactive_tui = __esm(() => {
49360
49480
  if (isLeftMouseButton(sequence))
49361
49481
  viewportListener(sequence.data);
49362
49482
  }
49483
+ overlayOwnedSelections.add(this);
49363
49484
  }
49364
49485
  replayViewportInput(viewportListener, data) {
49365
49486
  viewportInputReplays.add(this);
@@ -49427,7 +49548,11 @@ var init_interactive_tui = __esm(() => {
49427
49548
  });
49428
49549
 
49429
49550
  // src/modes/interactive/interactive-mode-base.ts
49430
- import { isKeyRelease as isKeyRelease3, isViewportTUI } from "@earendil-works/pi-tui";
49551
+ import {
49552
+ isKeyRelease as isKeyRelease3,
49553
+ isViewportTUI,
49554
+ setCapabilityOverrides as setCapabilityOverrides4
49555
+ } from "@earendil-works/pi-tui";
49431
49556
  function isFullscreenViewportAction(data, keybindings) {
49432
49557
  return FULLSCREEN_VIEWPORT_ACTIONS.some((action) => keybindings.matches(data, action));
49433
49558
  }
@@ -49488,6 +49613,18 @@ class InteractiveModeBase {
49488
49613
  return false;
49489
49614
  return this.defaultEditor.handleInput(data);
49490
49615
  }
49616
+ setFullscreenCopyOnSelect(enabled) {
49617
+ if (this.renderer.mode === "fullscreen")
49618
+ this.renderer.setCopyOnSelect(enabled);
49619
+ }
49620
+ getFullscreenCopyOnSelect() {
49621
+ return this.renderer.mode === "fullscreen" ? this.renderer.getCopyOnSelect() : undefined;
49622
+ }
49623
+ async copyActiveFullscreenSelection() {
49624
+ if (this.renderer.mode !== "fullscreen" || !this.renderer.hasActiveSelection())
49625
+ return;
49626
+ return this.renderer.copyActiveSelectionToClipboard();
49627
+ }
49491
49628
  onRightClickPaste = () => {
49492
49629
  this.handleRightClickPaste();
49493
49630
  };
@@ -49687,11 +49824,13 @@ class InteractiveModeBase {
49687
49824
  await this.rebindCurrentSession();
49688
49825
  await this.themeController.applyFromSettings();
49689
49826
  });
49827
+ setCapabilityOverrides4(this.settingsManager.getTerminalCapabilityOverrides());
49690
49828
  this.version = VERSION;
49691
49829
  this.renderer = createInteractiveTui({
49692
49830
  showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
49693
49831
  logDirectory: runtimeHost.services.agentDir,
49694
49832
  terminal: options.terminal,
49833
+ copyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
49695
49834
  onRightClickPaste: this.onRightClickPaste,
49696
49835
  shouldHandleViewportInput: this.shouldHandleViewportInput,
49697
49836
  onOverlayUnhandledInput: this.onOverlayUnhandledInput,
@@ -50814,6 +50953,7 @@ var init_interactive_deferred_startup = __esm(() => {
50814
50953
  try {
50815
50954
  await this.bindCurrentSessionExtensions();
50816
50955
  await this.session.reload({ reason: "startup" });
50956
+ this.applyRuntimeSettings();
50817
50957
  this.rebuildChatFromMessages();
50818
50958
  if (!this.promptTurnWorkingLoaderActive) {
50819
50959
  this.stopWorkingLoader();
@@ -51502,6 +51642,7 @@ ${warningLines}`, 0, 0));
51502
51642
  });
51503
51643
 
51504
51644
  // src/modes/interactive/interactive-session-runtime.ts
51645
+ import { setCapabilityOverrides as setCapabilityOverrides5 } from "@earendil-works/pi-tui";
51505
51646
  var init_interactive_session_runtime = __esm(() => {
51506
51647
  init_interactive_mode_base();
51507
51648
  init_interactive_mode_deps();
@@ -51588,6 +51729,8 @@ var init_interactive_session_runtime = __esm(() => {
51588
51729
  }
51589
51730
  };
51590
51731
  InteractiveModeBase.prototype.applyRuntimeSettings = function() {
51732
+ setCapabilityOverrides5(this.settingsManager.getTerminalCapabilityOverrides());
51733
+ this.setFullscreenCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());
51591
51734
  this.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());
51592
51735
  this.footer.setSession(this.session);
51593
51736
  this.usageMeter.setSession(this.session);
@@ -53104,6 +53247,9 @@ var init_interactive_input_handling = __esm(() => {
53104
53247
  });
53105
53248
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
53106
53249
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
53250
+ this.defaultEditor.onAction("app.message.copy", () => {
53251
+ this.handleCopyCommand({ preferSelection: true });
53252
+ });
53107
53253
  this.defaultEditor.onAction("app.session.new", () => this.handleClearCommand());
53108
53254
  this.defaultEditor.onAction("app.session.tree", () => this.showTreeSelector());
53109
53255
  this.defaultEditor.onAction("app.session.fork", () => this.showUserMessageSelector());
@@ -54011,7 +54157,8 @@ var init_interactive_agent_events = __esm(() => {
54011
54157
  } else if (event.reason === "manual") {
54012
54158
  this.manualCompactionTakeoverPending = false;
54013
54159
  }
54014
- if (!manualTakeoverPending && this.settingsManager.getShowTerminalProgress()) {
54160
+ const resumesActiveRun = event.midTurn && !event.aborted && !event.errorMessage && !manualTakeoverPending;
54161
+ if (!manualTakeoverPending && !resumesActiveRun && this.settingsManager.getShowTerminalProgress()) {
54015
54162
  this.ui.terminal.setProgress(false);
54016
54163
  }
54017
54164
  if (!manualTakeoverPending && this.autoCompactionEscapeHandlerSaved) {
@@ -55027,7 +55174,7 @@ var init_interactive_selectors = __esm(() => {
55027
55174
  };
55028
55175
  InteractiveModeBase.prototype.showFastModeSelector = function() {
55029
55176
  if (!this.hasCodexFastModeSupportedModels()) {
55030
- this.showWarning("Codex fast mode requires a supported OpenAI or shared ChatGPT Codex transport model.");
55177
+ this.showWarning("Fast mode isn't available for any configured model.");
55031
55178
  return;
55032
55179
  }
55033
55180
  this.showSelector((done) => {
@@ -55086,6 +55233,7 @@ var init_interactive_selectors = __esm(() => {
55086
55233
  showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
55087
55234
  fullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),
55088
55235
  fullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),
55236
+ fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
55089
55237
  editorPaddingX: this.settingsManager.getEditorPaddingX(),
55090
55238
  outputPad: this.settingsManager.getOutputPad(),
55091
55239
  showCacheMissNotices: this.settingsManager.getShowCacheMissNotices(),
@@ -55203,6 +55351,10 @@ var init_interactive_selectors = __esm(() => {
55203
55351
  onFullscreenExitOutputChange: (output) => {
55204
55352
  this.settingsManager.setFullscreenExitOutput(output);
55205
55353
  },
55354
+ onFullscreenCopyOnSelectChange: (enabled) => {
55355
+ this.settingsManager.setFullscreenCopyOnSelect(enabled);
55356
+ this.setFullscreenCopyOnSelect(enabled);
55357
+ },
55206
55358
  onEditorPaddingXChange: (padding) => {
55207
55359
  this.settingsManager.setEditorPaddingX(padding);
55208
55360
  this.defaultEditor.setPaddingX(padding);
@@ -56189,18 +56341,8 @@ var init_interactive_slash_commands = __esm(() => {
56189
56341
  activeHeader.setExpanded(this.toolOutputExpanded);
56190
56342
  }
56191
56343
  setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
56192
- this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();
56344
+ this.applyRuntimeSettings();
56193
56345
  await this.themeController.applyFromSettings();
56194
- const editorPaddingX = this.settingsManager.getEditorPaddingX();
56195
- const autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();
56196
- this.defaultEditor.setPaddingX(editorPaddingX);
56197
- this.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);
56198
- if (this.editor !== this.defaultEditor) {
56199
- this.editor.setPaddingX?.(editorPaddingX);
56200
- this.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);
56201
- }
56202
- this.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());
56203
- this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
56204
56346
  this.setupAutocompleteProvider();
56205
56347
  const runner = this.session.extensionRunner;
56206
56348
  this.setupExtensionShortcuts(runner);
@@ -56393,7 +56535,12 @@ Gist: ${hyperlink3(gistUrl, gistUrl)}`);
56393
56535
  }
56394
56536
  }
56395
56537
  };
56396
- InteractiveModeBase.prototype.handleCopyCommand = async function() {
56538
+ InteractiveModeBase.prototype.handleCopyCommand = async function(options = {}) {
56539
+ if (options.preferSelection && this.getFullscreenCopyOnSelect() === false) {
56540
+ const selectionCopied = await this.copyActiveFullscreenSelection();
56541
+ if (selectionCopied !== undefined)
56542
+ return;
56543
+ }
56397
56544
  const text = this.session.getLastAssistantText();
56398
56545
  if (!text) {
56399
56546
  this.showError("No agent messages to copy yet.");
@@ -56940,6 +57087,7 @@ var init_rpc_extension_ui = __esm(() => {
56940
57087
  });
56941
57088
 
56942
57089
  // src/modes/rpc/rpc-session-binding.ts
57090
+ import { setCapabilityOverrides as setCapabilityOverrides6 } from "@earendil-works/pi-tui";
56943
57091
  var init_rpc_session_binding = __esm(() => {
56944
57092
  init_footer_data_provider();
56945
57093
  init_output_guard();
@@ -57016,7 +57164,7 @@ var init_config_selector = __esm(() => {
57016
57164
  });
57017
57165
 
57018
57166
  // src/cli/config-selector.ts
57019
- import { ProcessTerminal as ProcessTerminal6, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
57167
+ import { ProcessTerminal as ProcessTerminal6, setCapabilityOverrides as setCapabilityOverrides7, TuiMainScreen as TuiMainScreen8 } from "@earendil-works/pi-tui";
57020
57168
  var init_config_selector2 = __esm(() => {
57021
57169
  init_config_selector();
57022
57170
  init_theme();
@@ -57063,6 +57211,7 @@ var init_package_manager_cli = __esm(() => {
57063
57211
  });
57064
57212
 
57065
57213
  // src/main.ts
57214
+ import { setCapabilityOverrides as setCapabilityOverrides8 } from "@earendil-works/pi-tui";
57066
57215
  import chalk15 from "chalk";
57067
57216
  var init_main = __esm(() => {
57068
57217
  init_args();
@@ -57077,6 +57226,7 @@ var init_main = __esm(() => {
57077
57226
  init_auth_storage();
57078
57227
  init_builtin_packages();
57079
57228
  init_http_dispatcher();
57229
+ init_mandatory_resource_loader();
57080
57230
  init_model_resolver();
57081
57231
  init_model_runtime();
57082
57232
  init_output_guard();