gsd-pi 2.78.0 → 2.78.1-dev.9d08d820b

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 (548) hide show
  1. package/README.md +59 -23
  2. package/dist/bundled-resource-path.d.ts +7 -0
  3. package/dist/bundled-resource-path.js +34 -2
  4. package/dist/claude-cli-check.js +104 -33
  5. package/dist/cli-policy.d.ts +13 -0
  6. package/dist/cli-policy.js +17 -0
  7. package/dist/cli.js +95 -55
  8. package/dist/headless-query.d.ts +22 -0
  9. package/dist/headless-query.js +43 -8
  10. package/dist/headless.d.ts +10 -0
  11. package/dist/headless.js +16 -1
  12. package/dist/loader.js +9 -13
  13. package/dist/onboarding.d.ts +10 -0
  14. package/dist/onboarding.js +2 -2
  15. package/dist/provider-migrations.d.ts +2 -2
  16. package/dist/provider-migrations.js +5 -2
  17. package/dist/resource-loader.d.ts +5 -2
  18. package/dist/resource-loader.js +30 -13
  19. package/dist/resources/.managed-resources-content-hash +1 -0
  20. package/dist/resources/extensions/claude-code-cli/readiness.js +128 -32
  21. package/dist/resources/extensions/gsd/auto/loop.js +23 -0
  22. package/dist/resources/extensions/gsd/auto/phases.js +5 -13
  23. package/dist/resources/extensions/gsd/auto/run-unit.js +3 -1
  24. package/dist/resources/extensions/gsd/auto/session.js +5 -6
  25. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -2
  26. package/dist/resources/extensions/gsd/auto-dispatch.js +18 -6
  27. package/dist/resources/extensions/gsd/auto-prompts.js +63 -2
  28. package/dist/resources/extensions/gsd/auto-recovery.js +43 -4
  29. package/dist/resources/extensions/gsd/auto-runtime-state.js +31 -0
  30. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  31. package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
  32. package/dist/resources/extensions/gsd/auto-worktree.js +60 -13
  33. package/dist/resources/extensions/gsd/auto.js +14 -5
  34. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +14 -2
  35. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +7 -5
  36. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  37. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -4
  38. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +100 -31
  39. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +11 -6
  40. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +22 -0
  41. package/dist/resources/extensions/gsd/bootstrap/system-context.js +34 -8
  42. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +121 -3
  43. package/dist/resources/extensions/gsd/commands/catalog.js +69 -5
  44. package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -1
  45. package/dist/resources/extensions/gsd/commands-config.js +3 -2
  46. package/dist/resources/extensions/gsd/commands-extensions.js +46 -3
  47. package/dist/resources/extensions/gsd/commands-handlers.js +3 -2
  48. package/dist/resources/extensions/gsd/commands-mcp-status.js +3 -1
  49. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -1
  50. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  51. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  52. package/dist/resources/extensions/gsd/doctor-providers.js +2 -1
  53. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +39 -1
  54. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  55. package/dist/resources/extensions/gsd/forensics.js +10 -8
  56. package/dist/resources/extensions/gsd/git-service.js +12 -5
  57. package/dist/resources/extensions/gsd/gsd-db.js +11 -2
  58. package/dist/resources/extensions/gsd/guided-flow.js +25 -24
  59. package/dist/resources/extensions/gsd/home-dir.js +16 -0
  60. package/dist/resources/extensions/gsd/key-manager.js +2 -1
  61. package/dist/resources/extensions/gsd/memory-store.js +66 -31
  62. package/dist/resources/extensions/gsd/migrate/command.js +3 -2
  63. package/dist/resources/extensions/gsd/milestone-id-reservation.js +36 -0
  64. package/dist/resources/extensions/gsd/model-router.js +114 -9
  65. package/dist/resources/extensions/gsd/native-git-bridge.js +7 -1
  66. package/dist/resources/extensions/gsd/preferences-models.js +91 -15
  67. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  68. package/dist/resources/extensions/gsd/preferences-validation.js +32 -0
  69. package/dist/resources/extensions/gsd/preferences.js +5 -3
  70. package/dist/resources/extensions/gsd/prompt-loader.js +23 -12
  71. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
  72. package/dist/resources/extensions/gsd/prompts/complete-slice.md +10 -0
  73. package/dist/resources/extensions/gsd/prompts/plan-slice.md +10 -0
  74. package/dist/resources/extensions/gsd/prompts/refine-slice.md +10 -0
  75. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +9 -3
  76. package/dist/resources/extensions/gsd/state.js +42 -0
  77. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  78. package/dist/resources/extensions/gsd/tools/memory-tools.js +18 -1
  79. package/dist/resources/extensions/gsd/unit-context-manifest.js +29 -4
  80. package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
  81. package/dist/resources/extensions/gsd/watch/header-renderer.js +3 -1
  82. package/dist/resources/extensions/gsd/worktree-command.js +26 -46
  83. package/dist/resources/extensions/gsd/worktree-manager.js +20 -1
  84. package/dist/resources/extensions/gsd/worktree-resolver.js +4 -13
  85. package/dist/resources/extensions/gsd/worktree-root.js +124 -0
  86. package/dist/resources/extensions/gsd/worktree-session-state.js +33 -0
  87. package/dist/resources/extensions/gsd/worktree.js +4 -115
  88. package/dist/resources/extensions/mcp-client/index.js +6 -3
  89. package/dist/resources/extensions/ollama/index.js +15 -2
  90. package/dist/resources/extensions/ollama/model-capabilities.js +31 -0
  91. package/dist/resources/extensions/ollama/ollama-client.js +40 -4
  92. package/dist/resources/extensions/slash-commands/create-extension.js +36 -22
  93. package/dist/resources/extensions/subagent/index.js +324 -178
  94. package/dist/resources/skills/create-gsd-extension/SKILL.md +9 -5
  95. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  96. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  97. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  98. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  99. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  100. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  101. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
  103. package/dist/rtk-shared.d.ts +3 -0
  104. package/dist/rtk-shared.js +17 -0
  105. package/dist/rtk.d.ts +2 -5
  106. package/dist/rtk.js +3 -20
  107. package/dist/runtime-checks.d.ts +27 -0
  108. package/dist/runtime-checks.js +38 -0
  109. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  110. package/dist/web/standalone/.next/BUILD_ID +1 -1
  111. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  112. package/dist/web/standalone/.next/build-manifest.json +4 -4
  113. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  114. package/dist/web/standalone/.next/react-loadable-manifest.json +44 -4
  115. package/dist/web/standalone/.next/required-server-files.json +3 -3
  116. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  117. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  127. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  130. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  131. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  133. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  143. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  155. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  175. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  185. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/session/events/route.js +4 -2
  191. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  205. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  207. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  209. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  211. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/index.html +1 -1
  221. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  222. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  223. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  224. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  225. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  226. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  227. package/dist/web/standalone/.next/server/app/page.js +2 -2
  228. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  229. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  230. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  231. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  232. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  234. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  235. package/dist/web/standalone/.next/server/middleware.js +2 -2
  236. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  237. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  238. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  239. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  240. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  241. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  242. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +1 -0
  244. package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +10 -0
  249. package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +2 -0
  250. package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +20 -0
  251. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +1 -0
  252. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  253. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  254. package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +1 -0
  258. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  259. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  260. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  261. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  262. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  263. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  264. package/dist/web/standalone/package.json +2 -1
  265. package/dist/web/standalone/server.js +1 -1
  266. package/dist/worktree-cli.d.ts +1 -0
  267. package/dist/worktree-cli.js +9 -3
  268. package/dist/worktree-status-banner.d.ts +1 -0
  269. package/dist/worktree-status-banner.js +132 -0
  270. package/package.json +1 -3
  271. package/packages/daemon/package.json +2 -2
  272. package/packages/mcp-server/dist/alias-telemetry.d.ts +8 -0
  273. package/packages/mcp-server/dist/alias-telemetry.d.ts.map +1 -0
  274. package/packages/mcp-server/dist/alias-telemetry.js +30 -0
  275. package/packages/mcp-server/dist/alias-telemetry.js.map +1 -0
  276. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  277. package/packages/mcp-server/dist/workflow-tools.js +74 -46
  278. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  279. package/packages/mcp-server/package.json +2 -2
  280. package/packages/mcp-server/src/alias-telemetry.test.ts +78 -0
  281. package/packages/mcp-server/src/alias-telemetry.ts +30 -0
  282. package/packages/mcp-server/src/workflow-tools.test.ts +78 -0
  283. package/packages/mcp-server/src/workflow-tools.ts +93 -58
  284. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  285. package/packages/native/package.json +1 -1
  286. package/packages/native/tsconfig.tsbuildinfo +1 -1
  287. package/packages/pi-agent-core/package.json +1 -1
  288. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  289. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +2 -0
  290. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +1 -0
  291. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +231 -0
  292. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +1 -0
  293. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  294. package/packages/pi-ai/dist/providers/anthropic-shared.js +48 -19
  295. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  296. package/packages/pi-ai/dist/types.d.ts +13 -0
  297. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  298. package/packages/pi-ai/dist/types.js.map +1 -1
  299. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
  300. package/packages/pi-ai/dist/utils/repair-tool-json.js +24 -3
  301. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
  302. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +26 -0
  303. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
  304. package/packages/pi-ai/package.json +1 -1
  305. package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +289 -0
  306. package/packages/pi-ai/src/providers/anthropic-shared.ts +52 -20
  307. package/packages/pi-ai/src/types.ts +13 -0
  308. package/packages/pi-ai/src/utils/repair-tool-json.ts +24 -3
  309. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +32 -0
  310. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  311. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/agent-session.js +6 -0
  313. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  315. package/packages/pi-coding-agent/dist/core/messages.js +4 -0
  316. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  317. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
  318. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  319. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +10 -0
  320. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  321. package/packages/pi-coding-agent/dist/core/model-registry.js +18 -0
  322. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  323. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +13 -0
  324. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  325. package/packages/pi-coding-agent/dist/core/system-prompt.js +20 -16
  326. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  327. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +37 -0
  328. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +1 -0
  329. package/packages/pi-coding-agent/dist/core/token-telemetry.js +49 -0
  330. package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +1 -0
  331. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +2 -0
  332. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +1 -0
  333. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +133 -0
  334. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -0
  335. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  337. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -1
  338. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  339. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +2 -0
  340. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +1 -0
  341. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +78 -0
  342. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +1 -0
  343. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +2 -0
  344. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +1 -0
  345. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +181 -0
  346. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +1 -0
  347. package/packages/pi-coding-agent/package.json +1 -1
  348. package/packages/pi-coding-agent/src/core/agent-session.ts +7 -0
  349. package/packages/pi-coding-agent/src/core/messages.ts +4 -0
  350. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +32 -2
  351. package/packages/pi-coding-agent/src/core/model-registry.ts +21 -0
  352. package/packages/pi-coding-agent/src/core/system-prompt.ts +33 -15
  353. package/packages/pi-coding-agent/src/core/token-telemetry.ts +77 -0
  354. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +212 -0
  355. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +17 -1
  356. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
  357. package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +102 -0
  358. package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +200 -0
  359. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  360. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +17 -3
  361. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  362. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +2 -0
  363. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +1 -0
  364. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +161 -0
  365. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +1 -0
  366. package/packages/pi-tui/package.json +1 -1
  367. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -3
  368. package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +219 -0
  369. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  370. package/packages/rpc-client/package.json +1 -1
  371. package/pkg/package.json +1 -1
  372. package/src/resources/extensions/claude-code-cli/readiness.ts +130 -30
  373. package/src/resources/extensions/gsd/auto/loop.ts +24 -2
  374. package/src/resources/extensions/gsd/auto/phases.ts +6 -14
  375. package/src/resources/extensions/gsd/auto/run-unit.ts +3 -1
  376. package/src/resources/extensions/gsd/auto/session.ts +5 -6
  377. package/src/resources/extensions/gsd/auto/types.ts +1 -0
  378. package/src/resources/extensions/gsd/auto-dashboard.ts +3 -2
  379. package/src/resources/extensions/gsd/auto-dispatch.ts +18 -6
  380. package/src/resources/extensions/gsd/auto-prompts.ts +60 -2
  381. package/src/resources/extensions/gsd/auto-recovery.ts +46 -8
  382. package/src/resources/extensions/gsd/auto-runtime-state.ts +51 -0
  383. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  384. package/src/resources/extensions/gsd/auto-tool-tracking.ts +2 -4
  385. package/src/resources/extensions/gsd/auto-worktree.ts +82 -12
  386. package/src/resources/extensions/gsd/auto.ts +14 -4
  387. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +15 -13
  388. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +8 -7
  389. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  390. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +10 -9
  391. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +108 -31
  392. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +12 -6
  393. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +20 -0
  394. package/src/resources/extensions/gsd/bootstrap/system-context.ts +39 -8
  395. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +141 -11
  396. package/src/resources/extensions/gsd/commands/catalog.ts +75 -5
  397. package/src/resources/extensions/gsd/commands/handlers/core.ts +22 -1
  398. package/src/resources/extensions/gsd/commands-config.ts +3 -2
  399. package/src/resources/extensions/gsd/commands-extensions.ts +43 -3
  400. package/src/resources/extensions/gsd/commands-handlers.ts +3 -2
  401. package/src/resources/extensions/gsd/commands-mcp-status.ts +3 -1
  402. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +15 -1
  403. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  404. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  405. package/src/resources/extensions/gsd/doctor-providers.ts +2 -1
  406. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +39 -1
  407. package/src/resources/extensions/gsd/doctor-types.ts +3 -1
  408. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  409. package/src/resources/extensions/gsd/forensics.ts +12 -7
  410. package/src/resources/extensions/gsd/git-service.ts +13 -5
  411. package/src/resources/extensions/gsd/gsd-db.ts +12 -2
  412. package/src/resources/extensions/gsd/guided-flow.ts +27 -26
  413. package/src/resources/extensions/gsd/home-dir.ts +19 -0
  414. package/src/resources/extensions/gsd/journal.ts +4 -1
  415. package/src/resources/extensions/gsd/key-manager.ts +2 -1
  416. package/src/resources/extensions/gsd/memory-store.ts +81 -28
  417. package/src/resources/extensions/gsd/migrate/command.ts +3 -2
  418. package/src/resources/extensions/gsd/milestone-id-reservation.ts +47 -0
  419. package/src/resources/extensions/gsd/model-router.ts +172 -9
  420. package/src/resources/extensions/gsd/native-git-bridge.ts +7 -1
  421. package/src/resources/extensions/gsd/preferences-models.ts +101 -15
  422. package/src/resources/extensions/gsd/preferences-types.ts +6 -0
  423. package/src/resources/extensions/gsd/preferences-validation.ts +35 -0
  424. package/src/resources/extensions/gsd/preferences.ts +16 -2
  425. package/src/resources/extensions/gsd/prompt-loader.ts +26 -12
  426. package/src/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
  427. package/src/resources/extensions/gsd/prompts/complete-slice.md +10 -0
  428. package/src/resources/extensions/gsd/prompts/plan-slice.md +10 -0
  429. package/src/resources/extensions/gsd/prompts/refine-slice.md +10 -0
  430. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +9 -3
  431. package/src/resources/extensions/gsd/state.ts +42 -0
  432. package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  433. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +178 -1
  434. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +58 -0
  435. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +24 -5
  436. package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +21 -4
  437. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
  438. package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +138 -211
  439. package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +58 -0
  440. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +142 -59
  441. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -4
  442. package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +89 -32
  443. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +41 -23
  444. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +3 -43
  445. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +5 -3
  446. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +116 -0
  447. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +22 -87
  448. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +7 -118
  449. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +18 -60
  450. package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +100 -0
  451. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +14 -76
  452. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +93 -0
  453. package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +22 -83
  454. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +1 -63
  455. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +47 -0
  456. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +26 -1
  457. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +63 -0
  458. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +30 -0
  459. package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +81 -0
  460. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +14 -4
  461. package/src/resources/extensions/gsd/tests/health-widget.test.ts +22 -12
  462. package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +57 -0
  463. package/src/resources/extensions/gsd/tests/home-dir.test.ts +52 -0
  464. package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +145 -0
  465. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +64 -1
  466. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +72 -1
  467. package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +0 -23
  468. package/src/resources/extensions/gsd/tests/memory-store.test.ts +128 -0
  469. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +33 -1
  470. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +124 -0
  471. package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +152 -0
  472. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +18 -1
  473. package/src/resources/extensions/gsd/tests/model-router.test.ts +169 -8
  474. package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +50 -0
  475. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +8 -0
  476. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +32 -43
  477. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +4 -10
  478. package/src/resources/extensions/gsd/tests/preferences.test.ts +127 -0
  479. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -0
  480. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +7 -0
  481. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
  482. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +93 -0
  483. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +168 -19
  484. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +7 -1
  485. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +23 -1
  486. package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +17 -1
  487. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +101 -0
  488. package/src/resources/extensions/gsd/tests/token-profile.test.ts +51 -4
  489. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +7 -16
  490. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +38 -3
  491. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -7
  492. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +15 -1
  493. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
  494. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +34 -33
  495. package/src/resources/extensions/gsd/tests/worktree.test.ts +8 -0
  496. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +131 -1
  497. package/src/resources/extensions/gsd/tools/memory-tools.ts +17 -1
  498. package/src/resources/extensions/gsd/unit-context-manifest.ts +44 -12
  499. package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
  500. package/src/resources/extensions/gsd/watch/header-renderer.ts +3 -1
  501. package/src/resources/extensions/gsd/workflow-logger.ts +1 -0
  502. package/src/resources/extensions/gsd/worktree-command.ts +31 -44
  503. package/src/resources/extensions/gsd/worktree-manager.ts +40 -1
  504. package/src/resources/extensions/gsd/worktree-resolver.ts +4 -14
  505. package/src/resources/extensions/gsd/worktree-root.ts +144 -0
  506. package/src/resources/extensions/gsd/worktree-session-state.ts +35 -0
  507. package/src/resources/extensions/gsd/worktree.ts +8 -119
  508. package/src/resources/extensions/mcp-client/index.ts +6 -3
  509. package/src/resources/extensions/mcp-client/tests/global-config.test.ts +91 -0
  510. package/src/resources/extensions/ollama/index.ts +16 -2
  511. package/src/resources/extensions/ollama/model-capabilities.ts +34 -0
  512. package/src/resources/extensions/ollama/ollama-client.ts +41 -4
  513. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +96 -0
  514. package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +147 -0
  515. package/src/resources/extensions/slash-commands/create-extension.ts +38 -24
  516. package/src/resources/extensions/subagent/index.ts +165 -7
  517. package/src/resources/skills/create-gsd-extension/SKILL.md +9 -5
  518. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  519. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  520. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  521. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  522. package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  523. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  524. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  525. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
  526. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
  527. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +58 -0
  528. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
  529. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +0 -601
  530. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +0 -651
  531. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +0 -91
  532. package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +0 -53
  533. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +0 -112
  534. package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +0 -23
  535. package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +0 -5
  536. package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
  537. package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +0 -608
  538. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +0 -11
  539. package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +0 -20
  540. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
  541. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  542. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  543. package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +0 -1
  544. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +0 -22
  545. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +0 -47
  546. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -75
  547. /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → -Ukk6_YxRd4GY4iUOnRUE}/_buildManifest.js +0 -0
  548. /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → -Ukk6_YxRd4GY4iUOnRUE}/_ssgManifest.js +0 -0
