@ashx-j/lunr 0.2.14 → 0.2.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 (215) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/README.md +4 -4
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +4 -4
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/index.d.ts.map +1 -1
  7. package/dist/builtin-extensions/index.js +2 -0
  8. package/dist/builtin-extensions/index.js.map +1 -1
  9. package/dist/builtin-extensions/lunr-settings-tools.d.ts +4 -0
  10. package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +1 -0
  11. package/dist/builtin-extensions/lunr-settings-tools.js +120 -0
  12. package/dist/builtin-extensions/lunr-settings-tools.js.map +1 -0
  13. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  14. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +6 -2
  15. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  16. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts +2 -2
  17. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js.map +1 -1
  19. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  20. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +3 -3
  21. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts +2 -2
  23. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -1
  28. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  29. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +5 -11
  30. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +12 -15
  32. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +3 -3
  34. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +14 -27
  36. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +6 -4
  39. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +2 -1
  42. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  43. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +6 -4
  45. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +4 -2
  48. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +3 -35
  51. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +5 -12
  54. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +14 -31
  57. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +2 -0
  59. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +28 -22
  61. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  63. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +9 -4
  67. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +2 -2
  71. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  72. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +4 -7
  73. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
  75. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  76. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts +3 -3
  77. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js +7 -6
  79. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
  80. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts.map +1 -1
  81. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js +3 -3
  82. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js.map +1 -1
  83. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  84. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  85. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +6 -4
  86. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  87. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  88. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  89. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +15 -10
  90. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  91. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  92. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +3 -2
  93. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  94. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -2
  95. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +75 -43
  97. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  98. package/dist/core/agent-session-runtime.d.ts +5 -1
  99. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  100. package/dist/core/agent-session-runtime.js +7 -2
  101. package/dist/core/agent-session-runtime.js.map +1 -1
  102. package/dist/core/agent-session.d.ts +5 -0
  103. package/dist/core/agent-session.d.ts.map +1 -1
  104. package/dist/core/agent-session.js +68 -10
  105. package/dist/core/agent-session.js.map +1 -1
  106. package/dist/core/compaction/compaction.d.ts.map +1 -1
  107. package/dist/core/compaction/compaction.js +10 -5
  108. package/dist/core/compaction/compaction.js.map +1 -1
  109. package/dist/core/context-breakdown.d.ts +2 -0
  110. package/dist/core/context-breakdown.d.ts.map +1 -1
  111. package/dist/core/context-breakdown.js +6 -2
  112. package/dist/core/context-breakdown.js.map +1 -1
  113. package/dist/core/extensions/types.d.ts +2 -2
  114. package/dist/core/extensions/types.d.ts.map +1 -1
  115. package/dist/core/extensions/types.js.map +1 -1
  116. package/dist/core/injected-prompt.d.ts +3 -3
  117. package/dist/core/injected-prompt.d.ts.map +1 -1
  118. package/dist/core/injected-prompt.js +2 -7
  119. package/dist/core/injected-prompt.js.map +1 -1
  120. package/dist/core/large-subagent-launch.d.ts +13 -0
  121. package/dist/core/large-subagent-launch.d.ts.map +1 -0
  122. package/dist/core/large-subagent-launch.js +54 -0
  123. package/dist/core/large-subagent-launch.js.map +1 -0
  124. package/dist/core/model-instructions.d.ts +24 -0
  125. package/dist/core/model-instructions.d.ts.map +1 -0
  126. package/dist/core/model-instructions.js +123 -0
  127. package/dist/core/model-instructions.js.map +1 -0
  128. package/dist/core/permissions.d.ts +10 -11
  129. package/dist/core/permissions.d.ts.map +1 -1
  130. package/dist/core/permissions.js +107 -40
  131. package/dist/core/permissions.js.map +1 -1
  132. package/dist/core/plan-mode.d.ts.map +1 -1
  133. package/dist/core/plan-mode.js +10 -1
  134. package/dist/core/plan-mode.js.map +1 -1
  135. package/dist/core/resource-loader.d.ts +3 -0
  136. package/dist/core/resource-loader.d.ts.map +1 -1
  137. package/dist/core/resource-loader.js +13 -4
  138. package/dist/core/resource-loader.js.map +1 -1
  139. package/dist/core/runtime-bridges.d.ts +4 -0
  140. package/dist/core/runtime-bridges.d.ts.map +1 -0
  141. package/dist/core/runtime-bridges.js +16 -0
  142. package/dist/core/runtime-bridges.js.map +1 -0
  143. package/dist/core/sdk.d.ts.map +1 -1
  144. package/dist/core/sdk.js +1 -0
  145. package/dist/core/sdk.js.map +1 -1
  146. package/dist/core/settings-manager.d.ts +13 -0
  147. package/dist/core/settings-manager.d.ts.map +1 -1
  148. package/dist/core/settings-manager.js +32 -0
  149. package/dist/core/settings-manager.js.map +1 -1
  150. package/dist/core/settings-tools-bridge.d.ts +35 -0
  151. package/dist/core/settings-tools-bridge.d.ts.map +1 -0
  152. package/dist/core/settings-tools-bridge.js +56 -0
  153. package/dist/core/settings-tools-bridge.js.map +1 -0
  154. package/dist/core/slash-commands.d.ts.map +1 -1
  155. package/dist/core/slash-commands.js +0 -1
  156. package/dist/core/slash-commands.js.map +1 -1
  157. package/dist/core/system-prompt.d.ts.map +1 -1
  158. package/dist/core/system-prompt.js +1 -1
  159. package/dist/core/system-prompt.js.map +1 -1
  160. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  161. package/dist/gateway/agent-bridge.js +3 -2
  162. package/dist/gateway/agent-bridge.js.map +1 -1
  163. package/dist/gateway/approval.d.ts.map +1 -1
  164. package/dist/gateway/approval.js +4 -3
  165. package/dist/gateway/approval.js.map +1 -1
  166. package/dist/gateway/commands.d.ts +1 -1
  167. package/dist/gateway/commands.d.ts.map +1 -1
  168. package/dist/gateway/commands.js +1 -18
  169. package/dist/gateway/commands.js.map +1 -1
  170. package/dist/gateway/cron.d.ts.map +1 -1
  171. package/dist/gateway/cron.js +3 -2
  172. package/dist/gateway/cron.js.map +1 -1
  173. package/dist/gateway/router.d.ts +1 -1
  174. package/dist/gateway/router.d.ts.map +1 -1
  175. package/dist/gateway/router.js +1 -1
  176. package/dist/gateway/router.js.map +1 -1
  177. package/dist/main.d.ts.map +1 -1
  178. package/dist/main.js +3 -9
  179. package/dist/main.js.map +1 -1
  180. package/dist/migrations.d.ts.map +1 -1
  181. package/dist/migrations.js +4 -0
  182. package/dist/migrations.js.map +1 -1
  183. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  184. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  185. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  186. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  187. package/dist/modes/interactive/components/settings-selector.d.ts +8 -1
  188. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  189. package/dist/modes/interactive/components/settings-selector.js +61 -1
  190. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  191. package/dist/modes/interactive/interactive-mode.d.ts +3 -3
  192. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  193. package/dist/modes/interactive/interactive-mode.js +45 -54
  194. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  195. package/docs/compaction.md +5 -3
  196. package/docs/features.md +7 -7
  197. package/docs/quickstart.md +2 -1
  198. package/docs/settings.md +3 -1
  199. package/docs/termux.md +1 -1
  200. package/docs/usage.md +2 -2
  201. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  202. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  203. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  204. package/examples/extensions/gondolin/package-lock.json +2 -2
  205. package/examples/extensions/gondolin/package.json +1 -1
  206. package/examples/extensions/sandbox/package-lock.json +2 -2
  207. package/examples/extensions/sandbox/package.json +1 -1
  208. package/examples/extensions/subagent/README.md +1 -1
  209. package/examples/extensions/with-deps/package-lock.json +2 -2
  210. package/examples/extensions/with-deps/package.json +1 -1
  211. package/package.json +4 -4
  212. package/dist/core/swarm.d.ts +0 -54
  213. package/dist/core/swarm.d.ts.map +0 -1
  214. package/dist/core/swarm.js +0 -119
  215. package/dist/core/swarm.js.map +0 -1
