gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c

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 (628) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +35 -49
  3. package/dist/headless-ui.d.ts +0 -17
  4. package/dist/headless-ui.js +3 -97
  5. package/dist/headless.js +6 -67
  6. package/dist/help-text.js +0 -1
  7. package/dist/onboarding.js +0 -44
  8. package/dist/resource-loader.js +1 -16
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +3 -16
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +5 -8
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +1 -2
  20. package/dist/resources/extensions/gsd/auto/phases.js +21 -25
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
  28. package/dist/resources/extensions/gsd/auto-start.js +22 -35
  29. package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
  36. package/dist/resources/extensions/gsd/captures.js +4 -56
  37. package/dist/resources/extensions/gsd/db-writer.js +8 -116
  38. package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
  39. package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
  41. package/dist/resources/extensions/gsd/doctor.js +1 -3
  42. package/dist/resources/extensions/gsd/error-classifier.js +10 -13
  43. package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
  44. package/dist/resources/extensions/gsd/forensics.js +20 -123
  45. package/dist/resources/extensions/gsd/git-service.js +1 -23
  46. package/dist/resources/extensions/gsd/gitignore.js +0 -33
  47. package/dist/resources/extensions/gsd/gsd-db.js +9 -36
  48. package/dist/resources/extensions/gsd/guided-flow.js +44 -106
  49. package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
  50. package/dist/resources/extensions/gsd/health-widget.js +0 -17
  51. package/dist/resources/extensions/gsd/index.js +1 -1
  52. package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
  53. package/dist/resources/extensions/gsd/migrate-external.js +1 -8
  54. package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
  55. package/dist/resources/extensions/gsd/model-router.js +1 -35
  56. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
  57. package/dist/resources/extensions/gsd/notifications.js +1 -16
  58. package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
  59. package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
  60. package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
  61. package/dist/resources/extensions/gsd/paths.js +0 -43
  62. package/dist/resources/extensions/gsd/preferences-models.js +1 -14
  63. package/dist/resources/extensions/gsd/preferences-types.js +1 -2
  64. package/dist/resources/extensions/gsd/preferences.js +16 -13
  65. package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
  66. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  67. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  68. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  69. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
  71. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  73. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  75. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  76. package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  77. package/dist/resources/extensions/gsd/repo-identity.js +11 -205
  78. package/dist/resources/extensions/gsd/rethink.js +0 -5
  79. package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
  80. package/dist/resources/extensions/gsd/state.js +27 -85
  81. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
  83. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
  84. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
  85. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
  86. package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
  87. package/dist/resources/extensions/gsd/undo.js +2 -2
  88. package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
  89. package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
  91. package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
  92. package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
  93. package/dist/resources/extensions/gsd/workspace-index.js +0 -24
  94. package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
  95. package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
  96. package/dist/resources/extensions/mcp-client/index.js +7 -11
  97. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  98. package/dist/resources/extensions/shared/interview-ui.js +1 -11
  99. package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
  100. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  101. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  103. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  104. package/dist/web/standalone/.next/BUILD_ID +1 -1
  105. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  106. package/dist/web/standalone/.next/build-manifest.json +3 -3
  107. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  108. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  109. package/dist/web/standalone/.next/required-server-files.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  128. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  191. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  192. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  195. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  198. package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  199. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  200. package/dist/web/standalone/server.js +1 -1
  201. package/dist/web-mode.js +1 -2
  202. package/package.json +2 -2
  203. package/packages/native/dist/ast/index.js +5 -9
  204. package/packages/native/dist/ast/types.js +1 -2
  205. package/packages/native/dist/clipboard/index.js +7 -12
  206. package/packages/native/dist/clipboard/types.js +1 -2
  207. package/packages/native/dist/diff/index.js +7 -12
  208. package/packages/native/dist/diff/types.js +1 -2
  209. package/packages/native/dist/fd/index.js +3 -6
  210. package/packages/native/dist/fd/types.js +1 -2
  211. package/packages/native/dist/glob/index.js +5 -9
  212. package/packages/native/dist/glob/types.js +1 -2
  213. package/packages/native/dist/grep/index.js +5 -9
  214. package/packages/native/dist/grep/types.js +1 -2
  215. package/packages/native/dist/gsd-parser/index.js +11 -18
  216. package/packages/native/dist/gsd-parser/types.js +1 -2
  217. package/packages/native/dist/highlight/index.js +7 -12
  218. package/packages/native/dist/highlight/types.js +1 -2
  219. package/packages/native/dist/html/index.js +3 -6
  220. package/packages/native/dist/html/types.js +1 -2
  221. package/packages/native/dist/image/index.js +5 -10
  222. package/packages/native/dist/image/types.js +4 -7
  223. package/packages/native/dist/index.js +17 -70
  224. package/packages/native/dist/json-parse/index.js +8 -13
  225. package/packages/native/dist/native.js +10 -47
  226. package/packages/native/dist/ps/index.js +9 -15
  227. package/packages/native/dist/ps/types.js +1 -2
  228. package/packages/native/dist/stream-process/index.js +7 -12
  229. package/packages/native/dist/text/index.js +14 -24
  230. package/packages/native/dist/text/types.js +2 -5
  231. package/packages/native/dist/truncate/index.js +7 -12
  232. package/packages/native/dist/ttsr/index.js +7 -12
  233. package/packages/native/dist/ttsr/types.js +1 -2
  234. package/packages/native/dist/xxhash/index.js +5 -9
  235. package/packages/native/package.json +19 -19
  236. package/packages/native/src/native.ts +8 -9
  237. package/packages/pi-agent-core/dist/agent-loop.js +2 -3
  238. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  239. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  240. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  241. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  242. package/packages/pi-agent-core/src/agent-loop.ts +2 -3
  243. package/packages/pi-agent-core/src/proxy.ts +1 -1
  244. package/packages/pi-ai/dist/env-api-keys.js +0 -1
  245. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  246. package/packages/pi-ai/dist/index.d.ts +0 -1
  247. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  248. package/packages/pi-ai/dist/index.js +0 -1
  249. package/packages/pi-ai/dist/index.js.map +1 -1
  250. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  251. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
  252. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  253. package/packages/pi-ai/dist/types.d.ts +3 -3
  254. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  255. package/packages/pi-ai/dist/types.js.map +1 -1
  256. package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
  257. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/packages/pi-ai/dist/utils/json-parse.js +1 -24
  259. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  260. package/packages/pi-ai/src/env-api-keys.ts +0 -1
  261. package/packages/pi-ai/src/index.ts +0 -1
  262. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
  263. package/packages/pi-ai/src/types.ts +2 -3
  264. package/packages/pi-ai/src/utils/json-parse.ts +1 -28
  265. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
  266. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
  268. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
  270. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
  272. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/exec.js +1 -3
  275. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
  277. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
  279. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
  281. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  283. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
  290. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
  293. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/messages.js +2 -31
  296. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
  299. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
  301. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
  303. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
  305. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
  307. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
  313. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  315. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/index.js +1 -1
  317. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
  322. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
  324. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  325. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
  326. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
  327. package/packages/pi-coding-agent/src/core/exec.ts +1 -3
  328. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
  329. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
  330. package/packages/pi-coding-agent/src/core/index.ts +0 -6
  331. package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
  332. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
  333. package/packages/pi-coding-agent/src/core/messages.ts +2 -29
  334. package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
  335. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
  336. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
  338. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
  339. package/packages/pi-coding-agent/src/index.ts +0 -6
  340. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
  341. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
  342. package/packages/pi-tui/dist/terminal.d.ts +0 -2
  343. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  344. package/packages/pi-tui/dist/terminal.js +0 -9
  345. package/packages/pi-tui/dist/terminal.js.map +1 -1
  346. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  347. package/packages/pi-tui/dist/tui.js +0 -9
  348. package/packages/pi-tui/dist/tui.js.map +1 -1
  349. package/packages/pi-tui/src/terminal.ts +0 -14
  350. package/packages/pi-tui/src/tui.ts +0 -8
  351. package/scripts/ensure-workspace-builds.cjs +14 -45
  352. package/src/resources/agents/researcher.md +1 -1
  353. package/src/resources/extensions/ask-user-questions.ts +3 -21
  354. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  355. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  356. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  357. package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
  358. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
  359. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
  360. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
  361. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  362. package/src/resources/extensions/get-secrets-from-user.ts +5 -8
  363. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  364. package/src/resources/extensions/google-search/index.ts +1 -2
  365. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
  366. package/src/resources/extensions/gsd/auto/phases.ts +34 -43
  367. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
  370. package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
  372. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  373. package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
  374. package/src/resources/extensions/gsd/auto-start.ts +26 -35
  375. package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
  376. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
  377. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
  378. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
  379. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
  380. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
  381. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
  382. package/src/resources/extensions/gsd/captures.ts +3 -63
  383. package/src/resources/extensions/gsd/db-writer.ts +7 -140
  384. package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
  385. package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
  386. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
  387. package/src/resources/extensions/gsd/doctor.ts +1 -3
  388. package/src/resources/extensions/gsd/error-classifier.ts +11 -14
  389. package/src/resources/extensions/gsd/extension-manifest.json +1 -16
  390. package/src/resources/extensions/gsd/forensics.ts +20 -144
  391. package/src/resources/extensions/gsd/git-service.ts +3 -26
  392. package/src/resources/extensions/gsd/gitignore.ts +0 -33
  393. package/src/resources/extensions/gsd/gsd-db.ts +7 -43
  394. package/src/resources/extensions/gsd/guided-flow.ts +45 -114
  395. package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
  396. package/src/resources/extensions/gsd/health-widget.ts +0 -17
  397. package/src/resources/extensions/gsd/index.ts +0 -1
  398. package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
  399. package/src/resources/extensions/gsd/migrate-external.ts +1 -9
  400. package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
  401. package/src/resources/extensions/gsd/model-router.ts +1 -35
  402. package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
  403. package/src/resources/extensions/gsd/notifications.ts +0 -16
  404. package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
  405. package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
  406. package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
  407. package/src/resources/extensions/gsd/paths.ts +0 -42
  408. package/src/resources/extensions/gsd/preferences-models.ts +1 -14
  409. package/src/resources/extensions/gsd/preferences-types.ts +1 -2
  410. package/src/resources/extensions/gsd/preferences.ts +15 -13
  411. package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
  412. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  413. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  414. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  415. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  416. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
  417. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  418. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  419. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  421. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  422. package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  423. package/src/resources/extensions/gsd/repo-identity.ts +11 -186
  424. package/src/resources/extensions/gsd/rethink.ts +0 -6
  425. package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
  426. package/src/resources/extensions/gsd/state.ts +32 -84
  427. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
  428. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
  429. package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
  430. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
  431. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
  432. package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
  433. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
  434. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
  435. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
  436. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  437. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
  438. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  439. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
  440. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
  441. package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
  442. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
  443. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
  445. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
  446. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  447. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
  449. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
  450. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
  451. package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
  452. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
  453. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
  454. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
  455. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
  456. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
  457. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
  458. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
  459. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
  460. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
  461. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
  462. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
  463. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
  464. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
  465. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
  466. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
  467. package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
  468. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
  469. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
  470. package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
  471. package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
  472. package/src/resources/extensions/gsd/types.ts +2 -4
  473. package/src/resources/extensions/gsd/undo.ts +2 -2
  474. package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
  475. package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
  476. package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
  477. package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
  478. package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
  479. package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
  480. package/src/resources/extensions/gsd/workspace-index.ts +0 -30
  481. package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
  482. package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
  483. package/src/resources/extensions/mcp-client/index.ts +7 -13
  484. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  485. package/src/resources/extensions/shared/interview-ui.ts +1 -12
  486. package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
  487. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  488. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  489. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  490. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  491. package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
  492. package/dist/resources/extensions/ollama/index.js +0 -112
  493. package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
  494. package/dist/resources/extensions/ollama/ollama-client.js +0 -168
  495. package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
  496. package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
  497. package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
  498. package/dist/resources/extensions/ollama/types.js +0 -2
  499. package/dist/startup-model-validation.d.ts +0 -39
  500. package/dist/startup-model-validation.js +0 -50
  501. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
  502. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  503. package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
  504. package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
  505. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
  506. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
  507. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
  508. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
  509. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
  510. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
  511. package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
  512. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
  513. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
  514. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
  515. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
  516. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
  517. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
  518. package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
  519. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
  525. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
  527. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
  529. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
  530. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
  531. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
  532. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
  533. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
  534. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
  535. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
  536. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
  537. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
  538. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
  539. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
  540. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
  541. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
  542. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
  543. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
  544. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
  545. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
  546. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
  547. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
  548. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
  549. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
  550. package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
  551. package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
  552. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
  553. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
  554. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
  555. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
  556. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
  557. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
  558. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
  559. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
  560. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
  561. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
  562. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
  563. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
  564. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
  565. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
  566. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
  567. package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
  568. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
  569. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
  570. package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
  571. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
  572. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
  573. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
  574. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
  575. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
  576. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
  577. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
  578. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
  579. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
  580. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
  581. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  582. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
  583. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
  584. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
  585. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
  586. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  587. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
  588. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
  589. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
  590. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
  591. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
  592. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
  593. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
  594. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
  595. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
  596. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
  597. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
  598. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
  599. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
  600. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
  601. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
  602. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
  603. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  604. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
  605. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
  606. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
  607. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
  608. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
  609. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
  610. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
  611. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
  612. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
  613. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
  614. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
  615. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
  616. package/src/resources/extensions/ollama/index.ts +0 -130
  617. package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
  618. package/src/resources/extensions/ollama/ollama-client.ts +0 -196
  619. package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
  620. package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
  621. package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
  622. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
  623. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
  624. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
  625. package/src/resources/extensions/ollama/types.ts +0 -130
  626. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
  627. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
  628. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