@@ -36,6 +36,7 @@ import {
36
36
  } from "./isolation.js";
37
37
  import { registerWorker, updateWorker } from "./worker-registry.js";
38
38
  import { loadEffectiveGSDPreferences } from "../gsd/preferences.js";
39
+ import { emitJournalEvent } from "../gsd/journal.js";
39
40
  import { CmuxClient, shellEscape } from "../cmux/index.js";
40
41
 
41
42
  const MAX_PARALLEL_TASKS = 8;
@@ -662,11 +663,13 @@ export default function (pi: ExtensionAPI) {
662
663
  "Use chain mode to pipeline: scout finds context, planner designs, worker implements.",
663
664
  ].join(" "),
664
665
  promptGuidelines: [
665
- "Use subagent to delegate self-contained tasks that benefit from an isolated context window.",
666
- "Use scout agent first when you need codebase context before implementing.",
667
- "Use chain mode for scout→planner→worker or worker→reviewer→worker pipelines.",
668
- "Use parallel mode when tasks are independent and don't need each other's output.",
669
- "Always check available agents with /subagent before choosing one.",
666
+ "Prefer subagent dispatch over inline work whenever a task is self-contained recon, planning, review, refactor, test writing, security audit, doc writing. Each dispatch gets a fresh context window, so your main session stays focused on synthesis.",
667
+ "Before reading more than ~3 files to understand something, dispatch the scout agent and work from its compressed report instead.",
668
+ "Before any change touching ≥2 packages, the orchestration kernel, auto-mode, or a public API, dispatch the planner agent first. Plan first, then implement.",
669
+ "You MUST use parallel mode when ≥2 ready tasks are independent of each other's output. Do not serialize independent tasks manually — that wastes wall time and context.",
670
+ "Use chain mode for sequential pipelines where each step's output feeds the next: scout → planner → worker, or worker → reviewer → worker.",
671
+ "Before opening a PR or marking a slice complete, dispatch the reviewer agent (and security agent if the change touches auth, network, parsing, file IO, or shell exec).",
672
+ "Always check available agents with /subagent before choosing one — there are bundled specialists plus any project-scoped agents.",
670
673
  ],
