@astralyn/pi 0.84.11 → 0.84.13

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 (226) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cli/startup-ui.d.ts.map +1 -1
  3. package/dist/cli/startup-ui.js +2 -1
  4. package/dist/cli/startup-ui.js.map +1 -1
  5. package/dist/core/agent-session.d.ts +62 -8
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +395 -78
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  10. package/dist/core/compaction/branch-summarization.js +4 -3
  11. package/dist/core/compaction/branch-summarization.js.map +1 -1
  12. package/dist/core/compaction/compaction.d.ts +5 -0
  13. package/dist/core/compaction/compaction.d.ts.map +1 -1
  14. package/dist/core/compaction/compaction.js +19 -5
  15. package/dist/core/compaction/compaction.js.map +1 -1
  16. package/dist/core/extensions/index.d.ts +1 -1
  17. package/dist/core/extensions/index.d.ts.map +1 -1
  18. package/dist/core/extensions/index.js.map +1 -1
  19. package/dist/core/extensions/runner.d.ts +5 -0
  20. package/dist/core/extensions/runner.d.ts.map +1 -1
  21. package/dist/core/extensions/runner.js +44 -1
  22. package/dist/core/extensions/runner.js.map +1 -1
  23. package/dist/core/extensions/types.d.ts +18 -10
  24. package/dist/core/extensions/types.d.ts.map +1 -1
  25. package/dist/core/extensions/types.js.map +1 -1
  26. package/dist/core/session-manager.d.ts.map +1 -1
  27. package/dist/core/session-manager.js +4 -2
  28. package/dist/core/session-manager.js.map +1 -1
  29. package/dist/core/settings-manager.d.ts +8 -1
  30. package/dist/core/settings-manager.d.ts.map +1 -1
  31. package/dist/core/settings-manager.js +17 -0
  32. package/dist/core/settings-manager.js.map +1 -1
  33. package/dist/core/tools/bash.d.ts +5 -0
  34. package/dist/core/tools/bash.d.ts.map +1 -1
  35. package/dist/core/tools/bash.js +5 -1
  36. package/dist/core/tools/bash.js.map +1 -1
  37. package/dist/extensions/background/actions.d.ts +21 -0
  38. package/dist/extensions/background/actions.d.ts.map +1 -0
  39. package/dist/extensions/background/actions.js +264 -0
  40. package/dist/extensions/background/actions.js.map +1 -0
  41. package/dist/extensions/background/constants.d.ts +24 -0
  42. package/dist/extensions/background/constants.d.ts.map +1 -0
  43. package/dist/extensions/background/constants.js +24 -0
  44. package/dist/extensions/background/constants.js.map +1 -0
  45. package/dist/extensions/background/index.d.ts +6 -115
  46. package/dist/extensions/background/index.d.ts.map +1 -1
  47. package/dist/extensions/background/index.js +38 -509
  48. package/dist/extensions/background/index.js.map +1 -1
  49. package/dist/extensions/background/manager.d.ts +2 -1
  50. package/dist/extensions/background/manager.d.ts.map +1 -1
  51. package/dist/extensions/background/manager.js +8 -10
  52. package/dist/extensions/background/manager.js.map +1 -1
  53. package/dist/extensions/background/notify.d.ts +16 -0
  54. package/dist/extensions/background/notify.d.ts.map +1 -0
  55. package/dist/extensions/background/notify.js +114 -0
  56. package/dist/extensions/background/notify.js.map +1 -0
  57. package/dist/extensions/background/output-file.d.ts +58 -0
  58. package/dist/extensions/background/output-file.d.ts.map +1 -0
  59. package/dist/extensions/background/output-file.js +122 -0
  60. package/dist/extensions/background/output-file.js.map +1 -0
  61. package/dist/extensions/background/registry.d.ts +40 -72
  62. package/dist/extensions/background/registry.d.ts.map +1 -1
  63. package/dist/extensions/background/registry.js +71 -184
  64. package/dist/extensions/background/registry.js.map +1 -1
  65. package/dist/extensions/background/render.d.ts +3 -10
  66. package/dist/extensions/background/render.d.ts.map +1 -1
  67. package/dist/extensions/background/render.js +20 -60
  68. package/dist/extensions/background/render.js.map +1 -1
  69. package/dist/extensions/background/schema.d.ts +34 -0
  70. package/dist/extensions/background/schema.d.ts.map +1 -0
  71. package/dist/extensions/background/schema.js +89 -0
  72. package/dist/extensions/background/schema.js.map +1 -0
  73. package/dist/extensions/background/task-view.d.ts +48 -0
  74. package/dist/extensions/background/task-view.d.ts.map +1 -0
  75. package/dist/extensions/background/task-view.js +90 -0
  76. package/dist/extensions/background/task-view.js.map +1 -0
  77. package/dist/extensions/background/text.d.ts +15 -0
  78. package/dist/extensions/background/text.d.ts.map +1 -0
  79. package/dist/extensions/background/text.js +31 -0
  80. package/dist/extensions/background/text.js.map +1 -0
  81. package/dist/extensions/background/types.d.ts +74 -0
  82. package/dist/extensions/background/types.d.ts.map +1 -0
  83. package/dist/extensions/background/types.js +17 -0
  84. package/dist/extensions/background/types.js.map +1 -0
  85. package/dist/extensions/index.d.ts.map +1 -1
  86. package/dist/extensions/index.js +2 -0
  87. package/dist/extensions/index.js.map +1 -1
  88. package/dist/extensions/llama/client.d.ts +6 -0
  89. package/dist/extensions/llama/client.d.ts.map +1 -1
  90. package/dist/extensions/llama/client.js +7 -0
  91. package/dist/extensions/llama/client.js.map +1 -1
  92. package/dist/extensions/llama/provider.d.ts +3 -1
  93. package/dist/extensions/llama/provider.d.ts.map +1 -1
  94. package/dist/extensions/llama/provider.js +27 -6
  95. package/dist/extensions/llama/provider.js.map +1 -1
  96. package/dist/extensions/subagent/activity.d.ts +5 -0
  97. package/dist/extensions/subagent/activity.d.ts.map +1 -1
  98. package/dist/extensions/subagent/activity.js +5 -0
  99. package/dist/extensions/subagent/activity.js.map +1 -1
  100. package/dist/extensions/subagent/agents-command.d.ts.map +1 -1
  101. package/dist/extensions/subagent/agents-command.js +6 -391
  102. package/dist/extensions/subagent/agents-command.js.map +1 -1
  103. package/dist/extensions/subagent/constants.d.ts.map +1 -1
  104. package/dist/extensions/subagent/constants.js +1 -0
  105. package/dist/extensions/subagent/constants.js.map +1 -1
  106. package/dist/extensions/subagent/render.d.ts.map +1 -1
  107. package/dist/extensions/subagent/render.js +15 -1
  108. package/dist/extensions/subagent/render.js.map +1 -1
  109. package/dist/extensions/subagent/resolve.d.ts.map +1 -1
  110. package/dist/extensions/subagent/resolve.js +2 -4
  111. package/dist/extensions/subagent/resolve.js.map +1 -1
  112. package/dist/extensions/subagent/runner.d.ts +1 -1
  113. package/dist/extensions/subagent/runner.d.ts.map +1 -1
  114. package/dist/extensions/subagent/runner.js +8 -8
  115. package/dist/extensions/subagent/runner.js.map +1 -1
  116. package/dist/extensions/subagent/sdk-runner.d.ts +11 -0
  117. package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
  118. package/dist/extensions/subagent/sdk-runner.js +90 -79
  119. package/dist/extensions/subagent/sdk-runner.js.map +1 -1
  120. package/dist/extensions/subagent/state.d.ts.map +1 -1
  121. package/dist/extensions/subagent/state.js +145 -126
  122. package/dist/extensions/subagent/state.js.map +1 -1
  123. package/dist/extensions/subagent/text.d.ts.map +1 -1
  124. package/dist/extensions/subagent/text.js +4 -0
  125. package/dist/extensions/subagent/text.js.map +1 -1
  126. package/dist/extensions/subagent/ui/agents-dialog.d.ts +4 -0
  127. package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +1 -0
  128. package/dist/extensions/subagent/ui/agents-dialog.js +84 -0
  129. package/dist/extensions/subagent/ui/agents-dialog.js.map +1 -0
  130. package/dist/extensions/subagent/ui/choice-menu.d.ts +39 -0
  131. package/dist/extensions/subagent/ui/choice-menu.d.ts.map +1 -0
  132. package/dist/extensions/subagent/ui/choice-menu.js +93 -0
  133. package/dist/extensions/subagent/ui/choice-menu.js.map +1 -0
  134. package/dist/extensions/subagent/ui/model-picker.d.ts +47 -0
  135. package/dist/extensions/subagent/ui/model-picker.d.ts.map +1 -0
  136. package/dist/extensions/subagent/ui/model-picker.js +142 -0
  137. package/dist/extensions/subagent/ui/model-picker.js.map +1 -0
  138. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +41 -0
  139. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +1 -0
  140. package/dist/extensions/subagent/ui/profile-settings-menu.js +98 -0
  141. package/dist/extensions/subagent/ui/profile-settings-menu.js.map +1 -0
  142. package/dist/extensions/web-search/auth.d.ts +12 -0
  143. package/dist/extensions/web-search/auth.d.ts.map +1 -0
  144. package/dist/extensions/web-search/auth.js +90 -0
  145. package/dist/extensions/web-search/auth.js.map +1 -0
  146. package/dist/extensions/web-search/constants.d.ts +13 -0
  147. package/dist/extensions/web-search/constants.d.ts.map +1 -0
  148. package/dist/extensions/web-search/constants.js +27 -0
  149. package/dist/extensions/web-search/constants.js.map +1 -0
  150. package/dist/extensions/web-search/fusion.d.ts +36 -0
  151. package/dist/extensions/web-search/fusion.d.ts.map +1 -0
  152. package/dist/extensions/web-search/fusion.js +272 -0
  153. package/dist/extensions/web-search/fusion.js.map +1 -0
  154. package/dist/extensions/web-search/index.d.ts +6 -0
  155. package/dist/extensions/web-search/index.d.ts.map +1 -0
  156. package/dist/extensions/web-search/index.js +70 -0
  157. package/dist/extensions/web-search/index.js.map +1 -0
  158. package/dist/extensions/web-search/providers/deepseek.d.ts +15 -0
  159. package/dist/extensions/web-search/providers/deepseek.d.ts.map +1 -0
  160. package/dist/extensions/web-search/providers/deepseek.js +63 -0
  161. package/dist/extensions/web-search/providers/deepseek.js.map +1 -0
  162. package/dist/extensions/web-search/providers/http.d.ts +9 -0
  163. package/dist/extensions/web-search/providers/http.d.ts.map +1 -0
  164. package/dist/extensions/web-search/providers/http.js +25 -0
  165. package/dist/extensions/web-search/providers/http.js.map +1 -0
  166. package/dist/extensions/web-search/providers/minimax.d.ts +14 -0
  167. package/dist/extensions/web-search/providers/minimax.d.ts.map +1 -0
  168. package/dist/extensions/web-search/providers/minimax.js +69 -0
  169. package/dist/extensions/web-search/providers/minimax.js.map +1 -0
  170. package/dist/extensions/web-search/render.d.ts +11 -0
  171. package/dist/extensions/web-search/render.d.ts.map +1 -0
  172. package/dist/extensions/web-search/render.js +109 -0
  173. package/dist/extensions/web-search/render.js.map +1 -0
  174. package/dist/extensions/web-search/schema.d.ts +12 -0
  175. package/dist/extensions/web-search/schema.d.ts.map +1 -0
  176. package/dist/extensions/web-search/schema.js +57 -0
  177. package/dist/extensions/web-search/schema.js.map +1 -0
  178. package/dist/extensions/web-search/types.d.ts +111 -0
  179. package/dist/extensions/web-search/types.d.ts.map +1 -0
  180. package/dist/extensions/web-search/types.js +5 -0
  181. package/dist/extensions/web-search/types.js.map +1 -0
  182. package/dist/index.d.ts +2 -1
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +1 -0
  185. package/dist/index.js.map +1 -1
  186. package/dist/main.d.ts.map +1 -1
  187. package/dist/main.js +2 -0
  188. package/dist/main.js.map +1 -1
  189. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  190. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  191. package/dist/modes/interactive/components/settings-selector.js +10 -0
  192. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  193. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  194. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  195. package/dist/modes/interactive/interactive-mode.js +71 -58
  196. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  197. package/dist/modes/rpc/rpc-client.d.ts +7 -0
  198. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  199. package/dist/modes/rpc/rpc-client.js +7 -0
  200. package/dist/modes/rpc/rpc-client.js.map +1 -1
  201. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  202. package/dist/modes/rpc/rpc-mode.js +3 -0
  203. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  204. package/dist/modes/rpc/rpc-types.d.ts +12 -0
  205. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  206. package/dist/modes/rpc/rpc-types.js.map +1 -1
  207. package/dist/utils/shell.d.ts.map +1 -1
  208. package/dist/utils/shell.js +6 -4
  209. package/dist/utils/shell.js.map +1 -1
  210. package/docs/bundled/README.md +1 -0
  211. package/docs/bundled/extensions/web-search.md +50 -0
  212. package/docs/compaction.md +5 -12
  213. package/docs/environment-variables.md +3 -0
  214. package/docs/extensions.md +21 -5
  215. package/docs/keybindings.md +1 -1
  216. package/docs/quickstart.md +1 -1
  217. package/docs/rpc.md +23 -0
  218. package/docs/settings.md +7 -0
  219. package/docs/terminal-setup.md +12 -0
  220. package/docs/usage.md +4 -3
  221. package/npm-shrinkwrap.json +29 -29
  222. package/package.json +6 -6
  223. package/dist/core/compaction-controller.d.ts +0 -90
  224. package/dist/core/compaction-controller.d.ts.map +0 -1
  225. package/dist/core/compaction-controller.js +0 -471
  226. package/dist/core/compaction-controller.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"compaction-controller.js","sourceRoot":"","sources":["../../src/core/compaction-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent, AgentMessage, PrepareNextTurnContext, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessage, Model, Usage } from \"@earendil-works/pi-ai/compat\";\nimport {\n\tisContextOverflow,\n\tisRecoverableLength,\n\ttype RetryCallbacks,\n\tstreamSimple,\n} from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSessionEvent } from \"./agent-session.ts\";\nimport {\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcompact,\n\testimateContextTokens,\n\testimateTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"./compaction/index.ts\";\nimport type {\n\tCompactionTiming,\n\tExtensionRunner,\n\tSessionBeforeCompactResult,\n\tSessionCompactFailedEvent,\n} from \"./extensions/index.ts\";\nimport type { CompactionEntry, SessionManager } from \"./session-manager.ts\";\nimport { getLatestCompactionEntry } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport const CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD =\n\t\"Estimated retained context remains above the configured auto-compaction threshold. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW =\n\t\"Nothing to compact while preserving the configured recent context. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER =\n\t\"Stopped before the next provider request because auto-compaction did not produce a safe context. Review the compaction warning before continuing.\";\n\ninterface AutoCompactionOutcome {\n\tcompacted: boolean;\n\tshouldContinue: boolean;\n\t/** Compaction persisted, but the rebuilt context is still unsafe to send. */\n\tmustStop?: boolean;\n\t/** An extension declined this compaction via session_before_compact. */\n\tcancelled?: boolean;\n}\n\nexport interface MidTurnCompactionOutcome {\n\tmessages?: AgentMessage[];\n\tstopErrorMessage?: string;\n}\n\nexport function estimateMessagesTokens(messages: AgentMessage[]): number {\n\tlet tokens = 0;\n\tfor (const message of messages) {\n\t\ttokens += estimateTokens(message);\n\t}\n\treturn tokens;\n}\n\ninterface SummarizationRequestAuth {\n\tmodel: Model<any>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}\n\n/**\n * The slice of AgentSession that auto-compaction needs. Every member forwards\n * to existing session state; the host does not grant new capabilities.\n */\nexport interface CompactionHost {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\tgetModel(): Model<any> | undefined;\n\tgetThinkingLevel(): ThinkingLevel;\n\tgetExtensionRunner(): ExtensionRunner;\n\t/** Whether a manual /compact run currently owns the compaction lifecycle. */\n\tisManualCompactionActive(): boolean;\n\temit(event: AgentSessionEvent): void;\n\temitSessionCompactFailed(event: Omit<SessionCompactFailedEvent, \"type\">): Promise<void>;\n\tgetRequiredRequestAuth(model: Model<any>): Promise<SummarizationRequestAuth>;\n\tgetSummarizationRequestAuth(\n\t\tmodel: Model<any>,\n\t\tstreamFunction: Agent[\"streamFunction\"],\n\t): Promise<SummarizationRequestAuth>;\n\tsummarizationRetryCallbacks(source: {\n\t\tsource: \"compaction\";\n\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t}): RetryCallbacks;\n}\n\n/**\n * Owns automatic compaction: threshold checks after tool batches (mid-turn),\n * after a run, and before a prompt; overflow compact-and-retry recovery; and\n * the fail-closed stop when compaction cannot produce a safe context.\n * Manual /compact stays in AgentSession.\n */\nexport class CompactionController {\n\tprivate readonly host: CompactionHost;\n\tprivate _abortController: AbortController | undefined = undefined;\n\tprivate _stopAfterTurnRequested = false;\n\t/** An extension cancelled a mid-turn compaction; skip further mid-turn checks this run. */\n\tprivate _midTurnDeclined = false;\n\tprivate _overflowRecoveryAttempted = false;\n\n\tconstructor(host: CompactionHost) {\n\t\tthis.host = host;\n\t}\n\n\t/** Clear per-run state when a new agent run starts. */\n\tnoteRunStart(): void {\n\t\tthis._stopAfterTurnRequested = false;\n\t\tthis._midTurnDeclined = false;\n\t}\n\n\t/** Read and clear the pending stop request. */\n\tconsumeStopAfterTurn(): boolean {\n\t\tconst requested = this._stopAfterTurnRequested;\n\t\tthis._stopAfterTurnRequested = false;\n\t\treturn requested;\n\t}\n\n\t/** Stop the run at the next lifecycle boundary instead of sending an unsafe context. */\n\trequestStopAfterTurn(): void {\n\t\tthis._stopAfterTurnRequested = true;\n\t}\n\n\t/** A user message or a healthy assistant response resets overflow recovery. */\n\tresetOverflowRecovery(): void {\n\t\tthis._overflowRecoveryAttempted = false;\n\t}\n\n\tget isAutoCompacting(): boolean {\n\t\treturn this._abortController !== undefined;\n\t}\n\n\tabort(): void {\n\t\tthis._abortController?.abort();\n\t}\n\n\testimateContextTokens(messages: AgentMessage[]): number {\n\t\tconst estimate = estimateContextTokens(messages);\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tif (compactionEntry && estimate.lastUsageIndex !== null) {\n\t\t\tconst usageMessage = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tusageMessage?.role === \"assistant\" &&\n\t\t\t\tusageMessage.timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\t// A retained pre-compaction usage describes the old, larger context. Fall back\n\t\t\t\t// to message estimates rather than immediately compacting again from stale data.\n\t\t\t\treturn estimateMessagesTokens(messages);\n\t\t\t}\n\t\t}\n\t\treturn estimate.tokens;\n\t}\n\n\tasync maybeCompactBeforeNextToolTurn(\n\t\tturn: PrepareNextTurnContext,\n\t\tsignal?: AbortSignal,\n\t): Promise<MidTurnCompactionOutcome> {\n\t\tif (signal?.aborted) {\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\t\t// Tool batches always continue the run; a turn without tool results only\n\t\t// continues when steering/follow-up messages are queued, otherwise the\n\t\t// post-run path covers it.\n\t\tif (turn.toolResults.length === 0 && !this.host.agent.hasQueuedMessages()) {\n\t\t\treturn {};\n\t\t}\n\t\tif (this._midTurnDeclined) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst contextTokens = this.estimateContextTokens(turn.context.messages);\n\t\tconst contextWindow = this.host.getModel()?.contextWindow ?? 0;\n\t\tif (!shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(\"threshold\", false, \"midTurn\", signal);\n\t\tif (!outcome.compacted) {\n\t\t\tif (outcome.cancelled && signal?.aborted !== true) {\n\t\t\t\t// The extension took ownership of the risk; don't re-ask on every batch.\n\t\t\t\tthis._midTurnDeclined = true;\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: this.host.agent.state.messages.slice(),\n\t\t\t...(signal?.aborted === true\n\t\t\t\t? { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER }\n\t\t\t\t: outcome.mustStop === true\n\t\t\t\t\t? { stopErrorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD }\n\t\t\t\t\t: {}),\n\t\t};\n\t}\n\n\t/**\n\t * Check if compaction is needed and run it.\n\t * Called after agent_end and before prompt submission.\n\t *\n\t * Two cases:\n\t * 1. Recoverable failure: LLM returned context overflow or stopped below its desired output limit;\n\t * remove the assistant message, compact, and auto-retry once\n\t * 2. Threshold: Context over threshold, compact, NO auto-retry (user continues manually)\n\t *\n\t * @param assistantMessage The assistant message to check\n\t * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n\t */\n\tasync checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck = true,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) return false;\n\n\t\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\t\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\t\tconst model = this.host.getModel();\n\t\tconst contextWindow = model?.contextWindow ?? 0;\n\n\t\t// Skip overflow check if the message came from a different model.\n\t\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t\t// shouldn't trigger compaction for the new model.\n\t\tconst sameModel = model && assistantMessage.provider === model.provider && assistantMessage.model === model.id;\n\n\t\t// Skip compaction checks if this assistant message is older than the latest\n\t\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t\t// from retriggering compaction on the first prompt after compaction.\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tconst assistantIsFromBeforeCompaction =\n\t\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\t\tif (assistantIsFromBeforeCompaction) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Case 1: Recoverable failure. Explicit/silent context overflow still uses context metadata.\n\t\t// A length stop is recoverable when output ended below the model's original desired limit,\n\t\t// independent of the configured context size or any context-clamped provider request limit.\n\t\t// A successful response over the configured window should compact but must not retry: the\n\t\t// assistant answer already completed and agent.continue() cannot continue from an assistant.\n\t\tconst contextOverflow = sameModel && isContextOverflow(assistantMessage, contextWindow);\n\t\tconst recoverableLength = sameModel && isRecoverableLength(assistantMessage, model?.maxTokens ?? 0);\n\t\tif (contextOverflow || recoverableLength) {\n\t\t\tconst willRetry = assistantMessage.stopReason !== \"stop\";\n\n\t\t\tif (!willRetry) {\n\t\t\t\treturn await this._runAutoCompaction(\"overflow\", false, timing);\n\t\t\t}\n\n\t\t\tif (this._overflowRecoveryAttempted) {\n\t\t\t\tthis._stopAfterTurnRequested = true;\n\t\t\t\tconst errorMessage = contextOverflow\n\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\";\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\terrorMessage,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._overflowRecoveryAttempted = true;\n\t\t\t// Remove the failed or truncated message from agent state. It remains in session history,\n\t\t\t// but must not be included in the compact-and-retry context.\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t}\n\t\t\treturn await this._runAutoCompaction(\"overflow\", willRetry, timing);\n\t\t}\n\n\t\t// Case 2: Threshold - context is getting large\n\t\t// For error messages or all-zero usage messages, estimate from the last valid response.\n\t\t// This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage\n\t\t// responses can still compact and do not reset context accounting.\n\t\tlet contextTokens: number;\n\t\tconst directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;\n\t\tif (assistantMessage.stopReason === \"error\" || directContextTokens === 0) {\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tconst estimate = estimateContextTokens(messages);\n\t\t\t// Without provider usage, estimate.tokens is the pure message-size estimate.\n\t\t\t// Only usage-backed estimates need the stale pre-compaction check.\n\t\t\tif (estimate.lastUsageIndex !== null) {\n\t\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t\t// trigger compaction right after one just finished.\n\t\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\t\tif (\n\t\t\t\t\tcompactionEntry &&\n\t\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontextTokens = estimate.tokens;\n\t\t} else {\n\t\t\tcontextTokens = directContextTokens;\n\t\t}\n\t\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn await this._runAutoCompaction(\"threshold\", false, timing);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Internal: Run auto-compaction with events.\n\t */\n\tprivate async _runAutoCompaction(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(reason, willRetry, timing);\n\t\tif (!outcome.compacted || outcome.mustStop) {\n\t\t\tthis._stopAfterTurnRequested = true;\n\t\t}\n\t\treturn outcome.shouldContinue;\n\t}\n\n\tprivate async _runAutoCompactionWithOutcome(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming,\n\t\tparentSignal?: AbortSignal,\n\t): Promise<AutoCompactionOutcome> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tlet started = false;\n\t\tlet fromExtension = false;\n\t\tlet controller: AbortController | undefined;\n\t\tlet removeParentAbortListener: (() => void) | undefined;\n\n\t\ttry {\n\t\t\tconst model = this.host.getModel();\n\t\t\tif (!model || this._abortController || this.host.isManualCompactionActive() || parentSignal?.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tconst streamFunction = this.host.agent.streamFunction;\n\t\t\tconst thinkingLevel = this.host.getThinkingLevel();\n\t\t\tconst retrySettings = this.host.settingsManager.getRetrySettings();\n\n\t\t\tcontroller = new AbortController();\n\t\t\tif (parentSignal) {\n\t\t\t\tconst abortFromParent = () => controller?.abort();\n\t\t\t\tparentSignal.addEventListener(\"abort\", abortFromParent, { once: true });\n\t\t\t\tremoveParentAbortListener = () => parentSignal.removeEventListener(\"abort\", abortFromParent);\n\t\t\t}\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tthis._abortController = controller;\n\t\t\tstarted = true;\n\t\t\tthis.host.emit({ type: \"compaction_start\", reason });\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension: false,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\tthrow new Error(NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW);\n\t\t\t}\n\n\t\t\tconst extensionRunner = this.host.getExtensionRunner();\n\t\t\tif (extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst extensionResult = (await extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions: undefined,\n\t\t\t\t\treason,\n\t\t\t\t\ttiming,\n\t\t\t\t\twillRetry,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (extensionResult?.cancel) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\t\treason,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\tfromExtension: false,\n\t\t\t\t\t});\n\t\t\t\t\t// A cancel produced by an abort (abortCompaction/parent abort) is not an\n\t\t\t\t\t// extension decision; only a voluntary cancel hands the risk to the extension.\n\t\t\t\t\treturn { compacted: false, shouldContinue: false, cancelled: !controller.signal.aborted };\n\t\t\t\t}\n\n\t\t\t\tif (extensionResult?.compaction) {\n\t\t\t\t\textensionCompaction = extensionResult.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet usage: Usage | undefined;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tusage = extensionCompaction.usage;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\tlet requestModel = model;\n\t\t\t\tlet apiKey: string | undefined;\n\t\t\t\tlet headers: Record<string, string> | undefined;\n\t\t\t\tlet env: Record<string, string> | undefined;\n\t\t\t\tif (streamFunction === streamSimple) {\n\t\t\t\t\t({ model: requestModel, apiKey, headers, env } = await this.host.getRequiredRequestAuth(model));\n\t\t\t\t} else {\n\t\t\t\t\t({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tapiKey,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tenv,\n\t\t\t\t\t} = await this.host.getSummarizationRequestAuth(model, streamFunction));\n\t\t\t\t}\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\t\treason,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\tfromExtension: false,\n\t\t\t\t\t});\n\t\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t\t}\n\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst compactResult = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\trequestModel,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tundefined,\n\t\t\t\t\tcontroller.signal,\n\t\t\t\t\tthinkingLevel,\n\t\t\t\t\tstreamFunction,\n\t\t\t\t\tenv,\n\t\t\t\t\tretrySettings,\n\t\t\t\t\tthis.host.summarizationRetryCallbacks({ source: \"compaction\", reason }),\n\t\t\t\t);\n\t\t\t\tsummary = compactResult.summary;\n\t\t\t\tfirstKeptEntryId = compactResult.firstKeptEntryId;\n\t\t\t\ttokensBefore = compactResult.tokensBefore;\n\t\t\t\tusage = compactResult.usage;\n\t\t\t\tdetails = compactResult.details;\n\t\t\t}\n\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t\tfromExtension,\n\t\t\t\tusage,\n\t\t\t);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t// The overflow response was persisted on message_end before checkCompaction() removed it\n\t\t\t\t// from agent state. Rebuilding state from the new compaction can restore that kept entry,\n\t\t\t\t// leaving an assistant as the final message. agent.continue() rejects that state, so remove\n\t\t\t\t// the retriable error or truncated-length response again before continuing the interrupted turn.\n\t\t\t\tif (\n\t\t\t\t\tlastMsg?.role === \"assistant\" &&\n\t\t\t\t\t((lastMsg as AssistantMessage).stopReason === \"error\" ||\n\t\t\t\t\t\t(lastMsg as AssistantMessage).stopReason === \"length\")\n\t\t\t\t) {\n\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst estimatedTokensAfter = this.estimateContextTokens(this.host.agent.state.messages);\n\t\t\tconst contextStillOverThreshold = shouldCompact(estimatedTokensAfter, model.contextWindow, settings);\n\t\t\tconst effectiveWillRetry = willRetry && !contextStillOverThreshold;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (savedCompactionEntry) {\n\t\t\t\tawait extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t\treason,\n\t\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\testimatedTokensAfter,\n\t\t\t\tusage,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t...(contextStillOverThreshold ? { errorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD } : {}),\n\t\t\t});\n\t\t\tif (contextStillOverThreshold) {\n\t\t\t\treturn { compacted: true, shouldContinue: false, mustStop: true };\n\t\t\t}\n\n\t\t\tif (effectiveWillRetry) {\n\t\t\t\treturn { compacted: true, shouldContinue: true };\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn { compacted: true, shouldContinue: this.host.agent.hasQueuedMessages() };\n\t\t} catch (error) {\n\t\t\tconst aborted = controller?.signal.aborted || (error instanceof Error && error.name === \"AbortError\");\n\t\t\tconst message = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\tif (started) {\n\t\t\t\tconst errorMessage = aborted\n\t\t\t\t\t? undefined\n\t\t\t\t\t: reason === \"overflow\"\n\t\t\t\t\t\t? `Context overflow recovery failed: ${message}`\n\t\t\t\t\t\t: `Auto-compaction failed: ${message}`;\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\t...(errorMessage ? { errorMessage } : {}),\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\terrorMessage,\n\t\t\t\t\taborted,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t} finally {\n\t\t\tremoveParentAbortListener?.();\n\t\t\tif (this._abortController === controller) {\n\t\t\t\tthis._abortController = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}