gsd-pi 2.74.0-dev.28a6415 → 2.74.0-dev.658744a

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 (303) hide show
  1. package/dist/resources/extensions/gsd/auto/phases.js +51 -6
  2. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -3
  3. package/dist/resources/extensions/gsd/auto-post-unit.js +7 -3
  4. package/dist/resources/extensions/gsd/auto-recovery.js +24 -10
  5. package/dist/resources/extensions/gsd/auto-worktree.js +2 -0
  6. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -3
  7. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +10 -1
  8. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +61 -9
  9. package/dist/resources/extensions/gsd/cache.js +16 -5
  10. package/dist/resources/extensions/gsd/commands/catalog.js +6 -1
  11. package/dist/resources/extensions/gsd/commands/handlers/core.js +5 -1
  12. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +50 -3
  13. package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -0
  14. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +144 -0
  15. package/dist/resources/extensions/gsd/ecosystem/loader.js +145 -0
  16. package/dist/resources/extensions/gsd/guided-flow.js +8 -6
  17. package/dist/resources/extensions/gsd/preferences-types.js +1 -0
  18. package/dist/resources/extensions/gsd/preferences-validation.js +10 -0
  19. package/dist/resources/extensions/gsd/preferences.js +5 -0
  20. package/dist/resources/extensions/gsd/safety/evidence-collector.js +15 -30
  21. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  22. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  23. package/dist/web/standalone/.next/BUILD_ID +1 -1
  24. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  25. package/dist/web/standalone/.next/build-manifest.json +2 -2
  26. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  27. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  28. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  36. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  37. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  44. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  45. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  46. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  47. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  48. package/dist/web/standalone/.next/server/app/index.html +1 -1
  49. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  53. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  54. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  55. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  56. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  57. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  58. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  59. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  60. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  61. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  62. package/package.json +1 -1
  63. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  64. package/packages/mcp-server/dist/workflow-tools.js +88 -6
  65. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  66. package/packages/mcp-server/src/workflow-tools.ts +95 -10
  67. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  68. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  69. package/packages/pi-ai/dist/index.d.ts +1 -9
  70. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  71. package/packages/pi-ai/dist/index.js +1 -9
  72. package/packages/pi-ai/dist/index.js.map +1 -1
  73. package/packages/pi-ai/dist/models/capability-patches.d.ts +19 -0
  74. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -0
  75. package/packages/pi-ai/dist/models/capability-patches.js +36 -0
  76. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -0
  77. package/packages/pi-ai/dist/{models.custom.d.ts → models/custom.d.ts} +1 -1
  78. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -0
  79. package/packages/pi-ai/dist/{models.custom.js → models/custom.js} +4 -4
  80. package/packages/pi-ai/dist/models/custom.js.map +1 -0
  81. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +1482 -0
  82. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -0
  83. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +1484 -0
  84. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -0
  85. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +377 -0
  86. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -0
  87. package/packages/pi-ai/dist/models/generated/anthropic.js +379 -0
  88. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -0
  89. package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts +700 -0
  90. package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts.map +1 -0
  91. package/packages/pi-ai/dist/models/generated/azure-openai-responses.js +702 -0
  92. package/packages/pi-ai/dist/models/generated/azure-openai-responses.js.map +1 -0
  93. package/packages/pi-ai/dist/models/generated/cerebras.d.ts +71 -0
  94. package/packages/pi-ai/dist/models/generated/cerebras.d.ts.map +1 -0
  95. package/packages/pi-ai/dist/models/generated/cerebras.js +73 -0
  96. package/packages/pi-ai/dist/models/generated/cerebras.js.map +1 -0
  97. package/packages/pi-ai/dist/models/generated/github-copilot.d.ts +590 -0
  98. package/packages/pi-ai/dist/models/generated/github-copilot.d.ts.map +1 -0
  99. package/packages/pi-ai/dist/models/generated/github-copilot.js +444 -0
  100. package/packages/pi-ai/dist/models/generated/github-copilot.js.map +1 -0
  101. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +156 -0
  102. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -0
  103. package/packages/pi-ai/dist/models/generated/google-antigravity.js +158 -0
  104. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -0
  105. package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts +105 -0
  106. package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts.map +1 -0
  107. package/packages/pi-ai/dist/models/generated/google-gemini-cli.js +107 -0
  108. package/packages/pi-ai/dist/models/generated/google-gemini-cli.js.map +1 -0
  109. package/packages/pi-ai/dist/models/generated/google-vertex.d.ts +207 -0
  110. package/packages/pi-ai/dist/models/generated/google-vertex.d.ts.map +1 -0
  111. package/packages/pi-ai/dist/models/generated/google-vertex.js +209 -0
  112. package/packages/pi-ai/dist/models/generated/google-vertex.js.map +1 -0
  113. package/packages/pi-ai/dist/models/generated/google.d.ts +462 -0
  114. package/packages/pi-ai/dist/models/generated/google.d.ts.map +1 -0
  115. package/packages/pi-ai/dist/models/generated/google.js +464 -0
  116. package/packages/pi-ai/dist/models/generated/google.js.map +1 -0
  117. package/packages/pi-ai/dist/models/generated/groq.d.ts +309 -0
  118. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -0
  119. package/packages/pi-ai/dist/models/generated/groq.js +311 -0
  120. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -0
  121. package/packages/pi-ai/dist/models/generated/huggingface.d.ts +383 -0
  122. package/packages/pi-ai/dist/models/generated/huggingface.d.ts.map +1 -0
  123. package/packages/pi-ai/dist/models/generated/huggingface.js +347 -0
  124. package/packages/pi-ai/dist/models/generated/huggingface.js.map +1 -0
  125. package/packages/pi-ai/dist/{models.generated.d.ts → models/generated/index.d.ts} +1 -1
  126. package/packages/pi-ai/dist/{models.generated.d.ts.map → models/generated/index.d.ts.map} +1 -1
  127. package/packages/pi-ai/dist/models/generated/index.js +51 -0
  128. package/packages/pi-ai/dist/models/generated/index.js.map +1 -0
  129. package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts +37 -0
  130. package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts.map +1 -0
  131. package/packages/pi-ai/dist/models/generated/kimi-coding.js +39 -0
  132. package/packages/pi-ai/dist/models/generated/kimi-coding.js.map +1 -0
  133. package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts +105 -0
  134. package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts.map +1 -0
  135. package/packages/pi-ai/dist/models/generated/minimax-cn.js +107 -0
  136. package/packages/pi-ai/dist/models/generated/minimax-cn.js.map +1 -0
  137. package/packages/pi-ai/dist/models/generated/minimax.d.ts +105 -0
  138. package/packages/pi-ai/dist/models/generated/minimax.d.ts.map +1 -0
  139. package/packages/pi-ai/dist/models/generated/minimax.js +107 -0
  140. package/packages/pi-ai/dist/models/generated/minimax.js.map +1 -0
  141. package/packages/pi-ai/dist/models/generated/mistral.d.ts +445 -0
  142. package/packages/pi-ai/dist/models/generated/mistral.d.ts.map +1 -0
  143. package/packages/pi-ai/dist/models/generated/mistral.js +447 -0
  144. package/packages/pi-ai/dist/models/generated/mistral.js.map +1 -0
  145. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +139 -0
  146. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -0
  147. package/packages/pi-ai/dist/models/generated/openai-codex.js +141 -0
  148. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -0
  149. package/packages/pi-ai/dist/models/generated/openai.d.ts +700 -0
  150. package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -0
  151. package/packages/pi-ai/dist/models/generated/openai.js +702 -0
  152. package/packages/pi-ai/dist/models/generated/openai.js.map +1 -0
  153. package/packages/pi-ai/dist/models/generated/opencode-go.d.ts +122 -0
  154. package/packages/pi-ai/dist/models/generated/opencode-go.d.ts.map +1 -0
  155. package/packages/pi-ai/dist/models/generated/opencode-go.js +124 -0
  156. package/packages/pi-ai/dist/models/generated/opencode-go.js.map +1 -0
  157. package/packages/pi-ai/dist/models/generated/opencode.d.ts +530 -0
  158. package/packages/pi-ai/dist/models/generated/opencode.d.ts.map +1 -0
  159. package/packages/pi-ai/dist/models/generated/opencode.js +532 -0
  160. package/packages/pi-ai/dist/models/generated/opencode.js.map +1 -0
  161. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +4270 -0
  162. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -0
  163. package/packages/pi-ai/dist/models/generated/openrouter.js +4272 -0
  164. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -0
  165. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts +2604 -0
  166. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts.map +1 -0
  167. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js +2606 -0
  168. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js.map +1 -0
  169. package/packages/pi-ai/dist/models/generated/xai.d.ts +411 -0
  170. package/packages/pi-ai/dist/models/generated/xai.d.ts.map +1 -0
  171. package/packages/pi-ai/dist/models/generated/xai.js +413 -0
  172. package/packages/pi-ai/dist/models/generated/xai.js.map +1 -0
  173. package/packages/pi-ai/dist/models/generated/zai.d.ts +276 -0
  174. package/packages/pi-ai/dist/models/generated/zai.d.ts.map +1 -0
  175. package/packages/pi-ai/dist/models/generated/zai.js +239 -0
  176. package/packages/pi-ai/dist/models/generated/zai.js.map +1 -0
  177. package/packages/pi-ai/dist/models/index.d.ts +27 -0
  178. package/packages/pi-ai/dist/models/index.d.ts.map +1 -0
  179. package/packages/pi-ai/dist/models/index.js +80 -0
  180. package/packages/pi-ai/dist/models/index.js.map +1 -0
  181. package/packages/pi-ai/dist/models.d.ts +1 -36
  182. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  183. package/packages/pi-ai/dist/models.generated.test.js +1 -2
  184. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  185. package/packages/pi-ai/dist/models.js +3 -112
  186. package/packages/pi-ai/dist/models.js.map +1 -1
  187. package/packages/pi-ai/dist/models.test.js +6 -5
  188. package/packages/pi-ai/dist/models.test.js.map +1 -1
  189. package/packages/pi-ai/scripts/generate-models.ts +74 -40
  190. package/packages/pi-ai/src/index.ts +1 -9
  191. package/packages/pi-ai/src/models/capability-patches.ts +40 -0
  192. package/packages/pi-ai/src/{models.custom.ts → models/custom.ts} +4 -4
  193. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +1486 -0
  194. package/packages/pi-ai/src/models/generated/anthropic.ts +381 -0
  195. package/packages/pi-ai/src/models/generated/azure-openai-responses.ts +704 -0
  196. package/packages/pi-ai/src/models/generated/cerebras.ts +75 -0
  197. package/packages/pi-ai/src/models/generated/github-copilot.ts +446 -0
  198. package/packages/pi-ai/src/models/generated/google-antigravity.ts +160 -0
  199. package/packages/pi-ai/src/models/generated/google-gemini-cli.ts +109 -0
  200. package/packages/pi-ai/src/models/generated/google-vertex.ts +211 -0
  201. package/packages/pi-ai/src/models/generated/google.ts +466 -0
  202. package/packages/pi-ai/src/models/generated/groq.ts +313 -0
  203. package/packages/pi-ai/src/models/generated/huggingface.ts +349 -0
  204. package/packages/pi-ai/src/models/generated/index.ts +52 -0
  205. package/packages/pi-ai/src/models/generated/kimi-coding.ts +41 -0
  206. package/packages/pi-ai/src/models/generated/minimax-cn.ts +109 -0
  207. package/packages/pi-ai/src/models/generated/minimax.ts +109 -0
  208. package/packages/pi-ai/src/models/generated/mistral.ts +449 -0
  209. package/packages/pi-ai/src/models/generated/openai-codex.ts +143 -0
  210. package/packages/pi-ai/src/models/generated/openai.ts +704 -0
  211. package/packages/pi-ai/src/models/generated/opencode-go.ts +126 -0
  212. package/packages/pi-ai/src/models/generated/opencode.ts +534 -0
  213. package/packages/pi-ai/src/models/generated/openrouter.ts +4274 -0
  214. package/packages/pi-ai/src/models/generated/vercel-ai-gateway.ts +2608 -0
  215. package/packages/pi-ai/src/models/generated/xai.ts +415 -0
  216. package/packages/pi-ai/src/models/generated/zai.ts +241 -0
  217. package/packages/pi-ai/src/models/index.ts +106 -0
  218. package/packages/pi-ai/src/models.generated.test.ts +1 -2
  219. package/packages/pi-ai/src/models.test.ts +6 -5
  220. package/packages/pi-ai/src/models.ts +3 -153
  221. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  222. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  223. package/packages/pi-coding-agent/dist/core/agent-session.js +8 -2
  224. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  225. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +214 -0
  226. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +11 -0
  228. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +1 -0
  230. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  231. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +18 -8
  232. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  233. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +11 -0
  234. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
  235. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +47 -0
  236. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -0
  237. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +8 -0
  238. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  239. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +68 -8
  240. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  242. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +22 -22
  243. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  245. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +115 -4
  246. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  247. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts +2 -0
  248. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts.map +1 -0
  249. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +38 -0
  250. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -0
  251. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +14 -0
  252. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  253. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +70 -6
  254. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  255. package/packages/pi-coding-agent/src/core/agent-session.ts +12 -6
  256. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +273 -0
  257. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +19 -0
  258. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +20 -9
  259. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +67 -0
  260. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +83 -7
  261. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +23 -26
  262. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +176 -40
  263. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
  264. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +92 -6
  265. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  266. package/src/resources/extensions/gsd/auto/phases.ts +70 -6
  267. package/src/resources/extensions/gsd/auto-model-selection.ts +3 -3
  268. package/src/resources/extensions/gsd/auto-post-unit.ts +7 -3
  269. package/src/resources/extensions/gsd/auto-recovery.ts +29 -9
  270. package/src/resources/extensions/gsd/auto-worktree.ts +1 -0
  271. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +5 -3
  272. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +15 -1
  273. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +72 -8
  274. package/src/resources/extensions/gsd/cache.ts +16 -5
  275. package/src/resources/extensions/gsd/commands/catalog.ts +6 -1
  276. package/src/resources/extensions/gsd/commands/handlers/core.ts +5 -1
  277. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +57 -3
  278. package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -0
  279. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +228 -0
  280. package/src/resources/extensions/gsd/ecosystem/loader.ts +201 -0
  281. package/src/resources/extensions/gsd/guided-flow.ts +4 -2
  282. package/src/resources/extensions/gsd/preferences-types.ts +6 -0
  283. package/src/resources/extensions/gsd/preferences-validation.ts +10 -0
  284. package/src/resources/extensions/gsd/preferences.ts +6 -0
  285. package/src/resources/extensions/gsd/safety/evidence-collector.ts +15 -31
  286. package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  287. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +177 -0
  288. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +272 -0
  289. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +117 -0
  290. package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
  291. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +3 -3
  292. package/src/resources/extensions/gsd/tests/preferences.test.ts +145 -0
  293. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +57 -2
  294. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +1 -1
  295. package/src/resources/extensions/gsd/types.ts +13 -0
  296. package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
  297. package/packages/pi-ai/dist/models.custom.d.ts.map +0 -1
  298. package/packages/pi-ai/dist/models.custom.js.map +0 -1
  299. package/packages/pi-ai/dist/models.generated.js +0 -14343
  300. package/packages/pi-ai/dist/models.generated.js.map +0 -1
  301. package/packages/pi-ai/src/models.generated.ts +0 -14345
  302. /package/dist/web/standalone/.next/static/{fMaWScj7m6EsI3DbaNv2_ → Es_JWCfFZjIvYZShmjyye}/_buildManifest.js +0 -0
  303. /package/dist/web/standalone/.next/static/{fMaWScj7m6EsI3DbaNv2_ → Es_JWCfFZjIvYZShmjyye}/_ssgManifest.js +0 -0
