gsd-pi 2.77.0-dev.538325aea → 2.77.0

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 (709) hide show
  1. package/README.md +35 -17
  2. package/dist/cli.js +21 -13
  3. package/dist/extension-registry.js +1 -1
  4. package/dist/headless-ui.d.ts +1 -1
  5. package/dist/headless.js +4 -2
  6. package/dist/loader.js +1 -0
  7. package/dist/onboarding.js +5 -5
  8. package/dist/provider-migrations.d.ts +2 -2
  9. package/dist/provider-migrations.js +1 -2
  10. package/dist/remote-questions-config.js +1 -1
  11. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  12. package/dist/resources/extensions/aws-auth/index.js +1 -2
  13. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  14. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  15. package/dist/resources/extensions/browser-tools/index.js +1 -0
  16. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  17. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  18. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +10 -17
  19. package/dist/resources/extensions/gsd/auto-dispatch.js +14 -40
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +0 -34
  21. package/dist/resources/extensions/gsd/auto-recovery.js +1 -38
  22. package/dist/resources/extensions/gsd/auto-start.js +2 -16
  23. package/dist/resources/extensions/gsd/dispatch-guard.js +3 -44
  24. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  25. package/dist/resources/extensions/gsd/prompts/system.md +0 -1
  26. package/dist/resources/extensions/mcp-client/index.js +1 -1
  27. package/dist/resources/extensions/ollama/index.js +2 -1
  28. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  29. package/dist/resources/extensions/remote-questions/config.js +1 -12
  30. package/dist/resources/extensions/universal-config/index.js +1 -1
  31. package/dist/security-overrides.d.ts +1 -4
  32. package/dist/security-overrides.js +3 -16
  33. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  34. package/dist/web/standalone/.next/BUILD_ID +1 -1
  35. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  36. package/dist/web/standalone/.next/build-manifest.json +4 -4
  37. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  38. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  39. package/dist/web/standalone/.next/required-server-files.json +3 -3
  40. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  41. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  43. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  51. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  53. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  54. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  55. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  56. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  57. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  58. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  67. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  69. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  79. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  99. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  109. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  115. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  129. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  131. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  133. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  135. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/index.html +1 -1
  145. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  146. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  147. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  148. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  149. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  150. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  151. package/dist/web/standalone/.next/server/app/page.js +2 -2
  152. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  154. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  155. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  156. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  158. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/middleware.js +2 -2
  160. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  162. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  163. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  164. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  165. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  166. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  167. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  168. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  169. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  170. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  171. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  172. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  173. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  174. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  175. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  176. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  177. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  178. package/dist/web/standalone/server.js +1 -1
  179. package/dist/web-mode.js +1 -1
  180. package/dist/welcome-screen.js +20 -19
  181. package/dist/wizard.js +5 -2
  182. package/package.json +7 -25
  183. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  184. package/packages/mcp-server/dist/server.js +11 -15
  185. package/packages/mcp-server/dist/server.js.map +1 -1
  186. package/packages/mcp-server/src/server.ts +16 -17
  187. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  188. package/packages/native/tsconfig.json +1 -2
  189. package/packages/native/tsconfig.tsbuildinfo +1 -0
  190. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  191. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  192. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  193. package/pkg/dist/core/export-html/index.d.ts +1 -1
  194. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  195. package/pkg/dist/core/export-html/index.js +5 -39
  196. package/pkg/dist/core/export-html/index.js.map +1 -1
  197. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  198. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  199. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  200. package/scripts/ensure-workspace-builds.cjs +0 -2
  201. package/scripts/link-workspace-packages.cjs +0 -2
  202. package/scripts/postinstall.js +178 -9
  203. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  204. package/src/resources/extensions/aws-auth/index.ts +1 -2
  205. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  206. package/src/resources/extensions/bg-shell/index.ts +1 -2
  207. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  208. package/src/resources/extensions/browser-tools/index.ts +1 -2
  209. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  210. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  211. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +9 -19
  212. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +3 -27
  213. package/src/resources/extensions/gsd/auto-dispatch.ts +13 -43
  214. package/src/resources/extensions/gsd/auto-post-unit.ts +0 -33
  215. package/src/resources/extensions/gsd/auto-recovery.ts +1 -37
  216. package/src/resources/extensions/gsd/auto-start.ts +6 -20
  217. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -44
  218. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  219. package/src/resources/extensions/gsd/prompts/system.md +0 -1
  220. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -73
  221. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -15
  222. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
  223. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +0 -11
  224. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  225. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +5 -127
  226. package/src/resources/extensions/mcp-client/index.ts +1 -1
  227. package/src/resources/extensions/ollama/index.ts +3 -3
  228. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  229. package/src/resources/extensions/remote-questions/config.ts +4 -15
  230. package/src/resources/extensions/search-the-web/index.ts +1 -2
  231. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  232. package/src/resources/extensions/universal-config/index.ts +1 -1
  233. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  234. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +0 -1
  235. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  236. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  237. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  238. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  239. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  240. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  241. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  242. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  243. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  244. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  245. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  246. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  247. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  248. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  249. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  250. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  251. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  252. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  253. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  254. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  255. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  256. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  257. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  258. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  259. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  260. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  261. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  262. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  263. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  264. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  265. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  266. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  267. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  268. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  269. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  270. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  271. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  272. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  273. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  274. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  275. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  276. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  277. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  278. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  279. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  280. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  281. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  282. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  283. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  284. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  285. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  286. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  287. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  288. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  289. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  290. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  291. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  292. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  293. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  294. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  295. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  296. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  297. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  298. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  299. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  300. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  301. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  302. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  303. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  304. package/packages/gsd-agent-core/dist/index.js +0 -19
  305. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  306. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  307. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  308. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  309. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  310. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  311. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  312. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  313. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  314. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  315. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  316. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  317. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  318. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  319. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  320. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  321. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  322. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  323. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  324. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  325. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  326. package/packages/gsd-agent-core/package.json +0 -25
  327. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  328. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  329. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  330. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  331. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  332. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  333. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  334. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  335. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  336. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  337. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  338. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  339. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  340. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  341. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  342. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  343. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  344. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  345. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  346. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  347. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  348. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  349. package/packages/gsd-agent-core/src/index.ts +0 -68
  350. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  351. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  352. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  353. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  354. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  355. package/packages/gsd-agent-core/tsconfig.json +0 -28
  356. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  357. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  358. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  359. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  360. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  361. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  362. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  363. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  364. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  365. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  366. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  367. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  368. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  369. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  370. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  371. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  372. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  373. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  374. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  375. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  376. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  377. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  378. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  379. package/packages/gsd-agent-modes/dist/index.js +0 -7
  380. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  381. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  382. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  383. package/packages/gsd-agent-modes/dist/main.js +0 -491
  384. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  385. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  386. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  387. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  388. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  389. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  390. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  391. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  392. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  393. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  394. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  395. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  396. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  397. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  398. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  399. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  400. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  401. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  402. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  403. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  404. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  405. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  406. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  407. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  408. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  409. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  410. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  411. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  412. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  413. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  414. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  415. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  416. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  417. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  418. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  419. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  420. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  421. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  422. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  423. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  424. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  425. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  426. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  427. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  428. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  429. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  430. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  431. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  432. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  433. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  434. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  435. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  436. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  437. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  438. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  439. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  440. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  441. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  442. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  443. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  444. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  445. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  446. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  447. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  448. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  449. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  450. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  451. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  452. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  453. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  454. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  455. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  456. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  457. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  458. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  459. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  460. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  461. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  462. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  463. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  464. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  465. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  466. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  467. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  468. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  469. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  470. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  471. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  472. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  473. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  474. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  475. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  476. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  477. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  478. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  479. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  480. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  481. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  482. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  483. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  484. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  485. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  486. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  487. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  488. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  489. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  490. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  491. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  492. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  493. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  494. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  495. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  496. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  497. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  498. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  499. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  500. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  501. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  502. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  503. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  504. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  505. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  506. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  507. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  508. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  509. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  510. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  511. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  512. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  513. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  514. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  515. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  516. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  517. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  518. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  519. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  520. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  521. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  522. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  523. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  524. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  525. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  526. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  528. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  530. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  532. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  534. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  536. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  538. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  540. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  542. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  544. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  546. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  548. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  550. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  552. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  554. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  556. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  558. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  560. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  562. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  564. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  566. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  568. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  570. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  572. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  574. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  576. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  578. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  580. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  582. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  584. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  586. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  588. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  590. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  592. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  594. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  596. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  598. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  600. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  602. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  604. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  606. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  608. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  610. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  612. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  614. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  616. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  617. package/packages/gsd-agent-modes/package.json +0 -23
  618. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  619. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  620. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  621. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  622. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  623. package/packages/gsd-agent-modes/src/index.ts +0 -6
  624. package/packages/gsd-agent-modes/src/main.ts +0 -614
  625. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  626. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  627. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  628. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  629. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  630. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  631. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  632. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  633. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  634. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  635. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  636. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  637. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  638. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  639. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  640. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  641. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  642. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  643. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  644. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  645. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  646. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  647. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  648. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  649. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  650. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  651. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  652. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  653. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  654. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  655. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  656. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  657. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  658. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  659. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  660. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  661. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  662. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  663. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  664. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  665. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  666. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  667. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  668. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  669. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  670. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  671. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  672. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  673. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  674. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  675. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  676. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  677. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  678. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  679. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  680. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  681. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  682. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  683. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  684. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  685. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  686. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  687. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  688. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  689. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  690. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  691. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  692. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  693. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  694. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  695. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  696. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  697. package/packages/gsd-agent-types/dist/index.js +0 -24
  698. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  699. package/packages/gsd-agent-types/package.json +0 -24
  700. package/packages/gsd-agent-types/src/index.ts +0 -206
  701. package/packages/gsd-agent-types/tsconfig.json +0 -25
  702. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  703. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  704. package/scripts/install.js +0 -512
  705. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  706. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +0 -63
  707. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +0 -77
  708. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_buildManifest.js +0 -0
  709. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_ssgManifest.js +0 -0