671
674
  parameters: SubagentParams,
672
675
 
@@ -709,6 +712,141 @@ export default function (pi: ExtensionAPI) {
709
712
  };
710
713
  }
711
714
 
715
+ // Dispatch telemetry — emit invoked once per dispatch and completed before each return.
716
+ // Fresh flowId per dispatch (subagent runs aren't currently plumbed with the parent
717
+ // auto-mode flowId; per-dispatch ids still let us measure frequency, batch size, mode).
718
+ const dispatchMode: "single" | "parallel" | "chain" = hasChain ? "chain" : hasTasks ? "parallel" : "single";
719
+ const dispatchAgents = hasChain
720
+ ? params.chain!.map((s) => s.agent)
721
+ : hasTasks
722
+ ? params.tasks!.map((t) => t.agent)
723
+ : params.agent
724
+ ? [params.agent]
725
+ : [];
726
+ const dispatchTasks = hasChain
727
+ ? params.chain!.map((s) => s.task)
728
+ : hasTasks
729
+ ? params.tasks!.map((t) => t.task)
730
+ : params.task
731
+ ? [params.task]
732
+ : [];
733
+ const dispatchId = crypto.randomUUID();
734
+ const dispatchStartMs = Date.now();
735
+ let finalResults: SingleResult[] = [];
736
+ let dispatchCompletedEmitted = false;
737
+
738
+ emitJournalEvent(ctx.cwd, {
739
+ ts: new Date().toISOString(),
740
+ flowId: dispatchId,
741
+ seq: 0,
742
+ eventType: "subagent-invoked",
743
+ data: {
744
+ dispatchId,
745
+ mode: dispatchMode,
746
+ agents: dispatchAgents,
747
+ batchSize: dispatchAgents.length,
748
+ unitType: getCurrentPhase() ?? null,
749
+ isolated: useIsolation,
750
+ },
751
+ });
752
+
753
+ const zeroUsage = (): UsageStats => ({
754
+ input: 0,
755
+ output: 0,
756
+ cacheRead: 0,
757
+ cacheWrite: 0,
758
+ cost: 0,
759
+ contextTokens: 0,
760
+ turns: 0,
761
+ });
762
+ const errorMessageFor = (err: unknown): string =>
763
+ err instanceof Error ? err.message : String(err || "subagent dispatch failed");
764
+ const makeFailureResult = (err: unknown, agent: string, task: string, step?: number): SingleResult => {
765
+ const message = errorMessageFor(err);
766
+ return {
767
+ agent,
768
+ agentSource: "unknown",
769
+ task,
770
+ exitCode: 1,
771
+ messages: [],
772
+ stderr: message,
773
+ usage: zeroUsage(),
774
+ stopReason: signal?.aborted ? "aborted" : "error",
775
+ errorMessage: message,
776
+ ...(step !== undefined ? { step } : {}),
777
+ };
778
+ };
779
+ const synthesizeFailureResults = (err: unknown): SingleResult[] => {
780
+ if (finalResults.length > 0) {
781
+ let patchedRunning = false;
782
+ const patched = finalResults.map((result) => {
783
+ if (result.exitCode !== -1) return result;
784
+ patchedRunning = true;
785
+ const message = errorMessageFor(err);
786
+ return {
787
+ ...result,
788
+ exitCode: 1,
789
+ stderr: result.stderr || message,
790
+ stopReason: signal?.aborted ? "aborted" : "error",
791
+ errorMessage: result.errorMessage || message,
792
+ usage: result.usage ?? zeroUsage(),
793
+ };
794
+ });
795
+ if (patchedRunning || patched.some((result) => result.exitCode !== 0)) return patched;
796
+
797
+ const nextIndex = finalResults.length < dispatchAgents.length ? finalResults.length : 0;
798
+ if (nextIndex > 0) {
799
+ return [
800
+ ...finalResults,
801
+ makeFailureResult(
802
+ err,
803
+ dispatchAgents[nextIndex] ?? "unknown",
804
+ dispatchTasks[nextIndex] ?? "",
805
+ dispatchMode === "chain" ? nextIndex + 1 : undefined,
806
+ ),
807
+ ];
808
+ }
809
+ }
810
+
811
+ const agentsForFailure = dispatchAgents.length > 0 ? dispatchAgents : ["unknown"];
812
+ return agentsForFailure.map((agent, index) =>
813
+ makeFailureResult(
814
+ err,
815
+ agent,
816
+ dispatchTasks[index] ?? "",
817
+ dispatchMode === "chain" ? index + 1 : undefined,
818
+ ),
819
+ );
820
+ };
821
+ const finishDispatch = (results: SingleResult[]): void => {
822
+ if (dispatchCompletedEmitted) return;
823
+ finalResults = results;
824
+ dispatchCompletedEmitted = true;
825
+ const successCount = results.filter((r) => r.exitCode === 0).length;
826
+ const failureCount = results.filter((r) => r.exitCode !== 0).length;
827
+ const totalCost = results.reduce((s, r) => s + (r.usage?.cost ?? 0), 0);
828
+ const totalInputTokens = results.reduce((s, r) => s + (r.usage?.input ?? 0), 0);
829
+ const totalOutputTokens = results.reduce((s, r) => s + (r.usage?.output ?? 0), 0);
830
+ emitJournalEvent(ctx.cwd, {
831
+ ts: new Date().toISOString(),
832
+ flowId: dispatchId,
833
+ seq: 1,
834
+ eventType: "subagent-completed",
835
+ data: {
836
+ dispatchId,
837
+ mode: dispatchMode,
838
+ agents: dispatchAgents,
839
+ successCount,
840
+ failureCount,
841
+ totalCost,
842
+ totalInputTokens,
843
+ totalOutputTokens,
844
+ wallTimeMs: Date.now() - dispatchStartMs,
845
+ },
846
+ });
847
+ };
848
+
849
+ try {
712
850
  if ((agentScope === "project" || agentScope === "both") && confirmProjectAgents && ctx.hasUI) {
713
851
  const requestedAgentNames = new Set<string>();
714
852
  if (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);
@@ -726,16 +864,19 @@ export default function (pi: ExtensionAPI) {
726
864
  "Run project-local agents?",
727
865
  `Agents: ${names}\nSource: ${dir}\n\nProject agents are repo-controlled. Only continue for trusted repositories.`,
728
866
  );
729
- if (!ok)
867
+ if (!ok) {
868
+ finishDispatch([]);
730
869
  return {
731
870
  content: [{ type: "text", text: "Canceled: project-local agents not approved." }],
732
871
  details: makeDetails(hasChain ? "chain" : hasTasks ? "parallel" : "single")([]),
733
872
  };
873
+ }
734
874
  }
735
875
  }
