gsd-pi 2.78.1-dev.84a383f51 → 2.78.1

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 (474) hide show
  1. package/README.md +7 -7
  2. package/dist/cli.js +55 -95
  3. package/dist/headless-query.d.ts +0 -22
  4. package/dist/headless-query.js +4 -24
  5. package/dist/headless.d.ts +0 -10
  6. package/dist/headless.js +1 -16
  7. package/dist/loader.js +10 -7
  8. package/dist/onboarding.d.ts +0 -10
  9. package/dist/onboarding.js +2 -2
  10. package/dist/provider-migrations.d.ts +2 -2
  11. package/dist/provider-migrations.js +2 -5
  12. package/dist/resource-loader.d.ts +2 -5
  13. package/dist/resource-loader.js +5 -28
  14. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +601 -0
  15. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +651 -0
  16. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +91 -0
  17. package/dist/resources/extensions/gsd/auto/loop.js +0 -23
  18. package/dist/resources/extensions/gsd/auto/phases.js +2 -2
  19. package/dist/resources/extensions/gsd/auto/run-unit.js +1 -3
  20. package/dist/resources/extensions/gsd/auto/session.js +0 -3
  21. package/dist/resources/extensions/gsd/auto-recovery.js +4 -43
  22. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  23. package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
  24. package/dist/resources/extensions/gsd/auto-worktree.js +0 -30
  25. package/dist/resources/extensions/gsd/auto.js +5 -14
  26. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -14
  27. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +5 -7
  28. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  29. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +4 -5
  30. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +31 -94
  31. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +6 -11
  32. package/dist/resources/extensions/gsd/bootstrap/system-context.js +8 -34
  33. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +2 -38
  34. package/dist/resources/extensions/gsd/commands/catalog.js +5 -69
  35. package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -22
  36. package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -3
  37. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -10
  38. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  39. package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -4
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +1 -39
  41. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  42. package/dist/resources/extensions/gsd/forensics.js +2 -2
  43. package/dist/resources/extensions/gsd/git-service.js +5 -12
  44. package/dist/resources/extensions/gsd/gsd-db.js +2 -11
  45. package/dist/resources/extensions/gsd/guided-flow.js +23 -23
  46. package/dist/resources/extensions/gsd/memory-store.js +31 -66
  47. package/dist/resources/extensions/gsd/model-router.js +9 -114
  48. package/dist/resources/extensions/gsd/native-git-bridge.js +1 -7
  49. package/dist/resources/extensions/gsd/preferences-models.js +15 -91
  50. package/dist/resources/extensions/gsd/preferences-types.js +0 -2
  51. package/dist/resources/extensions/gsd/preferences-validation.js +0 -32
  52. package/dist/resources/extensions/gsd/preferences.js +3 -5
  53. package/dist/resources/extensions/gsd/prompt-loader.js +12 -23
  54. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -9
  55. package/dist/resources/extensions/gsd/state.js +0 -42
  56. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
  57. package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +53 -0
  58. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +112 -0
  59. package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +23 -0
  60. package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +5 -0
  61. package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -18
  62. package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
  63. package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -3
  64. package/dist/resources/extensions/gsd/worktree-command.js +46 -26
  65. package/dist/resources/extensions/mcp-client/index.js +3 -6
  66. package/dist/resources/extensions/slash-commands/create-extension.js +22 -36
  67. package/dist/resources/skills/create-gsd-extension/SKILL.md +5 -9
  68. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  69. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  70. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  71. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  72. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  73. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  74. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  75. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
  76. package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
  77. package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +608 -0
  78. package/dist/rtk-shared.d.ts +0 -3
  79. package/dist/rtk-shared.js +0 -17
  80. package/dist/rtk.d.ts +5 -2
  81. package/dist/rtk.js +20 -3
  82. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  83. package/dist/web/standalone/.next/BUILD_ID +1 -1
  84. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  85. package/dist/web/standalone/.next/build-manifest.json +4 -4
  86. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  87. package/dist/web/standalone/.next/react-loadable-manifest.json +4 -44
  88. package/dist/web/standalone/.next/required-server-files.json +3 -3
  89. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  90. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  100. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  104. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  106. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  107. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  108. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  116. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  128. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  148. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  158. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -4
  164. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  178. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  182. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  184. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/index.html +1 -1
  194. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  195. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  196. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  197. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  199. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/page.js +2 -2
  201. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  203. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  204. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  205. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  207. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/middleware.js +2 -2
  209. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  211. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  212. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  213. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  214. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  215. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  216. package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +20 -0
  217. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  218. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  219. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  220. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  221. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  222. package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +1 -0
  223. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  224. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  225. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  226. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  227. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  228. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  229. package/dist/web/standalone/package.json +1 -2
  230. package/dist/web/standalone/server.js +1 -1
  231. package/package.json +1 -1
  232. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  233. package/packages/mcp-server/dist/workflow-tools.js +46 -74
  234. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  235. package/packages/mcp-server/src/workflow-tools.test.ts +0 -26
  236. package/packages/mcp-server/src/workflow-tools.ts +58 -93
  237. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  238. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  239. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  240. package/packages/pi-ai/dist/providers/anthropic-shared.js +19 -48
  241. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  242. package/packages/pi-ai/dist/types.d.ts +0 -13
  243. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  244. package/packages/pi-ai/dist/types.js.map +1 -1
  245. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
  246. package/packages/pi-ai/dist/utils/repair-tool-json.js +3 -24
  247. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
  248. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -26
  249. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
  250. package/packages/pi-ai/src/providers/anthropic-shared.ts +20 -52
  251. package/packages/pi-ai/src/types.ts +0 -13
  252. package/packages/pi-ai/src/utils/repair-tool-json.ts +3 -24
  253. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -32
  254. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  255. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -6
  257. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  259. package/packages/pi-coding-agent/dist/core/messages.js +0 -4
  260. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  261. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -19
  262. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -10
  264. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  265. package/packages/pi-coding-agent/dist/core/model-registry.js +0 -18
  266. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +0 -13
  268. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -20
  270. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  271. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
  272. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -14
  274. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  275. package/packages/pi-coding-agent/src/core/agent-session.ts +0 -7
  276. package/packages/pi-coding-agent/src/core/messages.ts +0 -4
  277. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -32
  278. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -21
  279. package/packages/pi-coding-agent/src/core/system-prompt.ts +15 -33
  280. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -17
  281. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
  282. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  283. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +3 -17
  284. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  285. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +3 -20
  286. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  287. package/src/resources/extensions/gsd/auto/loop.ts +2 -24
  288. package/src/resources/extensions/gsd/auto/phases.ts +3 -3
  289. package/src/resources/extensions/gsd/auto/run-unit.ts +1 -3
  290. package/src/resources/extensions/gsd/auto/session.ts +0 -3
  291. package/src/resources/extensions/gsd/auto/types.ts +0 -1
  292. package/src/resources/extensions/gsd/auto-recovery.ts +8 -46
  293. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  294. package/src/resources/extensions/gsd/auto-tool-tracking.ts +4 -2
  295. package/src/resources/extensions/gsd/auto-worktree.ts +0 -38
  296. package/src/resources/extensions/gsd/auto.ts +4 -14
  297. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +13 -15
  298. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +7 -8
  299. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  300. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +9 -10
  301. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +31 -102
  302. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +6 -12
  303. package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -39
  304. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +11 -39
  305. package/src/resources/extensions/gsd/commands/catalog.ts +5 -75
  306. package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -22
  307. package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -3
  308. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -15
  309. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  310. package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -4
  311. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +1 -39
  312. package/src/resources/extensions/gsd/doctor-types.ts +1 -3
  313. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  314. package/src/resources/extensions/gsd/forensics.ts +2 -2
  315. package/src/resources/extensions/gsd/git-service.ts +5 -13
  316. package/src/resources/extensions/gsd/gsd-db.ts +2 -12
  317. package/src/resources/extensions/gsd/guided-flow.ts +25 -25
  318. package/src/resources/extensions/gsd/memory-store.ts +28 -81
  319. package/src/resources/extensions/gsd/model-router.ts +9 -172
  320. package/src/resources/extensions/gsd/native-git-bridge.ts +1 -7
  321. package/src/resources/extensions/gsd/preferences-models.ts +15 -101
  322. package/src/resources/extensions/gsd/preferences-types.ts +0 -6
  323. package/src/resources/extensions/gsd/preferences-validation.ts +0 -35
  324. package/src/resources/extensions/gsd/preferences.ts +2 -16
  325. package/src/resources/extensions/gsd/prompt-loader.ts +12 -26
  326. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -9
  327. package/src/resources/extensions/gsd/state.ts +0 -42
  328. package/src/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
  329. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1 -178
  330. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -58
  331. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +5 -9
  332. package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -21
  333. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
  334. package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +211 -138
  335. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +59 -142
  336. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +4 -7
  337. package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +32 -89
  338. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +22 -0
  339. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +23 -41
  340. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +43 -3
  341. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +3 -5
  342. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +87 -22
  343. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +118 -7
  344. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +47 -0
  345. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +60 -18
  346. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +76 -14
  347. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +75 -0
  348. package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +83 -22
  349. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +63 -1
  350. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +1 -26
  351. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +0 -30
  352. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +4 -14
  353. package/src/resources/extensions/gsd/tests/health-widget.test.ts +12 -22
  354. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +1 -64
  355. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -22
  356. package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +23 -0
  357. package/src/resources/extensions/gsd/tests/memory-store.test.ts +0 -128
  358. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +1 -33
  359. package/src/resources/extensions/gsd/tests/model-router.test.ts +8 -169
  360. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +0 -8
  361. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +43 -32
  362. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +10 -4
  363. package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -127
  364. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +0 -16
  365. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -7
  366. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
  367. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +19 -168
  368. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +1 -7
  369. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -23
  370. package/src/resources/extensions/gsd/tests/token-profile.test.ts +4 -51
  371. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +16 -7
  372. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +7 -5
  373. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -15
  374. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
  375. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +0 -15
  376. package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -17
  377. package/src/resources/extensions/gsd/unit-context-manifest.ts +8 -8
  378. package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
  379. package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -3
  380. package/src/resources/extensions/gsd/workflow-logger.ts +0 -1
  381. package/src/resources/extensions/gsd/worktree-command.ts +44 -31
  382. package/src/resources/extensions/mcp-client/index.ts +3 -6
  383. package/src/resources/extensions/slash-commands/create-extension.ts +24 -38
  384. package/src/resources/skills/create-gsd-extension/SKILL.md +5 -9
  385. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  386. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  387. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  388. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  389. package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  390. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  391. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  392. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
  393. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
  394. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
  395. package/dist/cli-policy.d.ts +0 -13
  396. package/dist/cli-policy.js +0 -17
  397. package/dist/resources/.managed-resources-content-hash +0 -1
  398. package/dist/resources/extensions/gsd/auto-runtime-state.js +0 -31
  399. package/dist/resources/extensions/gsd/milestone-id-reservation.js +0 -36
  400. package/dist/resources/extensions/gsd/worktree-session-state.js +0 -33
  401. package/dist/runtime-checks.d.ts +0 -27
  402. package/dist/runtime-checks.js +0 -38
  403. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +0 -1
  405. package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +0 -1
  406. package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +0 -1
  407. package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +0 -1
  408. package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +0 -1
  409. package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +0 -10
  410. package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +0 -2
  411. package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +0 -20
  412. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  413. package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +0 -1
  414. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  415. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  416. package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +0 -1
  417. package/dist/worktree-status-banner.d.ts +0 -1
  418. package/dist/worktree-status-banner.js +0 -132
  419. package/packages/mcp-server/dist/alias-telemetry.d.ts +0 -8
  420. package/packages/mcp-server/dist/alias-telemetry.d.ts.map +0 -1
  421. package/packages/mcp-server/dist/alias-telemetry.js +0 -30
  422. package/packages/mcp-server/dist/alias-telemetry.js.map +0 -1
  423. package/packages/mcp-server/src/alias-telemetry.test.ts +0 -78
  424. package/packages/mcp-server/src/alias-telemetry.ts +0 -30
  425. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +0 -2
  426. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +0 -1
  427. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +0 -231
  428. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +0 -1
  429. package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +0 -289
  430. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +0 -37
  431. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +0 -1
  432. package/packages/pi-coding-agent/dist/core/token-telemetry.js +0 -49
  433. package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +0 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +0 -2
  435. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +0 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +0 -133
  437. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +0 -1
  438. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +0 -2
  439. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +0 -1
  440. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +0 -78
  441. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +0 -1
  442. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +0 -2
  443. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +0 -1
  444. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +0 -181
  445. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +0 -1
  446. package/packages/pi-coding-agent/src/core/token-telemetry.ts +0 -77
  447. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +0 -212
  448. package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +0 -102
  449. package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +0 -200
  450. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +0 -2
  451. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +0 -1
  452. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +0 -161
  453. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +0 -1
  454. package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +0 -219
  455. package/src/resources/extensions/gsd/auto-runtime-state.ts +0 -51
  456. package/src/resources/extensions/gsd/milestone-id-reservation.ts +0 -47
  457. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +0 -116
  458. package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +0 -100
  459. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +0 -93
  460. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +0 -47
  461. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +0 -63
  462. package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +0 -81
  463. package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +0 -57
  464. package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +0 -145
  465. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +0 -124
  466. package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +0 -152
  467. package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +0 -50
  468. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -93
  469. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +0 -101
  470. package/src/resources/extensions/gsd/worktree-session-state.ts +0 -35
  471. package/src/resources/extensions/mcp-client/tests/global-config.test.ts +0 -91
  472. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +0 -58
  473. /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_buildManifest.js +0 -0
  474. /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_ssgManifest.js +0 -0