@@ -29,13 +29,13 @@ import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
29
29
  import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
30
30
  import { emitSessionShutdownEvent } from "./extensions/runner.js";
31
31
  import { MEMORY_TOOL_NAMES } from "./memory-cap.js";
32
+ import { isUserInstructionsPath, loadSelectedUserInstructions } from "./model-instructions.js";
32
33
  import { ModelRegistry } from "./model-registry.js";
33
34
  import { gateToolCall } from "./permissions.js";
34
35
  import { expandPromptTemplate } from "./prompt-templates.js";
35
36
  import { rollbackSnapshotBeforeWrite } from "./rollback.js";
36
37
  import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
37
38
  import { createSyntheticSourceInfo } from "./source-info.js";
38
- import { isExplicitSwarmTurn } from "./swarm.js";
39
39
  import { buildSystemPrompt } from "./system-prompt.js";
40
40
  import { createLocalBashOperations } from "./tools/bash.js";
41
41
  import { createAllToolDefinitions } from "./tools/index.js";
@@ -98,6 +98,7 @@ export class AgentSession {
98
98
  _pendingNextTurnMessages = [];
99
99
  // Compaction state
100
100
  _compactionAbortController = undefined;
101
+ _manualCompactionPromise = undefined;
101
102
  _autoCompactionAbortController = undefined;
102
103
  _overflowRecoveryAttempted = false;
103
104
  // Branch summarization state
@@ -115,6 +116,7 @@ export class AgentSession {
115
116
  _customTools;
116
117
  _baseToolDefinitions = new Map();
117
118
  _cwd;
119
+ _agentDir;
118
120
  _extensionRunnerRef;
119
121
  _initialActiveToolNames;
120
122
  _allowedToolNames;
@@ -150,6 +152,7 @@ export class AgentSession {
150
152
  this._resourceLoader = config.resourceLoader;
151
153
  this._customTools = config.customTools ?? [];
152
154
  this._cwd = config.cwd;
155
+ this._agentDir = config.agentDir ?? getAgentDir();
153
156
  this._modelRuntime = config.modelRuntime;
154
157
  this._syncOpenAIServiceTier();
155
158
  this._extensionRunnerRef = config.extensionRunnerRef;
@@ -236,10 +239,10 @@ export class AgentSession {
236
239
  _installAgentToolHooks() {
237
240
  this.agent.beforeToolCall = async ({ toolCall, args, assistantMessage }) => {
238
241
  // lunr: permission gate (async) runs before sync gates — may show an approval dialog.
239
- // Explicit /swarm turns are pre-approved for the agent-swarm gate: the last
240
- // user message carries the literal [SWARM MODE] prefix on both TUI and gateway.
241
- const explicitSwarmTurn = toolCall.name === "subagent" ? isExplicitSwarmTurn(this.sessionManager.getBranch()) : undefined;
242
- const permBlock = await gateToolCall(toolCall.name, args, this._cwd, this.sessionId, { explicitSwarmTurn, assistantMessage });
242
+ const permBlock = await gateToolCall(toolCall.name, args, this._cwd, this.sessionId, {
243
+ confirmLargeSubagentLaunches: this.settingsManager.getConfirmLargeSubagentLaunches(),
244
+ assistantMessage,
245
+ });
243
246
  if (permBlock) {
244
247
  return { block: true, reason: permBlock.reason };
245
248
  }
@@ -328,7 +331,19 @@ export class AgentSession {
328
331
  : undefined);
329
332
  this.agent.prepareNextTurnWithContext = async (turn, signal) => {
330
333
  const previousSnapshot = await previousPrepareNextTurnWithContext?.(turn, signal);
331
- const previousContext = previousSnapshot?.context ?? turn.context;
334
+ let previousContext = previousSnapshot?.context ?? turn.context;
335
+ const model = this.model;
336
+ const settings = this.settingsManager.getCompactionSettings();
337
+ if (model?.provider === "openai-codex" &&
338
+ settings.enabled &&
339
+ shouldCompact(estimateContextTokens(previousContext.messages).tokens, model.contextWindow, settings)) {
340
+ const previousCompactionId = getLatestCompactionEntry(this.sessionManager.getBranch())?.id;
341
+ await this._runAutoCompaction("threshold", true);
342
+ const currentCompaction = getLatestCompactionEntry(this.sessionManager.getBranch());
343
+ if (currentCompaction && currentCompaction.id !== previousCompactionId) {
344
+ previousContext = { ...previousContext, messages: this.agent.state.messages.slice() };
345
+ }
346
+ }
332
347
  return {
333
348
  ...previousSnapshot,
334
349
  context: {
@@ -830,11 +845,21 @@ export class AgentSession {
830
845
  const appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join("\n\n") : undefined;
831
846
  const loadedSkills = this._resourceLoader.getSkills().skills;
832
847
  const loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;
848
+ const contextFiles = this._resourceLoader.contextFilesEnabled?.() === false
849
+ ? []
850
+ : [
851
+ ...loadSelectedUserInstructions({
852
+ agentDir: this._agentDir,
853
+ settingsManager: this.settingsManager,
854
+ model: this.model,
855
+ }),
856
+ ...loadedContextFiles.filter((file) => !isUserInstructionsPath(file.path, this._agentDir)),
857
+ ];
833
858
  this._baseSystemPromptOptions = {
834
859
  cwd: this._cwd,
835
860
  modelSlug: this.model ? `${this.model.provider}/${this.model.id}` : undefined,
836
861
  skills: loadedSkills,
837
- contextFiles: loadedContextFiles,
862
+ contextFiles,
838
863
  customPrompt: loaderSystemPrompt,
839
864
  appendSystemPrompt,
840
865
  selectedTools: validToolNames,
@@ -1505,14 +1530,48 @@ export class AgentSession {
1505
1530
  // =========================================================================
1506
1531
  // Compaction
1507
1532
  // =========================================================================
1533
+ _latestCompactionResult() {
1534
+ const pathEntries = this.sessionManager.getBranch();
1535
+ const lastEntry = pathEntries[pathEntries.length - 1];
1536
+ if (lastEntry?.type !== "compaction")
1537
+ return undefined;
1538
+ return {
1539
+ summary: lastEntry.summary,
1540
+ firstKeptEntryId: lastEntry.firstKeptEntryId,
1541
+ tokensBefore: lastEntry.tokensBefore,
1542
+ estimatedTokensAfter: estimateMessagesTokens(this.sessionManager.buildSessionContext().messages),
1543
+ details: lastEntry.details,
1544
+ };
1545
+ }
1508
1546
  /**
1509
1547
  * Manually compact the session context.
1510
1548
  * Aborts current agent operation first.
1511
1549
  * @param customInstructions Optional instructions for the compaction summary
1512
1550
  */
1513
1551
  async compact(customInstructions) {
1552
+ const existing = this._latestCompactionResult();
1553
+ if (existing)
1554
+ return existing;
1555
+ if (this._manualCompactionPromise)
1556
+ return this._manualCompactionPromise;
1557
+ const promise = this._compact(customInstructions);
1558
+ this._manualCompactionPromise = promise;
1559
+ try {
1560
+ return await promise;
1561
+ }
1562
+ finally {
1563
+ if (this._manualCompactionPromise === promise)
1564
+ this._manualCompactionPromise = undefined;
1565
+ }
1566
+ }
1567
+ async _compact(customInstructions) {
1514
1568
  this._disconnectFromAgent();
1515
1569
  await this.abort();
1570
+ const existing = this._latestCompactionResult();
1571
+ if (existing) {
1572
+ this._reconnectToAgent();
1573
+ return existing;
1574
+ }
1516
1575
  this._compactionAbortController = new AbortController();
1517
1576
  this._emit({ type: "compaction_start", reason: "manual" });
1518
1577
  try {
@@ -1731,12 +1790,11 @@ export class AgentSession {
1731
1790
  * Internal: Run auto-compaction with events.
1732
1791
  */
1733
1792
  async _runAutoCompaction(reason, willRetry) {
1793
+ if (!this.model || this._compactionAbortController || this._autoCompactionAbortController)
1794
+ return false;
1734
1795
  const settings = this.settingsManager.getCompactionSettings();
1735
1796
  let started = false;
1736
1797
  try {
1737
- if (!this.model) {
1738
- return false;
1739
- }
1740
1798
  let apiKey;
1741
1799
  let headers;
1742
1800
  let env;