gsd-pi 2.77.0-dev.538325aea → 2.77.0-dev.eaa4973bc

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 (874) hide show
  1. package/dist/cli-web-branch.d.ts +1 -0
  2. package/dist/cli-web-branch.js +3 -0
  3. package/dist/cli.js +59 -15
  4. package/dist/extension-discovery.d.ts +6 -0
  5. package/dist/extension-discovery.js +37 -0
  6. package/dist/extension-registry.d.ts +3 -0
  7. package/dist/extension-registry.js +1 -1
  8. package/dist/extension-sort.d.ts +18 -0
  9. package/dist/extension-sort.js +114 -0
  10. package/dist/extension-validator.d.ts +47 -0
  11. package/dist/extension-validator.js +127 -0
  12. package/dist/headless-ui.d.ts +1 -1
  13. package/dist/headless.js +4 -2
  14. package/dist/loader.js +36 -7
  15. package/dist/onboarding.js +5 -5
  16. package/dist/provider-migrations.d.ts +20 -2
  17. package/dist/provider-migrations.js +15 -2
  18. package/dist/remote-questions-config.js +1 -1
  19. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  20. package/dist/resources/extensions/aws-auth/index.js +1 -2
  21. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  22. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  23. package/dist/resources/extensions/browser-tools/index.js +1 -0
  24. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  25. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  26. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +71 -57
  27. package/dist/resources/extensions/cmux/index.js +20 -0
  28. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  29. package/dist/resources/extensions/google-search/index.js +2 -375
  30. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  31. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  32. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
  33. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  34. package/dist/resources/extensions/gsd/auto-dispatch.js +24 -0
  35. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  36. package/dist/resources/extensions/gsd/auto-post-unit.js +31 -0
  37. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  38. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  39. package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
  40. package/dist/resources/extensions/gsd/auto.js +31 -14
  41. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  42. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
  44. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  45. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  46. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  47. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  48. package/dist/resources/extensions/gsd/git-service.js +1 -0
  49. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  50. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  51. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  52. package/dist/resources/extensions/gsd/journal.js +17 -2
  53. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  54. package/dist/resources/extensions/gsd/notifications.js +30 -16
  55. package/dist/resources/extensions/gsd/reports.js +5 -4
  56. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  57. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  58. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  59. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  60. package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
  61. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  62. package/dist/resources/extensions/mcp-client/index.js +119 -10
  63. package/dist/resources/extensions/ollama/index.js +2 -1
  64. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  65. package/dist/resources/extensions/remote-questions/config.js +1 -12
  66. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  67. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  68. package/dist/resources/extensions/universal-config/index.js +1 -1
  69. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  70. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  71. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  72. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  73. package/dist/security-overrides.d.ts +1 -4
  74. package/dist/security-overrides.js +3 -16
  75. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  78. package/dist/web/standalone/.next/build-manifest.json +3 -3
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  103. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  107. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  109. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  111. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  113. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  115. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  117. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  119. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  121. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  123. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  125. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  127. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/index.html +1 -1
  164. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  169. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  171. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  172. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  173. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  175. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  177. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  178. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  179. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  180. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
  181. package/dist/web-mode.js +1 -1
  182. package/dist/welcome-screen.js +20 -19
  183. package/dist/wizard.js +5 -2
  184. package/package.json +16 -32
  185. package/packages/mcp-server/README.md +3 -3
  186. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  187. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  188. package/packages/mcp-server/dist/env-writer.js +74 -6
  189. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  190. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  191. package/packages/mcp-server/dist/server.js +36 -17
  192. package/packages/mcp-server/dist/server.js.map +1 -1
  193. package/packages/mcp-server/package.json +5 -0
  194. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  195. package/packages/mcp-server/src/env-writer.ts +76 -6
  196. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  197. package/packages/mcp-server/src/server.ts +45 -19
  198. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  199. package/packages/native/package.json +5 -0
  200. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  201. package/packages/native/tsconfig.json +1 -2
  202. package/packages/native/tsconfig.tsbuildinfo +1 -0
  203. package/packages/pi-agent-core/package.json +5 -0
  204. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  205. package/packages/pi-ai/package.json +5 -0
  206. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  207. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  208. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  210. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  212. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  213. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  214. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  216. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  218. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  220. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  222. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  223. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  224. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  225. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  226. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  228. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  230. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  231. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  232. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  233. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  234. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  235. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  236. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  237. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  238. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  239. package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
  240. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  242. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  243. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  245. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  247. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  249. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  251. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  253. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  255. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  257. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  259. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  268. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  270. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  271. package/packages/pi-coding-agent/package.json +5 -0
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  274. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  275. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  276. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  277. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  278. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  279. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  280. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  281. package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
  282. package/packages/pi-coding-agent/src/core/extensions/types.ts +8 -0
  283. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  284. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  285. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  286. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  287. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  288. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  289. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  290. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  291. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  292. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  293. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  294. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  295. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  296. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  297. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +19 -0
  298. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  299. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  300. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  301. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  302. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  303. package/packages/pi-tui/package.json +5 -0
  304. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  305. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +25 -0
  306. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  307. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  308. package/packages/rpc-client/package.json +5 -0
  309. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  310. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  311. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  312. package/pkg/dist/core/export-html/index.d.ts +1 -1
  313. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  314. package/pkg/dist/core/export-html/index.js +5 -39
  315. package/pkg/dist/core/export-html/index.js.map +1 -1
  316. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  317. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  318. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  319. package/scripts/ensure-workspace-builds.cjs +0 -2
  320. package/scripts/lib/workspace-manifest.cjs +86 -0
  321. package/scripts/link-workspace-packages.cjs +5 -19
  322. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  323. package/src/resources/extensions/aws-auth/index.ts +1 -2
  324. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  325. package/src/resources/extensions/bg-shell/index.ts +1 -2
  326. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  327. package/src/resources/extensions/browser-tools/index.ts +1 -2
  328. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  329. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  330. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +81 -61
  331. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +91 -22
  332. package/src/resources/extensions/cmux/index.ts +35 -10
  333. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  334. package/src/resources/extensions/google-search/index.ts +8 -470
  335. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  336. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
  337. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  338. package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
  339. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  340. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  341. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -0
  342. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  343. package/src/resources/extensions/gsd/auto-post-unit.ts +30 -0
  344. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  345. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  346. package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
  347. package/src/resources/extensions/gsd/auto.ts +37 -18
  348. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  349. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
  350. package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
  351. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  352. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  353. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  354. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  355. package/src/resources/extensions/gsd/git-service.ts +1 -0
  356. package/src/resources/extensions/gsd/gitignore.ts +1 -0
  357. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  358. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  359. package/src/resources/extensions/gsd/journal.ts +27 -2
  360. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  361. package/src/resources/extensions/gsd/notifications.ts +27 -15
  362. package/src/resources/extensions/gsd/reports.ts +5 -4
  363. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -2
  364. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  365. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  366. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  367. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +121 -0
  368. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  369. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  370. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
  371. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  372. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  373. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  374. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
  375. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  376. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  377. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  378. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  379. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  380. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  381. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  382. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  383. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  384. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  385. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  386. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  387. package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
  388. package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
  389. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  390. package/src/resources/extensions/mcp-client/index.ts +130 -11
  391. package/src/resources/extensions/ollama/index.ts +3 -3
  392. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  393. package/src/resources/extensions/remote-questions/config.ts +4 -15
  394. package/src/resources/extensions/search-the-web/index.ts +1 -2
  395. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  396. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  397. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  398. package/src/resources/extensions/universal-config/index.ts +1 -1
  399. package/src/resources/skills/create-skill/SKILL.md +2 -2
  400. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  401. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  402. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  403. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  405. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  406. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  407. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  408. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  409. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  410. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  411. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  412. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  413. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  414. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  415. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  416. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  417. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  418. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  419. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  420. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  421. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  422. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  423. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  424. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  425. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  426. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  427. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  428. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  429. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  430. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  431. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  432. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  433. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  434. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  435. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  436. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  437. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  438. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  439. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  440. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  441. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  442. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  443. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  444. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  445. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  446. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  447. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  448. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  449. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  450. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  451. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  452. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  453. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  454. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  455. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  456. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  457. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  458. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  459. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  460. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  461. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  462. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  463. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  464. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  465. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  466. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  467. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  468. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  469. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  470. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  471. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  472. package/packages/gsd-agent-core/dist/index.js +0 -19
  473. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  474. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  475. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  476. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  477. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  478. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  479. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  480. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  481. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  482. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  483. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  484. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  485. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  486. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  487. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  488. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  489. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  490. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  491. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  492. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  493. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  494. package/packages/gsd-agent-core/package.json +0 -25
  495. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  496. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  497. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  498. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  499. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  500. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  501. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  502. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  503. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  504. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  505. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  506. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  507. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  508. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  509. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  510. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  511. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  512. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  513. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  514. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  515. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  516. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  517. package/packages/gsd-agent-core/src/index.ts +0 -68
  518. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  519. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  520. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  521. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  522. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  523. package/packages/gsd-agent-core/tsconfig.json +0 -28
  524. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  525. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  526. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  528. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  530. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  532. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  534. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  536. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  538. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  540. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  542. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  544. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  546. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/index.js +0 -7
  548. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  550. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/main.js +0 -491
  552. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  554. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  556. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  558. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  560. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  562. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  564. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  566. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  568. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  570. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  572. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  574. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  576. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  578. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  580. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  582. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  584. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  586. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  588. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  590. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  592. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  594. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  596. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  598. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  600. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  602. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  604. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  606. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  608. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  610. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  612. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  614. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  616. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  617. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  618. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  619. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  620. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  621. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  622. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  623. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  624. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  625. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  626. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  627. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  628. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  629. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  630. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  631. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  632. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  633. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  634. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  635. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  636. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  637. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  638. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  639. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  640. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  641. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  642. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  643. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  644. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  645. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  646. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  647. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  648. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  649. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  650. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  651. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  652. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  653. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  654. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  655. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  656. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  657. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  658. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  659. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  660. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  661. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  662. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  663. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  664. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  665. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  666. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  667. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  668. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  669. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  670. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  671. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  672. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  673. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  674. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  675. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  676. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  677. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  678. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  679. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  680. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  681. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  682. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  683. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  684. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  685. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  686. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  687. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  688. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  689. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  690. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  691. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  692. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  693. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  694. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  695. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  696. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  709. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  710. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  711. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  712. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  713. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  714. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  715. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  716. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  717. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  718. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  719. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  720. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  721. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  722. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  723. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  724. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  725. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  726. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  728. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  730. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  732. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  734. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  736. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  738. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  740. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  741. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  742. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  743. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  744. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  745. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  746. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  747. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  748. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  749. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  750. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  751. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  752. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  753. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  754. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  755. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  756. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  757. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  758. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  759. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  760. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  761. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  762. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  763. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  764. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  765. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  766. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  767. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  768. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  769. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  770. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  771. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  772. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  773. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  774. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  775. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  776. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  777. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  778. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  779. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  780. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  781. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  782. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  783. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  784. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  785. package/packages/gsd-agent-modes/package.json +0 -23
  786. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  787. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  788. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  789. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  790. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  791. package/packages/gsd-agent-modes/src/index.ts +0 -6
  792. package/packages/gsd-agent-modes/src/main.ts +0 -614
  793. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  794. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  795. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  796. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  797. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  798. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  799. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  800. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  801. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  802. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  803. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  804. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  805. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  806. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  807. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  808. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  809. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  810. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  811. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  812. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  813. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  814. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  815. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  816. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  817. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  818. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  819. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  820. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  821. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  822. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  823. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  824. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  825. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  826. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  827. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  828. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  829. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  830. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  831. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  832. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  833. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  834. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  835. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  836. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  837. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  838. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  839. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  840. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  841. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  842. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  843. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  844. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  845. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  846. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  847. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  848. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  849. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  850. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  851. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  852. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  853. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  854. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  855. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  856. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  857. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  858. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  859. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  860. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  861. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  862. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  863. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  864. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  865. package/packages/gsd-agent-types/dist/index.js +0 -24
  866. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  867. package/packages/gsd-agent-types/package.json +0 -24
  868. package/packages/gsd-agent-types/src/index.ts +0 -206
  869. package/packages/gsd-agent-types/tsconfig.json +0 -25
  870. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  871. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  872. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  873. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_buildManifest.js +0 -0
  874. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_ssgManifest.js +0 -0
