gsd-pi 2.34.0 → 2.35.0-dev.55dcc60

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 (421) hide show
  1. package/dist/resources/extensions/gsd/changelog.js +162 -0
  2. package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
  3. package/dist/resources/extensions/gsd/commands-inspect.js +10 -3
  4. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +5 -1
  5. package/dist/resources/extensions/gsd/commands.js +8 -1
  6. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  7. package/dist/resources/extensions/gsd/doctor-checks.js +113 -5
  8. package/dist/resources/extensions/gsd/doctor-proactive.js +22 -0
  9. package/dist/resources/extensions/gsd/doctor.js +36 -0
  10. package/dist/resources/extensions/gsd/guided-flow.js +4 -2
  11. package/dist/resources/extensions/gsd/preferences-validation.js +38 -0
  12. package/dist/resources/extensions/gsd/preferences.js +2 -0
  13. package/dist/resources/extensions/mcp-client/index.js +2 -1
  14. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  15. package/package.json +1 -1
  16. package/packages/native/dist/native.d.ts +0 -2
  17. package/packages/native/dist/native.js +0 -2
  18. package/packages/native/src/native.ts +0 -3
  19. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  20. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  21. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  22. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  23. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  24. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  25. package/packages/pi-agent-core/dist/agent.js +11 -22
  26. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  27. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  28. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  29. package/packages/pi-agent-core/dist/proxy.js +3 -9
  30. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  31. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  32. package/packages/pi-agent-core/src/agent.ts +12 -23
  33. package/packages/pi-agent-core/src/proxy.ts +3 -9
  34. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  35. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  36. package/packages/pi-ai/dist/api-registry.js +0 -10
  37. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  38. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  39. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  40. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  41. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  42. package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  43. package/packages/pi-ai/dist/providers/azure-openai-responses.js +5 -41
  44. package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  45. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  46. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  47. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  48. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  49. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  50. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  51. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  52. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  53. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  54. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  55. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  56. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  57. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  58. package/packages/pi-ai/dist/providers/openai-completions.js +10 -73
  59. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  60. package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  61. package/packages/pi-ai/dist/providers/openai-responses.js +8 -79
  62. package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
  63. package/packages/pi-ai/dist/providers/openai-shared.d.ts +65 -0
  64. package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -0
  65. package/packages/pi-ai/dist/providers/openai-shared.js +146 -0
  66. package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -0
  67. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  68. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  69. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  70. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  71. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  72. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  73. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  74. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  75. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  76. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +7 -135
  77. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  78. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  79. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +7 -135
  80. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  81. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts +46 -0
  82. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts.map +1 -0
  83. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js +160 -0
  84. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js.map +1 -0
  85. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  86. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  87. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  88. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  89. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  90. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  91. package/packages/pi-ai/dist/utils/validation.js +0 -14
  92. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  93. package/packages/pi-ai/src/api-registry.ts +0 -12
  94. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  95. package/packages/pi-ai/src/providers/azure-openai-responses.ts +11 -45
  96. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  97. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  98. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  99. package/packages/pi-ai/src/providers/openai-completions.ts +16 -86
  100. package/packages/pi-ai/src/providers/openai-responses.ts +15 -95
  101. package/packages/pi-ai/src/providers/openai-shared.ts +193 -0
  102. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  103. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  104. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +14 -162
  105. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +13 -161
  106. package/packages/pi-ai/src/utils/oauth/google-oauth-utils.ts +201 -0
  107. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  108. package/packages/pi-ai/src/utils/validation.ts +0 -15
  109. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  110. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  111. package/packages/pi-coding-agent/dist/config.js +4 -8
  112. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  113. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +16 -63
  114. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  115. package/packages/pi-coding-agent/dist/core/agent-session.js +104 -641
  116. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  117. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +0 -1
  118. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  119. package/packages/pi-coding-agent/dist/core/auth-storage.js +4 -35
  120. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  121. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  122. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +5 -43
  123. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  124. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  125. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +11 -69
  126. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  127. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +40 -0
  128. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  129. package/packages/pi-coding-agent/dist/core/compaction/utils.js +78 -0
  130. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  131. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +77 -0
  132. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -0
  133. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +331 -0
  134. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -0
  135. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  136. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  137. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  138. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  139. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +2 -2
  140. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  141. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  142. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  143. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +15 -5
  144. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  145. package/packages/pi-coding-agent/dist/core/extensions/runner.js +129 -256
  146. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  147. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +49 -42
  148. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  149. package/packages/pi-coding-agent/dist/core/extensions/types.js +2 -21
  150. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  151. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  152. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  153. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  154. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  155. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts +39 -0
  156. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts.map +1 -0
  157. package/packages/pi-coding-agent/dist/core/lock-utils.js +89 -0
  158. package/packages/pi-coding-agent/dist/core/lock-utils.js.map +1 -0
  159. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  160. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  161. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  162. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  163. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -1
  164. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  165. package/packages/pi-coding-agent/dist/core/lsp/config.js +2 -6
  166. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  167. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  168. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  169. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  170. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  171. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  172. package/packages/pi-coding-agent/dist/core/lsp/index.js +52 -107
  173. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  174. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  175. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  176. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -22
  177. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  178. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +0 -1
  179. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
  180. package/packages/pi-coding-agent/dist/core/lsp/types.js +0 -28
  181. package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
  182. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  183. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  184. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  185. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  186. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  187. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  188. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  189. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  190. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  191. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  192. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  193. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  194. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  195. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  196. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  197. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  198. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  199. package/packages/pi-coding-agent/dist/core/package-manager.js +2 -4
  200. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  201. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  202. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  203. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  204. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  205. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +2 -4
  206. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  207. package/packages/pi-coding-agent/dist/core/resource-loader.js +33 -58
  208. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +87 -0
  210. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -0
  211. package/packages/pi-coding-agent/dist/core/retry-handler.js +295 -0
  212. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -0
  213. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -5
  214. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/session-manager.js +5 -32
  216. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  218. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  220. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  222. package/packages/pi-coding-agent/dist/core/skills.js +1 -3
  223. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  224. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  225. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  226. package/packages/pi-coding-agent/dist/index.js +1 -1
  227. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  228. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  229. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  230. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  231. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  232. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  233. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  234. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  235. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  236. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +1 -1
  237. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  238. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +9 -26
  239. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
  240. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  241. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -13
  242. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  243. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
  244. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
  245. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +61 -0
  246. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
  247. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  248. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +6 -9
  249. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  251. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  253. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  255. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  256. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  257. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  258. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  259. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  261. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  263. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  264. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  265. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  266. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
  267. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
  268. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +15 -0
  269. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -0
  270. package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/modes/print-mode.js +2 -30
  272. package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -28
  275. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts +19 -0
  277. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts.map +1 -0
  278. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js +45 -0
  279. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js.map +1 -0
  280. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  281. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  283. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  285. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  287. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/utils/error.d.ts +5 -0
  289. package/packages/pi-coding-agent/dist/utils/error.d.ts.map +1 -0
  290. package/packages/pi-coding-agent/dist/utils/error.js +7 -0
  291. package/packages/pi-coding-agent/dist/utils/error.js.map +1 -0
  292. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  293. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  295. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  297. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  299. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  300. package/packages/pi-coding-agent/package.json +1 -1
  301. package/packages/pi-coding-agent/src/config.ts +5 -10
  302. package/packages/pi-coding-agent/src/core/agent-session.ts +117 -745
  303. package/packages/pi-coding-agent/src/core/auth-storage.ts +4 -38
  304. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +7 -53
  305. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +14 -74
  306. package/packages/pi-coding-agent/src/core/compaction/utils.ts +100 -0
  307. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +424 -0
  308. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  309. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -21
  310. package/packages/pi-coding-agent/src/core/extensions/runner.ts +119 -256
  311. package/packages/pi-coding-agent/src/core/extensions/types.ts +50 -69
  312. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  313. package/packages/pi-coding-agent/src/core/lock-utils.ts +113 -0
  314. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  315. package/packages/pi-coding-agent/src/core/lsp/config.ts +2 -10
  316. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  317. package/packages/pi-coding-agent/src/core/lsp/index.ts +83 -152
  318. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -23
  319. package/packages/pi-coding-agent/src/core/lsp/types.ts +0 -29
  320. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  321. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  322. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  323. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  324. package/packages/pi-coding-agent/src/core/package-manager.ts +1 -4
  325. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  326. package/packages/pi-coding-agent/src/core/resource-loader.ts +43 -67
  327. package/packages/pi-coding-agent/src/core/retry-handler.ts +359 -0
  328. package/packages/pi-coding-agent/src/core/session-manager.ts +5 -34
  329. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  330. package/packages/pi-coding-agent/src/core/skills.ts +1 -4
  331. package/packages/pi-coding-agent/src/index.ts +1 -7
  332. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  333. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  334. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +17 -29
  335. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -13
  336. package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +81 -0
  337. package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +14 -19
  338. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  339. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  340. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  341. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  342. package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +14 -0
  343. package/packages/pi-coding-agent/src/modes/print-mode.ts +2 -30
  344. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -28
  345. package/packages/pi-coding-agent/src/modes/shared/command-context-actions.ts +53 -0
  346. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  347. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  348. package/packages/pi-coding-agent/src/utils/error.ts +6 -0
  349. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  350. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  351. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  352. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  353. package/packages/pi-tui/dist/components/editor.js +1 -1
  354. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  355. package/packages/pi-tui/dist/components/markdown.d.ts +5 -0
  356. package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
  357. package/packages/pi-tui/dist/components/markdown.js +25 -31
  358. package/packages/pi-tui/dist/components/markdown.js.map +1 -1
  359. package/packages/pi-tui/dist/keys.d.ts +0 -4
  360. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  361. package/packages/pi-tui/dist/keys.js +94 -162
  362. package/packages/pi-tui/dist/keys.js.map +1 -1
  363. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  364. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  365. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  366. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  367. package/packages/pi-tui/dist/tui.d.ts +0 -22
  368. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  369. package/packages/pi-tui/dist/tui.js +6 -272
  370. package/packages/pi-tui/dist/tui.js.map +1 -1
  371. package/packages/pi-tui/dist/utils.d.ts +0 -7
  372. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  373. package/packages/pi-tui/dist/utils.js +0 -44
  374. package/packages/pi-tui/dist/utils.js.map +1 -1
  375. package/packages/pi-tui/src/components/editor.ts +1 -1
  376. package/packages/pi-tui/src/components/markdown.ts +25 -29
  377. package/packages/pi-tui/src/keys.ts +94 -173
  378. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  379. package/packages/pi-tui/src/tui.ts +11 -312
  380. package/packages/pi-tui/src/utils.ts +0 -43
  381. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  382. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  383. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  384. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  385. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  386. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  387. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  388. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  389. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  390. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  391. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  392. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  393. package/pkg/package.json +1 -1
  394. package/src/resources/extensions/gsd/changelog.ts +213 -0
  395. package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
  396. package/src/resources/extensions/gsd/commands-inspect.ts +10 -3
  397. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +5 -1
  398. package/src/resources/extensions/gsd/commands.ts +9 -1
  399. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  400. package/src/resources/extensions/gsd/doctor-checks.ts +107 -5
  401. package/src/resources/extensions/gsd/doctor-proactive.ts +24 -0
  402. package/src/resources/extensions/gsd/doctor-types.ts +9 -1
  403. package/src/resources/extensions/gsd/doctor.ts +35 -0
  404. package/src/resources/extensions/gsd/guided-flow.ts +4 -2
  405. package/src/resources/extensions/gsd/preferences-validation.ts +38 -0
  406. package/src/resources/extensions/gsd/preferences.ts +2 -0
  407. package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +46 -0
  408. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +98 -2
  409. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +59 -3
  410. package/src/resources/extensions/gsd/tests/preferences.test.ts +28 -0
  411. package/src/resources/extensions/mcp-client/index.ts +2 -1
  412. package/src/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  413. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  414. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  415. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  416. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  417. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  418. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  419. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  420. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  421. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