@@ -1,1035 +0,0 @@
1
- import { Container, Input, matchesKey, Spacer, Text, TruncatedText, truncateToWidth, } from "@gsd/pi-tui";
2
- import { getKeybindings } from "../../../pi-tui-compat.js";
3
- import { theme } from "../../../theme.js";
4
- import { DynamicBorder } from "./dynamic-border.js";
5
- import { keyHint } from "./keybinding-hints.js";
6
- import { applyRowHighlight, computeScrollWindow, renderCursor, renderScrollPosition, } from "./tree-render-utils.js";
7
- class TreeList {
8
- constructor(tree, currentLeafId, maxVisibleLines, initialSelectedId, initialFilterMode) {
9
- this.flatNodes = [];
10
- this.filteredNodes = [];
11
- this.selectedIndex = 0;
12
- this.filterMode = "default";
13
- this.searchQuery = "";
14
- this.toolCallMap = new Map();
15
- this.multipleRoots = false;
16
- this.activePathIds = new Set();
17
- this.visibleParentMap = new Map();
18
- this.visibleChildrenMap = new Map();
19
- this.lastSelectedId = null;
20
- this.foldedNodes = new Set();
21
- this.currentLeafId = currentLeafId;
22
- this.maxVisibleLines = maxVisibleLines;
23
- this.filterMode = initialFilterMode ?? "default";
24
- this.multipleRoots = tree.length > 1;
25
- this.flatNodes = this.flattenTree(tree);
26
- this.buildActivePath();
27
- this.applyFilter();
28
- // Start with initialSelectedId if provided, otherwise current leaf
29
- const targetId = initialSelectedId ?? currentLeafId;
30
- this.selectedIndex = this.findNearestVisibleIndex(targetId);
31
- this.lastSelectedId = this.filteredNodes[this.selectedIndex]?.node.entry.id ?? null;
32
- }
33
- /**
34
- * Find the index of the nearest visible entry, walking up the parent chain if needed.
35
- * Returns the index in filteredNodes, or the last index as fallback.
36
- */
37
- findNearestVisibleIndex(entryId) {
38
- if (this.filteredNodes.length === 0)
39
- return 0;
40
- // Build a map for parent lookup
41
- const entryMap = new Map();
42
- for (const flatNode of this.flatNodes) {
43
- entryMap.set(flatNode.node.entry.id, flatNode);
44
- }
45
- // Build a map of visible entry IDs to their indices in filteredNodes
46
- const visibleIdToIndex = new Map(this.filteredNodes.map((node, i) => [node.node.entry.id, i]));
47
- // Walk from entryId up to root, looking for a visible entry
48
- let currentId = entryId;
49
- while (currentId !== null) {
50
- const index = visibleIdToIndex.get(currentId);
51
- if (index !== undefined)
52
- return index;
53
- const node = entryMap.get(currentId);
54
- if (!node)
55
- break;
56
- currentId = node.node.entry.parentId ?? null;
57
- }
58
- // Fallback: last visible entry
59
- return this.filteredNodes.length - 1;
60
- }
61
- /** Build the set of entry IDs on the path from root to current leaf */
62
- buildActivePath() {
63
- this.activePathIds.clear();
64
- if (!this.currentLeafId)
65
- return;
66
- // Build a map of id -> entry for parent lookup
67
- const entryMap = new Map();
68
- for (const flatNode of this.flatNodes) {
69
- entryMap.set(flatNode.node.entry.id, flatNode);
70
- }
71
- // Walk from leaf to root
72
- let currentId = this.currentLeafId;
73
- while (currentId) {
74
- this.activePathIds.add(currentId);
75
- const node = entryMap.get(currentId);
76
- if (!node)
77
- break;
78
- currentId = node.node.entry.parentId ?? null;
79
- }
80
- }
81
- flattenTree(roots) {
82
- const result = [];
83
- this.toolCallMap.clear();
84
- const stack = [];
85
- // Determine which subtrees contain the active leaf (to sort current branch first)
86
- // Use iterative post-order traversal to avoid stack overflow
87
- const containsActive = new Map();
88
- const leafId = this.currentLeafId;
89
- {
90
- // Build list in pre-order, then process in reverse for post-order effect
91
- const allNodes = [];
92
- const preOrderStack = [...roots];
93
- while (preOrderStack.length > 0) {
94
- const node = preOrderStack.pop();
95
- allNodes.push(node);
96
- // Push children in reverse so they're processed left-to-right
97
- for (let i = node.children.length - 1; i >= 0; i--) {
98
- preOrderStack.push(node.children[i]);
99
- }
100
- }
101
- // Process in reverse (post-order): children before parents
102
- for (let i = allNodes.length - 1; i >= 0; i--) {
103
- const node = allNodes[i];
104
- let has = leafId !== null && node.entry.id === leafId;
105
- for (const child of node.children) {
106
- if (containsActive.get(child)) {
107
- has = true;
108
- }
109
- }
110
- containsActive.set(node, has);
111
- }
112
- }
113
- // Add roots in reverse order, prioritizing the one containing the active leaf
114
- // If multiple roots, treat them as children of a virtual root that branches
115
- const multipleRoots = roots.length > 1;
116
- const orderedRoots = [...roots].sort((a, b) => Number(containsActive.get(b)) - Number(containsActive.get(a)));
117
- for (let i = orderedRoots.length - 1; i >= 0; i--) {
118
- const isLast = i === orderedRoots.length - 1;
119
- stack.push([orderedRoots[i], multipleRoots ? 1 : 0, multipleRoots, multipleRoots, isLast, [], multipleRoots]);
120
- }
121
- while (stack.length > 0) {
122
- const [node, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild] = stack.pop();
123
- // Extract tool calls from assistant messages for later lookup
124
- const entry = node.entry;
125
- if (entry.type === "message" && entry.message.role === "assistant") {
126
- const content = entry.message.content;
127
- if (Array.isArray(content)) {
128
- for (const block of content) {
129
- if (typeof block === "object" && block !== null && "type" in block && block.type === "toolCall") {
130
- const tc = block;
131
- this.toolCallMap.set(tc.id, { name: tc.name, arguments: tc.arguments });
132
- }
133
- }
134
- }
135
- }
136
- result.push({ node, indent, showConnector, isLast, gutters, isVirtualRootChild });
137
- const children = node.children;
138
- const multipleChildren = children.length > 1;
139
- // Order children so the branch containing the active leaf comes first
140
- const orderedChildren = (() => {
141
- const prioritized = [];
142
- const rest = [];
143
- for (const child of children) {
144
- if (containsActive.get(child)) {
145
- prioritized.push(child);
146
- }
147
- else {
148
- rest.push(child);
149
- }
150
- }
151
- return [...prioritized, ...rest];
152
- })();
153
- // Calculate child indent
154
- let childIndent;
155
- if (multipleChildren) {
156
- // Parent branches: children get +1
157
- childIndent = indent + 1;
158
- }
159
- else if (justBranched && indent > 0) {
160
- // First generation after a branch: +1 for visual grouping
161
- childIndent = indent + 1;
162
- }
163
- else {
164
- // Single-child chain: stay flat
165
- childIndent = indent;
166
- }
167
- // Build gutters for children
168
- // If this node showed a connector, add a gutter entry for descendants
169
- // Only add gutter if connector is actually displayed (not suppressed for virtual root children)
170
- const connectorDisplayed = showConnector && !isVirtualRootChild;
171
- // When connector is displayed, add a gutter entry at the connector's position
172
- // Connector is at position (displayIndent - 1), so gutter should be there too
173
- const currentDisplayIndent = this.multipleRoots ? Math.max(0, indent - 1) : indent;
174
- const connectorPosition = Math.max(0, currentDisplayIndent - 1);
175
- const childGutters = connectorDisplayed
176
- ? [...gutters, { position: connectorPosition, show: !isLast }]
177
- : gutters;
178
- // Add children in reverse order
179
- for (let i = orderedChildren.length - 1; i >= 0; i--) {
180
- const childIsLast = i === orderedChildren.length - 1;
181
- stack.push([
182
- orderedChildren[i],
183
- childIndent,
184
- multipleChildren,
185
- multipleChildren,
186
- childIsLast,
187
- childGutters,
188
- false,
189
- ]);
190
- }
191
- }
192
- return result;
193
- }
194
- applyFilter() {
195
- // Update lastSelectedId only when we have a valid selection (non-empty list)
196
- // This preserves the selection when switching through empty filter results
197
- if (this.filteredNodes.length > 0) {
198
- this.lastSelectedId = this.filteredNodes[this.selectedIndex]?.node.entry.id ?? this.lastSelectedId;
199
- }
200
- const searchTokens = this.searchQuery.toLowerCase().split(/\s+/).filter(Boolean);
201
- this.filteredNodes = this.flatNodes.filter((flatNode) => {
202
- const entry = flatNode.node.entry;
203
- const isCurrentLeaf = entry.id === this.currentLeafId;
204
- // Skip assistant messages with only tool calls (no text) unless error/aborted
205
- // Always show current leaf so active position is visible
206
- if (entry.type === "message" && entry.message.role === "assistant" && !isCurrentLeaf) {
207
- const msg = entry.message;
208
- const hasText = this.hasTextContent(msg.content);
209
- const isErrorOrAborted = msg.stopReason && msg.stopReason !== "stop" && msg.stopReason !== "toolUse";
210
- // Only hide if no text AND not an error/aborted message
211
- if (!hasText && !isErrorOrAborted) {
212
- return false;
213
- }
214
- }
215
- // Apply filter mode
216
- // Entry types hidden in default view (settings/bookkeeping)
217
- const isSettingsEntry = entry.type === "label" ||
218
- entry.type === "custom" ||
219
- entry.type === "model_change" ||
220
- entry.type === "thinking_level_change";
221
- let passesFilter;
222
- switch (this.filterMode) {
223
- case "user-only":
224
- // Just user messages
225
- passesFilter = entry.type === "message" && entry.message.role === "user";
226
- break;
227
- case "no-tools":
228
- // Default minus tool results
229
- passesFilter = !isSettingsEntry && !(entry.type === "message" && entry.message.role === "toolResult");
230
- break;
231
- case "labeled-only":
232
- // Just labeled entries
233
- passesFilter = flatNode.node.label !== undefined;
234
- break;
235
- case "all":
236
- // Show everything
237
- passesFilter = true;
238
- break;
239
- case "default":
240
- // Default mode: hide settings/bookkeeping entries
241
- passesFilter = !isSettingsEntry;
242
- break;
243
- }
244
- if (!passesFilter)
245
- return false;
246
- // Apply search filter
247
- if (searchTokens.length > 0) {
248
- const nodeText = this.getSearchableText(flatNode.node).toLowerCase();
249
- return searchTokens.every((token) => nodeText.includes(token));
250
- }
251
- return true;
252
- });
253
- // Filter out descendants of folded nodes.
254
- if (this.foldedNodes.size > 0) {
255
- const skipSet = new Set();
256
- for (const flatNode of this.flatNodes) {
257
- const { id, parentId } = flatNode.node.entry;
258
- if (parentId != null && (this.foldedNodes.has(parentId) || skipSet.has(parentId))) {
259
- skipSet.add(id);
260
- }
261
- }
262
- this.filteredNodes = this.filteredNodes.filter((flatNode) => !skipSet.has(flatNode.node.entry.id));
263
- }
264
- // Recalculate visual structure (indent, connectors, gutters) based on visible tree
265
- this.recalculateVisualStructure();
266
- // Try to preserve cursor on the same node, or find nearest visible ancestor
267
- if (this.lastSelectedId) {
268
- this.selectedIndex = this.findNearestVisibleIndex(this.lastSelectedId);
269
- }
270
- else if (this.selectedIndex >= this.filteredNodes.length) {
271
- // Clamp index if out of bounds
272
- this.selectedIndex = Math.max(0, this.filteredNodes.length - 1);
273
- }
274
- // Update lastSelectedId to the actual selection (may have changed due to parent walk)
275
- if (this.filteredNodes.length > 0) {
276
- this.lastSelectedId = this.filteredNodes[this.selectedIndex]?.node.entry.id ?? this.lastSelectedId;
277
- }
278
- }
279
- /**
280
- * Recompute indentation/connectors for the filtered view
281
- *
282
- * Filtering can hide intermediate entries; descendants attach to the nearest visible ancestor.
283
- * Keep indentation semantics aligned with flattenTree() so single-child chains don't drift right.
284
- */
285
- recalculateVisualStructure() {
286
- if (this.filteredNodes.length === 0)
287
- return;
288
- const visibleIds = new Set(this.filteredNodes.map((n) => n.node.entry.id));
289
- // Build entry map for efficient parent lookup (using full tree)
290
- const entryMap = new Map();
291
- for (const flatNode of this.flatNodes) {
292
- entryMap.set(flatNode.node.entry.id, flatNode);
293
- }
294
- // Find nearest visible ancestor for a node
295
- const findVisibleAncestor = (nodeId) => {
296
- let currentId = entryMap.get(nodeId)?.node.entry.parentId ?? null;
297
- while (currentId !== null) {
298
- if (visibleIds.has(currentId)) {
299
- return currentId;
300
- }
301
- currentId = entryMap.get(currentId)?.node.entry.parentId ?? null;
302
- }
303
- return null;
304
- };
305
- // Build visible tree structure:
306
- // - visibleParent: nodeId → nearest visible ancestor (or null for roots)
307
- // - visibleChildren: parentId → list of visible children (in filteredNodes order)
308
- const visibleParent = new Map();
309
- const visibleChildren = new Map();
310
- visibleChildren.set(null, []); // root-level nodes
311
- for (const flatNode of this.filteredNodes) {
312
- const nodeId = flatNode.node.entry.id;
313
- const ancestorId = findVisibleAncestor(nodeId);
314
- visibleParent.set(nodeId, ancestorId);
315
- if (!visibleChildren.has(ancestorId)) {
316
- visibleChildren.set(ancestorId, []);
317
- }
318
- visibleChildren.get(ancestorId).push(nodeId);
319
- }
320
- // Update multipleRoots based on visible roots
321
- const visibleRootIds = visibleChildren.get(null);
322
- this.multipleRoots = visibleRootIds.length > 1;
323
- // Build a map for quick lookup: nodeId → FlatNode
324
- const filteredNodeMap = new Map();
325
- for (const flatNode of this.filteredNodes) {
326
- filteredNodeMap.set(flatNode.node.entry.id, flatNode);
327
- }
328
- const stack = [];
329
- // Add visible roots in reverse order (to process in forward order via stack)
330
- for (let i = visibleRootIds.length - 1; i >= 0; i--) {
331
- const isLast = i === visibleRootIds.length - 1;
332
- stack.push([
333
- visibleRootIds[i],
334
- this.multipleRoots ? 1 : 0,
335
- this.multipleRoots,
336
- this.multipleRoots,
337
- isLast,
338
- [],
339
- this.multipleRoots,
340
- ]);
341
- }
342
- while (stack.length > 0) {
343
- const [nodeId, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild] = stack.pop();
344
- const flatNode = filteredNodeMap.get(nodeId);
345
- if (!flatNode)
346
- continue;
347
- // Update this node's visual properties
348
- flatNode.indent = indent;
349
- flatNode.showConnector = showConnector;
350
- flatNode.isLast = isLast;
351
- flatNode.gutters = gutters;
352
- flatNode.isVirtualRootChild = isVirtualRootChild;
353
- // Get visible children of this node
354
- const children = visibleChildren.get(nodeId) || [];
355
- const multipleChildren = children.length > 1;
356
- // Child indent follows flattenTree(): branch points (and first generation after a branch) shift +1
357
- let childIndent;
358
- if (multipleChildren) {
359
- childIndent = indent + 1;
360
- }
361
- else if (justBranched && indent > 0) {
362
- childIndent = indent + 1;
363
- }
364
- else {
365
- childIndent = indent;
366
- }
367
- // Child gutters follow flattenTree() connector/gutter rules
368
- const connectorDisplayed = showConnector && !isVirtualRootChild;
369
- const currentDisplayIndent = this.multipleRoots ? Math.max(0, indent - 1) : indent;
370
- const connectorPosition = Math.max(0, currentDisplayIndent - 1);
371
- const childGutters = connectorDisplayed
372
- ? [...gutters, { position: connectorPosition, show: !isLast }]
373
- : gutters;
374
- // Add children in reverse order (to process in forward order via stack)
375
- for (let i = children.length - 1; i >= 0; i--) {
376
- const childIsLast = i === children.length - 1;
377
- stack.push([
378
- children[i],
379
- childIndent,
380
- multipleChildren,
381
- multipleChildren,
382
- childIsLast,
383
- childGutters,
384
- false,
385
- ]);
386
- }
387
- }
388
- // Store visible tree maps for ancestor/descendant lookups in navigation
389
- this.visibleParentMap = visibleParent;
390
- this.visibleChildrenMap = visibleChildren;
391
- }
392
- /** Get searchable text content from a node */
393
- getSearchableText(node) {
394
- const entry = node.entry;
395
- const parts = [];
396
- if (node.label) {
397
- parts.push(node.label);
398
- }
399
- switch (entry.type) {
400
- case "message": {
401
- const msg = entry.message;
402
- if (!msg)
403
- break;
404
- parts.push(msg.role);
405
- if ("content" in msg && msg.content) {
406
- parts.push(this.extractContent(msg.content));
407
- }
408
- if (msg.role === "bashExecution") {
409
- const bashMsg = msg;
410
- if (bashMsg.command)
411
- parts.push(bashMsg.command);
412
- }
413
- break;
414
- }
415
- case "custom_message": {
416
- parts.push(entry.customType ?? "");
417
- if (typeof entry.content === "string") {
418
- parts.push(entry.content);
419
- }
420
- else {
421
- parts.push(this.extractContent(entry.content));
422
- }
423
- break;
424
- }
425
- case "compaction":
426
- parts.push("compaction");
427
- break;
428
- case "branch_summary":
429
- parts.push("branch summary", entry.summary ?? "");
430
- break;
431
- case "model_change":
432
- parts.push("model", entry.modelId ?? "");
433
- break;
434
- case "thinking_level_change":
435
- parts.push("thinking", entry.thinkingLevel ?? "");
436
- break;
437
- case "custom":
438
- parts.push("custom", entry.customType ?? "");
439
- break;
440
- case "label":
441
- parts.push("label", entry.label ?? "");
442
- break;
443
- case undefined:
444
- break;
445
- }
446
- return parts.join(" ");
447
- }
448
- invalidate() { }
449
- getSearchQuery() {
450
- return this.searchQuery;
451
- }
452
- getSelectedNode() {
453
- return this.filteredNodes[this.selectedIndex]?.node;
454
- }
455
- updateNodeLabel(entryId, label) {
456
- for (const flatNode of this.flatNodes) {
457
- if (flatNode.node.entry.id === entryId) {
458
- flatNode.node.label = label;
459
- break;
460
- }
461
- }
462
- }
463
- getFilterLabel() {
464
- switch (this.filterMode) {
465
- case "no-tools":
466
- return " [no-tools]";
467
- case "user-only":
468
- return " [user]";
469
- case "labeled-only":
470
- return " [labeled]";
471
- case "all":
472
- return " [all]";
473
- case "default":
474
- return "";
475
- }
476
- }
477
- render(width) {
478
- const lines = [];
479
- if (this.filteredNodes.length === 0) {
480
- lines.push(truncateToWidth(theme.fg("muted", " No entries found"), width));
481
- lines.push(truncateToWidth(theme.fg("muted", ` (0/0)${this.getFilterLabel()}`), width));
482
- return lines;
483
- }
484
- const { startIndex, endIndex } = computeScrollWindow(this.selectedIndex, this.filteredNodes.length, this.maxVisibleLines);
485
- for (let i = startIndex; i < endIndex; i++) {
486
- const flatNode = this.filteredNodes[i];
487
- const entry = flatNode.node.entry;
488
- const isSelected = i === this.selectedIndex;
489
- // Build line: cursor + prefix + path marker + label + content
490
- const cursor = renderCursor(isSelected);
491
- // If multiple roots, shift display (roots at 0, not 1)
492
- const displayIndent = this.multipleRoots ? Math.max(0, flatNode.indent - 1) : flatNode.indent;
493
- // Build prefix with gutters at their correct positions
494
- // Each gutter has a position (displayIndent where its connector was shown)
495
- const connector = flatNode.showConnector && !flatNode.isVirtualRootChild ? (flatNode.isLast ? "└─ " : "├─ ") : "";
496
- const connectorPosition = connector ? displayIndent - 1 : -1;
497
- // Build prefix char by char, placing gutters and connector at their positions
498
- const totalChars = displayIndent * 3;
499
- const prefixChars = [];
500
- const isFolded = this.foldedNodes.has(entry.id);
501
- for (let i = 0; i < totalChars; i++) {
502
- const level = Math.floor(i / 3);
503
- const posInLevel = i % 3;
504
- // Check if there's a gutter at this level
505
- const gutter = flatNode.gutters.find((g) => g.position === level);
506
- if (gutter) {
507
- if (posInLevel === 0) {
508
- prefixChars.push(gutter.show ? "│" : " ");
509
- }
510
- else {
511
- prefixChars.push(" ");
512
- }
513
- }
514
- else if (connector && level === connectorPosition) {
515
- // Connector at this level, with fold indicator
516
- if (posInLevel === 0) {
517
- prefixChars.push(flatNode.isLast ? "└" : "├");
518
- }
519
- else if (posInLevel === 1) {
520
- const foldable = this.isFoldable(entry.id);
521
- prefixChars.push(isFolded ? "⊞" : foldable ? "⊟" : "─");
522
- }
523
- else {
524
- prefixChars.push(" ");
525
- }
526
- }
527
- else {
528
- prefixChars.push(" ");
529
- }
530
- }
531
- const prefix = prefixChars.join("");
532
- // Fold marker for nodes without connectors (roots)
533
- const showsFoldInConnector = flatNode.showConnector && !flatNode.isVirtualRootChild;
534
- const foldMarker = isFolded && !showsFoldInConnector ? theme.fg("accent", "⊞ ") : "";
535
- // Active path marker - shown right before the entry text
536
- const isOnActivePath = this.activePathIds.has(entry.id);
537
- const pathMarker = isOnActivePath ? theme.fg("accent", "• ") : "";
538
- const label = flatNode.node.label ? theme.fg("warning", `[${flatNode.node.label}] `) : "";
539
- const content = this.getEntryDisplayText(flatNode.node, isSelected);
540
- const line = cursor + theme.fg("dim", prefix) + foldMarker + pathMarker + label + content;
541
- lines.push(applyRowHighlight(line, isSelected, width));
542
- }
543
- lines.push(renderScrollPosition(this.selectedIndex, this.filteredNodes.length, width, this.getFilterLabel()));
544
- return lines;
545
- }
546
- getEntryDisplayText(node, isSelected) {
547
- const entry = node.entry;
548
- let result;
549
- const normalize = (s) => s.replace(/[\n\t]/g, " ").trim();
550
- switch (entry.type) {
551
- case "message": {
552
- const msg = entry.message;
553
- if (!msg) {
554
- result = "";
555
- break;
556
- }
557
- const role = msg.role;
558
- if (role === "user") {
559
- const msgWithContent = msg;
560
- const content = normalize(this.extractContent(msgWithContent.content));
561
- result = theme.fg("accent", "user: ") + content;
562
- }
563
- else if (role === "assistant") {
564
- const msgWithContent = msg;
565
- const textContent = normalize(this.extractContent(msgWithContent.content));
566
- if (textContent) {
567
- result = theme.fg("success", "assistant: ") + textContent;
568
- }
569
- else if (msgWithContent.stopReason === "aborted") {
570
- result = theme.fg("success", "assistant: ") + theme.fg("muted", "(aborted)");
571
- }
572
- else if (msgWithContent.errorMessage) {
573
- const errMsg = normalize(msgWithContent.errorMessage).slice(0, 80);
574
- result = theme.fg("success", "assistant: ") + theme.fg("error", errMsg);
575
- }
576
- else {
577
- result = theme.fg("success", "assistant: ") + theme.fg("muted", "(no content)");
578
- }
579
- }
580
- else if (role === "toolResult") {
581
- const toolMsg = msg;
582
- const toolCall = toolMsg.toolCallId ? this.toolCallMap.get(toolMsg.toolCallId) : undefined;
583
- if (toolCall) {
584
- result = theme.fg("muted", this.formatToolCall(toolCall.name, toolCall.arguments));
585
- }
586
- else {
587
- result = theme.fg("muted", `[${toolMsg.toolName ?? "tool"}]`);
588
- }
589
- }
590
- else if (role === "bashExecution") {
591
- const bashMsg = msg;
592
- result = theme.fg("dim", `[bash]: ${normalize(bashMsg.command ?? "")}`);
593
- }
594
- else {
595
- result = theme.fg("dim", `[${role}]`);
596
- }
597
- break;
598
- }
599
- case "custom_message": {
600
- const content = typeof entry.content === "string"
601
- ? entry.content
602
- : entry.content
603
- .filter((c) => c.type === "text")
604
- .map((c) => c.text)
605
- .join("");
606
- result = theme.fg("customMessageLabel", `[${entry.customType}]: `) + normalize(content);
607
- break;
608
- }
609
- case "compaction": {
610
- const tokens = Math.round((entry.tokensBefore ?? 0) / 1000);
611
- result = theme.fg("borderAccent", `[compaction: ${tokens}k tokens]`);
612
- break;
613
- }
614
- case "branch_summary":
615
- result = theme.fg("warning", `[branch summary]: `) + normalize(entry.summary ?? "");
616
- break;
617
- case "model_change":
618
- result = theme.fg("dim", `[model: ${entry.modelId}]`);
619
- break;
620
- case "thinking_level_change":
621
- result = theme.fg("dim", `[thinking: ${entry.thinkingLevel}]`);
622
- break;
623
- case "custom":
624
- result = theme.fg("dim", `[custom: ${entry.customType}]`);
625
- break;
626
- case "label":
627
- result = theme.fg("dim", `[label: ${entry.label ?? "(cleared)"}]`);
628
- break;
629
- case undefined:
630
- result = "";
631
- break;
632
- default:
633
- result = "";
634
- }
635
- return isSelected ? theme.bold(result) : result;
636
- }
637
- extractContent(content) {
638
- const maxLen = 200;
639
- if (typeof content === "string")
640
- return content.slice(0, maxLen);
641
- if (Array.isArray(content)) {
642
- let result = "";
643
- for (const c of content) {
644
- if (typeof c === "object" && c !== null && "type" in c && c.type === "text") {
645
- result += c.text;
646
- if (result.length >= maxLen)
647
- return result.slice(0, maxLen);
648
- }
649
- }
650
- return result;
651
- }
652
- return "";
653
- }
654
- hasTextContent(content) {
655
- if (typeof content === "string")
656
- return content.trim().length > 0;
657
- if (Array.isArray(content)) {
658
- for (const c of content) {
659
- if (typeof c === "object" && c !== null && "type" in c && c.type === "text") {
660
- const text = c.text;
661
- if (text && text.trim().length > 0)
662
- return true;
663
- }
664
- }
665
- }
666
- return false;
667
- }
668
- formatToolCall(name, args) {
669
- const shortenPath = (p) => {
670
- const home = process.env.HOME || process.env.USERPROFILE || "";
671
- if (home && p.startsWith(home))
672
- return `~${p.slice(home.length)}`;
673
- return p;
674
- };
675
- switch (name) {
676
- case "read": {
677
- const path = shortenPath(String(args.path || args.file_path || ""));
678
- const offset = args.offset;
679
- const limit = args.limit;
680
- let display = path;
681
- if (offset !== undefined || limit !== undefined) {
682
- const start = offset ?? 1;
683
- const end = limit !== undefined ? start + limit - 1 : "";
684
- display += `:${start}${end ? `-${end}` : ""}`;
685
- }
686
- return `[read: ${display}]`;
687
- }
688
- case "write": {
689
- const path = shortenPath(String(args.path || args.file_path || ""));
690
- return `[write: ${path}]`;
691
- }
692
- case "edit": {
693
- const path = shortenPath(String(args.path || args.file_path || ""));
694
- return `[edit: ${path}]`;
695
- }
696
- case "bash": {
697
- const rawCmd = String(args.command || "");
698
- const cmd = rawCmd
699
- .replace(/[\n\t]/g, " ")
700
- .trim()
701
- .slice(0, 50);
702
- return `[bash: ${cmd}${rawCmd.length > 50 ? "..." : ""}]`;
703
- }
704
- case "grep": {
705
- const pattern = String(args.pattern || "");
706
- const path = shortenPath(String(args.path || "."));
707
- return `[grep: /${pattern}/ in ${path}]`;
708
- }
709
- case "find": {
710
- const pattern = String(args.pattern || "");
711
- const path = shortenPath(String(args.path || "."));
712
- return `[find: ${pattern} in ${path}]`;
713
- }
714
- case "ls": {
715
- const path = shortenPath(String(args.path || "."));
716
- return `[ls: ${path}]`;
717
- }
718
- default: {
719
- // Custom tool - show name and truncated JSON args
720
- const argsStr = JSON.stringify(args).slice(0, 40);
721
- return `[${name}: ${argsStr}${JSON.stringify(args).length > 40 ? "..." : ""}]`;
722
- }
723
- }
724
- }
725
- handleInput(keyData) {
726
- const kb = getKeybindings();
727
- if (kb.matches(keyData, "selectUp")) {
728
- this.selectedIndex = this.selectedIndex === 0 ? this.filteredNodes.length - 1 : this.selectedIndex - 1;
729
- }
730
- else if (kb.matches(keyData, "selectDown")) {
731
- this.selectedIndex = this.selectedIndex === this.filteredNodes.length - 1 ? 0 : this.selectedIndex + 1;
732
- }
733
- else if (kb.matches(keyData, "treeFoldOrUp")) {
734
- const currentId = this.filteredNodes[this.selectedIndex]?.node.entry.id;
735
- if (currentId && this.isFoldable(currentId) && !this.foldedNodes.has(currentId)) {
736
- this.foldedNodes.add(currentId);
737
- this.applyFilter();
738
- }
739
- else {
740
- this.selectedIndex = this.findBranchSegmentStart("up");
741
- }
742
- }
743
- else if (kb.matches(keyData, "treeUnfoldOrDown")) {
744
- const currentId = this.filteredNodes[this.selectedIndex]?.node.entry.id;
745
- if (currentId && this.foldedNodes.has(currentId)) {
746
- this.foldedNodes.delete(currentId);
747
- this.applyFilter();
748
- }
749
- else {
750
- this.selectedIndex = this.findBranchSegmentStart("down");
751
- }
752
- }
753
- else if (kb.matches(keyData, "cursorLeft") || kb.matches(keyData, "selectPageUp")) {
754
- // Page up
755
- this.selectedIndex = Math.max(0, this.selectedIndex - this.maxVisibleLines);
756
- }
757
- else if (kb.matches(keyData, "cursorRight") || kb.matches(keyData, "selectPageDown")) {
758
- // Page down
759
- this.selectedIndex = Math.min(this.filteredNodes.length - 1, this.selectedIndex + this.maxVisibleLines);
760
- }
761
- else if (kb.matches(keyData, "selectConfirm")) {
762
- const selected = this.filteredNodes[this.selectedIndex];
763
- if (selected && this.onSelect) {
764
- this.onSelect(selected.node.entry.id);
765
- }
766
- }
767
- else if (kb.matches(keyData, "selectCancel")) {
768
- if (this.searchQuery) {
769
- this.searchQuery = "";
770
- this.foldedNodes.clear();
771
- this.applyFilter();
772
- }
773
- else {
774
- this.onCancel?.();
775
- }
776
- }
777
- else if (matchesKey(keyData, "ctrl+d")) {
778
- // Direct filter: default
779
- this.filterMode = "default";
780
- this.foldedNodes.clear();
781
- this.applyFilter();
782
- }
783
- else if (matchesKey(keyData, "ctrl+t")) {
784
- // Toggle filter: no-tools ↔ default
785
- this.filterMode = this.filterMode === "no-tools" ? "default" : "no-tools";
786
- this.foldedNodes.clear();
787
- this.applyFilter();
788
- }
789
- else if (matchesKey(keyData, "ctrl+u")) {
790
- // Toggle filter: user-only ↔ default
791
- this.filterMode = this.filterMode === "user-only" ? "default" : "user-only";
792
- this.foldedNodes.clear();
793
- this.applyFilter();
794
- }
795
- else if (matchesKey(keyData, "ctrl+l")) {
796
- // Toggle filter: labeled-only ↔ default
797
- this.filterMode = this.filterMode === "labeled-only" ? "default" : "labeled-only";
798
- this.foldedNodes.clear();
799
- this.applyFilter();
800
- }
801
- else if (matchesKey(keyData, "ctrl+a")) {
802
- // Toggle filter: all ↔ default
803
- this.filterMode = this.filterMode === "all" ? "default" : "all";
804
- this.foldedNodes.clear();
805
- this.applyFilter();
806
- }
807
- else if (matchesKey(keyData, "shift+ctrl+o")) {
808
- // Cycle filter backwards
809
- const modes = ["default", "no-tools", "user-only", "labeled-only", "all"];
810
- const currentIndex = modes.indexOf(this.filterMode);
811
- this.filterMode = modes[(currentIndex - 1 + modes.length) % modes.length];
812
- this.foldedNodes.clear();
813
- this.applyFilter();
814
- }
815
- else if (matchesKey(keyData, "ctrl+o")) {
816
- // Cycle filter forwards: default → no-tools → user-only → labeled-only → all → default
817
- const modes = ["default", "no-tools", "user-only", "labeled-only", "all"];
818
- const currentIndex = modes.indexOf(this.filterMode);
819
- this.filterMode = modes[(currentIndex + 1) % modes.length];
820
- this.foldedNodes.clear();
821
- this.applyFilter();
822
- }
823
- else if (kb.matches(keyData, "deleteCharBackward")) {
824
- if (this.searchQuery.length > 0) {
825
- this.searchQuery = this.searchQuery.slice(0, -1);
826
- this.foldedNodes.clear();
827
- this.applyFilter();
828
- }
829
- }
830
- else if (matchesKey(keyData, "shift+l")) {
831
- const selected = this.filteredNodes[this.selectedIndex];
832
- if (selected && this.onLabelEdit) {
833
- this.onLabelEdit(selected.node.entry.id, selected.node.label);
834
- }
835
- }
836
- else {
837
- const hasControlChars = [...keyData].some((ch) => {
838
- const code = ch.charCodeAt(0);
839
- return code < 32 || code === 0x7f || (code >= 0x80 && code <= 0x9f);
840
- });
841
- if (!hasControlChars && keyData.length > 0) {
842
- this.searchQuery += keyData;
843
- this.foldedNodes.clear();
844
- this.applyFilter();
845
- }
846
- }
847
- }
848
- /**
849
- * Whether a node can be folded. A node is foldable if it has visible children
850
- * and is either a root (no visible parent) or a segment start (visible parent
851
- * has multiple visible children).
852
- */
853
- isFoldable(entryId) {
854
- const children = this.visibleChildrenMap.get(entryId);
855
- if (!children || children.length === 0)
856
- return false;
857
- const parentId = this.visibleParentMap.get(entryId);
858
- if (parentId === null || parentId === undefined)
859
- return true;
860
- const siblings = this.visibleChildrenMap.get(parentId);
861
- return siblings !== undefined && siblings.length > 1;
862
- }
863
- /**
864
- * Find the index of the next branch segment start in the given direction.
865
- * A segment start is the first child of a branch point.
866
- *
867
- * "up" walks the visible parent chain; "down" walks visible children
868
- * (always following the first child).
869
- */
870
- findBranchSegmentStart(direction) {
871
- const selectedId = this.filteredNodes[this.selectedIndex]?.node.entry.id;
872
- if (!selectedId)
873
- return this.selectedIndex;
874
- const indexByEntryId = new Map(this.filteredNodes.map((node, i) => [node.node.entry.id, i]));
875
- let currentId = selectedId;
876
- if (direction === "down") {
877
- while (true) {
878
- const children = this.visibleChildrenMap.get(currentId) ?? [];
879
- if (children.length === 0)
880
- return indexByEntryId.get(currentId);
881
- if (children.length > 1)
882
- return indexByEntryId.get(children[0]);
883
- currentId = children[0];
884
- }
885
- }
886
- // direction === "up"
887
- while (true) {
888
- const parentId = this.visibleParentMap.get(currentId) ?? null;
889
- if (parentId === null)
890
- return indexByEntryId.get(currentId);
891
- const children = this.visibleChildrenMap.get(parentId) ?? [];
892
- if (children.length > 1) {
893
- const segmentStart = indexByEntryId.get(currentId);
894
- if (segmentStart < this.selectedIndex) {
895
- return segmentStart;
896
- }
897
- }
898
- currentId = parentId;
899
- }
900
- }
901
- }
902
- /** Component that displays the current search query */
903
- class SearchLine {
904
- constructor(treeList) {
905
- this.treeList = treeList;
906
- }
907
- invalidate() { }
908
- render(width) {
909
- const query = this.treeList.getSearchQuery();
910
- if (query) {
911
- return [truncateToWidth(` ${theme.fg("muted", "Type to search:")} ${theme.fg("accent", query)}`, width)];
912
- }
913
- return [truncateToWidth(` ${theme.fg("muted", "Type to search:")}`, width)];
914
- }
915
- handleInput(_keyData) { }
916
- }
917
- /** Label input component shown when editing a label */
918
- class LabelInput {
919
- get focused() {
920
- return this._focused;
921
- }
922
- set focused(value) {
923
- this._focused = value;
924
- this.input.focused = value;
925
- }
926
- constructor(entryId, currentLabel) {
927
- // Focusable implementation - propagate to input for IME cursor positioning
928
- this._focused = false;
929
- this.entryId = entryId;
930
- this.input = new Input();
931
- if (currentLabel) {
932
- this.input.setValue(currentLabel);
933
- }
934
- }
935
- invalidate() { }
936
- render(width) {
937
- const lines = [];
938
- const indent = " ";
939
- const availableWidth = width - indent.length;
940
- lines.push(truncateToWidth(`${indent}${theme.fg("muted", "Label (empty to remove):")}`, width));
941
- lines.push(...this.input.render(availableWidth).map((line) => truncateToWidth(`${indent}${line}`, width)));
942
- lines.push(truncateToWidth(`${indent}${keyHint("selectConfirm", "save")} ${keyHint("selectCancel", "cancel")}`, width));
943
- return lines;
944
- }
945
- handleInput(keyData) {
946
- const kb = getKeybindings();
947
- if (kb.matches(keyData, "selectConfirm")) {
948
- const value = this.input.getValue().trim();
949
- this.onSubmit?.(this.entryId, value || undefined);
950
- }
951
- else if (kb.matches(keyData, "selectCancel")) {
952
- this.onCancel?.();
953
- }
954
- else {
955
- this.input.handleInput(keyData);
956
- }
957
- }
958
- }
959
- /**
960
- * Component that renders a session tree selector for navigation
961
- */
962
- export class TreeSelectorComponent extends Container {
963
- get focused() {
964
- return this._focused;
965
- }
966
- set focused(value) {
967
- this._focused = value;
968
- // Propagate to labelInput when it's active
969
- if (this.labelInput) {
970
- this.labelInput.focused = value;
971
- }
972
- }
973
- constructor(tree, currentLeafId, terminalHeight, onSelect, onCancel, onLabelChange, initialSelectedId, initialFilterMode) {
974
- super();
975
- this.labelInput = null;
976
- // Focusable implementation - propagate to labelInput when active for IME cursor positioning
977
- this._focused = false;
978
- this.onLabelChangeCallback = onLabelChange;
979
- const maxVisibleLines = Math.max(5, Math.floor(terminalHeight / 2));
980
- this.treeList = new TreeList(tree, currentLeafId, maxVisibleLines, initialSelectedId, initialFilterMode);
981
- this.treeList.onSelect = onSelect;
982
- this.treeList.onCancel = onCancel;
983
- this.treeList.onLabelEdit = (entryId, currentLabel) => this.showLabelInput(entryId, currentLabel);
984
- this.treeContainer = new Container();
985
- this.treeContainer.addChild(this.treeList);
986
- this.labelInputContainer = new Container();
987
- this.addChild(new Spacer(1));
988
- this.addChild(new DynamicBorder());
989
- this.addChild(new Text(theme.bold(" Session Tree"), 1, 0));
990
- this.addChild(new TruncatedText(theme.fg("muted", ` ↑/↓: move. ←/→: page. ^←/^→ or ${process.platform === "darwin" ? "⌥←/⌥→" : "Alt+←/Alt+→"}: fold/branch. Shift+L: label. `) +
991
- theme.fg("muted", "^D/^T/^U/^L/^A: filters (^O/⇧^O cycle)"), 0, 0));
992
- this.addChild(new SearchLine(this.treeList));
993
- this.addChild(new DynamicBorder());
994
- this.addChild(new Spacer(1));
995
- this.addChild(this.treeContainer);
996
- this.addChild(this.labelInputContainer);
997
- this.addChild(new Spacer(1));
998
- this.addChild(new DynamicBorder());
999
- if (tree.length === 0) {
1000
- setTimeout(() => onCancel(), 100);
1001
- }
1002
- }
1003
- showLabelInput(entryId, currentLabel) {
1004
- this.labelInput = new LabelInput(entryId, currentLabel);
1005
- this.labelInput.onSubmit = (id, label) => {
1006
- this.treeList.updateNodeLabel(id, label);
1007
- this.onLabelChangeCallback?.(id, label);
1008
- this.hideLabelInput();
1009
- };
1010
- this.labelInput.onCancel = () => this.hideLabelInput();
1011
- // Propagate current focused state to the new labelInput
1012
- this.labelInput.focused = this._focused;
1013
- this.treeContainer.clear();
1014
- this.labelInputContainer.clear();
1015
- this.labelInputContainer.addChild(this.labelInput);
1016
- }
1017
- hideLabelInput() {
1018
- this.labelInput = null;
1019
- this.labelInputContainer.clear();
1020
- this.treeContainer.clear();
1021
- this.treeContainer.addChild(this.treeList);
1022
- }
1023
- handleInput(keyData) {
1024
- if (this.labelInput) {
1025
- this.labelInput.handleInput(keyData);
1026
- }
1027
- else {
1028
- this.treeList.handleInput(keyData);
1029
- }
1030
- }
1031
- getTreeList() {
1032
- return this.treeList;
1033
- }
1034
- }
1035
- //# sourceMappingURL=tree-selector.js.map