@@ -33,21 +33,29 @@ import { inferCommitType } from "./git-service.js";
33
33
  import type { FileLineStat } from "./worktree-manager.js";
34
34
  import { existsSync, realpathSync, readdirSync, rmSync, unlinkSync } from "node:fs";
35
35
  import { nativeMergeAbort } from "./native-git-bridge.js";
36
- import { join } from "node:path";
37
- import {
38
- clearWorktreeOriginalCwd,
39
- ensureWorktreeOriginalCwdFromPath,
40
- getActiveWorktreeName,
41
- getWorktreeOriginalCwd,
42
- setWorktreeOriginalCwd,
43
- } from "./worktree-session-state.js";
44
-
45
- export { getActiveWorktreeName, getWorktreeOriginalCwd } from "./worktree-session-state.js";
36
+ import { join, sep } from "node:path";
46
37
 
47
38
  /**
48
39
  * Tracks the original project root so we can switch back.
49
40
  * Set when we first chdir into a worktree, cleared on return.
50
41
  */
42
+ let originalCwd: string | null = null;
43
+
44
+ /** Get the original project root if currently in a worktree, or null. */
45
+ export function getWorktreeOriginalCwd(): string | null {
46
+ return originalCwd;
47
+ }
48
+
49
+ /** Get the name of the active worktree, or null if not in one. */
50
+ export function getActiveWorktreeName(): string | null {
51
+ if (!originalCwd) return null;
52
+ const cwd = process.cwd();
53
+ const wtDir = join(originalCwd, ".gsd", "worktrees");
54
+ if (!cwd.startsWith(wtDir)) return null;
55
+ const rel = cwd.slice(wtDir.length + 1);
56
+ const name = rel.split("/")[0] ?? rel.split("\\")[0];
57
+ return name || null;
58
+ }
51
59
 