@@ -56,6 +56,35 @@ import { getAvailableThemes, getEditorTheme, getMarkdownTheme, initTheme, onThem
56
56
  function isExpandable(obj) {
57
57
  return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
58
58
  }
59
+ /**
60
+ * Build replay segments for historical assistant messages so rebuild paths
61
+ * preserve the original content[] ordering between assistant prose and tools.
62
+ */
63
+ export function buildAssistantReplaySegments(contentBlocks) {
64
+ const segments = [];
65
+ let runStart = -1;
66
+ for (let i = 0; i < contentBlocks.length; i++) {
67
+ const block = contentBlocks[i];
68
+ const isAssistantText = block?.type === "text" || block?.type === "thinking";
69
+ const isTool = block?.type === "toolCall" || block?.type === "serverToolUse";
70
+ if (isAssistantText) {
71
+ if (runStart === -1)
72
+ runStart = i;
73
+ continue;
74
+ }
75
+ if (runStart !== -1) {
76
+ segments.push({ kind: "assistant", startIndex: runStart, endIndex: i - 1 });
77
+ runStart = -1;
78
+ }
79
+ if (isTool) {
80
+ segments.push({ kind: "tool", contentIndex: i });
81
+ }
82
+ }
83
+ if (runStart !== -1) {
84
+ segments.push({ kind: "assistant", startIndex: runStart, endIndex: contentBlocks.length - 1 });
85
+ }
86
+ return segments;
87
+ }
59
88
  export class InteractiveMode {
60
89
  // Cap rendered chat components to prevent unbounded memory/CPU growth.
61
90
  // Only render-components are removed — session transcript stays on disk.
@@ -1390,6 +1419,9 @@ export class InteractiveMode {
1390
1419
  else if (type === "warning") {
1391
1420
  this.showWarning(message);
1392
1421
  }
1422
+ else if (type === "success") {
1423
+ this.showSuccess(message);
1424
+ }
1393
1425
  else {
1394
1426
  this.showStatus(message, { append: true });
1395
1427
  }
@@ -1657,6 +1689,7 @@ export class InteractiveMode {
1657
1689
  this.ui.requestRender();
1658
1690
  }
1659
1691
  addMessageToChat(message, options) {
1692
+ const timestampFormat = this.settingsManager.getTimestampFormat();
1660
1693
  switch (message.role) {
1661
1694
  case "bashExecution": {
1662
1695
  const component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);
@@ -1702,12 +1735,12 @@ export class InteractiveMode {
1702
1735
  this.chatContainer.addChild(component);
1703
1736
  // Render user message separately if present
1704
1737
  if (skillBlock.userMessage) {
1705
- const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), message.timestamp, this.settingsManager.getTimestampFormat());
1738
+ const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), message.timestamp, timestampFormat);
1706
1739
  this.chatContainer.addChild(userComponent);
1707
1740
  }
1708
1741
  }
1709
1742
  else {
1710
- const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), message.timestamp, this.settingsManager.getTimestampFormat());
1743
+ const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), message.timestamp, timestampFormat);
1711
1744
  this.chatContainer.addChild(userComponent);