@@ -1,112 +0,0 @@
1
- // GSD2 — Ollama Extension: First-class local LLM support
2
- /**
3
- * Ollama Extension
4
- *
5
- * Auto-detects a running Ollama instance, discovers locally pulled models,
6
- * and registers them as a first-class provider. No configuration required —
7
- * if Ollama is running, models appear automatically.
8
- *
9
- * Features:
10
- * - Auto-discovery of local models via /api/tags
11
- * - Capability detection (vision, reasoning, context window)
12
- * - /ollama slash commands for model management
13
- * - ollama_manage tool for LLM-driven model operations
14
- * - Zero-cost model registration (local inference)
15
- *
16
- * Respects OLLAMA_HOST env var for non-default endpoints.
17
- */
18
- import { importExtensionModule } from "@gsd/pi-coding-agent";
19
- import * as client from "./ollama-client.js";
20
- import { discoverModels, getOllamaOpenAIBaseUrl } from "./ollama-discovery.js";
21
- import { registerOllamaCommands } from "./ollama-commands.js";
22
- /** Default compat settings for Ollama models via OpenAI-compat endpoint */
23
- const OLLAMA_COMPAT = {
24
- supportsDeveloperRole: false,
25
- supportsReasoningEffort: false,
26
- supportsUsageInStreaming: false,
27
- maxTokensField: "max_tokens",
28
- supportsStore: false,
29
- };
30
- let toolsPromise = null;
31
- async function registerOllamaTools(pi) {
32
- if (!toolsPromise) {
33
- toolsPromise = (async () => {
34
- const { registerOllamaTool } = await importExtensionModule(import.meta.url, "./ollama-tool.js");
35
- registerOllamaTool(pi);
36
- })().catch((error) => {
37
- toolsPromise = null;
38
- throw error;
39
- });
40
- }
41
- return toolsPromise;
42
- }
43
- /** Track whether we've registered models so we can clean up on shutdown */
44
- let providerRegistered = false;
45
- /**
46
- * Probe Ollama and register discovered models.
47
- * Safe to call multiple times — re-discovers and re-registers.
48
- */
49
- async function probeAndRegister(pi) {
50
- const running = await client.isRunning();
51
- if (!running) {
52
- if (providerRegistered) {
53
- pi.unregisterProvider("ollama");
54
- providerRegistered = false;
55
- }
56
- return false;
57
- }
58
- const models = await discoverModels();
59
- if (models.length === 0)
60
- return true; // Running but no models pulled
61
- const baseUrl = getOllamaOpenAIBaseUrl();
62
- pi.registerProvider("ollama", {
63
- authMode: "none",
64
- baseUrl,
65
- api: "openai-completions",
66
- isReady: () => true,
67
- models: models.map((m) => ({
68
- id: m.id,
69
- name: m.name,
70
- reasoning: m.reasoning,
71
- input: m.input,
72
- cost: m.cost,
73
- contextWindow: m.contextWindow,
74
- maxTokens: m.maxTokens,
75
- compat: OLLAMA_COMPAT,
76
- })),
77
- });
78
- providerRegistered = true;
79
- return true;
80
- }
81
- export default function ollama(pi) {
82
- // Register slash commands immediately (they check Ollama availability themselves)
83
- registerOllamaCommands(pi);
84
- pi.on("session_start", async (_event, ctx) => {
85
- // Register tool (deferred to avoid blocking startup)
86
- if (ctx.hasUI) {
87
- void registerOllamaTools(pi).catch((error) => {
88
- ctx.ui.notify(`Ollama tool failed to load: ${error instanceof Error ? error.message : String(error)}`, "warning");
89
- });
90
- }
91
- else {
92
- await registerOllamaTools(pi);
93
- }
94
- // Async probe — don't block startup
95
- probeAndRegister(pi)
96
- .then((found) => {
97
- if (found && ctx.hasUI) {
98
- ctx.ui.setStatus("ollama", "Ollama");
99
- }
100
- })
101
- .catch(() => {
102
- // Silently ignore probe failures
103
- });
104
- });
105
- pi.on("session_shutdown", async () => {
106
- if (providerRegistered) {
107
- pi.unregisterProvider("ollama");
108
- providerRegistered = false;
109
- }
110
- toolsPromise = null;
111
- });
112
- }
@@ -1,115 +0,0 @@
1
- // GSD2 — Known model capability table for Ollama models
2
- /**
3
- * Known model family capabilities.
4
- * Keys are matched as prefixes against the model name (before the colon/tag).
5
- * More specific entries should appear first.
6
- */
7
- const KNOWN_MODELS = [
8
- // ─── Reasoning models ───────────────────────────────────────────────
9
- ["deepseek-r1", { contextWindow: 131072, reasoning: true }],
10
- ["qwq", { contextWindow: 131072, reasoning: true }],
11
- // ─── Vision models ──────────────────────────────────────────────────
12
- ["llava", { contextWindow: 4096, input: ["text", "image"] }],
13
- ["bakllava", { contextWindow: 4096, input: ["text", "image"] }],
14
- ["moondream", { contextWindow: 8192, input: ["text", "image"] }],
15
- ["llama3.2-vision", { contextWindow: 131072, input: ["text", "image"] }],
16
- ["minicpm-v", { contextWindow: 4096, input: ["text", "image"] }],
17
- // ─── Code models ────────────────────────────────────────────────────
18
- ["codestral", { contextWindow: 262144, maxTokens: 32768 }],
19
- ["qwen2.5-coder", { contextWindow: 131072, maxTokens: 32768 }],
20
- ["deepseek-coder-v2", { contextWindow: 131072, maxTokens: 16384 }],
21
- ["starcoder2", { contextWindow: 16384, maxTokens: 8192 }],
22
- ["codegemma", { contextWindow: 8192, maxTokens: 8192 }],
23
- ["codellama", { contextWindow: 16384, maxTokens: 8192 }],
24
- ["devstral", { contextWindow: 131072, maxTokens: 32768 }],
25
- // ─── Llama family ───────────────────────────────────────────────────
26
- ["llama3.3", { contextWindow: 131072, maxTokens: 16384 }],
27
- ["llama3.2", { contextWindow: 131072, maxTokens: 16384 }],
28
- ["llama3.1", { contextWindow: 131072, maxTokens: 16384 }],
29
- ["llama3", { contextWindow: 8192, maxTokens: 8192 }],
30
- ["llama2", { contextWindow: 4096, maxTokens: 4096 }],
31
- // ─── Qwen family ────────────────────────────────────────────────────
32
- ["qwen3", { contextWindow: 131072, maxTokens: 32768 }],
33
- ["qwen2.5", { contextWindow: 131072, maxTokens: 32768 }],
34
- ["qwen2", { contextWindow: 131072, maxTokens: 32768 }],
35
- // ─── Gemma family ───────────────────────────────────────────────────
36
- ["gemma3", { contextWindow: 131072, maxTokens: 16384 }],
37
- ["gemma2", { contextWindow: 8192, maxTokens: 8192 }],
38
- // ─── Mistral family ─────────────────────────────────────────────────
39
- ["mistral-large", { contextWindow: 131072, maxTokens: 16384 }],
40
- ["mistral-small", { contextWindow: 131072, maxTokens: 16384 }],
41
- ["mistral-nemo", { contextWindow: 131072, maxTokens: 16384 }],
42
- ["mistral", { contextWindow: 32768, maxTokens: 8192 }],
43
- ["mixtral", { contextWindow: 32768, maxTokens: 8192 }],
44
- // ─── Phi family ─────────────────────────────────────────────────────
45
- ["phi4", { contextWindow: 16384, maxTokens: 16384 }],
46
- ["phi3.5", { contextWindow: 131072, maxTokens: 16384 }],
47
- ["phi3", { contextWindow: 131072, maxTokens: 4096 }],
48
- // ─── Command R ──────────────────────────────────────────────────────
49
- ["command-r-plus", { contextWindow: 131072, maxTokens: 16384 }],
50
- ["command-r", { contextWindow: 131072, maxTokens: 16384 }],
51
- ];
52
- /**
53
- * Look up capabilities for a model by name.
54
- * Matches the longest prefix from the known models table.
55
- */
56
- export function getModelCapabilities(modelName) {
57
- // Strip tag (everything after the colon) for matching
58
- const baseName = modelName.split(":")[0].toLowerCase();
59
- for (const [pattern, caps] of KNOWN_MODELS) {
60
- if (baseName === pattern || baseName.startsWith(pattern)) {
61
- return caps;
62
- }
63
- }
64
- return {};
65
- }
66
- /**
67
- * Estimate context window from parameter size string (e.g. "7B", "70B", "1.5B").
68
- * Used as fallback when model isn't in the known table.
69
- */
70
- export function estimateContextFromParams(parameterSize) {
71
- const match = parameterSize.match(/([\d.]+)\s*([BbMm])/);
72
- if (!match)
73
- return 8192;
74
- const size = parseFloat(match[1]);
75
- const unit = match[2].toUpperCase();
76
- // Convert to billions
77
- const billions = unit === "M" ? size / 1000 : size;
78
- // Rough heuristics: larger models tend to support larger contexts
79
- if (billions >= 70)
80
- return 131072;
81
- if (billions >= 30)
82
- return 65536;
83
- if (billions >= 13)
84
- return 32768;
85
- if (billions >= 7)
86
- return 16384;
87
- return 8192;
88
- }
89
- /**
90
- * Humanize a model name for display (e.g. "llama3.1:8b" → "Llama 3.1 8B").
91
- */
92
- export function humanizeModelName(modelName) {
93
- const [base, tag] = modelName.split(":");
94
- // Capitalize first letter, add spaces around version numbers
95
- let name = base
96
- .replace(/([a-z])(\d)/g, "$1 $2")
97
- .replace(/(\d)([a-z])/g, "$1 $2")
98
- .replace(/^./, (c) => c.toUpperCase());
99
- // Clean up common patterns
100
- name = name.replace(/\s*-\s*/g, " ");
101
- if (tag && tag !== "latest") {
102
- name += ` ${tag.toUpperCase()}`;
103
- }
104
- return name;
105
- }
106
- /**
107
- * Format byte size for display (e.g. 4700000000 → "4.7 GB").
108
- */
109
- export function formatModelSize(bytes) {
110
- if (bytes >= 1e9)
111
- return `${(bytes / 1e9).toFixed(1)} GB`;
112
- if (bytes >= 1e6)
113
- return `${(bytes / 1e6).toFixed(1)} MB`;
114
- return `${(bytes / 1e3).toFixed(0)} KB`;
115
- }
@@ -1,168 +0,0 @@
1
- // GSD2 — HTTP client for Ollama REST API
2
- const DEFAULT_HOST = "http://localhost:11434";
3
- const PROBE_TIMEOUT_MS = 1500;
4
- const REQUEST_TIMEOUT_MS = 10000;
5
- /**
6
- * Get the Ollama host URL from OLLAMA_HOST or default.
7
- */
8
- export function getOllamaHost() {
9
- const host = process.env.OLLAMA_HOST;
10
- if (!host)
11
- return DEFAULT_HOST;
12
- // OLLAMA_HOST can be just a host:port without scheme
13
- if (host.startsWith("http://") || host.startsWith("https://"))
14
- return host;
15
- return `http://${host}`;
16
- }
17
- async function fetchWithTimeout(url, options = {}, timeoutMs = REQUEST_TIMEOUT_MS) {
18
- const controller = new AbortController();
19
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
20
- try {
21
- return await fetch(url, { ...options, signal: controller.signal });
22
- }
23
- finally {
24
- clearTimeout(timeout);
25
- }
26
- }
27
- /**
28
- * Check if Ollama is running and reachable.
29
- */
30
- export async function isRunning() {
31
- try {
32
- const response = await fetchWithTimeout(`${getOllamaHost()}/`, {}, PROBE_TIMEOUT_MS);
33
- return response.ok;
34
- }
35
- catch {
36
- return false;
37
- }
38
- }
39
- /**
40
- * Get Ollama version.
41
- */
42
- export async function getVersion() {
43
- try {
44
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/version`);
45
- if (!response.ok)
46
- return null;
47
- const data = (await response.json());
48
- return data.version;
49
- }
50
- catch {
51
- return null;
52
- }
53
- }
54
- /**
55
- * List all locally available models.
56
- */
57
- export async function listModels() {
58
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/tags`);
59
- if (!response.ok) {
60
- throw new Error(`Ollama /api/tags returned ${response.status}: ${response.statusText}`);
61
- }
62
- return (await response.json());
63
- }
64
- /**
65
- * Get detailed information about a specific model.
66
- */
67
- export async function showModel(name) {
68
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/show`, {
69
- method: "POST",
70
- headers: { "Content-Type": "application/json" },
71
- body: JSON.stringify({ name }),
72
- });
73
- if (!response.ok) {
74
- throw new Error(`Ollama /api/show returned ${response.status}: ${response.statusText}`);
75
- }
76
- return (await response.json());
77
- }
78
- /**
79
- * List currently loaded/running models.
80
- */
81
- export async function getRunningModels() {
82
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/ps`);
83
- if (!response.ok) {
84
- throw new Error(`Ollama /api/ps returned ${response.status}: ${response.statusText}`);
85
- }
86
- return (await response.json());
87
- }
88
- /**
89
- * Pull a model with streaming progress.
90
- * Calls onProgress for each progress update.
91
- * Returns when the pull is complete.
92
- */
93
- export async function pullModel(name, onProgress, signal) {
94
- const response = await fetch(`${getOllamaHost()}/api/pull`, {
95
- method: "POST",
96
- headers: { "Content-Type": "application/json" },
97
- body: JSON.stringify({ name, stream: true }),
98
- signal,
99
- });
100
- if (!response.ok) {
101
- const text = await response.text();
102
- throw new Error(`Ollama /api/pull returned ${response.status}: ${text}`);
103
- }
104
- if (!response.body) {
105
- throw new Error("Ollama /api/pull returned no body");
106
- }
107
- const reader = response.body.getReader();
108
- const decoder = new TextDecoder();
109
- let buffer = "";
110
- while (true) {
111
- const { done, value } = await reader.read();
112
- if (done)
113
- break;
114
- buffer += decoder.decode(value, { stream: true });
115
- const lines = buffer.split("\n");
116
- buffer = lines.pop() ?? "";
117
- for (const line of lines) {
118
- const trimmed = line.trim();
119
- if (!trimmed)
120
- continue;
121
- try {
122
- const progress = JSON.parse(trimmed);
123
- onProgress?.(progress);
124
- }
125
- catch {
126
- // Skip malformed lines
127
- }
128
- }
129
- }
130
- // Process remaining buffer
131
- if (buffer.trim()) {
132
- try {
133
- const progress = JSON.parse(buffer.trim());
134
- onProgress?.(progress);
135
- }
136
- catch {
137
- // Ignore
138
- }
139
- }
140
- }
141
- /**
142
- * Delete a local model.
143
- */
144
- export async function deleteModel(name) {
145
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/delete`, {
146
- method: "DELETE",
147
- headers: { "Content-Type": "application/json" },
148
- body: JSON.stringify({ name }),
149
- });
150
- if (!response.ok) {
151
- const text = await response.text();
152
- throw new Error(`Ollama /api/delete returned ${response.status}: ${text}`);
153
- }
154
- }
155
- /**
156
- * Copy a model to a new name.
157
- */
158
- export async function copyModel(source, destination) {
159
- const response = await fetchWithTimeout(`${getOllamaHost()}/api/copy`, {
160
- method: "POST",
161
- headers: { "Content-Type": "application/json" },
162
- body: JSON.stringify({ source, destination }),
163
- });
164
- if (!response.ok) {
165
- const text = await response.text();
166
- throw new Error(`Ollama /api/copy returned ${response.status}: ${text}`);
167
- }
168
- }
@@ -1,194 +0,0 @@
1
- // GSD2 — Ollama slash commands
2
- import { Text } from "@gsd/pi-tui";
3
- import * as client from "./ollama-client.js";
4
- import { discoverModels, formatModelForDisplay } from "./ollama-discovery.js";
5
- import { formatModelSize } from "./model-capabilities.js";
6
- export function registerOllamaCommands(pi) {
7
- pi.registerCommand("ollama", {
8
- description: "Manage local Ollama models — list | pull | remove | ps",
9
- async handler(args, ctx) {
10
- const parts = (args ?? "").trim().split(/\s+/);
11
- const subcommand = parts[0] || "status";
12
- const modelArg = parts.slice(1).join(" ");
13
- switch (subcommand) {
14
- case "status":
15
- return await handleStatus(ctx);
16
- case "list":
17
- case "ls":
18
- return await handleList(ctx);
19
- case "pull":
20
- return await handlePull(modelArg, ctx);
21
- case "remove":
22
- case "rm":
23
- case "delete":
24
- return await handleRemove(modelArg, ctx);
25
- case "ps":
26
- return await handlePs(ctx);
27
- default:
28
- ctx.ui.notify(`Unknown subcommand: ${subcommand}. Use: status, list, pull, remove, ps`, "warning");
29
- }
30
- },
31
- });
32
- }
33
- async function handleStatus(ctx) {
34
- const running = await client.isRunning();
35
- if (!running) {
36
- ctx.ui.notify("Ollama is not running. Install from https://ollama.com and run 'ollama serve'", "warning");
37
- return;
38
- }
39
- const version = await client.getVersion();
40
- const lines = [];
41
- lines.push(`Ollama${version ? ` v${version}` : ""} — running (${client.getOllamaHost()})`);
42
- // Show loaded models
43
- try {
44
- const ps = await client.getRunningModels();
45
- if (ps.models && ps.models.length > 0) {
46
- lines.push("");
47
- lines.push("Loaded:");
48
- for (const m of ps.models) {
49
- const vram = m.size_vram > 0 ? formatModelSize(m.size_vram) + " VRAM" : "CPU";
50
- const expiresAt = new Date(m.expires_at);
51
- const idleMs = expiresAt.getTime() - Date.now();
52
- const idleMin = Math.max(0, Math.floor(idleMs / 60000));
53
- lines.push(` ${m.name} ${vram} expires in ${idleMin}m`);
54
- }
55
- }
56
- }
57
- catch {
58
- // ps endpoint may not be available on older versions
59
- }
60
- // Show available models
61
- try {
62
- const models = await discoverModels();
63
- if (models.length > 0) {
64
- lines.push("");
65
- lines.push("Available:");
66
- for (const m of models) {
67
- lines.push(` ${formatModelForDisplay(m)}`);
68
- }
69
- }
70
- else {
71
- lines.push("");
72
- lines.push("No models pulled. Use /ollama pull <model> to get started.");
73
- }
74
- }
75
- catch (err) {
76
- lines.push("");
77
- lines.push(`Error listing models: ${err instanceof Error ? err.message : String(err)}`);
78
- }
79
- await ctx.ui.custom((tui, theme, _kb, done) => {
80
- const text = new Text(lines.map((l) => theme.fg("fg", l)).join("\n"), 0, 0);
81
- setTimeout(() => done(undefined), 0);
82
- return text;
83
- });
84
- }
85
- async function handleList(ctx) {
86
- const running = await client.isRunning();
87
- if (!running) {
88
- ctx.ui.notify("Ollama is not running", "warning");
89
- return;
90
- }
91
- const models = await discoverModels();
92
- if (models.length === 0) {
93
- ctx.ui.notify("No models available. Use /ollama pull <model> to download one.", "info");
94
- return;
95
- }
96
- const lines = ["Local Ollama models:", ""];
97
- for (const m of models) {
98
- lines.push(` ${formatModelForDisplay(m)}`);
99
- }
100
- await ctx.ui.custom((tui, theme, _kb, done) => {
101
- const text = new Text(lines.map((l) => theme.fg("fg", l)).join("\n"), 0, 0);
102
- setTimeout(() => done(undefined), 0);
103
- return text;
104
- });
105
- }
106
- async function handlePull(modelName, ctx) {
107
- if (!modelName) {
108
- ctx.ui.notify("Usage: /ollama pull <model> (e.g. /ollama pull llama3.1:8b)", "warning");
109
- return;
110
- }
111
- const running = await client.isRunning();
112
- if (!running) {
113
- ctx.ui.notify("Ollama is not running", "warning");
114
- return;
115
- }
116
- ctx.ui.setWidget("ollama-pull", [`Pulling ${modelName}...`]);
117
- try {
118
- let lastPercent = -1;
119
- await client.pullModel(modelName, (progress) => {
120
- if (progress.total && progress.completed) {
121
- const percent = Math.floor((progress.completed / progress.total) * 100);
122
- if (percent !== lastPercent) {
123
- lastPercent = percent;
124
- const completed = formatModelSize(progress.completed);
125
- const total = formatModelSize(progress.total);
126
- ctx.ui.setWidget("ollama-pull", [
127
- `Pulling ${modelName}... ${percent}% (${completed} / ${total})`,
128
- ]);
129
- }
130
- }
131
- else if (progress.status) {
132
- ctx.ui.setWidget("ollama-pull", [`${modelName}: ${progress.status}`]);
133
- }
134
- });
135
- ctx.ui.setWidget("ollama-pull", undefined);
136
- ctx.ui.notify(`${modelName} pulled successfully`, "success");
137
- }
138
- catch (err) {
139
- ctx.ui.setWidget("ollama-pull", undefined);
140
- ctx.ui.notify(`Failed to pull ${modelName}: ${err instanceof Error ? err.message : String(err)}`, "error");
141
- }
142
- }
143
- async function handleRemove(modelName, ctx) {
144
- if (!modelName) {
145
- ctx.ui.notify("Usage: /ollama remove <model>", "warning");
146
- return;
147
- }
148
- const running = await client.isRunning();
149
- if (!running) {
150
- ctx.ui.notify("Ollama is not running", "warning");
151
- return;
152
- }
153
- const confirmed = await ctx.ui.confirm("Delete model", `Are you sure you want to delete ${modelName}?`);
154
- if (!confirmed)
155
- return;
156
- try {
157
- await client.deleteModel(modelName);
158
- ctx.ui.notify(`${modelName} deleted`, "success");
159
- }
160
- catch (err) {
161
- ctx.ui.notify(`Failed to delete ${modelName}: ${err instanceof Error ? err.message : String(err)}`, "error");
162
- }
163
- }
164
- async function handlePs(ctx) {
165
- const running = await client.isRunning();
166
- if (!running) {
167
- ctx.ui.notify("Ollama is not running", "warning");
168
- return;
169
- }
170
- try {
171
- const ps = await client.getRunningModels();
172
- if (!ps.models || ps.models.length === 0) {
173
- ctx.ui.notify("No models currently loaded in memory", "info");
174
- return;
175
- }
176
- const lines = ["Running models:", ""];
177
- for (const m of ps.models) {
178
- const vram = m.size_vram > 0 ? formatModelSize(m.size_vram) + " VRAM" : "CPU only";
179
- const totalSize = formatModelSize(m.size);
180
- const expiresAt = new Date(m.expires_at);
181
- const idleMs = expiresAt.getTime() - Date.now();
182
- const idleMin = Math.max(0, Math.floor(idleMs / 60000));
183
- lines.push(` ${m.name} ${totalSize} ${vram} expires in ${idleMin}m`);
184
- }
185
- await ctx.ui.custom((tui, theme, _kb, done) => {
186
- const text = new Text(lines.map((l) => theme.fg("fg", l)).join("\n"), 0, 0);
187
- setTimeout(() => done(undefined), 0);
188
- return text;
189
- });
190
- }
191
- catch (err) {
192
- ctx.ui.notify(`Failed to get running models: ${err instanceof Error ? err.message : String(err)}`, "error");
193
- }
194
- }
@@ -1,69 +0,0 @@
1
- // GSD2 — Ollama model discovery and capability detection
2
- /**
3
- * Discovers locally available Ollama models and enriches them with
4
- * capability metadata (context window, vision, reasoning) from the
5
- * known model table and /api/show responses.
6
- *
7
- * Returns models in the format expected by pi.registerProvider().
8
- */
9
- import { listModels, getOllamaHost } from "./ollama-client.js";
10
- import { estimateContextFromParams, formatModelSize, getModelCapabilities, humanizeModelName, } from "./model-capabilities.js";
11
- const ZERO_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
12
- function enrichModel(info) {
13
- const caps = getModelCapabilities(info.name);
14
- const parameterSize = info.details?.parameter_size ?? "";
15
- // Determine context window: known table > estimate from param size > default
16
- const contextWindow = caps.contextWindow ??
17
- (parameterSize ? estimateContextFromParams(parameterSize) : 8192);
18
- // Determine max tokens: known table > fraction of context > default
19
- const maxTokens = caps.maxTokens ?? Math.min(Math.floor(contextWindow / 4), 16384);
20
- // Detect vision from families or known table
21
- const hasVision = caps.input?.includes("image") ??
22
- (info.details?.families?.some((f) => f === "clip" || f === "mllama") ?? false);
23
- // Detect reasoning from known table
24
- const reasoning = caps.reasoning ?? false;
25
- return {
26
- id: info.name,
27
- name: humanizeModelName(info.name),
28
- reasoning,
29
- input: hasVision ? ["text", "image"] : ["text"],
30
- cost: ZERO_COST,
31
- contextWindow,
32
- maxTokens,
33
- sizeBytes: info.size,
34
- parameterSize,
35
- };
36
- }
37
- /**
38
- * Discover all locally available Ollama models with enriched capabilities.
39
- */
40
- export async function discoverModels() {
41
- const tags = await listModels();
42
- if (!tags.models || tags.models.length === 0)
43
- return [];
44
- return tags.models.map(enrichModel);
45
- }
46
- /**
47
- * Format a discovered model for display in model list.
48
- */
49
- export function formatModelForDisplay(model) {
50
- const parts = [model.id];
51
- if (model.sizeBytes > 0) {
52
- parts.push(`(${formatModelSize(model.sizeBytes)})`);
53
- }
54
- const flags = [];
55
- if (model.reasoning)
56
- flags.push("reasoning");
57
- if (model.input.includes("image"))
58
- flags.push("vision");
59
- if (flags.length > 0) {
60
- parts.push(`[${flags.join(", ")}]`);
61
- }
62
- return parts.join(" ");
63
- }
64
- /**
65
- * Build the OpenAI-compat base URL for Ollama.
66
- */
67
- export function getOllamaOpenAIBaseUrl() {
68
- return `${getOllamaHost()}/v1`;
69
- }