52
60
  // ─── Shared completions and handler (used by both /worktree and /wt) ────────
53
61
 
@@ -137,7 +145,7 @@ async function worktreeHandler(
137
145
  return;
138
146
  }
139
147
  // create and switch both do the same thing: switch if exists, create if not
140
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
148
+ const mainBase = originalCwd ?? basePath;
141
149
  const existing = listWorktrees(mainBase);
142
150
  if (existing.some(wt => wt.name === name)) {
143
151
  await handleSwitch(basePath, name, ctx);
@@ -149,7 +157,7 @@ async function worktreeHandler(
149
157
 
150
158
  if (trimmed === "merge" || trimmed.startsWith("merge ")) {
151
159
  const mergeArgs = trimmed.replace(/^merge\s*/, "").trim().split(/\s+/).filter(Boolean);
152
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
160
+ const mainBase = originalCwd ?? basePath;
153
161
  const activeWt = getActiveWorktreeName();
154
162
 
155
163
  if (mergeArgs.length === 0) {
@@ -183,7 +191,7 @@ async function worktreeHandler(
183
191
 
184
192
  if (trimmed === "remove" || trimmed.startsWith("remove ")) {
185
193
  const name = trimmed.replace(/^remove\s*/, "").trim();
186
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
194
+ const mainBase = originalCwd ?? basePath;
187
195
 
188
196
  if (name === "all") {
189
197
  await handleRemoveAll(mainBase, ctx);
@@ -205,7 +213,7 @@ async function worktreeHandler(
205
213
  return;
206
214
  }
207
215
 
208
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
216
+ const mainBase = originalCwd ?? basePath;
209
217
  const nameOnly = trimmed.split(/\s+/)[0]!;
210
218
  if (trimmed !== nameOnly) {
211
219
  ctx.ui.notify(`Unknown command. Did you mean /${alias} switch ${nameOnly}?`, "warning");
@@ -233,7 +241,14 @@ export function registerWorktreeCommand(pi: ExtensionAPI): void {
233
241
  // Restore worktree state after /reload.
234
242
  // The module-level originalCwd resets to null when extensions are re-loaded,
235
243
  // but process.cwd() is still inside the worktree. Detect this and recover.
236
- ensureWorktreeOriginalCwdFromPath();
244
+ if (!originalCwd) {
245
+ const cwd = process.cwd();
246
+ const marker = `${sep}.gsd${sep}worktrees${sep}`;
247
+ const markerIdx = cwd.indexOf(marker);
248
+ if (markerIdx !== -1) {
249
+ originalCwd = cwd.slice(0, markerIdx);
250
+ }
251
+ }
237
252
 
238
253
  pi.registerCommand("worktree", {
239
254
  description: "Git worktrees (also /wt): /worktree <name> | list | merge | remove",
@@ -305,7 +320,7 @@ async function handleCreate(
305
320
  const commitMsg = autoCommitCurrentBranch(basePath, "worktree-switch", name);
306
321
 
307
322
  // Create from the main tree, not from inside another worktree
308
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
323
+ const mainBase = originalCwd ?? basePath;
309
324
  const info = createWorktree(mainBase, name);
310
325
 
311
326
  // Run user-configured post-create hook (#597) — e.g. copy .env, symlink assets
@@ -315,7 +330,7 @@ async function handleCreate(
315
330
  }
316
331
 
317
332
  // Track original cwd before switching
318
- if (!getWorktreeOriginalCwd()) setWorktreeOriginalCwd(basePath);
333
+ if (!originalCwd) originalCwd = basePath;
319
334
 
320
335
  const prevCwd = process.cwd();
321
336
  process.chdir(info.path);
@@ -375,7 +390,7 @@ async function handleSwitch(
375
390
  ctx: ExtensionCommandContext,
376
391
  ): Promise<void> {
377
392
  try {
378
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
393
+ const mainBase = originalCwd ?? basePath;
379
394
  const wtPath = worktreePath(mainBase, name);
380
395
 
381
396
  if (!existsSync(wtPath)) {
@@ -390,7 +405,7 @@ async function handleSwitch(
390
405
  const commitMsg = autoCommitCurrentBranch(basePath, "worktree-switch", name);
391
406
 
392
407
  // Track original cwd before switching
393
- if (!getWorktreeOriginalCwd()) setWorktreeOriginalCwd(basePath);
408
+ if (!originalCwd) originalCwd = basePath;
394
409
 
395
410
  const prevCwd = process.cwd();
396
411
  process.chdir(wtPath);
@@ -418,7 +433,6 @@ async function handleSwitch(
418
433
  }
419
434
 
420
435
  async function handleReturn(ctx: ExtensionCommandContext): Promise<void> {
421
- const originalCwd = getWorktreeOriginalCwd();
422
436
  if (!originalCwd) {
423
437
  ctx.ui.notify("Already in the main project tree.", "info");
424
438
  return;
@@ -428,7 +442,7 @@ async function handleReturn(ctx: ExtensionCommandContext): Promise<void> {
428
442
  const commitMsg = autoCommitCurrentBranch(process.cwd(), "worktree-return", "worktree");
429
443
 
430
444
  const returnTo = originalCwd;
431
- clearWorktreeOriginalCwd();
445
+ originalCwd = null;
432
446
 
433
447
  const prevCwd = process.cwd();
434
448
  process.chdir(returnTo);
@@ -490,7 +504,7 @@ async function handleList(
490
504
  ctx: ExtensionCommandContext,
491
505
  ): Promise<void> {
492
506
  try {
493
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
507
+ const mainBase = originalCwd ?? basePath;
494
508
  const worktrees = listWorktrees(mainBase);
495
509
 
496
510
  if (worktrees.length === 0) {
@@ -538,7 +552,6 @@ async function handleList(
538
552
  lines.push("");
539
553
  }
540
554
 
541
- const originalCwd = getWorktreeOriginalCwd();
542
555
  if (originalCwd) {
543
556
  lines.push(` ${CLR.label("main tree")} ${CLR.path(originalCwd)}`);
544
557
  }
@@ -638,11 +651,11 @@ async function handleMerge(
638
651
 
639
652
  // Switch to the main tree before merging.
640
653
  // Must be on the main branch to run git merge --squash.
641
- if (getWorktreeOriginalCwd()) {
654
+ if (originalCwd) {
642
655
  const prevCwd = process.cwd();
643
656
  process.chdir(basePath);
644
657
  nudgeGitBranchCache(prevCwd);
645
- clearWorktreeOriginalCwd();
658
+ originalCwd = null;
646
659
  }
647
660
 
648
661
  // --- Deterministic merge path (preferred) ---
@@ -741,7 +754,7 @@ async function handleRemove(
741
754
  ctx: ExtensionCommandContext,
742
755
  ): Promise<void> {
743
756
  try {
744
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
757
+ const mainBase = originalCwd ?? basePath;
745
758
 
746
759
  // Validate the worktree exists before attempting removal
747
760
  const worktrees = listWorktrees(mainBase);
@@ -766,9 +779,9 @@ async function handleRemove(
766
779
  removeWorktree(mainBase, name, { deleteBranch: true });
767
780
 
768
781
  // If we were in that worktree, removeWorktree chdir'd us out — clear tracking
769
- if (getWorktreeOriginalCwd() && process.cwd() !== prevCwd) {
782
+ if (originalCwd && process.cwd() !== prevCwd) {
770
783
  nudgeGitBranchCache(prevCwd);
771
- clearWorktreeOriginalCwd();
784
+ originalCwd = null;
772
785
  }
773
786
 
774
787
  ctx.ui.notify(`${CLR.ok("✓")} Worktree ${CLR.name(name)} removed ${CLR.muted("(branch deleted)")}.`, "info");
@@ -783,7 +796,7 @@ async function handleRemoveAll(
783
796
  ctx: ExtensionCommandContext,
784
797
  ): Promise<void> {
785
798
  try {
786
- const mainBase = getWorktreeOriginalCwd() ?? basePath;
799
+ const mainBase = originalCwd ?? basePath;
787
800
  const worktrees = listWorktrees(mainBase);
788
801
 
789
802
  if (worktrees.length === 0) {
@@ -817,9 +830,9 @@ async function handleRemoveAll(
817
830
  }
818
831
 
819
832
  // If we were in a worktree that got removed, clear tracking
820
- if (getWorktreeOriginalCwd() && process.cwd() !== prevCwd) {
833
+ if (originalCwd && process.cwd() !== prevCwd) {
821
834
  nudgeGitBranchCache(prevCwd);
822
- clearWorktreeOriginalCwd();
835
+ originalCwd = null;
823
836
  }
824
837
 
825
838
  const lines: string[] = [];
@@ -2,8 +2,7 @@
2
2
  * MCP Client Extension — Native MCP server integration for pi
3
3
  *
4
4
  * Provides on-demand access to MCP servers configured in project files
5
- * (.mcp.json, .gsd/mcp.json) and the global ~/.gsd/mcp.json (or
6
- * $GSD_HOME/mcp.json) using the @modelcontextprotocol/sdk Client
5
+ * (.mcp.json, .gsd/mcp.json) using the @modelcontextprotocol/sdk Client
7
6
  * directly — no external CLI dependency required.
8
7
  *
9
8
  * Three tools:
@@ -25,7 +24,6 @@ import { Client } from "@modelcontextprotocol/sdk/client";
25
24
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
26
25
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
27
26
  import { readFileSync, existsSync } from "node:fs";
28
- import { homedir } from "node:os";
29
27
  import { join } from "node:path";
30
28
  import { buildHttpTransportOpts } from "./auth.js";
31
29
  import type { McpHttpAuthConfig } from "./auth.js";
@@ -104,7 +102,6 @@ function readConfigs(): McpServerConfig[] {
104
102
  const configPaths = [
105
103
  join(process.cwd(), ".mcp.json"),
106
104
  join(process.cwd(), ".gsd", "mcp.json"),
107
- join(process.env.GSD_HOME || join(homedir(), ".gsd"), "mcp.json"),
108
105
  ];
109
106
 
110
107
  for (const configPath of configPaths) {
@@ -324,7 +321,7 @@ async function closeAll(): Promise<void> {
324
321
  // ─── Formatters ───────────────────────────────────────────────────────────────
325
322
 
326
323
  function formatServerList(servers: McpServerConfig[]): string {
327
- if (servers.length === 0) return "No MCP servers configured. Add servers to .mcp.json, .gsd/mcp.json, or $GSD_HOME/mcp.json (default: ~/.gsd/mcp.json).";
324
+ if (servers.length === 0) return "No MCP servers configured. Add servers to .mcp.json or .gsd/mcp.json.";
328
325
 
329
326
  const lines: string[] = [`${servers.length} MCP servers configured:\n`];
330
327
 
@@ -387,7 +384,7 @@ export default function (pi: ExtensionAPI) {
387
384
  name: "mcp_servers",
388
385
  label: "MCP Servers",
389
386
  description:
390
- "List all available MCP servers configured in project files (.mcp.json, .gsd/mcp.json) or globally ($GSD_HOME/mcp.json, default: ~/.gsd/mcp.json). " +
387
+ "List all available MCP servers configured in project files (.mcp.json, .gsd/mcp.json). " +
391
388
  "Shows server names, transport type, and connection status. Use mcp_discover to get full tool schemas for a server.",
392
389
  promptSnippet:
393
390
  "List available MCP servers from project configuration",
@@ -221,38 +221,41 @@ function sendPrompt(description: string, result: RoundResult, pi: ExtensionAPI):
221
221
  : "";
222
222
 
223
223
  const docHints: string[] = [
224
- "- `docs/extension-sdk/README.md` — overview, quick start, directory layout",
225
- "- `docs/extension-sdk/api-reference.md` — ExtensionAPI and ExtensionContext surfaces",
226
- "- `docs/extension-sdk/building-extensions.md` — tools, commands, events, UI, state",
227
- "- `docs/extension-sdk/rules.md` — non-negotiable rules and gotchas",
224
+ "- `~/.gsd/agent/docs/extending-pi/01-what-are-extensions.md` — capabilities overview",
225
+ "- `~/.gsd/agent/docs/extending-pi/03-getting-started.md` — minimal extension, hot reload",
226
+ "- `~/.gsd/agent/docs/extending-pi/08-extensioncontext-what-you-can-access.md` — ExtensionContext API",
227
+ "- `~/.gsd/agent/docs/extending-pi/09-extensionapi-what-you-can-do.md` — ExtensionAPI: registration, messaging",
228
+ "- `~/.gsd/agent/docs/extending-pi/22-key-rules-gotchas.md` — must-read rules before shipping",
228
229
  ];
229
230
 
230
231
  if (uiSelected.includes("custom component")) {
231
- docHints.push("- `docs/extension-sdk/building-extensions.md#custom-components` — ctx.ui.custom() API");
232
- docHints.push("- `docs/dev/pi-ui-tui/06-ctx-ui-custom-full-custom-components.md` — step-by-step component guide");
233
- docHints.push("- `docs/dev/pi-ui-tui/07-built-in-components-the-building-blocks.md` — Text, Box, SelectList");
234
- docHints.push("- `docs/dev/pi-ui-tui/09-keyboard-input-how-to-handle-keys.md` — Key, matchesKey");
235
- docHints.push("- `docs/dev/pi-ui-tui/10-line-width-the-cardinal-rule.md` — truncation, width rules");
232
+ docHints.push("- `~/.gsd/agent/docs/extending-pi/12-custom-ui-visual-components.md` — dialogs, widgets, overlays");
233
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/06-ctx-ui-custom-full-custom-components.md` — ctx.ui.custom() API");
234
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/07-built-in-components-the-building-blocks.md` — Text, Box, SelectList");
235
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/09-keyboard-input-how-to-handle-keys.md` — Key, matchesKey");
236
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/10-line-width-the-cardinal-rule.md` — truncation, width rules");
237
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/19-building-a-complete-component-step-by-step.md` — step-by-step guide");
238
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/21-common-mistakes-and-how-to-avoid-them.md` — pitfalls");
236
239
  } else if (uiSelected.includes("Dialogs")) {
237
- docHints.push("- `docs/extension-sdk/building-extensions.md#built-in-dialogs` — select, confirm, input");
240
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/04-built-in-dialog-methods.md` — select, confirm, input, editor");
238
241
  } else if (uiSelected.includes("Status")) {
239
- docHints.push("- `docs/extension-sdk/building-extensions.md#persistent-ui-elements` — status, widgets");
242
+ docHints.push("- `~/.gsd/agent/docs/pi-ui-tui/05-persistent-ui-elements.md` — status, widgets, footer, header");
240
243
  }
241
244
 
242
245
  if (uiSelected.includes("tool") || result.answers["purpose"]) {
243
- docHints.push("- `docs/dev/extending-pi/14-custom-rendering-controlling-what-the-user-sees.md` — renderCall / renderResult");
246
+ docHints.push("- `~/.gsd/agent/docs/extending-pi/14-custom-rendering-controlling-what-the-user-sees.md` — renderCall / renderResult");
244
247
  }
245
248
 
246
249
  if (eventsSelected && !eventsSelected.includes("standalone")) {
247
- docHints.push("- `docs/dev/extending-pi/07-events-the-nervous-system.md` — all events reference");
250
+ docHints.push("- `~/.gsd/agent/docs/extending-pi/07-events-the-nervous-system.md` — all events reference");
248
251
  }
249
252
 
250
253
  if (eventsSelected.includes("context / prompt")) {
251
- docHints.push("- `docs/dev/extending-pi/15-system-prompt-modification.md` — system prompt hooks");
254
+ docHints.push("- `~/.gsd/agent/docs/extending-pi/15-system-prompt-modification.md` — system prompt hooks");
252
255
  }
253
256
 
254
257
  if (persistenceSelected.includes("session")) {
255
- docHints.push("- `docs/extension-sdk/building-extensions.md#state-management` — state reconstruction, appendEntry");
258
+ docHints.push("- `~/.gsd/agent/docs/extending-pi/13-state-management-persistence.md` — pi.appendEntry, session state");
256
259
  }
257
260
 
258
261
  const prompt = `Create a new pi extension based on this description:
@@ -267,30 +270,13 @@ ${docHints.join("\n")}
267
270
 
268
271
  ## Output
269
272
 
270
- Write the complete implementation as a directory-based extension:
271
-
272
- \`~/.gsd/agent/extensions/<kebab-case-name>/index.ts\`
273
- \`~/.gsd/agent/extensions/<kebab-case-name>/extension-manifest.json\`
274
-
275
- The manifest must follow this format:
276
- \`\`\`json
277
- {
278
- "id": "<kebab-case-name>",
279
- "name": "<Human Name>",
280
- "version": "1.0.0",
281
- "description": "<one-line description>",
282
- "tier": "community",
283
- "requires": { "platform": ">=2.29.0" },
284
- "provides": {
285
- "tools": ["<tool_names_registered>"],
286
- "commands": ["<command_names_registered>"],
287
- "hooks": ["<event_names_subscribed>"],
288
- "shortcuts": ["<shortcut_keys_registered>"]
289
- }
290
- }
291
- \`\`\`
273
+ Write the complete implementation as a single self-contained extension file:
274
+
275
+ \`~/.gsd/agent/extensions/<kebab-case-name>.ts\`
276
+
277
+ Then register it in the main extensions index:
292
278
 
293
- Only include non-empty arrays in \`provides\`. See \`docs/extension-sdk/manifest-spec.md\` for the full spec.
279
+ \`~/.gsd/agent/extensions/index.ts\` import and call the new extension's default export alongside existing ones
294
280
 
295
281
  ## Rules you must follow exactly
296
282
 
@@ -19,8 +19,8 @@ Note: `~/.gsd/agent/extensions/` is reserved for bundled extensions synced from
19
19
  3. **Commands** — Give users slash commands (`pi.registerCommand()`). Users type `/mycommand`.
20
20
 
21
21
  **Non-negotiable rules:**
22
- - Use `StringEnum` from `@gsd/pi-ai` for string enum params (NOT `Type.Union`/`Type.Literal` — breaks Google's API)
23
- - Truncate tool output to 50KB / 2000 lines max (use `truncateHead`/`truncateTail` from `@gsd/pi-coding-agent`)
22
+ - Use `StringEnum` from `@mariozechner/pi-ai` for string enum params (NOT `Type.Union`/`Type.Literal` — breaks Google's API)
23
+ - Truncate tool output to 50KB / 2000 lines max (use `truncateHead`/`truncateTail` from `@mariozechner/pi-coding-agent`)
24
24
  - Store stateful tool state in `details` for branching support
25
25
  - Check `signal?.aborted` in long-running tool executions
26
26
  - Use `pi.exec()` not `child_process` for shell commands
@@ -34,10 +34,10 @@ Note: `~/.gsd/agent/extensions/` is reserved for bundled extensions synced from
34
34
 
35
35
  | Package | Purpose |
36
36
  |---------|---------|
37
- | `@gsd/pi-coding-agent` | `ExtensionAPI`, `ExtensionContext`, `Theme`, event types, tool utilities, `DynamicBorder`, `BorderedLoader`, `CustomEditor`, `highlightCode` |
37
+ | `@mariozechner/pi-coding-agent` | `ExtensionAPI`, `ExtensionContext`, `Theme`, event types, tool utilities, `DynamicBorder`, `BorderedLoader`, `CustomEditor`, `highlightCode` |
38
38
  | `@sinclair/typebox` | `Type.Object`, `Type.String`, `Type.Number`, `Type.Optional`, `Type.Boolean`, `Type.Array` |
39
- | `@gsd/pi-ai` | `StringEnum` (required for string enums), `Type` re-export |
40
- | `@gsd/pi-tui` | `Text`, `Box`, `Container`, `Spacer`, `Markdown`, `SelectList`, `Input`, `matchesKey`, `Key`, `truncateToWidth`, `visibleWidth` |
39
+ | `@mariozechner/pi-ai` | `StringEnum` (required for string enums), `Type` re-export |
40
+ | `@mariozechner/pi-tui` | `Text`, `Box`, `Container`, `Spacer`, `Markdown`, `SelectList`, `Input`, `matchesKey`, `Key`, `truncateToWidth`, `visibleWidth` |
41
41
  | Node.js built-ins | `node:fs`, `node:path`, `node:child_process`, etc. |
42
42
 
43
43
  </essential_principles>
@@ -65,9 +65,6 @@ All domain knowledge in `references/`:
65
65
  **Capabilities:** custom-tools.md, custom-commands.md, custom-ui.md, custom-rendering.md
66
66
  **Patterns:** state-management.md, system-prompt-modification.md, compaction-session-control.md
67
67
  **Infrastructure:** model-provider-management.md, remote-execution-overrides.md, packaging-distribution.md, mode-behavior.md
68
- **Spec:** `docs/extension-sdk/manifest-spec.md` — manifest format, tiers, validation
69
- **Testing:** `docs/extension-sdk/testing.md` — mock patterns, test conventions
70
- **SDK:** `docs/extension-sdk/` — the authoritative GSD-2 extension guide
71
68
  **Gotchas:** key-rules-gotchas.md
72
69
  </reference_index>
73
70
 
@@ -81,7 +78,6 @@ All domain knowledge in `references/`:
81
78
 
82
79
  <success_criteria>
83
80
  Extension is complete when:
84
- - `extension-manifest.json` exists with accurate `provides` listing all registered tools/commands/hooks/shortcuts
85
81
  - TypeScript compiles without errors (jiti handles this at runtime)
86
82
  - Extension loads on GSD startup or `/reload` without errors
87
83
  - Tools appear in the LLM's system prompt and are callable
@@ -19,7 +19,7 @@ pi.registerCommand("deploy", {
19
19
  Add tab-completion for command arguments:
20
20
 
21
21
  ```typescript
22
- import type { AutocompleteItem } from "@gsd/pi-tui";
22
+ import type { AutocompleteItem } from "@mariozechner/pi-tui";
23
23
 
24
24
  pi.registerCommand("deploy", {
25
25
  description: "Deploy to an environment",
@@ -6,8 +6,8 @@ Custom rendering for tools and messages — control how they appear in the TUI.
6
6
  Tools can provide `renderCall` (how the call looks) and `renderResult` (how the result looks):
7
7
 
8
8
  ```typescript
9
- import { Text } from "@gsd/pi-tui";
10
- import { keyHint } from "@gsd/pi-coding-agent";
9
+ import { Text } from "@mariozechner/pi-tui";
10
+ import { keyHint } from "@mariozechner/pi-coding-agent";
11
11
 
12
12
  pi.registerTool({
13
13
  name: "my_tool",
@@ -54,7 +54,7 @@ If you omit `renderCall`/`renderResult`, the built-in renderer is used. Useful f
54
54
  Key hint helpers for showing keybinding info in render output:
55
55
 
56
56
  ```typescript
57
- import { keyHint, appKeyHint, editorKey, rawKeyHint } from "@gsd/pi-coding-agent";
57
+ import { keyHint, appKeyHint, editorKey, rawKeyHint } from "@mariozechner/pi-coding-agent";
58
58
 
59
59
  // Editor action hint (respects user keybinding config)
60
60
  keyHint("expandTools", "to expand") // e.g., "Ctrl+O to expand"
@@ -69,7 +69,7 @@ rawKeyHint("Ctrl+O", "to expand")
69
69
  Register a renderer for custom message types:
70
70
 
71
71
  ```typescript
72
- import { Text } from "@gsd/pi-tui";
72
+ import { Text } from "@mariozechner/pi-tui";
73
73
 
74
74
  pi.registerMessageRenderer("my-extension", (message, options, theme) => {
75
75
  const { expanded } = options;
@@ -92,7 +92,7 @@ pi.sendMessage({
92
92
 
93
93
  <syntax_highlighting>
94
94
  ```typescript
95
- import { highlightCode, getLanguageFromPath } from "@gsd/pi-coding-agent";
95
+ import { highlightCode, getLanguageFromPath } from "@mariozechner/pi-coding-agent";
96
96
 
97
97
  const lang = getLanguageFromPath("/path/to/file.rs"); // "rust"
98
98
  const highlighted = highlightCode(code, lang, theme);
@@ -5,7 +5,7 @@ Complete custom tools reference — registration, parameters, execution, output
5
5
  <registration>
6
6
  ```typescript
7
7
  import { Type } from "@sinclair/typebox";
8
- import { StringEnum } from "@gsd/pi-ai";
8
+ import { StringEnum } from "@mariozechner/pi-ai";
9
9
 
10
10
  pi.registerTool({
11
11
  name: "my_tool", // Unique identifier (snake_case)
@@ -60,7 +60,7 @@ pi.registerTool({
60
60
  **⚠️ MUST use `StringEnum` for string enum parameters:**
61
61
 
62
62
  ```typescript
63
- import { StringEnum } from "@gsd/pi-ai";
63
+ import { StringEnum } from "@mariozechner/pi-ai";
64
64
 
65
65
  // ✅ Correct — works with all providers including Google
66
66
  action: StringEnum(["list", "add", "remove"] as const)
@@ -77,7 +77,7 @@ Tools MUST truncate output to avoid context overflow. Built-in limit: 50KB / 200
77
77
  import {
78
78
  truncateHead, truncateTail, formatSize,
79
79
  DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES,
80
- } from "@gsd/pi-coding-agent";
80
+ } from "@mariozechner/pi-coding-agent";
81
81
 
82
82
  async execute(toolCallId, params, signal, onUpdate, ctx) {
83
83
  const output = await runCommand();
@@ -129,7 +129,7 @@ Use `pi.setActiveTools(names)` to enable/disable tools at runtime.
129
129
  Register a tool with the same name as a built-in (`read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`) to override it. **Must match exact result shape including `details` type.**
130
130
 
131
131
  ```typescript
132
- import { createReadTool } from "@gsd/pi-coding-agent";
132
+ import { createReadTool } from "@mariozechner/pi-coding-agent";
133
133
 
134
134
  pi.registerTool({
135
135
  name: "read",
@@ -277,7 +277,7 @@ bottom-left bottom-center bottom-right
277
277
  Replace the main input editor permanently:
278
278
 
279
279
  ```typescript
280
- import { CustomEditor } from "@gsd/pi-coding-agent";
280
+ import { CustomEditor } from "@mariozechner/pi-coding-agent";
281
281
 
282
282
  class VimEditor extends CustomEditor {
283
283
  private mode: "normal" | "insert" = "insert";
@@ -307,7 +307,7 @@ ctx.ui.setEditorComponent(undefined); // Restore default
307
307
  </custom_editor>
308
308
 
309
309
  <built_in_components>
310
- **From `@gsd/pi-tui`:**
310
+ **From `@mariozechner/pi-tui`:**
311
311
 
312
312
  | Component | Constructor | Purpose |
313
313
  |-----------|-------------|---------|
@@ -352,7 +352,7 @@ const settings = new SettingsList(items, 15, getSettingsListTheme(),
352
352
  );
353
353
  ```
354
354
 
355
- **From `@gsd/pi-coding-agent`:**
355
+ **From `@mariozechner/pi-coding-agent`:**
356
356
 
357
357
  | Component | Constructor | Purpose |
358
358
  |-----------|-------------|---------|
@@ -363,7 +363,7 @@ const settings = new SettingsList(items, 15, getSettingsListTheme(),
363
363
 
364
364
  <keyboard_input>
365
365
  ```typescript
366
- import { matchesKey, Key } from "@gsd/pi-tui";
366
+ import { matchesKey, Key } from "@mariozechner/pi-tui";
367
367
 
368
368
  handleInput(data: string) {
369
369
  // Basic keys
@@ -403,7 +403,7 @@ handleInput(data: string) {
403
403
  **Cardinal rule: each line from render() must not exceed `width` visible characters.**
404
404
 
405
405
  ```typescript
406
- import { visibleWidth, truncateToWidth, wrapTextWithAnsi } from "@gsd/pi-tui";
406
+ import { visibleWidth, truncateToWidth, wrapTextWithAnsi } from "@mariozechner/pi-tui";
407
407
 
408
408
  visibleWidth("\x1b[32mHello\x1b[0m"); // Returns 5 (ignores ANSI codes)
409
409
  truncateToWidth("Very long text here", 10); // "Very lo..."
@@ -470,7 +470,7 @@ Always use theme from callback params, never import directly.
470
470
 
471
471
  **Syntax highlighting:**
472
472
  ```typescript
473
- import { highlightCode, getLanguageFromPath } from "@gsd/pi-coding-agent";
473
+ import { highlightCode, getLanguageFromPath } from "@mariozechner/pi-coding-agent";
474
474
  const lang = getLanguageFromPath("/file.rs"); // "rust"
475
475
  const highlighted = highlightCode(code, lang, theme);
476
476
  ```
@@ -47,7 +47,7 @@ pi.on("before_agent_start", async (event, ctx) => {
47
47
 
48
48
  **tool_call** — Fired before tool executes. Can block.
49
49
  ```typescript
50
- import { isToolCallEventType } from "@gsd/pi-coding-agent";
50
+ import { isToolCallEventType } from "@mariozechner/pi-coding-agent";
51
51
 
52
52
  pi.on("tool_call", async (event, ctx) => {
53
53
  if (isToolCallEventType("bash", event)) {
@@ -61,7 +61,7 @@ pi.on("tool_call", async (event, ctx) => {
61
61
 
62
62
  **tool_result** — Fired after tool executes. Can modify result. Handlers chain like middleware.
63
63
  ```typescript
64
- import { isToolResultEventType } from "@gsd/pi-coding-agent";
64
+ import { isToolResultEventType } from "@mariozechner/pi-coding-agent";
65
65
 
66
66
  pi.on("tool_result", async (event, ctx) => {
67
67
  if (isToolResultEventType("bash", event)) {
@@ -105,7 +105,7 @@ pi.on("model_select", async (event, ctx) => {
105
105
  Built-in type guards for tool events:
106
106
 
107
107
  ```typescript
108
- import { isToolCallEventType, isToolResultEventType } from "@gsd/pi-coding-agent";
108
+ import { isToolCallEventType, isToolResultEventType } from "@mariozechner/pi-coding-agent";
109
109
 
110
110
  // Tool calls — narrows event.input type
111
111
  if (isToolCallEventType("bash", event)) { /* event.input: { command, timeout? } */ }
@@ -39,7 +39,7 @@ If no `pi` manifest exists, auto-discovers:
39
39
  </convention_directories>
40
40
 
41
41
  <dependencies>
42
- - List `@gsd/pi-ai`, `@gsd/pi-coding-agent`, `@gsd/pi-tui`, `@sinclair/typebox` in `peerDependencies` with `"*"` — they're bundled by the runtime.
42
+ - List `@mariozechner/pi-ai`, `@mariozechner/pi-coding-agent`, `@mariozechner/pi-tui`, `@sinclair/typebox` in `peerDependencies` with `"*"` — they're bundled by the runtime.
43
43
  - Other npm deps go in `dependencies`. The runtime runs `npm install` on package installation.
44
44
  </dependencies>
45
45
 
@@ -6,7 +6,7 @@ Remote execution via pluggable operations, spawnHook for bash, and tool override
6
6
  Built-in tools support pluggable operations for SSH, containers, etc.:
7
7
 
8
8
  ```typescript
9
- import { createReadTool, createBashTool, createWriteTool } from "@gsd/pi-coding-agent";
9
+ import { createReadTool, createBashTool, createWriteTool } from "@mariozechner/pi-coding-agent";
10
10
 
11
11
  // Create tool with custom remote operations
12
12
  const remoteBash = createBashTool(cwd, {
@@ -37,7 +37,7 @@ const bashTool = createBashTool(cwd, {
37
37
  Full SSH pattern with flag-based switching:
38
38
 
39
39
  ```typescript
40
- import { createBashTool, type ExtensionAPI } from "@gsd/pi-coding-agent";
40
+ import { createBashTool, type ExtensionAPI } from "@mariozechner/pi-coding-agent";
41
41
 
42
42
  export default function (pi: ExtensionAPI) {
43
43
  pi.registerFlag("ssh", { description: "SSH target", type: "string" });
@@ -65,7 +65,7 @@ export default function (pi: ExtensionAPI) {
65
65
  Override built-in tools for logging/access control — omit renderCall/renderResult to keep built-in rendering:
66
66
 
67
67
  ```typescript
68
- import { createReadTool } from "@gsd/pi-coding-agent";
68
+ import { createReadTool } from "@mariozechner/pi-coding-agent";
69
69
  import { Type } from "@sinclair/typebox";
70
70
 
71
71
  pi.registerTool({
@@ -5,9 +5,9 @@
5
5
  * {{CAPABILITIES_LIST}}
6
6
  */
7
7
 
8
- import type { ExtensionAPI } from "@gsd/pi-coding-agent";
8
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
9
9
  import { Type } from "@sinclair/typebox";
10
- import { StringEnum } from "@gsd/pi-ai";
10
+ import { StringEnum } from "@mariozechner/pi-ai";
11
11
 
12
12
  export default function (pi: ExtensionAPI) {
13
13
  // === Events ===
@@ -4,10 +4,10 @@
4
4
  * State is stored in tool result details for proper branching support.
5
5
  */
6
6
 
7
- import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
7
+ import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
8
8
  import { Type } from "@sinclair/typebox";
9
- import { StringEnum } from "@gsd/pi-ai";
10
- import { Text, truncateToWidth, matchesKey, Key } from "@gsd/pi-tui";
9
+ import { StringEnum } from "@mariozechner/pi-ai";
10
+ import { Text, truncateToWidth, matchesKey, Key } from "@mariozechner/pi-tui";
11
11
 
12
12
  interface {{ItemType}} {
13
13
  id: number;