@@ -0,0 +1,424 @@
1
+ /**
2
+ * CompactionOrchestrator - Manages manual and automatic context compaction.
3
+ *
4
+ * Handles:
5
+ * - Manual compaction (user-triggered /compact)
6
+ * - Auto-compaction when context exceeds threshold
7
+ * - Overflow recovery when LLM returns context overflow errors
8
+ * - Extension integration for custom compaction providers
9
+ * - Branch summarization abort coordination
10
+ */
11
+
12
+ import type { Agent } from "@gsd/pi-agent-core";
13
+ import type { AssistantMessage, Model } from "@gsd/pi-ai";
14
+ import { isContextOverflow } from "@gsd/pi-ai";
15
+ import {
16
+ type CompactionResult,
17
+ calculateContextTokens,
18
+ compact,
19
+ estimateContextTokens,
20
+ prepareCompaction,
21
+ shouldCompact,
22
+ } from "./compaction/index.js";
23
+ import type { ExtensionRunner, SessionBeforeCompactResult } from "./extensions/index.js";
24
+ import type { ModelRegistry } from "./model-registry.js";
25
+ import { getLatestCompactionEntry } from "./session-manager.js";
26
+ import type { CompactionEntry, SessionManager } from "./session-manager.js";
27
+ import type { SettingsManager } from "./settings-manager.js";
28
+ import type { AgentSessionEvent } from "./agent-session.js";
29
+ import { getErrorMessage } from "../utils/error.js";
30
+
31
+ /** Dependencies injected from AgentSession into CompactionOrchestrator */
32
+ export interface CompactionOrchestratorDeps {
33
+ readonly agent: Agent;
34
+ readonly sessionManager: SessionManager;
35
+ readonly settingsManager: SettingsManager;
36
+ readonly modelRegistry: ModelRegistry;
37
+ getModel: () => Model<any> | undefined;
38
+ getSessionId: () => string;
39
+ getExtensionRunner: () => ExtensionRunner | undefined;
40
+ emit: (event: AgentSessionEvent) => void;
41
+ disconnectFromAgent: () => void;
42
+ reconnectToAgent: () => void;
43
+ abort: () => Promise<void>;
44
+ }
45
+
46
+ export class CompactionOrchestrator {
47
+ private _compactionAbortController: AbortController | undefined = undefined;
48
+ private _autoCompactionAbortController: AbortController | undefined = undefined;
49
+ private _overflowRecoveryAttempted = false;
50
+ private _branchSummaryAbortController: AbortController | undefined = undefined;
51
+
52
+ constructor(private readonly _deps: CompactionOrchestratorDeps) {}
53
+
54
+ /** Whether compaction or branch summarization is currently running */
55
+ get isCompacting(): boolean {
56
+ return (
57
+ this._autoCompactionAbortController !== undefined ||
58
+ this._compactionAbortController !== undefined ||
59
+ this._branchSummaryAbortController !== undefined
60
+ );
61
+ }
62
+
63
+ /** Reset overflow recovery flag (called when a new user message starts) */
64
+ resetOverflowRecovery(): void {
65
+ this._overflowRecoveryAttempted = false;
66
+ }
67
+
68
+ /** Mark overflow recovery as not needed (called on successful assistant response) */
69
+ clearOverflowRecovery(): void {
70
+ this._overflowRecoveryAttempted = false;
71
+ }
72
+
73
+ /** Get/set the branch summary abort controller (used by navigateTree) */
74
+ get branchSummaryAbortController(): AbortController | undefined {
75
+ return this._branchSummaryAbortController;
76
+ }
77
+ set branchSummaryAbortController(controller: AbortController | undefined) {
78
+ this._branchSummaryAbortController = controller;
79
+ }
80
+
81
+ /**
82
+ * Manually compact the session context.
83
+ * Aborts current agent operation first.
84
+ * @param customInstructions Optional instructions for the compaction summary
85
+ */
86
+ async compact(customInstructions?: string): Promise<CompactionResult> {
87
+ this._deps.disconnectFromAgent();
88
+ await this._deps.abort();
89
+ this._compactionAbortController = new AbortController();
90
+
91
+ try {
92
+ const model = this._deps.getModel();
93
+ if (!model) {
94
+ throw new Error("No model selected");
95
+ }
96
+
97
+ const apiKey = await this._deps.modelRegistry.getApiKey(model, this._deps.getSessionId());
98
+ if (!apiKey) {
99
+ throw new Error(`No API key for ${model.provider}`);
100
+ }
101
+
102
+ const pathEntries = this._deps.sessionManager.getBranch();
103
+ const settings = this._deps.settingsManager.getCompactionSettings();
104
+
105
+ const preparation = prepareCompaction(pathEntries, settings);
106
+ if (!preparation) {
107
+ const lastEntry = pathEntries[pathEntries.length - 1];
108
+ if (lastEntry?.type === "compaction") {
109
+ throw new Error("Already compacted");
110
+ }
111
+ throw new Error("Nothing to compact (session too small)");
112
+ }
113
+
114
+ let extensionCompaction: CompactionResult | undefined;
115
+ let fromExtension = false;
116
+ const extensionRunner = this._deps.getExtensionRunner();
117
+
118
+ if (extensionRunner?.hasHandlers("session_before_compact")) {
119
+ const result = (await extensionRunner.emit({
120
+ type: "session_before_compact",
121
+ preparation,
122
+ branchEntries: pathEntries,
123
+ customInstructions,
124
+ signal: this._compactionAbortController.signal,
125
+ })) as SessionBeforeCompactResult | undefined;
126
+
127
+ if (result?.cancel) {
128
+ throw new Error("Compaction cancelled");
129
+ }
130
+
131
+ if (result?.compaction) {
132
+ extensionCompaction = result.compaction;
133
+ fromExtension = true;
134
+ }
135
+ }
136
+
137
+ let summary: string;
138
+ let firstKeptEntryId: string;
139
+ let tokensBefore: number;
140
+ let details: unknown;
141
+
142
+ if (extensionCompaction) {
143
+ summary = extensionCompaction.summary;
144
+ firstKeptEntryId = extensionCompaction.firstKeptEntryId;
145
+ tokensBefore = extensionCompaction.tokensBefore;
146
+ details = extensionCompaction.details;
147
+ } else {
148
+ const result = await compact(
149
+ preparation,
150
+ model,
151
+ apiKey,
152
+ customInstructions,
153
+ this._compactionAbortController.signal,
154
+ );
155
+ summary = result.summary;
156
+ firstKeptEntryId = result.firstKeptEntryId;
157
+ tokensBefore = result.tokensBefore;
158
+ details = result.details;
159
+ }
160
+
161
+ if (this._compactionAbortController.signal.aborted) {
162
+ throw new Error("Compaction cancelled");
163
+ }
164
+
165
+ this._deps.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);
166
+ const newEntries = this._deps.sessionManager.getEntries();
167
+ const sessionContext = this._deps.sessionManager.buildSessionContext();
168
+ this._deps.agent.replaceMessages(sessionContext.messages);
169
+
170
+ const savedCompactionEntry = newEntries.find(
171
+ (e) => e.type === "compaction" && e.summary === summary,
172
+ ) as CompactionEntry | undefined;
173
+
174
+ if (extensionRunner && savedCompactionEntry) {
175
+ await extensionRunner.emit({
176
+ type: "session_compact",
177
+ compactionEntry: savedCompactionEntry,
178
+ fromExtension,
179
+ });
180
+ }
181
+
182
+ return { summary, firstKeptEntryId, tokensBefore, details };
183
+ } finally {
184
+ this._compactionAbortController = undefined;
185
+ this._deps.reconnectToAgent();
186
+ }
187
+ }
188
+
189
+ /** Cancel in-progress compaction (manual or auto) */
190
+ abortCompaction(): void {
191
+ this._compactionAbortController?.abort();
192
+ this._autoCompactionAbortController?.abort();
193
+ }
194
+
195
+ /** Cancel in-progress branch summarization */
196
+ abortBranchSummary(): void {
197
+ this._branchSummaryAbortController?.abort();
198
+ }
199
+
200
+ /**
201
+ * Check if compaction is needed and run it.
202
+ * Called after agent_end and before prompt submission.
203
+ *
204
+ * Two cases:
205
+ * 1. Overflow: LLM returned context overflow error, remove error message, compact, auto-retry
206
+ * 2. Threshold: Context over threshold, compact, NO auto-retry
207
+ *
208
+ * @param assistantMessage The assistant message to check
209
+ * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true
210
+ */
211
+ async checkCompaction(assistantMessage: AssistantMessage, skipAbortedCheck = true): Promise<void> {
212
+ const settings = this._deps.settingsManager.getCompactionSettings();
213
+ if (!settings.enabled) return;
214
+
215
+ if (skipAbortedCheck && assistantMessage.stopReason === "aborted") return;
216
+
217
+ const model = this._deps.getModel();
218
+ const contextWindow = model?.contextWindow ?? 0;
219
+
220
+ const sameModel =
221
+ model && assistantMessage.provider === model.provider && assistantMessage.model === model.id;
222
+
223
+ const branchEntries = this._deps.sessionManager.getBranch();
224
+ const compactionEntry = getLatestCompactionEntry(branchEntries);
225
+ const assistantIsFromBeforeCompaction =
226
+ compactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();
227
+ if (assistantIsFromBeforeCompaction) return;
228
+
229
+ // Case 1: Overflow - LLM returned context overflow error
230
+ if (sameModel && isContextOverflow(assistantMessage, contextWindow)) {
231
+ if (this._overflowRecoveryAttempted) {
232
+ this._deps.emit({
233
+ type: "auto_compaction_end",
234
+ result: undefined,
235
+ aborted: false,
236
+ willRetry: false,
237
+ errorMessage:
238
+ "Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.",
239
+ });
240
+ return;
241
+ }
242
+
243
+ this._overflowRecoveryAttempted = true;
244
+ const messages = this._deps.agent.state.messages;
245
+ if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
246
+ this._deps.agent.replaceMessages(messages.slice(0, -1));
247
+ }
248
+ await this._runAutoCompaction("overflow", true);
249
+ return;
250
+ }
251
+
252
+ // Case 2: Threshold - context is getting large
253
+ let contextTokens: number;
254
+ if (assistantMessage.stopReason === "error") {
255
+ const messages = this._deps.agent.state.messages;
256
+ const estimate = estimateContextTokens(messages);
257
+ if (estimate.lastUsageIndex === null) return;
258
+ const usageMsg = messages[estimate.lastUsageIndex];
259
+ if (
260
+ compactionEntry &&
261
+ usageMsg.role === "assistant" &&
262
+ (usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()
263
+ ) {
264
+ return;
265
+ }
266
+ contextTokens = estimate.tokens;
267
+ } else {
268
+ contextTokens = calculateContextTokens(assistantMessage.usage);
269
+ }
270
+ if (shouldCompact(contextTokens, contextWindow, settings)) {
271
+ await this._runAutoCompaction("threshold", false);
272
+ }
273
+ }
274
+
275
+ /** Toggle auto-compaction setting */
276
+ setAutoCompactionEnabled(enabled: boolean): void {
277
+ this._deps.settingsManager.setCompactionEnabled(enabled);
278
+ }
279
+
280
+ /** Whether auto-compaction is enabled */
281
+ get autoCompactionEnabled(): boolean {
282
+ return this._deps.settingsManager.getCompactionEnabled();
283
+ }
284
+
285
+ // =========================================================================
286
+ // Private helpers
287
+ // =========================================================================
288
+
289
+ private async _runAutoCompaction(reason: "overflow" | "threshold", willRetry: boolean): Promise<void> {
290
+ const settings = this._deps.settingsManager.getCompactionSettings();
291
+
292
+ this._deps.emit({ type: "auto_compaction_start", reason });
293
+ this._autoCompactionAbortController = new AbortController();
294
+
295
+ try {
296
+ const model = this._deps.getModel();
297
+ if (!model) {
298
+ this._deps.emit({ type: "auto_compaction_end", result: undefined, aborted: false, willRetry: false });
299
+ return;
300
+ }
301
+
302
+ const apiKey = await this._deps.modelRegistry.getApiKey(model, this._deps.getSessionId());
303
+ if (!apiKey) {
304
+ this._deps.emit({ type: "auto_compaction_end", result: undefined, aborted: false, willRetry: false });
305
+ return;
306
+ }
307
+
308
+ const pathEntries = this._deps.sessionManager.getBranch();
309
+ const preparation = prepareCompaction(pathEntries, settings);
310
+ if (!preparation) {
311
+ this._deps.emit({ type: "auto_compaction_end", result: undefined, aborted: false, willRetry: false });
312
+ return;
313
+ }
314
+
315
+ let extensionCompaction: CompactionResult | undefined;
316
+ let fromExtension = false;
317
+ const extensionRunner = this._deps.getExtensionRunner();
318
+
319
+ if (extensionRunner?.hasHandlers("session_before_compact")) {
320
+ const extensionResult = (await extensionRunner.emit({
321
+ type: "session_before_compact",
322
+ preparation,
323
+ branchEntries: pathEntries,
324
+ customInstructions: undefined,
325
+ signal: this._autoCompactionAbortController.signal,
326
+ })) as SessionBeforeCompactResult | undefined;
327
+
328
+ if (extensionResult?.cancel) {
329
+ this._deps.emit({
330
+ type: "auto_compaction_end",
331
+ result: undefined,
332
+ aborted: true,
333
+ willRetry: false,
334
+ });
335
+ return;
336
+ }
337
+
338
+ if (extensionResult?.compaction) {
339
+ extensionCompaction = extensionResult.compaction;
340
+ fromExtension = true;
341
+ }
342
+ }
343
+
344
+ let summary: string;
345
+ let firstKeptEntryId: string;
346
+ let tokensBefore: number;
347
+ let details: unknown;
348
+
349
+ if (extensionCompaction) {
350
+ summary = extensionCompaction.summary;
351
+ firstKeptEntryId = extensionCompaction.firstKeptEntryId;
352
+ tokensBefore = extensionCompaction.tokensBefore;
353
+ details = extensionCompaction.details;
354
+ } else {
355
+ const compactResult = await compact(
356
+ preparation,
357
+ model,
358
+ apiKey,
359
+ undefined,
360
+ this._autoCompactionAbortController.signal,
361
+ );
362
+ summary = compactResult.summary;
363
+ firstKeptEntryId = compactResult.firstKeptEntryId;
364
+ tokensBefore = compactResult.tokensBefore;
365
+ details = compactResult.details;
366
+ }
367
+
368
+ if (this._autoCompactionAbortController.signal.aborted) {
369
+ this._deps.emit({ type: "auto_compaction_end", result: undefined, aborted: true, willRetry: false });
370
+ return;
371
+ }
372
+
373
+ this._deps.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);
374
+ const newEntries = this._deps.sessionManager.getEntries();
375
+ const sessionContext = this._deps.sessionManager.buildSessionContext();
376
+ this._deps.agent.replaceMessages(sessionContext.messages);
377
+
378
+ const savedCompactionEntry = newEntries.find(
379
+ (e) => e.type === "compaction" && e.summary === summary,
380
+ ) as CompactionEntry | undefined;
381
+
382
+ if (extensionRunner && savedCompactionEntry) {
383
+ await extensionRunner.emit({
384
+ type: "session_compact",
385
+ compactionEntry: savedCompactionEntry,
386
+ fromExtension,
387
+ });
388
+ }
389
+
390
+ const result: CompactionResult = { summary, firstKeptEntryId, tokensBefore, details };
391
+ this._deps.emit({ type: "auto_compaction_end", result, aborted: false, willRetry });
392
+
393
+ if (willRetry) {
394
+ const messages = this._deps.agent.state.messages;
395
+ const lastMsg = messages[messages.length - 1];
396
+ if (lastMsg?.role === "assistant" && (lastMsg as AssistantMessage).stopReason === "error") {
397
+ this._deps.agent.replaceMessages(messages.slice(0, -1));
398
+ }
399
+
400
+ setTimeout(() => {
401
+ this._deps.agent.continue().catch(() => {});
402
+ }, 100);
403
+ } else if (this._deps.agent.hasQueuedMessages()) {
404
+ setTimeout(() => {
405
+ this._deps.agent.continue().catch(() => {});
406
+ }, 100);
407
+ }
408
+ } catch (error) {
409
+ const errorMessage = getErrorMessage(error);
410
+ this._deps.emit({
411
+ type: "auto_compaction_end",
412
+ result: undefined,
413
+ aborted: false,
414
+ willRetry: false,
415
+ errorMessage:
416
+ reason === "overflow"
417
+ ? `Context overflow recovery failed: ${errorMessage}`
418
+ : `Auto-compaction failed: ${errorMessage}`,
419
+ });
420
+ } finally {
421
+ this._autoCompactionAbortController = undefined;
422
+ }
423
+ }
424
+ }
@@ -195,7 +195,7 @@ const ANSI_REGEX = /\x1b\[([\d;]*)m/g;
195
195
  /**
196
196
  * Convert ANSI-escaped text to HTML with inline styles.
197
197
  */
198
- export function ansiToHtml(text: string): string {
198
+ function ansiToHtml(text: string): string {
199
199
  const style = createEmptyStyle();
200
200
  let result = "";
201
201
  let lastIndex = 0;
@@ -30,7 +30,6 @@ export type {
30
30
  AgentToolUpdateCallback,
31
31
  // App keybindings (for custom editors)
32
32
  AppAction,
33
- AppendEntryHandler,
34
33
  // Events - Tool (ToolCallEvent types)
35
34
  BashToolCallEvent,
36
35
  BashToolResultEvent,
@@ -73,10 +72,6 @@ export type {
73
72
  ExtensionWidgetOptions,
74
73
  FindToolCallEvent,
75
74
  FindToolResultEvent,
76
- GetActiveToolsHandler,
77
- GetAllToolsHandler,
78
- GetCommandsHandler,
79
- GetThinkingLevelHandler,
80
75
  GrepToolCallEvent,
81
76
  GrepToolResultEvent,
82
77
  // Events - Input
@@ -107,8 +102,6 @@ export type {
107
102
  // Events - Resources
108
103
  ResourcesDiscoverEvent,
109
104
  ResourcesDiscoverResult,
110
- SendMessageHandler,
111
- SendUserMessageHandler,
112
105
  SessionBeforeCompactEvent,
113
106
  SessionBeforeCompactResult,
114
107
  SessionBeforeForkEvent,
@@ -128,10 +121,6 @@ export type {
128
121
  SessionStartEvent,
129
122
  SessionSwitchEvent,
130
123
  SessionTreeEvent,
131
- SetActiveToolsHandler,
132
- SetLabelHandler,
133
- SetModelHandler,
134
- SetThinkingLevelHandler,
135
124
  TerminalInputHandler,
136
125
  // Events - Tool
137
126
  ToolCallEvent,
@@ -157,16 +146,7 @@ export type {
157
146
  WriteToolResultEvent,
158
147
  } from "./types.js";
159
148
  // Type guards
160
- export {
161
- isBashToolResult,
162
- isEditToolResult,
163
- isFindToolResult,
164
- isGrepToolResult,
165
- isLsToolResult,
166
- isReadToolResult,
167
- isToolCallEventType,
168
- isWriteToolResult,
169
- } from "./types.js";
149
+ export { isToolCallEventType, isToolResultEventType } from "./types.js";
170
150
  export {
171
151
  wrapRegisteredTool,
172
152
  wrapRegisteredTools,