1712
1745
  }
1713
1746
  if (options?.populateHistory) {
@@ -1717,7 +1750,7 @@ export class InteractiveMode {
1717
1750
  break;
1718
1751
  }
1719
1752
  case "assistant": {
1720
- const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.settingsManager.getTimestampFormat());
1753
+ const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), timestampFormat);
1721
1754
  this.chatContainer.addChild(assistantComponent);
1722
1755
  break;
1723
1756
  }
@@ -1749,6 +1782,7 @@ export class InteractiveMode {
1749
1782
  */
1750
1783
  renderSessionContext(sessionContext, options = {}) {
1751
1784
  this.pendingTools.clear();
1785
+ const timestampFormat = this.settingsManager.getTimestampFormat();
1752
1786
  if (options.updateFooter) {
1753
1787
  this.footer.invalidate();
1754
1788
  this.updateEditorBorderColor();
@@ -1756,9 +1790,21 @@ export class InteractiveMode {
1756
1790
  for (const message of sessionContext.messages) {
1757
1791
  // Assistant messages need special handling for tool calls
1758
1792
  if (message.role === "assistant") {
1759
- this.addMessageToChat(message);
1760
- // Render tool call components
1761
- for (const content of message.content) {
1793
+ const hasToolBlocks = message.content.some((c) => c.type === "toolCall" || c.type === "serverToolUse");
1794
+ if (!hasToolBlocks) {
1795
+ this.addMessageToChat(message);
1796
+ continue;
1797
+ }
1798
+ const assistantSegments = [];
1799
+ const replaySegments = buildAssistantReplaySegments(message.content);
1800
+ for (const segment of replaySegments) {
1801
+ if (segment.kind === "assistant") {
1802
+ const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), timestampFormat, { startIndex: segment.startIndex, endIndex: segment.endIndex });
1803
+ this.chatContainer.addChild(assistantComponent);
1804
+ assistantSegments.push(assistantComponent);
1805
+ continue;
1806
+ }
1807
+ const content = message.content[segment.contentIndex];
1762
1808
  if (content.type === "toolCall") {
1763
1809
  const component = new ToolExecutionComponent(content.name, content.arguments, { showImages: this.settingsManager.getShowImages() }, this.getRegisteredToolDefinition(content.name), this.ui);
1764
1810
  component.setExpanded(this.toolOutputExpanded);
@@ -1803,6 +1849,10 @@ export class InteractiveMode {
1803
1849
  }
1804
1850
  }
1805
1851
  }
1852
+ // Match streaming-mode behavior: show metadata once on the final
1853
+ // assistant prose segment for this message.
1854
+ const lastAssistantSegment = assistantSegments[assistantSegments.length - 1];
1855
+ lastAssistantSegment?.setShowMetadata(true);
1806
1856
  }
1807
1857
  else if (message.role === "toolResult") {
1808
1858
  // Match tool results to pending tool components
@@ -1817,6 +1867,12 @@ export class InteractiveMode {
1817
1867
  this.addMessageToChat(message, options);
1818
1868
  }
1819
1869
  }
1870
+ // Any pendingTools entries left over after replay are historical tool
1871
+ // calls whose results were squashed out of session context (commonly by
1872
+ // compaction). Mark them finished so the frame stops showing "Running".
1873
+ for (const component of this.pendingTools.values()) {
1874
+ component.markHistoricalNoResult();
1875
+ }
1820
1876
  this.pendingTools.clear();
1821
1877
  this.trimChatHistory();
1822
1878
  this.ui.requestRender();
@@ -2174,6 +2230,14 @@ export class InteractiveMode {
2174
2230
  this.chatContainer.addChild(new Text(theme.fg("warning", `Warning: ${warningMessage}`), 1, 0));
2175
2231
  this.ui.requestRender();
2176
2232
  }
2233
+ showSuccess(successMessage) {
2234
+ this.chatContainer.addChild(new Spacer(1));
2235
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("success", text)));
2236
+ this.chatContainer.addChild(new Text(theme.fg("success", successMessage), 1, 0));
2237
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("success", text)));
2238
+ this.chatContainer.addChild(new Spacer(1));
2239
+ this.ui.requestRender();
2240
+ }
2177
2241
  showTip(message) {
2178
2242
  this.chatContainer.addChild(new Spacer(1));
2179
2243
  this.chatContainer.addChild(new Text(theme.fg("dim", `💡 ${message}`), 1, 0));