@@ -1,1011 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { unlink } from "node:fs/promises";
4
- import {
5
- type Component,
6
- Container,
7
- type Focusable,
8
- Input,
9
- matchesKey,
10
- Spacer,
11
- Text,
12
- truncateToWidth,
13
- visibleWidth,
14
- } from "@gsd/pi-tui";
15
- import { getKeybindings } from "../../../pi-tui-compat.js";
16
- import { KeybindingsManager } from "@gsd/agent-core";
17
- import type { SessionInfo } from "@gsd/agent-types";
18
- import { theme } from "../../../theme.js";
19
-
20
- /** Progress callback for session list loading (not exported from pi-coding-agent index). */
21
- type SessionListProgress = (loaded: number, total: number) => void;
22
- import { shortenPath } from "../utils/shorten-path.js";
23
- import { DynamicBorder } from "./dynamic-border.js";
24
- import { appKey, appKeyHint, keyHint } from "./keybinding-hints.js";
25
- import { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from "./session-selector-search.js";
26
- import {
27
- applyRowHighlight,
28
- buildTreePrefix,
29
- computeScrollWindow,
30
- renderCursor,
31
- } from "./tree-render-utils.js";
32
-
33
- type SessionScope = "current" | "all";
34
-
35
- function formatSessionDate(date: Date): string {
36
- const now = new Date();
37
- const diffMs = now.getTime() - date.getTime();
38
- const diffMins = Math.floor(diffMs / 60000);
39
- const diffHours = Math.floor(diffMs / 3600000);
40
- const diffDays = Math.floor(diffMs / 86400000);
41
-
42
- if (diffMins < 1) return "now";
43
- if (diffMins < 60) return `${diffMins}m`;
44
- if (diffHours < 24) return `${diffHours}h`;
45
- if (diffDays < 7) return `${diffDays}d`;
46
- if (diffDays < 30) return `${Math.floor(diffDays / 7)}w`;
47
- if (diffDays < 365) return `${Math.floor(diffDays / 30)}mo`;
48
- return `${Math.floor(diffDays / 365)}y`;
49
- }
50
-
51
- class SessionSelectorHeader implements Component {
52
- private scope: SessionScope;
53
- private sortMode: SortMode;
54
- private nameFilter: NameFilter;
55
- private keybindings: KeybindingsManager;
56
- private requestRender: () => void;
57
- private loading = false;
58
- private loadProgress: { loaded: number; total: number } | null = null;
59
- private showPath = false;
60
- private confirmingDeletePath: string | null = null;
61
- private statusMessage: { type: "info" | "error"; message: string } | null = null;
62
- private statusTimeout: ReturnType<typeof setTimeout> | null = null;
63
- private showRenameHint = false;
64
-
65
- constructor(
66
- scope: SessionScope,
67
- sortMode: SortMode,
68
- nameFilter: NameFilter,
69
- keybindings: KeybindingsManager,
70
- requestRender: () => void,
71
- ) {
72
- this.scope = scope;
73
- this.sortMode = sortMode;
74
- this.nameFilter = nameFilter;
75
- this.keybindings = keybindings;
76
- this.requestRender = requestRender;
77
- }
78
-
79
- setScope(scope: SessionScope): void {
80
- this.scope = scope;
81
- }
82
-
83
- setSortMode(sortMode: SortMode): void {
84
- this.sortMode = sortMode;
85
- }
86
-
87
- setNameFilter(nameFilter: NameFilter): void {
88
- this.nameFilter = nameFilter;
89
- }
90
-
91
- setLoading(loading: boolean): void {
92
- this.loading = loading;
93
- // Progress is scoped to the current load; clear whenever the loading state is set
94
- this.loadProgress = null;
95
- }
96
-
97
- setProgress(loaded: number, total: number): void {
98
- this.loadProgress = { loaded, total };
99
- }
100
-
101
- setShowPath(showPath: boolean): void {
102
- this.showPath = showPath;
103
- }
104
-
105
- setShowRenameHint(show: boolean): void {
106
- this.showRenameHint = show;
107
- }
108
-
109
- setConfirmingDeletePath(path: string | null): void {
110
- this.confirmingDeletePath = path;
111
- }
112
-
113
- private clearStatusTimeout(): void {
114
- if (!this.statusTimeout) return;
115
- clearTimeout(this.statusTimeout);
116
- this.statusTimeout = null;
117
- }
118
-
119
- setStatusMessage(msg: { type: "info" | "error"; message: string } | null, autoHideMs?: number): void {
120
- this.clearStatusTimeout();
121
- this.statusMessage = msg;
122
- if (!msg || !autoHideMs) return;
123
-
124
- this.statusTimeout = setTimeout(() => {
125
- this.statusMessage = null;
126
- this.statusTimeout = null;
127
- this.requestRender();
128
- }, autoHideMs);
129
- }
130
-
131
- invalidate(): void {}
132
-
133
- render(width: number): string[] {
134
- const title = this.scope === "current" ? "Resume Session (Current Folder)" : "Resume Session (All)";
135
- const leftText = theme.bold(title);
136
-
137
- const sortLabel = this.sortMode === "threaded" ? "Threaded" : this.sortMode === "recent" ? "Recent" : "Fuzzy";
138
- const sortText = theme.fg("muted", "Sort: ") + theme.fg("accent", sortLabel);
139
-
140
- const nameLabel = this.nameFilter === "all" ? "All" : "Named";
141
- const nameText = theme.fg("muted", "Name: ") + theme.fg("accent", nameLabel);
142
-
143
- let scopeText: string;
144
- if (this.loading) {
145
- const progressText = this.loadProgress ? `${this.loadProgress.loaded}/${this.loadProgress.total}` : "...";
146
- scopeText = `${theme.fg("muted", "○ Current Folder | ")}${theme.fg("accent", `Loading ${progressText}`)}`;
147
- } else if (this.scope === "current") {
148
- scopeText = `${theme.fg("accent", "◉ Current Folder")}${theme.fg("muted", " | ○ All")}`;
149
- } else {
150
- scopeText = `${theme.fg("muted", "○ Current Folder | ")}${theme.fg("accent", "◉ All")}`;
151
- }
152
-
153
- const rightText = truncateToWidth(`${scopeText} ${nameText} ${sortText}`, width, "");
154
- const availableLeft = Math.max(0, width - visibleWidth(rightText) - 1);
155
- const left = truncateToWidth(leftText, availableLeft, "");
156
- const spacing = Math.max(0, width - visibleWidth(left) - visibleWidth(rightText));
157
-
158
- // Build hint lines - changes based on state (all branches truncate to width)
159
- let hintLine1: string;
160
- let hintLine2: string;
161
- if (this.confirmingDeletePath !== null) {
162
- const confirmHint = "Delete session? [Enter] confirm · [Esc/Ctrl+C] cancel";
163
- hintLine1 = theme.fg("error", truncateToWidth(confirmHint, width, "…"));
164
- hintLine2 = "";
165
- } else if (this.statusMessage) {
166
- const color = this.statusMessage.type === "error" ? "error" : "accent";
167
- hintLine1 = theme.fg(color, truncateToWidth(this.statusMessage.message, width, "…"));
168
- hintLine2 = "";
169
- } else {
170
- const pathState = this.showPath ? "(on)" : "(off)";
171
- const sep = theme.fg("muted", " · ");
172
- const hint1 = keyHint("tab", "scope") + sep + theme.fg("muted", 're:<pattern> regex · "phrase" exact');
173
- const hint2Parts = [
174
- keyHint("toggleSessionSort", "sort"),
175
- appKeyHint(this.keybindings, "toggleSessionNamedFilter", "named"),
176
- keyHint("deleteSession", "delete"),
177
- keyHint("toggleSessionPath", `path ${pathState}`),
178
- ];
179
- if (this.showRenameHint) {
180
- hint2Parts.push(keyHint("app.session.rename", "rename"));
181
- }
182
- const hint2 = hint2Parts.join(sep);
183
- hintLine1 = truncateToWidth(hint1, width, "…");
184
- hintLine2 = truncateToWidth(hint2, width, "…");
185
- }
186
-
187
- return [`${left}${" ".repeat(spacing)}${rightText}`, hintLine1, hintLine2];
188
- }
189
- }
190
-
191
- /** A session tree node for hierarchical display */
192
- interface SessionTreeNode {
193
- session: SessionInfo;
194
- children: SessionTreeNode[];
195
- }
196
-
197
- /** Flattened node for display with tree structure info */
198
- interface FlatSessionNode {
199
- session: SessionInfo;
200
- depth: number;
201
- isLast: boolean;
202
- /** For each ancestor level, whether there are more siblings after it */
203
- ancestorContinues: boolean[];
204
- }
205
-
206
- /**
207
- * Build a tree structure from sessions based on parentSessionPath.
208
- * Returns root nodes sorted by modified date (descending).
209
- */
210
- function buildSessionTree(sessions: SessionInfo[]): SessionTreeNode[] {
211
- const byPath = new Map<string, SessionTreeNode>();
212
-
213
- for (const session of sessions) {
214
- byPath.set(session.path, { session, children: [] });
215
- }
216
-
217
- const roots: SessionTreeNode[] = [];
218
-
219
- for (const session of sessions) {
220
- const node = byPath.get(session.path)!;
221
- const parentPath = session.parentSessionPath;
222
-
223
- if (parentPath && byPath.has(parentPath)) {
224
- byPath.get(parentPath)!.children.push(node);
225
- } else {
226
- roots.push(node);
227
- }
228
- }
229
-
230
- // Sort children and roots by modified date (descending)
231
- const sortNodes = (nodes: SessionTreeNode[]): void => {
232
- nodes.sort((a, b) => b.session.modified.getTime() - a.session.modified.getTime());
233
- for (const node of nodes) {
234
- sortNodes(node.children);
235
- }
236
- };
237
- sortNodes(roots);
238
-
239
- return roots;
240
- }
241
-
242
- /**
243
- * Flatten tree into display list with tree structure metadata.
244
- */
245
- function flattenSessionTree(roots: SessionTreeNode[]): FlatSessionNode[] {
246
- const result: FlatSessionNode[] = [];
247
-
248
- const walk = (node: SessionTreeNode, depth: number, ancestorContinues: boolean[], isLast: boolean): void => {
249
- result.push({ session: node.session, depth, isLast, ancestorContinues });
250
-
251
- for (let i = 0; i < node.children.length; i++) {
252
- const childIsLast = i === node.children.length - 1;
253
- // Only show continuation line for non-root ancestors
254
- const continues = depth > 0 ? !isLast : false;
255
- walk(node.children[i]!, depth + 1, [...ancestorContinues, continues], childIsLast);
256
- }
257
- };
258
-
259
- for (let i = 0; i < roots.length; i++) {
260
- walk(roots[i]!, 0, [], i === roots.length - 1);
261
- }
262
-
263
- return result;
264
- }
265
-
266
- /**
267
- * Custom session list component with multi-line items and search
268
- */
269
- class SessionList implements Component, Focusable {
270
- public getSelectedSessionPath(): string | undefined {
271
- const selected = this.filteredSessions[this.selectedIndex];
272
- return selected?.session.path;
273
- }
274
- private allSessions: SessionInfo[] = [];
275
- private filteredSessions: FlatSessionNode[] = [];
276
- private selectedIndex: number = 0;
277
- private searchInput: Input;
278
- private showCwd = false;
279
- private sortMode: SortMode = "threaded";
280
- private nameFilter: NameFilter = "all";
281
- private keybindings: KeybindingsManager;
282
- private showPath = false;
283
- private confirmingDeletePath: string | null = null;
284
- private currentSessionFilePath?: string;
285
- public onSelect?: (sessionPath: string) => void;
286
- public onCancel?: () => void;
287
- public onExit: () => void = () => {};
288
- public onToggleScope?: () => void;
289
- public onToggleSort?: () => void;
290
- public onToggleNameFilter?: () => void;
291
- public onTogglePath?: (showPath: boolean) => void;
292
- public onDeleteConfirmationChange?: (path: string | null) => void;
293
- public onDeleteSession?: (sessionPath: string) => Promise<void>;
294
- public onRenameSession?: (sessionPath: string) => void;
295
- public onError?: (message: string) => void;
296
- private maxVisible: number = 10; // Max sessions visible (one line each)
297
-
298
- // Focusable implementation - propagate to searchInput for IME cursor positioning
299
- private _focused = false;
300
- get focused(): boolean {
301
- return this._focused;
302
- }
303
- set focused(value: boolean) {
304
- this._focused = value;
305
- this.searchInput.focused = value;
306
- }
307
-
308
- constructor(
309
- sessions: SessionInfo[],
310
- showCwd: boolean,
311
- sortMode: SortMode,
312
- nameFilter: NameFilter,
313
- keybindings: KeybindingsManager,
314
- currentSessionFilePath?: string,
315
- ) {
316
- this.allSessions = sessions;
317
- this.filteredSessions = [];
318
- this.searchInput = new Input();
319
- this.showCwd = showCwd;
320
- this.sortMode = sortMode;
321
- this.nameFilter = nameFilter;
322
- this.keybindings = keybindings;
323
- this.currentSessionFilePath = currentSessionFilePath;
324
- this.filterSessions("");
325
-
326
- // Handle Enter in search input - select current item
327
- this.searchInput.onSubmit = () => {
328
- if (this.filteredSessions[this.selectedIndex]) {
329
- const selected = this.filteredSessions[this.selectedIndex];
330
- if (this.onSelect) {
331
- this.onSelect(selected.session.path);
332
- }
333
- }
334
- };
335
- }
336
-
337
- setSortMode(sortMode: SortMode): void {
338
- this.sortMode = sortMode;
339
- this.filterSessions(this.searchInput.getValue());
340
- }
341
-
342
- setNameFilter(nameFilter: NameFilter): void {
343
- this.nameFilter = nameFilter;
344
- this.filterSessions(this.searchInput.getValue());
345
- }
346
-
347
- setSessions(sessions: SessionInfo[], showCwd: boolean): void {
348
- this.allSessions = sessions;
349
- this.showCwd = showCwd;
350
- this.filterSessions(this.searchInput.getValue());
351
- }
352
-
353
- private filterSessions(query: string): void {
354
- const trimmed = query.trim();
355
- const nameFiltered =
356
- this.nameFilter === "all" ? this.allSessions : this.allSessions.filter((session) => hasSessionName(session));
357
-
358
- if (this.sortMode === "threaded" && !trimmed) {
359
- // Threaded mode without search: show tree structure
360
- const roots = buildSessionTree(nameFiltered);
361
- this.filteredSessions = flattenSessionTree(roots);
362
- } else {
363
- // Other modes or with search: flat list
364
- const filtered = filterAndSortSessions(nameFiltered, query, this.sortMode, "all");
365
- this.filteredSessions = filtered.map((session) => ({
366
- session,
367
- depth: 0,
368
- isLast: true,
369
- ancestorContinues: [],
370
- }));
371
- }
372
- this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredSessions.length - 1));
373
- }
374
-
375
- private setConfirmingDeletePath(path: string | null): void {
376
- this.confirmingDeletePath = path;
377
- this.onDeleteConfirmationChange?.(path);
378
- }
379
-
380
- private startDeleteConfirmationForSelectedSession(): void {
381
- const selected = this.filteredSessions[this.selectedIndex];
382
- if (!selected) return;
383
-
384
- // Prevent deleting current session
385
- if (this.currentSessionFilePath && selected.session.path === this.currentSessionFilePath) {
386
- this.onError?.("Cannot delete the currently active session");
387
- return;
388
- }
389
-
390
- this.setConfirmingDeletePath(selected.session.path);
391
- }
392
-
393
- invalidate(): void {}
394
-
395
- render(width: number): string[] {
396
- const lines: string[] = [];
397
-
398
- // Render search input
399
- lines.push(...this.searchInput.render(width));
400
- lines.push(""); // Blank line after search
401
-
402
- if (this.filteredSessions.length === 0) {
403
- let emptyMessage: string;
404
- if (this.nameFilter === "named") {
405
- const toggleKey = appKey(this.keybindings, "toggleSessionNamedFilter");
406
- if (this.showCwd) {
407
- emptyMessage = ` No named sessions found. Press ${toggleKey} to show all.`;
408
- } else {
409
- emptyMessage = ` No named sessions in current folder. Press ${toggleKey} to show all, or Tab to view all.`;
410
- }
411
- } else if (this.showCwd) {
412
- // "All" scope - no sessions anywhere that match filter
413
- emptyMessage = " No sessions found";
414
- } else {
415
- // "Current folder" scope - hint to try "all"
416
- emptyMessage = " No sessions in current folder. Press Tab to view all.";
417
- }
418
- lines.push(theme.fg("muted", truncateToWidth(emptyMessage, width, "…")));
419
- return lines;
420
- }
421
-
422
- // Calculate visible range with scrolling
423
- const { startIndex, endIndex } = computeScrollWindow(
424
- this.selectedIndex,
425
- this.filteredSessions.length,
426
- this.maxVisible,
427
- );
428
-
429
- // Render visible sessions (one line each with tree structure)
430
- for (let i = startIndex; i < endIndex; i++) {
431
- const node = this.filteredSessions[i]!;
432
- const session = node.session;
433
- const isSelected = i === this.selectedIndex;
434
- const isConfirmingDelete = session.path === this.confirmingDeletePath;
435
- const isCurrent = this.currentSessionFilePath === session.path;
436
-
437
- // Build tree prefix
438
- const prefix = this.buildNodeTreePrefix(node);
439
-
440
- // Session display text (name or first message)
441
- const hasName = !!session.name;
442
- const displayText = session.name ?? session.firstMessage;
443
- // eslint-disable-next-line no-control-regex -- intentional: sanitizing session display text
444
- const normalizedMessage = displayText.replace(/[\x00-\x1f\x7f]/g, " ").trim();
445
-
446
- // Right side: message count and age
447
- const age = formatSessionDate(session.modified);
448
- const msgCount = String(session.messageCount);
449
- let rightPart = `${msgCount} ${age}`;
450
- if (this.showCwd && session.cwd) {
451
- rightPart = `${shortenPath(session.cwd)} ${rightPart}`;
452
- }
453
- if (this.showPath) {
454
- rightPart = `${shortenPath(session.path)} ${rightPart}`;
455
- }
456
-
457
- // Cursor
458
- const cursor = renderCursor(isSelected);
459
-
460
- // Calculate available width for message
461
- const prefixWidth = visibleWidth(prefix);
462
- const rightWidth = visibleWidth(rightPart) + 2; // +2 for spacing
463
- const availableForMsg = width - 2 - prefixWidth - rightWidth; // -2 for cursor
464
-
465
- const truncatedMsg = truncateToWidth(normalizedMessage, Math.max(10, availableForMsg), "…");
466
-
467
- // Style message
468
- let messageColor: "error" | "warning" | "accent" | null = null;
469
- if (isConfirmingDelete) {
470
- messageColor = "error";
471
- } else if (isCurrent) {
472
- messageColor = "accent";
473
- } else if (hasName) {
474
- messageColor = "warning";
475
- }
476
- let styledMsg = messageColor ? theme.fg(messageColor, truncatedMsg) : truncatedMsg;
477
- if (isSelected) {
478
- styledMsg = theme.bold(styledMsg);
479
- }
480
-
481
- // Build line
482
- const leftPart = cursor + theme.fg("dim", prefix) + styledMsg;
483
- const leftWidth = visibleWidth(leftPart);
484
- const spacing = Math.max(1, width - leftWidth - visibleWidth(rightPart));
485
- const styledRight = theme.fg(isConfirmingDelete ? "error" : "dim", rightPart);
486
-
487
- const line = leftPart + " ".repeat(spacing) + styledRight;
488
- lines.push(applyRowHighlight(line, isSelected, width));
489
- }
490
-
491
- // Add scroll indicator if needed
492
- if (startIndex > 0 || endIndex < this.filteredSessions.length) {
493
- const scrollText = ` (${this.selectedIndex + 1}/${this.filteredSessions.length})`;
494
- const scrollInfo = theme.fg("muted", truncateToWidth(scrollText, width, ""));
495
- lines.push(scrollInfo);
496
- }
497
-
498
- return lines;
499
- }
500
-
501
- private buildNodeTreePrefix(node: FlatSessionNode): string {
502
- return buildTreePrefix(node.ancestorContinues, node.isLast, node.depth);
503
- }
504
-
505
- handleInput(keyData: string): void {
506
- const kb = getKeybindings();
507
-
508
- // Handle delete confirmation state first - intercept all keys
509
- if (this.confirmingDeletePath !== null) {
510
- if (kb.matches(keyData, "selectConfirm")) {
511
- const pathToDelete = this.confirmingDeletePath;
512
- this.setConfirmingDeletePath(null);
513
- void this.onDeleteSession?.(pathToDelete);
514
- return;
515
- }
516
- // Allow both Escape and Ctrl+C to cancel (consistent with pi UX)
517
- if (kb.matches(keyData, "selectCancel") || matchesKey(keyData, "ctrl+c")) {
518
- this.setConfirmingDeletePath(null);
519
- return;
520
- }
521
- // Ignore all other keys while confirming
522
- return;
523
- }
524
-
525
- if (kb.matches(keyData, "tab")) {
526
- if (this.onToggleScope) {
527
- this.onToggleScope();
528
- }
529
- return;
530
- }
531
-
532
- if (kb.matches(keyData, "toggleSessionSort")) {
533
- this.onToggleSort?.();
534
- return;
535
- }
536
-
537
- if (this.keybindings.matches(keyData, "toggleSessionNamedFilter")) {
538
- this.onToggleNameFilter?.();
539
- return;
540
- }
541
-
542
- // Ctrl+P: toggle path display
543
- if (kb.matches(keyData, "toggleSessionPath")) {
544
- this.showPath = !this.showPath;
545
- this.onTogglePath?.(this.showPath);
546
- return;
547
- }
548
-
549
- // Ctrl+D: initiate delete confirmation (useful on terminals that don't distinguish Ctrl+Backspace from Backspace)
550
- if (kb.matches(keyData, "deleteSession")) {
551
- this.startDeleteConfirmationForSelectedSession();
552
- return;
553
- }
554
-
555
- // Ctrl+R: rename selected session
556
- if (matchesKey(keyData, "ctrl+r")) {
557
- const selected = this.filteredSessions[this.selectedIndex];
558
- if (selected) {
559
- this.onRenameSession?.(selected.session.path);
560
- }
561
- return;
562
- }
563
-
564
- // Ctrl+Backspace: non-invasive convenience alias for delete
565
- // Only triggers deletion when the query is empty; otherwise it is forwarded to the input
566
- if (kb.matches(keyData, "deleteSessionNoninvasive")) {
567
- if (this.searchInput.getValue().length > 0) {
568
- this.searchInput.handleInput(keyData);
569
- this.filterSessions(this.searchInput.getValue());
570
- return;
571
- }
572
-
573
- this.startDeleteConfirmationForSelectedSession();
574
- return;
575
- }
576
-
577
- // Up arrow (wrap)
578
- if (kb.matches(keyData, "selectUp")) {
579
- this.selectedIndex = this.selectedIndex === 0 ? this.filteredSessions.length - 1 : this.selectedIndex - 1;
580
- }
581
- // Down arrow (wrap)
582
- else if (kb.matches(keyData, "selectDown")) {
583
- this.selectedIndex = this.selectedIndex === this.filteredSessions.length - 1 ? 0 : this.selectedIndex + 1;
584
- }
585
- // Page up - jump up by maxVisible items
586
- else if (kb.matches(keyData, "selectPageUp")) {
587
- this.selectedIndex = Math.max(0, this.selectedIndex - this.maxVisible);
588
- }
589
- // Page down - jump down by maxVisible items
590
- else if (kb.matches(keyData, "selectPageDown")) {
591
- this.selectedIndex = Math.min(this.filteredSessions.length - 1, this.selectedIndex + this.maxVisible);
592
- }
593
- // Enter
594
- else if (kb.matches(keyData, "selectConfirm")) {
595
- const selected = this.filteredSessions[this.selectedIndex];
596
- if (selected && this.onSelect) {
597
- this.onSelect(selected.session.path);
598
- }
599
- }
600
- // Escape - cancel
601
- else if (kb.matches(keyData, "selectCancel")) {
602
- if (this.onCancel) {
603
- this.onCancel();
604
- }
605
- }
606
- // Pass everything else to search input
607
- else {
608
- this.searchInput.handleInput(keyData);
609
- this.filterSessions(this.searchInput.getValue());
610
- }
611
- }
612
- }
613
-
614
- type SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;
615
-
616
- /**
617
- * Delete a session file, trying the `trash` CLI first, then falling back to unlink
618
- */
619
- async function deleteSessionFile(
620
- sessionPath: string,
621
- ): Promise<{ ok: boolean; method: "trash" | "unlink"; error?: string }> {
622
- // Try `trash` first (if installed)
623
- const trashArgs = sessionPath.startsWith("-") ? ["--", sessionPath] : [sessionPath];
624
- const trashResult = spawnSync("trash", trashArgs, { encoding: "utf-8" });
625
-
626
- const getTrashErrorHint = (): string | null => {
627
- const parts: string[] = [];
628
- if (trashResult.error) {
629
- parts.push(trashResult.error.message);
630
- }
631
- const stderr = trashResult.stderr?.trim();
632
- if (stderr) {
633
- parts.push(stderr.split("\n")[0] ?? stderr);
634
- }
635
- if (parts.length === 0) return null;
636
- return `trash: ${parts.join(" · ").slice(0, 200)}`;
637
- };
638
-
639
- // If trash reports success, or the file is gone afterwards, treat it as successful
640
- if (trashResult.status === 0 || !existsSync(sessionPath)) {
641
- return { ok: true, method: "trash" };
642
- }
643
-
644
- // Fallback to permanent deletion
645
- try {
646
- await unlink(sessionPath);
647
- return { ok: true, method: "unlink" };
648
- } catch (err) {
649
- const unlinkError = err instanceof Error ? err.message : String(err);
650
- const trashErrorHint = getTrashErrorHint();
651
- const error = trashErrorHint ? `${unlinkError} (${trashErrorHint})` : unlinkError;
652
- return { ok: false, method: "unlink", error };
653
- }
654
- }
655
-
656
- /**
657
- * Component that renders a session selector
658
- */
659
- export class SessionSelectorComponent extends Container implements Focusable {
660
- handleInput(data: string): void {
661
- if (this.mode === "rename") {
662
- const kb = getKeybindings();
663
- if (kb.matches(data, "selectCancel") || matchesKey(data, "ctrl+c")) {
664
- this.exitRenameMode();
665
- return;
666
- }
667
- this.renameInput.handleInput(data);
668
- return;
669
- }
670
-
671
- this.sessionList.handleInput(data);
672
- }
673
-
674
- private canRename = true;
675
- private sessionList: SessionList;
676
- private header: SessionSelectorHeader;
677
- private keybindings: KeybindingsManager;
678
- private scope: SessionScope = "current";
679
- private sortMode: SortMode = "threaded";
680
- private nameFilter: NameFilter = "all";
681
- private currentSessions: SessionInfo[] | null = null;
682
- private allSessions: SessionInfo[] | null = null;
683
- private currentSessionsLoader: SessionsLoader;
684
- private allSessionsLoader: SessionsLoader;
685
- private onCancel: () => void;
686
- private requestRender: () => void;
687
- private renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;
688
- private currentLoading = false;
689
- private allLoading = false;
690
- private allLoadSeq = 0;
691
-
692
- private mode: "list" | "rename" = "list";
693
- private renameInput = new Input();
694
- private renameTargetPath: string | null = null;
695
-
696
- // Focusable implementation - propagate to sessionList for IME cursor positioning
697
- private _focused = false;
698
- get focused(): boolean {
699
- return this._focused;
700
- }
701
- set focused(value: boolean) {
702
- this._focused = value;
703
- this.sessionList.focused = value;
704
- this.renameInput.focused = value;
705
- if (value && this.mode === "rename") {
706
- this.renameInput.focused = true;
707
- }
708
- }
709
-
710
- private buildBaseLayout(content: Component, options?: { showHeader?: boolean }): void {
711
- this.clear();
712
- this.addChild(new Spacer(1));
713
- this.addChild(new DynamicBorder((s) => theme.fg("accent", s)));
714
- this.addChild(new Spacer(1));
715
- if (options?.showHeader ?? true) {
716
- this.addChild(this.header);
717
- this.addChild(new Spacer(1));
718
- }
719
- this.addChild(content);
720
- this.addChild(new Spacer(1));
721
- this.addChild(new DynamicBorder((s) => theme.fg("accent", s)));
722
- }
723
-
724
- constructor(
725
- currentSessionsLoader: SessionsLoader,
726
- allSessionsLoader: SessionsLoader,
727
- onSelect: (sessionPath: string) => void,
728
- onCancel: () => void,
729
- onExit: () => void,
730
- requestRender: () => void,
731
- options?: {
732
- renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;
733
- showRenameHint?: boolean;
734
- keybindings?: KeybindingsManager;
735
- },
736
- currentSessionFilePath?: string,
737
- ) {
738
- super();
739
- this.keybindings = options?.keybindings ?? KeybindingsManager.create();
740
- this.currentSessionsLoader = currentSessionsLoader;
741
- this.allSessionsLoader = allSessionsLoader;
742
- this.onCancel = onCancel;
743
- this.requestRender = requestRender;
744
- this.header = new SessionSelectorHeader(
745
- this.scope,
746
- this.sortMode,
747
- this.nameFilter,
748
- this.keybindings,
749
- this.requestRender,
750
- );
751
- const renameSession = options?.renameSession;
752
- this.renameSession = renameSession;
753
- this.canRename = !!renameSession;
754
- this.header.setShowRenameHint(options?.showRenameHint ?? this.canRename);
755
-
756
- // Create session list (starts empty, will be populated after load)
757
- this.sessionList = new SessionList(
758
- [],
759
- false,
760
- this.sortMode,
761
- this.nameFilter,
762
- this.keybindings,
763
- currentSessionFilePath,
764
- );
765
-
766
- this.buildBaseLayout(this.sessionList);
767
-
768
- this.renameInput.onSubmit = (value) => {
769
- void this.confirmRename(value);
770
- };
771
-
772
- // Ensure header status timeouts are cleared when leaving the selector
773
- const clearStatusMessage = (): void => this.header.setStatusMessage(null);
774
- this.sessionList.onSelect = (sessionPath) => {
775
- clearStatusMessage();
776
- onSelect(sessionPath);
777
- };
778
- this.sessionList.onCancel = () => {
779
- clearStatusMessage();
780
- onCancel();
781
- };
782
- this.sessionList.onExit = () => {
783
- clearStatusMessage();
784
- onExit();
785
- };
786
- this.sessionList.onToggleScope = () => this.toggleScope();
787
- this.sessionList.onToggleSort = () => this.toggleSortMode();
788
- this.sessionList.onToggleNameFilter = () => this.toggleNameFilter();
789
- this.sessionList.onRenameSession = (sessionPath) => {
790
- if (!renameSession) return;
791
- if (this.scope === "current" && this.currentLoading) return;
792
- if (this.scope === "all" && this.allLoading) return;
793
-
794
- const sessions = this.scope === "all" ? (this.allSessions ?? []) : (this.currentSessions ?? []);
795
- const session = sessions.find((s) => s.path === sessionPath);
796
- this.enterRenameMode(sessionPath, session?.name);
797
- };
798
-
799
- // Sync list events to header
800
- this.sessionList.onTogglePath = (showPath) => {
801
- this.header.setShowPath(showPath);
802
- this.requestRender();
803
- };
804
- this.sessionList.onDeleteConfirmationChange = (path) => {
805
- this.header.setConfirmingDeletePath(path);
806
- this.requestRender();
807
- };
808
- this.sessionList.onError = (msg) => {
809
- this.header.setStatusMessage({ type: "error", message: msg }, 3000);
810
- this.requestRender();
811
- };
812
-
813
- // Handle session deletion
814
- this.sessionList.onDeleteSession = async (sessionPath: string) => {
815
- const result = await deleteSessionFile(sessionPath);
816
-
817
- if (result.ok) {
818
- if (this.currentSessions) {
819
- this.currentSessions = this.currentSessions.filter((s) => s.path !== sessionPath);
820
- }
821
- if (this.allSessions) {
822
- this.allSessions = this.allSessions.filter((s) => s.path !== sessionPath);
823
- }
824
-
825
- const sessions = this.scope === "all" ? (this.allSessions ?? []) : (this.currentSessions ?? []);
826
- const showCwd = this.scope === "all";
827
- this.sessionList.setSessions(sessions, showCwd);
828
-
829
- const msg = result.method === "trash" ? "Session moved to trash" : "Session deleted";
830
- this.header.setStatusMessage({ type: "info", message: msg }, 2000);
831
- await this.refreshSessionsAfterMutation();
832
- } else {
833
- const errorMessage = result.error ?? "Unknown error";
834
- this.header.setStatusMessage({ type: "error", message: `Failed to delete: ${errorMessage}` }, 3000);
835
- }
836
-
837
- this.requestRender();
838
- };
839
-
840
- // Start loading current sessions immediately
841
- this.loadCurrentSessions();
842
- }
843
-
844
- private loadCurrentSessions(): void {
845
- void this.loadScope("current", "initial");
846
- }
847
-
848
- private enterRenameMode(sessionPath: string, currentName: string | undefined): void {
849
- this.mode = "rename";
850
- this.renameTargetPath = sessionPath;
851
- this.renameInput.setValue(currentName ?? "");
852
- this.renameInput.focused = true;
853
-
854
- const panel = new Container();
855
- panel.addChild(new Text(theme.bold("Rename Session"), 1, 0));
856
- panel.addChild(new Spacer(1));
857
- panel.addChild(this.renameInput);
858
- panel.addChild(new Spacer(1));
859
- panel.addChild(new Text(theme.fg("muted", "Enter to save · Esc/Ctrl+C to cancel"), 1, 0));
860
-
861
- this.buildBaseLayout(panel, { showHeader: false });
862
- this.requestRender();
863
- }
864
-
865
- private exitRenameMode(): void {
866
- this.mode = "list";
867
- this.renameTargetPath = null;
868
-
869
- this.buildBaseLayout(this.sessionList);
870
-
871
- this.requestRender();
872
- }
873
-
874
- private async confirmRename(value: string): Promise<void> {
875
- const next = value.trim();
876
- if (!next) return;
877
- const target = this.renameTargetPath;
878
- if (!target) {
879
- this.exitRenameMode();
880
- return;
881
- }
882
-
883
- // Find current name for callback
884
- const renameSession = this.renameSession;
885
- if (!renameSession) {
886
- this.exitRenameMode();
887
- return;
888
- }
889
-
890
- try {
891
- await renameSession(target, next);
892
- await this.refreshSessionsAfterMutation();
893
- } finally {
894
- this.exitRenameMode();
895
- }
896
- }
897
-
898
- private async loadScope(scope: SessionScope, reason: "initial" | "refresh" | "toggle"): Promise<void> {
899
- const showCwd = scope === "all";
900
-
901
- // Mark loading
902
- if (scope === "current") {
903
- this.currentLoading = true;
904
- } else {
905
- this.allLoading = true;
906
- }
907
-
908
- const seq = scope === "all" ? ++this.allLoadSeq : undefined;
909
- this.header.setScope(scope);
910
- this.header.setLoading(true);
911
- this.requestRender();
912
-
913
- const onProgress = (loaded: number, total: number): void => {
914
- if (scope !== this.scope) return;
915
- if (seq !== undefined && seq !== this.allLoadSeq) return;
916
- this.header.setProgress(loaded, total);
917
- this.requestRender();
918
- };
919
-
920
- try {
921
- const sessions = await (scope === "current"
922
- ? this.currentSessionsLoader(onProgress)
923
- : this.allSessionsLoader(onProgress));
924
-
925
- if (scope === "current") {
926
- this.currentSessions = sessions;
927
- this.currentLoading = false;
928
- } else {
929
- this.allSessions = sessions;
930
- this.allLoading = false;
931
- }
932
-
933
- if (scope !== this.scope) return;
934
- if (seq !== undefined && seq !== this.allLoadSeq) return;
935
-
936
- this.header.setLoading(false);
937
- this.sessionList.setSessions(sessions, showCwd);
938
- this.requestRender();
939
-
940
- if (scope === "all" && sessions.length === 0 && (this.currentSessions?.length ?? 0) === 0) {
941
- this.onCancel();
942
- }
943
- } catch (err) {
944
- if (scope === "current") {
945
- this.currentLoading = false;
946
- } else {
947
- this.allLoading = false;
948
- }
949
-
950
- if (scope !== this.scope) return;
951
- if (seq !== undefined && seq !== this.allLoadSeq) return;
952
-
953
- const message = err instanceof Error ? err.message : String(err);
954
- this.header.setLoading(false);
955
- this.header.setStatusMessage({ type: "error", message: `Failed to load sessions: ${message}` }, 4000);
956
-
957
- if (reason === "initial") {
958
- this.sessionList.setSessions([], showCwd);
959
- }
960
- this.requestRender();
961
- }
962
- }
963
-
964
- private toggleSortMode(): void {
965
- // Cycle: threaded -> recent -> relevance -> threaded
966
- this.sortMode = this.sortMode === "threaded" ? "recent" : this.sortMode === "recent" ? "relevance" : "threaded";
967
- this.header.setSortMode(this.sortMode);
968
- this.sessionList.setSortMode(this.sortMode);
969
- this.requestRender();
970
- }
971
-
972
- private toggleNameFilter(): void {
973
- this.nameFilter = this.nameFilter === "all" ? "named" : "all";
974
- this.header.setNameFilter(this.nameFilter);
975
- this.sessionList.setNameFilter(this.nameFilter);
976
- this.requestRender();
977
- }
978
-
979
- private async refreshSessionsAfterMutation(): Promise<void> {
980
- await this.loadScope(this.scope, "refresh");
981
- }
982
-
983
- private toggleScope(): void {
984
- if (this.scope === "current") {
985
- this.scope = "all";
986
- this.header.setScope(this.scope);
987
-
988
- if (this.allSessions !== null) {
989
- this.header.setLoading(false);
990
- this.sessionList.setSessions(this.allSessions, true);
991
- this.requestRender();
992
- return;
993
- }
994
-
995
- if (!this.allLoading) {
996
- void this.loadScope("all", "toggle");
997
- }
998
- return;
999
- }
1000
-
1001
- this.scope = "current";
1002
- this.header.setScope(this.scope);
1003
- this.header.setLoading(this.currentLoading);
1004
- this.sessionList.setSessions(this.currentSessions ?? [], false);
1005
- this.requestRender();
1006
- }
1007
-
1008
- getSessionList(): SessionList {
1009
- return this.sessionList;
1010
- }
1011
- }