736
876
 
737
877
  if (params.chain && params.chain.length > 0) {
738
878
  const results: SingleResult[] = [];
879
+ finalResults = results;
739
880
  let previousOutput = "";
740
881
 
741
882
  for (let i = 0; i < params.chain.length; i++) {
@@ -775,6 +916,7 @@ export default function (pi: ExtensionAPI) {
775
916
  if (isError) {
776
917
  const errorMsg =
777
918
  result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
919
+ finishDispatch(results);
778
920
  return {
779
921
  content: [{ type: "text", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],
780
922
  details: makeDetails("chain")(results),
@@ -783,6 +925,7 @@ export default function (pi: ExtensionAPI) {
783
925
  }
784
926
  previousOutput = getFinalOutput(result.messages);
785
927
  }
928
+ finishDispatch(results);
786
929
  return {
787
930
  content: [{ type: "text", text: getFinalOutput(results[results.length - 1].messages) || "(no output)" }],
788
931
  details: makeDetails("chain")(results),
@@ -790,7 +933,8 @@ export default function (pi: ExtensionAPI) {
790
933
  }
791
934
 
792
935
  if (params.tasks && params.tasks.length > 0) {
793
- if (params.tasks.length > MAX_PARALLEL_TASKS)
936
+ if (params.tasks.length > MAX_PARALLEL_TASKS) {
937
+ finishDispatch([]);
794
938
  return {
795
939
  content: [
796
940
  {
@@ -800,6 +944,7 @@ export default function (pi: ExtensionAPI) {
800
944
  ],
801
945
  details: makeDetails("parallel")([]),
802
946
  };
947
+ }
803
948
 
804
949
  // Track all results for streaming updates
805
950
  const allResults: SingleResult[] = new Array(params.tasks.length);
@@ -816,6 +961,7 @@ export default function (pi: ExtensionAPI) {
816
961
  usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },
817
962
  };
818
963
  }
964
+ finalResults = allResults;
819
965
 
820
966
  const emitParallelUpdate = () => {
821
967
  if (onUpdate) {
@@ -887,6 +1033,7 @@ export default function (pi: ExtensionAPI) {
887
1033
  emitParallelUpdate();
888
1034
  return result;
889
1035
  });
1036
+ finalResults = results;
890
1037
 
891
1038
  const successCount = results.filter((r) => r.exitCode === 0).length;
892
1039
  const summaries = results.map((r) => {
@@ -896,6 +1043,7 @@ export default function (pi: ExtensionAPI) {
896
1043
  : getFinalOutput(r.messages);
897
1044
  return `[${r.agent}] ${r.exitCode === 0 ? "completed" : `failed (exit ${r.exitCode})`}: ${output || "(no output)"}`;
898
1045
  });
1046
+ finishDispatch(results);
899
1047
  return {
900
1048
  content: [
901
1049
  {
@@ -943,6 +1091,7 @@ export default function (pi: ExtensionAPI) {
943
1091
  onUpdate,
944
1092
  makeDetails("single"),
945
1093
  );
1094
+ finalResults = [result];
946
1095
 
947
1096
  // Capture and merge delta if isolated
948
1097
  if (isolation) {
@@ -956,6 +1105,7 @@ export default function (pi: ExtensionAPI) {
956
1105
  if (isError) {
957
1106
  const errorMsg =
958
1107
  result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
1108
+ finishDispatch([result]);
959
1109
  return {
960
1110
  content: [{ type: "text", text: `Agent ${result.stopReason || "failed"}: ${errorMsg}` }],
961
1111
  details: makeDetails("single")([result]),
@@ -967,6 +1117,7 @@ export default function (pi: ExtensionAPI) {
967
1117
  if (mergeResult && !mergeResult.success) {
968
1118
  outputText += `\n\n⚠ Patch merge failed: ${mergeResult.error || "unknown error"}`;
969
1119
  }
1120
+ finishDispatch([result]);
970
1121
  return {
971
1122
  content: [{ type: "text", text: outputText }],
972
1123
  details: makeDetails("single")([result]),
@@ -978,11 +1129,18 @@ export default function (pi: ExtensionAPI) {
978
1129
  }
979
1130
  }
980
1131
 
1132
+ finishDispatch([]);
981
1133
  const available = agents.map((a) => `${a.name} (${a.source})`).join(", ") || "none";
982
1134
  return {
983
1135
  content: [{ type: "text", text: `Invalid parameters. Available agents: ${available}` }],
984
1136
  details: makeDetails("single")([]),
985
1137
  };
1138
+ } catch (err) {
1139
+ if (!dispatchCompletedEmitted) finalResults = synthesizeFailureResults(err);
1140
+ throw err;
1141
+ } finally {
1142
+ finishDispatch(finalResults);
1143
+ }
986
1144
  },
987
1145
 
988
1146
  renderCall(args, theme) {
@@ -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 `@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`)
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`)
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
- | `@mariozechner/pi-coding-agent` | `ExtensionAPI`, `ExtensionContext`, `Theme`, event types, tool utilities, `DynamicBorder`, `BorderedLoader`, `CustomEditor`, `highlightCode` |
37
+ | `@gsd/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
- | `@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` |
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` |
41
41
  | Node.js built-ins | `node:fs`, `node:path`, `node:child_process`, etc. |
42
42
 
43
43
  </essential_principles>
@@ -65,6 +65,9 @@ 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
68
71
  **Gotchas:** key-rules-gotchas.md
69
72
  </reference_index>
70
73
 
@@ -78,6 +81,7 @@ All domain knowledge in `references/`:
78
81
 
79
82
  <success_criteria>
80
83
  Extension is complete when:
84
+ - `extension-manifest.json` exists with accurate `provides` listing all registered tools/commands/hooks/shortcuts
81
85
  - TypeScript compiles without errors (jiti handles this at runtime)
82
86
  - Extension loads on GSD startup or `/reload` without errors
83
87
  - 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 "@mariozechner/pi-tui";
22
+ import type { AutocompleteItem } from "@gsd/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 "@mariozechner/pi-tui";
10
- import { keyHint } from "@mariozechner/pi-coding-agent";
9
+ import { Text } from "@gsd/pi-tui";
10
+ import { keyHint } from "@gsd/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 "@mariozechner/pi-coding-agent";
57
+ import { keyHint, appKeyHint, editorKey, rawKeyHint } from "@gsd/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 "@mariozechner/pi-tui";
72
+ import { Text } from "@gsd/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 "@mariozechner/pi-coding-agent";
95
+ import { highlightCode, getLanguageFromPath } from "@gsd/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 "@mariozechner/pi-ai";
8
+ import { StringEnum } from "@gsd/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 "@mariozechner/pi-ai";
63
+ import { StringEnum } from "@gsd/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 "@mariozechner/pi-coding-agent";
80
+ } from "@gsd/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 "@mariozechner/pi-coding-agent";
132
+ import { createReadTool } from "@gsd/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 "@mariozechner/pi-coding-agent";
280
+ import { CustomEditor } from "@gsd/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 `@mariozechner/pi-tui`:**
310
+ **From `@gsd/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 `@mariozechner/pi-coding-agent`:**
355
+ **From `@gsd/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 "@mariozechner/pi-tui";
366
+ import { matchesKey, Key } from "@gsd/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 "@mariozechner/pi-tui";
406
+ import { visibleWidth, truncateToWidth, wrapTextWithAnsi } from "@gsd/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 "@mariozechner/pi-coding-agent";
473
+ import { highlightCode, getLanguageFromPath } from "@gsd/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 "@mariozechner/pi-coding-agent";
50
+ import { isToolCallEventType } from "@gsd/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 "@mariozechner/pi-coding-agent";
64
+ import { isToolResultEventType } from "@gsd/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 "@mariozechner/pi-coding-agent";
108
+ import { isToolCallEventType, isToolResultEventType } from "@gsd/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 `@mariozechner/pi-ai`, `@mariozechner/pi-coding-agent`, `@mariozechner/pi-tui`, `@sinclair/typebox` in `peerDependencies` with `"*"` — they're bundled by the runtime.
42
+ - List `@gsd/pi-ai`, `@gsd/pi-coding-agent`, `@gsd/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 "@mariozechner/pi-coding-agent";
9
+ import { createReadTool, createBashTool, createWriteTool } from "@gsd/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 "@mariozechner/pi-coding-agent";
40
+ import { createBashTool, type ExtensionAPI } from "@gsd/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 "@mariozechner/pi-coding-agent";
68
+ import { createReadTool } from "@gsd/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 "@mariozechner/pi-coding-agent";
8
+ import type { ExtensionAPI } from "@gsd/pi-coding-agent";
9
9
  import { Type } from "@sinclair/typebox";
10
- import { StringEnum } from "@mariozechner/pi-ai";
10
+ import { StringEnum } from "@gsd/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 "@mariozechner/pi-coding-agent";
7
+ import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
8
8
  import { Type } from "@sinclair/typebox";
9
- import { StringEnum } from "@mariozechner/pi-ai";
10
- import { Text, truncateToWidth, matchesKey, Key } from "@mariozechner/pi-tui";
9
+ import { StringEnum } from "@gsd/pi-ai";
10
+ import { Text, truncateToWidth, matchesKey, Key } from "@gsd/pi-tui";
11
11
 
12
12
  interface {{ItemType}} {
13
13
  id: number;
@@ -0,0 +1,58 @@
1
+ // GSD-2 — Extension template import path validation
2
+ // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
3
+
4
+ import { describe, it } from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { readFileSync, readdirSync, statSync } from "node:fs";
7
+ import { join, dirname, relative } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const skillRoot = join(__dirname, "..");
12
+
13
+ function walk(dir: string): string[] {
14
+ const out: string[] = [];
15
+ for (const entry of readdirSync(dir)) {
16
+ const full = join(dir, entry);
17
+ if (statSync(full).isDirectory()) {
18
+ out.push(...walk(full));
19
+ } else {
20
+ out.push(full);
21
+ }
22
+ }
23
+ return out;
24
+ }
25
+
26
+ describe("extension templates use @gsd/* imports", () => {
27
+ const templates = ["extension-skeleton.ts", "stateful-tool-skeleton.ts"];
28
+
29
+ for (const template of templates) {
30
+ it(`${template} uses @gsd/pi-coding-agent (not @mariozechner)`, () => {
31
+ const content = readFileSync(join(__dirname, template), "utf-8");
32
+ assert.ok(content.includes("@gsd/pi-coding-agent"), `Expected @gsd/pi-coding-agent import in ${template}`);
33
+ assert.ok(!content.includes("@mariozechner/"), `Found stale @mariozechner/ import in ${template}`);
34
+ });
35
+ }
36
+
37
+ it("extension-skeleton.ts uses @gsd/pi-ai for StringEnum", () => {
38
+ const content = readFileSync(join(__dirname, "extension-skeleton.ts"), "utf-8");
39
+ assert.ok(content.includes("@gsd/pi-ai"), "Expected @gsd/pi-ai import");
40
+ });
41
+
42
+ it("stateful-tool-skeleton.ts uses @gsd/pi-tui", () => {
43
+ const content = readFileSync(join(__dirname, "stateful-tool-skeleton.ts"), "utf-8");
44
+ assert.ok(content.includes("@gsd/pi-tui"), "Expected @gsd/pi-tui import");
45
+ });
46
+
47
+ it("no @mariozechner/ references anywhere in create-gsd-extension/", () => {
48
+ const offenders: string[] = [];
49
+ for (const file of walk(skillRoot)) {
50
+ if (file.endsWith("templates.test.ts")) continue;
51
+ const content = readFileSync(file, "utf-8");
52
+ if (content.includes("@mariozechner/")) {
53
+ offenders.push(relative(skillRoot, file));
54
+ }
55
+ }
56
+ assert.deepEqual(offenders, [], `Stale @mariozechner/ references found in: ${offenders.join(", ")}`);
57
+ });
58
+ });