gsd-pi 2.26.1-next.1 → 2.28.0-dev.346ee62

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 (1310) hide show
  1. package/README.md +76 -12
  2. package/dist/cli.js +24 -23
  3. package/dist/extension-discovery.d.ts +16 -0
  4. package/dist/extension-discovery.js +66 -0
  5. package/dist/headless-answers.d.ts +51 -0
  6. package/dist/headless-answers.js +224 -0
  7. package/dist/headless-context.d.ts +18 -0
  8. package/dist/headless-context.js +44 -0
  9. package/dist/headless-events.d.ts +28 -0
  10. package/dist/headless-events.js +59 -0
  11. package/dist/headless-query.d.ts +40 -0
  12. package/dist/headless-query.js +77 -0
  13. package/dist/headless-ui.d.ts +23 -0
  14. package/dist/headless-ui.js +103 -0
  15. package/dist/headless.d.ts +4 -0
  16. package/dist/headless.js +128 -155
  17. package/dist/help-text.js +9 -0
  18. package/dist/loader.js +18 -59
  19. package/dist/onboarding.js +8 -7
  20. package/dist/remote-questions-config.js +8 -3
  21. package/dist/resource-loader.d.ts +1 -6
  22. package/dist/resource-loader.js +52 -95
  23. package/dist/resources/extensions/ask-user-questions.ts +3 -2
  24. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  25. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  26. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  27. package/dist/resources/extensions/bg-shell/index.ts +18 -1545
  28. package/dist/resources/extensions/bg-shell/overlay.ts +4 -0
  29. package/dist/resources/extensions/bg-shell/process-manager.ts +45 -0
  30. package/dist/resources/extensions/bg-shell/types.ts +21 -1
  31. package/dist/resources/extensions/bg-shell/utilities.ts +4 -16
  32. package/dist/resources/extensions/browser-tools/capture.ts +34 -2
  33. package/dist/resources/extensions/browser-tools/lifecycle.ts +5 -5
  34. package/dist/resources/extensions/browser-tools/settle.ts +1 -1
  35. package/dist/resources/extensions/browser-tools/state.ts +5 -5
  36. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  37. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  38. package/dist/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  39. package/dist/resources/extensions/browser-tools/tools/device.ts +1 -1
  40. package/dist/resources/extensions/browser-tools/tools/extract.ts +1 -1
  41. package/dist/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  42. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  43. package/dist/resources/extensions/browser-tools/tools/pages.ts +1 -1
  44. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  45. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  46. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  47. package/dist/resources/extensions/browser-tools/utils.ts +5 -5
  48. package/dist/resources/extensions/get-secrets-from-user.ts +1 -1
  49. package/dist/resources/extensions/google-search/index.ts +21 -8
  50. package/dist/resources/extensions/gsd/activity-log.ts +2 -1
  51. package/dist/resources/extensions/gsd/atomic-write.ts +35 -0
  52. package/dist/resources/extensions/gsd/auto/session.ts +236 -0
  53. package/dist/resources/extensions/gsd/auto-budget.ts +32 -0
  54. package/dist/resources/extensions/gsd/auto-dashboard.ts +147 -13
  55. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +229 -0
  56. package/dist/resources/extensions/gsd/auto-dispatch.ts +23 -10
  57. package/dist/resources/extensions/gsd/auto-idempotency.ts +150 -0
  58. package/dist/resources/extensions/gsd/auto-model-selection.ts +179 -0
  59. package/dist/resources/extensions/gsd/auto-observability.ts +74 -0
  60. package/dist/resources/extensions/gsd/auto-post-unit.ts +591 -0
  61. package/dist/resources/extensions/gsd/auto-prompts.ts +116 -23
  62. package/dist/resources/extensions/gsd/auto-recovery.ts +20 -9
  63. package/dist/resources/extensions/gsd/auto-start.ts +500 -0
  64. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  65. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +262 -0
  66. package/dist/resources/extensions/gsd/auto-timers.ts +223 -0
  67. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  68. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +48 -0
  69. package/dist/resources/extensions/gsd/auto-verification.ts +195 -0
  70. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +184 -0
  71. package/dist/resources/extensions/gsd/auto-worktree.ts +83 -67
  72. package/dist/resources/extensions/gsd/auto.ts +825 -3069
  73. package/dist/resources/extensions/gsd/commands-config.ts +102 -0
  74. package/dist/resources/extensions/gsd/commands-handlers.ts +402 -0
  75. package/dist/resources/extensions/gsd/commands-inspect.ts +90 -0
  76. package/dist/resources/extensions/gsd/commands-logs.ts +537 -0
  77. package/dist/resources/extensions/gsd/commands-maintenance.ts +206 -0
  78. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +747 -0
  79. package/dist/resources/extensions/gsd/commands.ts +380 -1433
  80. package/dist/resources/extensions/gsd/constants.ts +21 -0
  81. package/dist/resources/extensions/gsd/context-budget.ts +25 -2
  82. package/dist/resources/extensions/gsd/crash-recovery.ts +4 -2
  83. package/dist/resources/extensions/gsd/dashboard-overlay.ts +58 -74
  84. package/dist/resources/extensions/gsd/db-writer.ts +21 -2
  85. package/dist/resources/extensions/gsd/detection.ts +469 -0
  86. package/dist/resources/extensions/gsd/diff-context.ts +2 -1
  87. package/dist/resources/extensions/gsd/dispatch-guard.ts +4 -0
  88. package/dist/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  89. package/dist/resources/extensions/gsd/doctor-checks.ts +564 -0
  90. package/dist/resources/extensions/gsd/doctor-format.ts +78 -0
  91. package/dist/resources/extensions/gsd/doctor-proactive.ts +9 -4
  92. package/dist/resources/extensions/gsd/doctor-types.ts +72 -0
  93. package/dist/resources/extensions/gsd/doctor.ts +64 -701
  94. package/dist/resources/extensions/gsd/errors.ts +0 -2
  95. package/dist/resources/extensions/gsd/export-html.ts +1357 -0
  96. package/dist/resources/extensions/gsd/export.ts +141 -4
  97. package/dist/resources/extensions/gsd/files.ts +8 -126
  98. package/dist/resources/extensions/gsd/forensics.ts +2 -12
  99. package/dist/resources/extensions/gsd/git-constants.ts +11 -0
  100. package/dist/resources/extensions/gsd/git-service.ts +19 -9
  101. package/dist/resources/extensions/gsd/gitignore.ts +4 -1
  102. package/dist/resources/extensions/gsd/gsd-db.ts +26 -6
  103. package/dist/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  104. package/dist/resources/extensions/gsd/guided-flow.ts +252 -516
  105. package/dist/resources/extensions/gsd/history.ts +2 -20
  106. package/dist/resources/extensions/gsd/index.ts +260 -46
  107. package/dist/resources/extensions/gsd/init-wizard.ts +615 -0
  108. package/dist/resources/extensions/gsd/jsonl-utils.ts +21 -0
  109. package/dist/resources/extensions/gsd/key-manager.ts +995 -0
  110. package/dist/resources/extensions/gsd/metrics.ts +32 -5
  111. package/dist/resources/extensions/gsd/migrate/command.ts +1 -1
  112. package/dist/resources/extensions/gsd/migrate/parsers.ts +10 -95
  113. package/dist/resources/extensions/gsd/milestone-actions.ts +126 -0
  114. package/dist/resources/extensions/gsd/milestone-ids.ts +95 -0
  115. package/dist/resources/extensions/gsd/native-git-bridge.ts +35 -12
  116. package/dist/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  117. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +231 -20
  118. package/dist/resources/extensions/gsd/paths.ts +1 -3
  119. package/dist/resources/extensions/gsd/plugin-importer.ts +3 -2
  120. package/dist/resources/extensions/gsd/preferences-hooks.ts +10 -0
  121. package/dist/resources/extensions/gsd/preferences-models.ts +323 -0
  122. package/dist/resources/extensions/gsd/preferences-skills.ts +169 -0
  123. package/dist/resources/extensions/gsd/preferences-types.ts +223 -0
  124. package/dist/resources/extensions/gsd/preferences-validation.ts +597 -0
  125. package/dist/resources/extensions/gsd/preferences.ts +219 -1286
  126. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  127. package/dist/resources/extensions/gsd/prompt-compressor.ts +508 -0
  128. package/dist/resources/extensions/gsd/prompt-loader.ts +4 -2
  129. package/dist/resources/extensions/gsd/prompt-ordering.ts +200 -0
  130. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  131. package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  132. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  133. package/dist/resources/extensions/gsd/prompts/discuss.md +13 -5
  134. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -2
  135. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  136. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  137. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  138. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  139. package/dist/resources/extensions/gsd/prompts/queue.md +30 -0
  140. package/dist/resources/extensions/gsd/prompts/quick-task.md +0 -6
  141. package/dist/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  142. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  143. package/dist/resources/extensions/gsd/prompts/system.md +6 -3
  144. package/dist/resources/extensions/gsd/provider-error-pause.ts +59 -10
  145. package/dist/resources/extensions/gsd/queue-order.ts +1 -1
  146. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  147. package/dist/resources/extensions/gsd/quick.ts +18 -15
  148. package/dist/resources/extensions/gsd/reports.ts +504 -0
  149. package/dist/resources/extensions/gsd/roadmap-slices.ts +1 -1
  150. package/dist/resources/extensions/gsd/safe-fs.ts +47 -0
  151. package/dist/resources/extensions/gsd/semantic-chunker.ts +336 -0
  152. package/dist/resources/extensions/gsd/session-forensics.ts +8 -23
  153. package/dist/resources/extensions/gsd/session-lock.ts +284 -0
  154. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +242 -0
  155. package/dist/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +83 -0
  156. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +64 -0
  157. package/dist/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +176 -0
  158. package/dist/resources/extensions/gsd/state.ts +84 -2
  159. package/dist/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  160. package/dist/resources/extensions/gsd/summary-distiller.ts +258 -0
  161. package/dist/resources/extensions/gsd/templates/preferences.md +34 -0
  162. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  163. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  164. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  165. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +13 -0
  166. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  167. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  168. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  169. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  170. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  171. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  172. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +81 -0
  173. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -0
  174. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +1 -0
  175. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +1 -0
  176. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +10 -1
  177. package/dist/resources/extensions/gsd/tests/detection.test.ts +398 -0
  178. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  179. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  180. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +132 -0
  181. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  182. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  183. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  184. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  185. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +14 -0
  186. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  187. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  188. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  189. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  190. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  191. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  192. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  193. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  194. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +1 -0
  195. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  196. package/dist/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  197. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +4 -1
  198. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  199. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +61 -0
  200. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  201. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  202. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +331 -0
  203. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +298 -0
  204. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +468 -0
  205. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +39 -10
  206. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  207. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  208. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +47 -0
  209. package/dist/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  210. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  211. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  212. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  213. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  214. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  215. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  216. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  217. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +42 -0
  218. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  219. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  220. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  221. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  222. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  223. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  224. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  225. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  226. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  227. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  228. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  229. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +75 -79
  230. package/dist/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  231. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  232. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  233. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +115 -1
  234. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +1 -1
  235. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +44 -10
  236. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  237. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  238. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  239. package/dist/resources/extensions/gsd/tests/worktree.test.ts +3 -1
  240. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  241. package/dist/resources/extensions/gsd/token-counter.ts +20 -0
  242. package/dist/resources/extensions/gsd/triage-ui.ts +1 -1
  243. package/dist/resources/extensions/gsd/types.ts +4 -1
  244. package/dist/resources/extensions/gsd/validate-directory.ts +164 -0
  245. package/dist/resources/extensions/gsd/verification-evidence.ts +7 -4
  246. package/dist/resources/extensions/gsd/verification-gate.ts +70 -5
  247. package/dist/resources/extensions/gsd/visualizer-data.ts +26 -4
  248. package/dist/resources/extensions/gsd/visualizer-overlay.ts +35 -22
  249. package/dist/resources/extensions/gsd/visualizer-views.ts +14 -66
  250. package/dist/resources/extensions/gsd/worktree-command.ts +4 -51
  251. package/dist/resources/extensions/gsd/worktree-manager.ts +7 -9
  252. package/dist/resources/extensions/gsd/worktree.ts +41 -1
  253. package/dist/resources/extensions/mcporter/index.ts +27 -14
  254. package/dist/resources/extensions/remote-questions/manager.ts +6 -24
  255. package/dist/resources/extensions/remote-questions/mod.ts +16 -0
  256. package/dist/resources/extensions/remote-questions/notify.ts +91 -0
  257. package/dist/resources/extensions/remote-questions/remote-command.ts +1 -1
  258. package/dist/resources/extensions/remote-questions/store.ts +5 -1
  259. package/dist/resources/extensions/remote-questions/types.ts +26 -3
  260. package/dist/resources/extensions/search-the-web/native-search.ts +7 -0
  261. package/dist/resources/extensions/search-the-web/provider.ts +15 -3
  262. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  263. package/dist/resources/extensions/search-the-web/tool-search.ts +27 -13
  264. package/dist/resources/extensions/shared/format-utils.ts +138 -0
  265. package/dist/resources/extensions/shared/frontmatter.ts +117 -0
  266. package/dist/resources/extensions/shared/mod.ts +30 -0
  267. package/dist/resources/extensions/shared/sanitize.ts +19 -0
  268. package/dist/resources/extensions/shared/tests/format-utils.test.ts +153 -0
  269. package/dist/resources/extensions/slash-commands/create-extension.ts +1 -1
  270. package/dist/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  271. package/dist/resources/extensions/subagent/index.ts +47 -3
  272. package/dist/resources/extensions/subagent/isolation.ts +9 -6
  273. package/dist/resources/extensions/ttsr/index.ts +5 -0
  274. package/dist/resources/extensions/ttsr/rule-loader.ts +4 -51
  275. package/dist/resources/extensions/universal-config/discovery.ts +37 -15
  276. package/dist/resources/extensions/voice/index.ts +1 -1
  277. package/dist/resources/skills/accessibility/SKILL.md +522 -0
  278. package/dist/resources/skills/accessibility/references/WCAG.md +162 -0
  279. package/dist/resources/skills/agent-browser/SKILL.md +517 -0
  280. package/dist/resources/skills/agent-browser/references/authentication.md +202 -0
  281. package/dist/resources/skills/agent-browser/references/commands.md +263 -0
  282. package/dist/resources/skills/agent-browser/references/profiling.md +120 -0
  283. package/dist/resources/skills/agent-browser/references/proxy-support.md +194 -0
  284. package/dist/resources/skills/agent-browser/references/session-management.md +193 -0
  285. package/dist/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  286. package/dist/resources/skills/agent-browser/references/video-recording.md +173 -0
  287. package/dist/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  288. package/dist/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  289. package/dist/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  290. package/dist/resources/skills/best-practices/SKILL.md +583 -0
  291. package/dist/resources/skills/code-optimizer/SKILL.md +160 -0
  292. package/dist/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  293. package/dist/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  294. package/dist/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  295. package/dist/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  296. package/dist/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  297. package/dist/resources/skills/code-optimizer/references/config-infra.md +71 -0
  298. package/dist/resources/skills/code-optimizer/references/data-structures.md +80 -0
  299. package/dist/resources/skills/code-optimizer/references/database-queries.md +76 -0
  300. package/dist/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  301. package/dist/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  302. package/dist/resources/skills/code-optimizer/references/io-network.md +89 -0
  303. package/dist/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  304. package/dist/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  305. package/dist/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  306. package/dist/resources/skills/code-optimizer/references/security-performance.md +68 -0
  307. package/dist/resources/skills/core-web-vitals/SKILL.md +441 -0
  308. package/dist/resources/skills/core-web-vitals/references/LCP.md +208 -0
  309. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  310. package/dist/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  311. package/dist/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  312. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  313. package/dist/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  314. package/dist/resources/skills/react-best-practices/README.md +123 -0
  315. package/dist/resources/skills/react-best-practices/SKILL.md +136 -0
  316. package/dist/resources/skills/react-best-practices/metadata.json +15 -0
  317. package/dist/resources/skills/react-best-practices/rules/_sections.md +46 -0
  318. package/dist/resources/skills/react-best-practices/rules/_template.md +28 -0
  319. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  320. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  321. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  322. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  323. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  324. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  325. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  326. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  327. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  328. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  329. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  330. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  331. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  332. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  333. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  334. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  335. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  336. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  337. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  338. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  339. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  340. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  341. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  342. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  343. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  344. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  345. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  346. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  347. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  348. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  349. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  350. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  351. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  352. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  353. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  354. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  355. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  356. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  357. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  358. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  359. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  360. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  361. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  362. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  363. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  364. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  365. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  366. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  367. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  368. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  369. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  370. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  371. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  372. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  373. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  374. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  375. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  376. package/dist/resources/skills/userinterface-wiki/SKILL.md +253 -0
  377. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  378. package/dist/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  379. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  380. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  381. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  382. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  383. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  384. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  385. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  386. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  387. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  388. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  389. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  390. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  391. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  392. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  393. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  394. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  395. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  396. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  397. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  398. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  399. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  400. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  401. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  402. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  403. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  404. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  405. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  406. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  407. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  408. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  409. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  410. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  411. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  412. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  413. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  414. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  415. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  416. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  417. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  418. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  419. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  420. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  421. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  422. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  423. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  424. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  425. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  426. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  427. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  428. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  429. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  430. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  431. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  432. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  433. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  434. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  435. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  436. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  437. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  438. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  439. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  440. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  441. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  442. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  443. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  444. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  445. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  446. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  447. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  448. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  449. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  450. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  451. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  452. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  453. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  454. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  455. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  456. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  457. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  458. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  459. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  460. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  461. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  462. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  463. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  464. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  465. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  466. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  467. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  468. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  469. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  470. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  471. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  472. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  473. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  474. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  475. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  476. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  477. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  478. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  479. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  480. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  481. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  482. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  483. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  484. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  485. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  486. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  487. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  488. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  489. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  490. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  491. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  492. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  493. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  494. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  495. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  496. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  497. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  498. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  499. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  500. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  501. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  502. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  503. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  504. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  505. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  506. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  507. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  508. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  509. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  510. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  511. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  512. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  513. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  514. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  515. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  516. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  517. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  518. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  519. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  520. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  521. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  522. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  523. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  524. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  525. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  526. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  527. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  528. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  529. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  530. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  531. package/dist/resources/skills/web-design-guidelines/SKILL.md +39 -0
  532. package/dist/resources/skills/web-quality-audit/SKILL.md +170 -0
  533. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  534. package/dist/update-check.js +1 -1
  535. package/package.json +20 -8
  536. package/packages/native/package.json +28 -0
  537. package/packages/pi-agent-core/package.json +6 -0
  538. package/packages/pi-ai/dist/models.generated.d.ts +43 -11
  539. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  540. package/packages/pi-ai/dist/models.generated.js +34 -26
  541. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  542. package/packages/pi-ai/dist/providers/anthropic.js +3 -2
  543. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  544. package/packages/pi-ai/dist/providers/openai-codex-responses.js +14 -4
  545. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  546. package/packages/pi-ai/dist/providers/openai-completions.js +7 -4
  547. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  548. package/packages/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  549. package/packages/pi-ai/dist/utils/oauth/anthropic.js +2 -0
  550. package/packages/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  551. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  552. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +5 -1
  553. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  554. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  555. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +4 -0
  556. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  557. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  558. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +6 -0
  559. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  560. package/packages/pi-ai/dist/utils/oauth/index.js +2 -2
  561. package/packages/pi-ai/dist/utils/oauth/index.js.map +1 -1
  562. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  563. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +2 -0
  564. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  565. package/packages/pi-ai/oauth.d.ts +1 -0
  566. package/packages/pi-ai/oauth.js +1 -0
  567. package/packages/pi-ai/package.json +2 -2
  568. package/packages/pi-ai/src/models.generated.ts +42 -34
  569. package/packages/pi-ai/src/providers/anthropic.ts +3 -2
  570. package/packages/pi-ai/src/providers/openai-codex-responses.ts +15 -4
  571. package/packages/pi-ai/src/providers/openai-completions.ts +7 -4
  572. package/packages/pi-ai/src/utils/oauth/anthropic.ts +2 -0
  573. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +5 -1
  574. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +4 -0
  575. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +6 -0
  576. package/packages/pi-ai/src/utils/oauth/index.ts +2 -2
  577. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +2 -0
  578. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  579. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  580. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  581. package/packages/pi-coding-agent/dist/core/auth-storage.js +2 -1
  582. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  583. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  584. package/packages/pi-coding-agent/dist/core/bash-executor.js +23 -1
  585. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  586. package/packages/pi-coding-agent/dist/core/blob-store.d.ts +8 -0
  587. package/packages/pi-coding-agent/dist/core/blob-store.d.ts.map +1 -1
  588. package/packages/pi-coding-agent/dist/core/blob-store.js +50 -1
  589. package/packages/pi-coding-agent/dist/core/blob-store.js.map +1 -1
  590. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  591. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +2 -1
  592. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  593. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  594. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +3 -2
  595. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  596. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  597. package/packages/pi-coding-agent/dist/core/compaction/utils.js +2 -2
  598. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  599. package/packages/pi-coding-agent/dist/core/constants.d.ts +29 -0
  600. package/packages/pi-coding-agent/dist/core/constants.d.ts.map +1 -0
  601. package/packages/pi-coding-agent/dist/core/constants.js +44 -0
  602. package/packages/pi-coding-agent/dist/core/constants.js.map +1 -0
  603. package/packages/pi-coding-agent/dist/core/extensions/loader.js +1 -1
  604. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  605. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  606. package/packages/pi-coding-agent/dist/core/extensions/runner.js +32 -10
  607. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  608. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts +2 -0
  609. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts.map +1 -0
  610. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +77 -0
  611. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -0
  612. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts +7 -0
  613. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts.map +1 -0
  614. package/packages/pi-coding-agent/dist/core/fs-utils.js +12 -0
  615. package/packages/pi-coding-agent/dist/core/fs-utils.js.map +1 -0
  616. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts +2 -0
  617. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts.map +1 -0
  618. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +67 -0
  619. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -0
  620. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  621. package/packages/pi-coding-agent/dist/core/lsp/client.js +29 -2
  622. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  623. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  624. package/packages/pi-coding-agent/dist/core/lsp/config.js +9 -2
  625. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  626. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  627. package/packages/pi-coding-agent/dist/core/lsp/index.js +30 -4
  628. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  629. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  630. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +13 -5
  631. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  632. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  633. package/packages/pi-coding-agent/dist/core/model-resolver.js +14 -0
  634. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  635. package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  636. package/packages/pi-coding-agent/dist/core/resolve-config-value.js +12 -4
  637. package/packages/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  638. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +49 -0
  639. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  640. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +7 -0
  641. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  642. package/packages/pi-coding-agent/dist/core/session-manager.js +108 -14
  643. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  644. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  645. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  646. package/packages/pi-coding-agent/dist/core/settings-manager.js +14 -5
  647. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  648. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js +2 -2
  649. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  651. package/packages/pi-coding-agent/dist/core/tools/find.js +2 -1
  652. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  653. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js +4 -4
  654. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -1
  655. package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts +1 -1
  656. package/packages/pi-coding-agent/dist/core/tools/hashline.js +1 -1
  657. package/packages/pi-coding-agent/dist/core/tools/hashline.js.map +1 -1
  658. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js +8 -8
  659. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -1
  660. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +1 -1
  661. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -1
  662. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  663. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts +1 -0
  664. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  665. package/packages/pi-coding-agent/dist/core/tools/path-utils.js +1 -1
  666. package/packages/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  667. package/packages/pi-coding-agent/dist/core/tools/truncate.d.ts.map +1 -1
  668. package/packages/pi-coding-agent/dist/core/tools/truncate.js +2 -1
  669. package/packages/pi-coding-agent/dist/core/tools/truncate.js.map +1 -1
  670. package/packages/pi-coding-agent/dist/index.d.ts +2 -1
  671. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  672. package/packages/pi-coding-agent/dist/index.js +3 -1
  673. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  674. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  675. package/packages/pi-coding-agent/dist/main.js +6 -0
  676. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  677. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +9 -0
  678. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  679. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +47 -5
  680. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  681. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts +1 -1
  682. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
  683. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js +1 -1
  684. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
  685. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +4 -4
  686. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  687. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  688. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  689. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +12 -0
  690. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  691. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  692. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +30 -2
  693. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  694. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  695. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +11 -0
  696. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  697. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  698. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +12 -2
  699. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  700. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.d.ts.map +1 -1
  701. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js +25 -3
  702. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js.map +1 -1
  703. package/packages/pi-coding-agent/package.json +0 -4
  704. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  705. package/packages/pi-coding-agent/src/core/auth-storage.ts +2 -1
  706. package/packages/pi-coding-agent/src/core/bash-executor.ts +23 -1
  707. package/packages/pi-coding-agent/src/core/blob-store.ts +46 -1
  708. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -1
  709. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -2
  710. package/packages/pi-coding-agent/src/core/compaction/utils.ts +2 -2
  711. package/packages/pi-coding-agent/src/core/constants.ts +59 -0
  712. package/packages/pi-coding-agent/src/core/extensions/loader.ts +1 -1
  713. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +84 -0
  714. package/packages/pi-coding-agent/src/core/extensions/runner.ts +31 -10
  715. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +66 -0
  716. package/packages/pi-coding-agent/src/core/fs-utils.ts +12 -0
  717. package/packages/pi-coding-agent/src/core/lsp/client.ts +30 -2
  718. package/packages/pi-coding-agent/src/core/lsp/config.ts +9 -2
  719. package/packages/pi-coding-agent/src/core/lsp/index.ts +31 -5
  720. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +13 -5
  721. package/packages/pi-coding-agent/src/core/model-resolver.ts +14 -0
  722. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +58 -0
  723. package/packages/pi-coding-agent/src/core/resolve-config-value.ts +14 -4
  724. package/packages/pi-coding-agent/src/core/session-manager.ts +113 -18
  725. package/packages/pi-coding-agent/src/core/settings-manager.ts +22 -5
  726. package/packages/pi-coding-agent/src/core/tools/edit-diff.ts +2 -2
  727. package/packages/pi-coding-agent/src/core/tools/find.ts +2 -1
  728. package/packages/pi-coding-agent/src/core/tools/hashline-edit.ts +4 -4
  729. package/packages/pi-coding-agent/src/core/tools/hashline.test.ts +8 -8
  730. package/packages/pi-coding-agent/src/core/tools/hashline.ts +1 -1
  731. package/packages/pi-coding-agent/src/core/tools/index.ts +1 -1
  732. package/packages/pi-coding-agent/src/core/tools/path-utils.ts +1 -1
  733. package/packages/pi-coding-agent/src/core/tools/truncate.ts +3 -1
  734. package/packages/pi-coding-agent/src/index.ts +9 -0
  735. package/packages/pi-coding-agent/src/main.ts +7 -0
  736. package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +49 -5
  737. package/packages/pi-coding-agent/src/modes/interactive/components/index.ts +1 -1
  738. package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +4 -4
  739. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  740. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +32 -1
  741. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +12 -0
  742. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +11 -2
  743. package/packages/pi-coding-agent/src/resources/extensions/memory/pipeline.ts +23 -3
  744. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts +2 -0
  745. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts.map +1 -0
  746. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +149 -0
  747. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -0
  748. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts +2 -0
  749. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts.map +1 -0
  750. package/packages/pi-tui/dist/__tests__/fuzzy.test.js +94 -0
  751. package/packages/pi-tui/dist/__tests__/fuzzy.test.js.map +1 -0
  752. package/packages/pi-tui/dist/autocomplete.d.ts +5 -1
  753. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  754. package/packages/pi-tui/dist/autocomplete.js +6 -2
  755. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  756. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  757. package/packages/pi-tui/dist/components/editor.js +1 -1
  758. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  759. package/packages/pi-tui/package.json +8 -2
  760. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +186 -0
  761. package/packages/pi-tui/src/__tests__/fuzzy.test.ts +112 -0
  762. package/packages/pi-tui/src/autocomplete.ts +8 -1
  763. package/packages/pi-tui/src/components/editor.ts +3 -1
  764. package/src/resources/extensions/ask-user-questions.ts +3 -2
  765. package/src/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  766. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  767. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  768. package/src/resources/extensions/bg-shell/index.ts +18 -1545
  769. package/src/resources/extensions/bg-shell/overlay.ts +4 -0
  770. package/src/resources/extensions/bg-shell/process-manager.ts +45 -0
  771. package/src/resources/extensions/bg-shell/types.ts +21 -1
  772. package/src/resources/extensions/bg-shell/utilities.ts +4 -16
  773. package/src/resources/extensions/browser-tools/capture.ts +34 -2
  774. package/src/resources/extensions/browser-tools/lifecycle.ts +5 -5
  775. package/src/resources/extensions/browser-tools/settle.ts +1 -1
  776. package/src/resources/extensions/browser-tools/state.ts +5 -5
  777. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  778. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  779. package/src/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  780. package/src/resources/extensions/browser-tools/tools/device.ts +1 -1
  781. package/src/resources/extensions/browser-tools/tools/extract.ts +1 -1
  782. package/src/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  783. package/src/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  784. package/src/resources/extensions/browser-tools/tools/pages.ts +1 -1
  785. package/src/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  786. package/src/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  787. package/src/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  788. package/src/resources/extensions/browser-tools/utils.ts +5 -5
  789. package/src/resources/extensions/get-secrets-from-user.ts +1 -1
  790. package/src/resources/extensions/google-search/index.ts +21 -8
  791. package/src/resources/extensions/gsd/activity-log.ts +2 -1
  792. package/src/resources/extensions/gsd/atomic-write.ts +35 -0
  793. package/src/resources/extensions/gsd/auto/session.ts +236 -0
  794. package/src/resources/extensions/gsd/auto-budget.ts +32 -0
  795. package/src/resources/extensions/gsd/auto-dashboard.ts +147 -13
  796. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +229 -0
  797. package/src/resources/extensions/gsd/auto-dispatch.ts +23 -10
  798. package/src/resources/extensions/gsd/auto-idempotency.ts +150 -0
  799. package/src/resources/extensions/gsd/auto-model-selection.ts +179 -0
  800. package/src/resources/extensions/gsd/auto-observability.ts +74 -0
  801. package/src/resources/extensions/gsd/auto-post-unit.ts +591 -0
  802. package/src/resources/extensions/gsd/auto-prompts.ts +116 -23
  803. package/src/resources/extensions/gsd/auto-recovery.ts +20 -9
  804. package/src/resources/extensions/gsd/auto-start.ts +500 -0
  805. package/src/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  806. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +262 -0
  807. package/src/resources/extensions/gsd/auto-timers.ts +223 -0
  808. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  809. package/src/resources/extensions/gsd/auto-unit-closeout.ts +48 -0
  810. package/src/resources/extensions/gsd/auto-verification.ts +195 -0
  811. package/src/resources/extensions/gsd/auto-worktree-sync.ts +184 -0
  812. package/src/resources/extensions/gsd/auto-worktree.ts +83 -67
  813. package/src/resources/extensions/gsd/auto.ts +825 -3069
  814. package/src/resources/extensions/gsd/commands-config.ts +102 -0
  815. package/src/resources/extensions/gsd/commands-handlers.ts +402 -0
  816. package/src/resources/extensions/gsd/commands-inspect.ts +90 -0
  817. package/src/resources/extensions/gsd/commands-logs.ts +537 -0
  818. package/src/resources/extensions/gsd/commands-maintenance.ts +206 -0
  819. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +747 -0
  820. package/src/resources/extensions/gsd/commands.ts +380 -1433
  821. package/src/resources/extensions/gsd/constants.ts +21 -0
  822. package/src/resources/extensions/gsd/context-budget.ts +25 -2
  823. package/src/resources/extensions/gsd/crash-recovery.ts +4 -2
  824. package/src/resources/extensions/gsd/dashboard-overlay.ts +58 -74
  825. package/src/resources/extensions/gsd/db-writer.ts +21 -2
  826. package/src/resources/extensions/gsd/detection.ts +469 -0
  827. package/src/resources/extensions/gsd/diff-context.ts +2 -1
  828. package/src/resources/extensions/gsd/dispatch-guard.ts +4 -0
  829. package/src/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  830. package/src/resources/extensions/gsd/doctor-checks.ts +564 -0
  831. package/src/resources/extensions/gsd/doctor-format.ts +78 -0
  832. package/src/resources/extensions/gsd/doctor-proactive.ts +9 -4
  833. package/src/resources/extensions/gsd/doctor-types.ts +72 -0
  834. package/src/resources/extensions/gsd/doctor.ts +64 -701
  835. package/src/resources/extensions/gsd/errors.ts +0 -2
  836. package/src/resources/extensions/gsd/export-html.ts +1357 -0
  837. package/src/resources/extensions/gsd/export.ts +141 -4
  838. package/src/resources/extensions/gsd/files.ts +8 -126
  839. package/src/resources/extensions/gsd/forensics.ts +2 -12
  840. package/src/resources/extensions/gsd/git-constants.ts +11 -0
  841. package/src/resources/extensions/gsd/git-service.ts +19 -9
  842. package/src/resources/extensions/gsd/gitignore.ts +4 -1
  843. package/src/resources/extensions/gsd/gsd-db.ts +26 -6
  844. package/src/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  845. package/src/resources/extensions/gsd/guided-flow.ts +252 -516
  846. package/src/resources/extensions/gsd/history.ts +2 -20
  847. package/src/resources/extensions/gsd/index.ts +260 -46
  848. package/src/resources/extensions/gsd/init-wizard.ts +615 -0
  849. package/src/resources/extensions/gsd/jsonl-utils.ts +21 -0
  850. package/src/resources/extensions/gsd/key-manager.ts +995 -0
  851. package/src/resources/extensions/gsd/metrics.ts +32 -5
  852. package/src/resources/extensions/gsd/migrate/command.ts +1 -1
  853. package/src/resources/extensions/gsd/migrate/parsers.ts +10 -95
  854. package/src/resources/extensions/gsd/milestone-actions.ts +126 -0
  855. package/src/resources/extensions/gsd/milestone-ids.ts +95 -0
  856. package/src/resources/extensions/gsd/native-git-bridge.ts +35 -12
  857. package/src/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  858. package/src/resources/extensions/gsd/parallel-orchestrator.ts +231 -20
  859. package/src/resources/extensions/gsd/paths.ts +1 -3
  860. package/src/resources/extensions/gsd/plugin-importer.ts +3 -2
  861. package/src/resources/extensions/gsd/preferences-hooks.ts +10 -0
  862. package/src/resources/extensions/gsd/preferences-models.ts +323 -0
  863. package/src/resources/extensions/gsd/preferences-skills.ts +169 -0
  864. package/src/resources/extensions/gsd/preferences-types.ts +223 -0
  865. package/src/resources/extensions/gsd/preferences-validation.ts +597 -0
  866. package/src/resources/extensions/gsd/preferences.ts +219 -1286
  867. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  868. package/src/resources/extensions/gsd/prompt-compressor.ts +508 -0
  869. package/src/resources/extensions/gsd/prompt-loader.ts +4 -2
  870. package/src/resources/extensions/gsd/prompt-ordering.ts +200 -0
  871. package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  872. package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  873. package/src/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  874. package/src/resources/extensions/gsd/prompts/discuss.md +13 -5
  875. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -2
  876. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  877. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  878. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  879. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  880. package/src/resources/extensions/gsd/prompts/queue.md +30 -0
  881. package/src/resources/extensions/gsd/prompts/quick-task.md +0 -6
  882. package/src/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  883. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  884. package/src/resources/extensions/gsd/prompts/system.md +6 -3
  885. package/src/resources/extensions/gsd/provider-error-pause.ts +59 -10
  886. package/src/resources/extensions/gsd/queue-order.ts +1 -1
  887. package/src/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  888. package/src/resources/extensions/gsd/quick.ts +18 -15
  889. package/src/resources/extensions/gsd/reports.ts +504 -0
  890. package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
  891. package/src/resources/extensions/gsd/safe-fs.ts +47 -0
  892. package/src/resources/extensions/gsd/semantic-chunker.ts +336 -0
  893. package/src/resources/extensions/gsd/session-forensics.ts +8 -23
  894. package/src/resources/extensions/gsd/session-lock.ts +284 -0
  895. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +242 -0
  896. package/src/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +83 -0
  897. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +64 -0
  898. package/src/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +176 -0
  899. package/src/resources/extensions/gsd/state.ts +84 -2
  900. package/src/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  901. package/src/resources/extensions/gsd/summary-distiller.ts +258 -0
  902. package/src/resources/extensions/gsd/templates/preferences.md +34 -0
  903. package/src/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  904. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  905. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  906. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +13 -0
  907. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  908. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  909. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  910. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  911. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  912. package/src/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  913. package/src/resources/extensions/gsd/tests/continue-here.test.ts +81 -0
  914. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -0
  915. package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +1 -0
  916. package/src/resources/extensions/gsd/tests/derive-state-draft.test.ts +1 -0
  917. package/src/resources/extensions/gsd/tests/derive-state.test.ts +10 -1
  918. package/src/resources/extensions/gsd/tests/detection.test.ts +398 -0
  919. package/src/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  920. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  921. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +132 -0
  922. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  923. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  924. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  925. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  926. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +14 -0
  927. package/src/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  928. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  929. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  930. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  931. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  932. package/src/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  933. package/src/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  934. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  935. package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +1 -0
  936. package/src/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  937. package/src/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  938. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +4 -1
  939. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  940. package/src/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +61 -0
  941. package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  942. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  943. package/src/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +331 -0
  944. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +298 -0
  945. package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +468 -0
  946. package/src/resources/extensions/gsd/tests/parallel-orchestration.test.ts +39 -10
  947. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  948. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  949. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +47 -0
  950. package/src/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  951. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  952. package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  953. package/src/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  954. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  955. package/src/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  956. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  957. package/src/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  958. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +42 -0
  959. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  960. package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  961. package/src/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  962. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  963. package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  964. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  965. package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  966. package/src/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  967. package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  968. package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  969. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  970. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +75 -79
  971. package/src/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  972. package/src/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  973. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  974. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +115 -1
  975. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +1 -1
  976. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +44 -10
  977. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  978. package/src/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  979. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  980. package/src/resources/extensions/gsd/tests/worktree.test.ts +3 -1
  981. package/src/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  982. package/src/resources/extensions/gsd/token-counter.ts +20 -0
  983. package/src/resources/extensions/gsd/triage-ui.ts +1 -1
  984. package/src/resources/extensions/gsd/types.ts +4 -1
  985. package/src/resources/extensions/gsd/validate-directory.ts +164 -0
  986. package/src/resources/extensions/gsd/verification-evidence.ts +7 -4
  987. package/src/resources/extensions/gsd/verification-gate.ts +70 -5
  988. package/src/resources/extensions/gsd/visualizer-data.ts +26 -4
  989. package/src/resources/extensions/gsd/visualizer-overlay.ts +35 -22
  990. package/src/resources/extensions/gsd/visualizer-views.ts +14 -66
  991. package/src/resources/extensions/gsd/worktree-command.ts +4 -51
  992. package/src/resources/extensions/gsd/worktree-manager.ts +7 -9
  993. package/src/resources/extensions/gsd/worktree.ts +41 -1
  994. package/src/resources/extensions/mcporter/index.ts +27 -14
  995. package/src/resources/extensions/remote-questions/manager.ts +6 -24
  996. package/src/resources/extensions/remote-questions/mod.ts +16 -0
  997. package/src/resources/extensions/remote-questions/notify.ts +91 -0
  998. package/src/resources/extensions/remote-questions/remote-command.ts +1 -1
  999. package/src/resources/extensions/remote-questions/store.ts +5 -1
  1000. package/src/resources/extensions/remote-questions/types.ts +26 -3
  1001. package/src/resources/extensions/search-the-web/native-search.ts +7 -0
  1002. package/src/resources/extensions/search-the-web/provider.ts +15 -3
  1003. package/src/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  1004. package/src/resources/extensions/search-the-web/tool-search.ts +27 -13
  1005. package/src/resources/extensions/shared/format-utils.ts +138 -0
  1006. package/src/resources/extensions/shared/frontmatter.ts +117 -0
  1007. package/src/resources/extensions/shared/mod.ts +30 -0
  1008. package/src/resources/extensions/shared/sanitize.ts +19 -0
  1009. package/src/resources/extensions/shared/tests/format-utils.test.ts +153 -0
  1010. package/src/resources/extensions/slash-commands/create-extension.ts +1 -1
  1011. package/src/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  1012. package/src/resources/extensions/subagent/index.ts +47 -3
  1013. package/src/resources/extensions/subagent/isolation.ts +9 -6
  1014. package/src/resources/extensions/ttsr/index.ts +5 -0
  1015. package/src/resources/extensions/ttsr/rule-loader.ts +4 -51
  1016. package/src/resources/extensions/universal-config/discovery.ts +37 -15
  1017. package/src/resources/extensions/voice/index.ts +1 -1
  1018. package/src/resources/skills/accessibility/SKILL.md +522 -0
  1019. package/src/resources/skills/accessibility/references/WCAG.md +162 -0
  1020. package/src/resources/skills/agent-browser/SKILL.md +517 -0
  1021. package/src/resources/skills/agent-browser/references/authentication.md +202 -0
  1022. package/src/resources/skills/agent-browser/references/commands.md +263 -0
  1023. package/src/resources/skills/agent-browser/references/profiling.md +120 -0
  1024. package/src/resources/skills/agent-browser/references/proxy-support.md +194 -0
  1025. package/src/resources/skills/agent-browser/references/session-management.md +193 -0
  1026. package/src/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  1027. package/src/resources/skills/agent-browser/references/video-recording.md +173 -0
  1028. package/src/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  1029. package/src/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  1030. package/src/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  1031. package/src/resources/skills/best-practices/SKILL.md +583 -0
  1032. package/src/resources/skills/code-optimizer/SKILL.md +160 -0
  1033. package/src/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  1034. package/src/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  1035. package/src/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  1036. package/src/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  1037. package/src/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  1038. package/src/resources/skills/code-optimizer/references/config-infra.md +71 -0
  1039. package/src/resources/skills/code-optimizer/references/data-structures.md +80 -0
  1040. package/src/resources/skills/code-optimizer/references/database-queries.md +76 -0
  1041. package/src/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  1042. package/src/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  1043. package/src/resources/skills/code-optimizer/references/io-network.md +89 -0
  1044. package/src/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  1045. package/src/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  1046. package/src/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  1047. package/src/resources/skills/code-optimizer/references/security-performance.md +68 -0
  1048. package/src/resources/skills/core-web-vitals/SKILL.md +441 -0
  1049. package/src/resources/skills/core-web-vitals/references/LCP.md +208 -0
  1050. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  1051. package/src/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  1052. package/src/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  1053. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  1054. package/src/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  1055. package/src/resources/skills/react-best-practices/README.md +123 -0
  1056. package/src/resources/skills/react-best-practices/SKILL.md +136 -0
  1057. package/src/resources/skills/react-best-practices/metadata.json +15 -0
  1058. package/src/resources/skills/react-best-practices/rules/_sections.md +46 -0
  1059. package/src/resources/skills/react-best-practices/rules/_template.md +28 -0
  1060. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  1061. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  1062. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  1063. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  1064. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  1065. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  1066. package/src/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  1067. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  1068. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  1069. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  1070. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  1071. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  1072. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  1073. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  1074. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  1075. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  1076. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  1077. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  1078. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  1079. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  1080. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  1081. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  1082. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  1083. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  1084. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  1085. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  1086. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  1087. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  1088. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  1089. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  1090. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  1091. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  1092. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  1093. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  1094. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  1095. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  1096. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  1097. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  1098. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  1099. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  1100. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  1101. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  1102. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  1103. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  1104. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  1105. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  1106. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  1107. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  1108. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  1109. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  1110. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  1111. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  1112. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  1113. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  1114. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  1115. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  1116. package/src/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  1117. package/src/resources/skills/userinterface-wiki/SKILL.md +253 -0
  1118. package/src/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  1119. package/src/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  1120. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  1121. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  1122. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  1123. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  1124. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  1125. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  1126. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  1127. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  1128. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  1129. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  1130. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  1131. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  1132. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  1133. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  1134. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  1135. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  1136. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  1137. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  1138. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  1139. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  1140. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  1141. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  1142. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  1143. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  1144. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  1145. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  1146. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  1147. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  1148. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  1149. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  1150. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  1151. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  1152. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  1153. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  1154. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  1155. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  1156. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  1157. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  1158. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  1159. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  1160. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  1161. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  1162. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  1163. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  1164. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  1165. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  1166. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  1167. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  1168. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  1169. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  1170. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  1171. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  1172. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  1173. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  1174. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  1175. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  1176. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  1177. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  1178. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  1179. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  1180. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  1181. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  1182. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  1183. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  1184. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  1185. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  1186. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  1187. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  1188. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  1189. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  1190. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  1191. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  1192. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  1193. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  1194. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  1195. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  1196. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  1197. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  1198. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  1199. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  1200. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  1201. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  1202. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  1203. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  1204. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  1205. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  1206. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  1207. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  1208. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  1209. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  1210. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  1211. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  1212. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  1213. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  1214. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  1215. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  1216. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  1217. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  1218. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  1219. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  1220. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  1221. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  1222. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  1223. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  1224. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  1225. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  1226. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  1227. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  1228. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  1229. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  1230. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  1231. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  1232. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  1233. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  1234. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  1235. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  1236. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  1237. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  1238. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  1239. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  1240. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  1241. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  1242. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  1243. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  1244. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  1245. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  1246. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  1247. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  1248. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  1249. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  1250. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  1251. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  1252. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  1253. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  1254. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  1255. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  1256. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  1257. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  1258. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  1259. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  1260. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  1261. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  1262. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  1263. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  1264. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  1265. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  1266. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  1267. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  1268. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  1269. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  1270. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  1271. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  1272. package/src/resources/skills/web-design-guidelines/SKILL.md +39 -0
  1273. package/src/resources/skills/web-quality-audit/SKILL.md +170 -0
  1274. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  1275. package/dist/resources/extensions/gsd/complexity.ts +0 -237
  1276. package/dist/resources/extensions/gsd/github-client.ts +0 -235
  1277. package/dist/resources/extensions/gsd/mcp-server.ts +0 -108
  1278. package/dist/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1279. package/dist/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1280. package/dist/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1281. package/dist/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1282. package/dist/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1283. package/dist/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1284. package/dist/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1285. package/dist/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -54
  1286. package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1287. package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1288. package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1289. package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1290. package/dist/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1291. package/dist/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1292. package/dist/resources/extensions/shared/bundled-extension-paths.ts +0 -11
  1293. package/src/resources/extensions/gsd/complexity.ts +0 -237
  1294. package/src/resources/extensions/gsd/github-client.ts +0 -235
  1295. package/src/resources/extensions/gsd/mcp-server.ts +0 -108
  1296. package/src/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1297. package/src/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1298. package/src/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1299. package/src/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1300. package/src/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1301. package/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1302. package/src/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1303. package/src/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -54
  1304. package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1305. package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1306. package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1307. package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1308. package/src/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1309. package/src/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1310. package/src/resources/extensions/shared/bundled-extension-paths.ts +0 -11
package/README.md CHANGED
@@ -18,10 +18,31 @@ One command. Walk away. Come back to a built project with clean git history.
18
18
 
19
19
  <pre><code>npm install -g gsd-pi</code></pre>
20
20
 
21
+ > **📋 NOTICE: New to Node on Mac?** If you installed Node.js via Homebrew, you may be running a development release instead of LTS. **[Read this guide](./docs/node-lts-macos.md)** to pin Node 24 LTS and avoid compatibility issues.
22
+
21
23
  </div>
22
24
 
23
25
  ---
24
26
 
27
+ ## What's New in v2.28
28
+
29
+ - **`gsd headless query`** — instant JSON snapshot of project state (~50ms, no LLM session)
30
+ - **`/gsd update`** — update GSD to the latest version without leaving your session
31
+ - **`/gsd export --html --all`** — generate retrospective HTML reports for all milestones at once
32
+ - **Reliability hardening** — atomic file writes, OAuth fetch timeouts, RPC exit detection, blob GC, LSP init retry with backoff
33
+ - **RPC utilities** now part of the public API for headless/scripted integrations
34
+ - **npm** established as the canonical package manager
35
+ - **CI/CD Pipeline** — three-stage promotion (Dev → Test → Prod) with automated versioning
36
+ - **Docker support** — containerized builds with multi-stage Dockerfile
37
+ - **`/gsd keys`** — full API key lifecycle management (list, add, remove, test, rotate, doctor)
38
+ - **Milestone parking** — park in-progress milestones to work on something else, unpark to resume
39
+ - **Studio** — experimental Electron desktop app (early preview)
40
+ - **Per-project MCP config** — `.gsd/mcp.json` for project-scoped MCP server definitions
41
+
42
+ See the full [Changelog](./CHANGELOG.md) for details.
43
+
44
+ ---
45
+
25
46
  ## Documentation
26
47
 
27
48
  Full documentation is available in the [`docs/`](./docs/) directory:
@@ -38,7 +59,9 @@ Full documentation is available in the [`docs/`](./docs/) directory:
38
59
  - **[Commands Reference](./docs/commands.md)** — all commands and keyboard shortcuts
39
60
  - **[Architecture](./docs/architecture.md)** — system design and dispatch pipeline
40
61
  - **[Troubleshooting](./docs/troubleshooting.md)** — common issues, doctor, forensics, recovery
62
+ - **[CI/CD Pipeline](./docs/ci-cd-pipeline.md)** — three-stage promotion pipeline (Dev → Test → Prod)
41
63
  - **[VS Code Extension](./vscode-extension/README.md)** — chat participant, sidebar dashboard, RPC integration
64
+ - **[Visualizer](./docs/visualizer.md)** — workflow visualizer with stats and discussion status
42
65
  - **[Migration from v1](./docs/migration.md)** — `.planning` → `.gsd` migration
43
66
 
44
67
  ---
@@ -67,6 +90,9 @@ GSD v2 solves all of these because it's not a prompt framework anymore — it's
67
90
  | Context injection | "Read this file" | Pre-inlined into dispatch prompt |
68
91
  | Roadmap reassessment | Manual | Automatic after each slice completes |
69
92
  | Skill discovery | None | Auto-detect and install relevant skills during research |
93
+ | Verification | Manual | Automated verification commands with auto-fix retries |
94
+ | Reporting | None | Self-contained HTML reports with metrics and dep graphs |
95
+ | Parallel execution | None | Multi-worker parallel milestone orchestration |
70
96
 
71
97
  ### Migrating from v1
72
98
 
@@ -117,7 +143,7 @@ Research → Plan → Execute (per task) → Complete → Reassess Roadmap → N
117
143
  Validate Milestone → Complete Milestone
118
144
  ```
119
145
 
120
- **Research** scouts the codebase and relevant docs. **Plan** decomposes the slice into tasks with must-haves (mechanically verifiable outcomes). **Execute** runs each task in a fresh context window with only the relevant files pre-loaded. **Complete** writes the summary, UAT script, marks the roadmap, and commits. **Reassess** checks if the roadmap still makes sense given what was learned. **Validate Milestone** runs a reconciliation gate after all slices complete — comparing roadmap success criteria against actual results before sealing the milestone.
146
+ **Research** scouts the codebase and relevant docs. **Plan** decomposes the slice into tasks with must-haves (mechanically verifiable outcomes). **Execute** runs each task in a fresh context window with only the relevant files pre-loaded — then runs configured verification commands (lint, test, etc.) with auto-fix retries. **Complete** writes the summary, UAT script, marks the roadmap, and commits with meaningful messages derived from task summaries. **Reassess** checks if the roadmap still makes sense given what was learned. **Validate Milestone** runs a reconciliation gate after all slices complete — comparing roadmap success criteria against actual results before sealing the milestone.
121
147
 
122
148
  ### `/gsd auto` — The Main Event
123
149
 
@@ -137,17 +163,23 @@ Auto mode is a state machine driven by files on disk. It reads `.gsd/STATE.md`,
137
163
 
138
164
  3. **Git worktree isolation** — Each milestone runs in its own git worktree with a `milestone/<MID>` branch. All slice work commits sequentially — no branch switching, no merge conflicts. When the milestone completes, it's squash-merged to main as one clean commit.
139
165
 
140
- 4. **Crash recovery** — A lock file tracks the current unit. If the session dies, the next `/gsd auto` reads the surviving session file, synthesizes a recovery briefing from every tool call that made it to disk, and resumes with full context.
166
+ 4. **Crash recovery** — A lock file tracks the current unit. If the session dies, the next `/gsd auto` reads the surviving session file, synthesizes a recovery briefing from every tool call that made it to disk, and resumes with full context. Parallel orchestrator state is persisted to disk with PID liveness detection, so multi-worker sessions survive crashes too. In headless mode, crashes trigger automatic restart with exponential backoff (default 3 attempts).
167
+
168
+ 5. **Provider error recovery** — Transient provider errors (rate limits, 500/503 server errors, overloaded) auto-resume after a delay. Permanent errors (auth, billing) pause for manual review. The model fallback chain retries transient network errors before switching models.
169
+
170
+ 6. **Stuck detection** — If the same unit dispatches twice (the LLM didn't produce the expected artifact), it retries once with a deep diagnostic. If it fails again, auto mode stops with the exact file it expected.
141
171
 
142
- 5. **Stuck detection** — If the same unit dispatches twice (the LLM didn't produce the expected artifact), it retries once with a deep diagnostic. If it fails again, auto mode stops with the exact file it expected.
172
+ 7. **Timeout supervision** — Soft timeout warns the LLM to wrap up. Idle watchdog detects stalls. Hard timeout pauses auto mode. Recovery steering nudges the LLM to finish durable output before giving up.
143
173
 
144
- 6. **Timeout supervision** — Soft timeout warns the LLM to wrap up. Idle watchdog detects stalls. Hard timeout pauses auto mode. Recovery steering nudges the LLM to finish durable output before giving up.
174
+ 8. **Cost tracking** — Every unit's token usage and cost is captured, broken down by phase, slice, and model. The dashboard shows running totals and projections. Budget ceilings can pause auto mode before overspending.
145
175
 
146
- 7. **Cost tracking** — Every unit's token usage and cost is captured, broken down by phase, slice, and model. The dashboard shows running totals and projections. Budget ceilings can pause auto mode before overspending.
176
+ 9. **Adaptive replanning** — After each slice completes, the roadmap is reassessed. If the work revealed new information that changes the plan, slices are reordered, added, or removed before continuing.
147
177
 
148
- 8. **Adaptive replanning** — After each slice completes, the roadmap is reassessed. If the work revealed new information that changes the plan, slices are reordered, added, or removed before continuing.
178
+ 10. **Verification enforcement** — Configure shell commands (`npm run lint`, `npm run test`, etc.) that run automatically after task execution. Failures trigger auto-fix retries before advancing. Configurable via `verification_commands`, `verification_auto_fix`, and `verification_max_retries` preferences.
149
179
 
150
- 9. **Escape hatch** — Press Escape to pause. The conversation is preserved. Interact with the agent, inspect what happened, or just `/gsd auto` to resume from disk state.
180
+ 11. **Milestone validation** — After all slices complete, a `validate-milestone` gate compares roadmap success criteria against actual results before sealing the milestone.
181
+
182
+ 12. **Escape hatch** — Press Escape to pause. The conversation is preserved. Interact with the agent, inspect what happened, or just `/gsd auto` to resume from disk state.
151
183
 
152
184
  ### `/gsd` and `/gsd next` — Step Mode
153
185
 
@@ -233,17 +265,22 @@ Both terminals read and write the same `.gsd/` files on disk. Your decisions in
233
265
  # Run auto mode in CI
234
266
  gsd headless --timeout 600000
235
267
 
268
+ # Create and execute a milestone end-to-end
269
+ gsd headless new-milestone --context spec.md --auto
270
+
236
271
  # One unit at a time (cron-friendly)
237
272
  gsd headless next
238
273
 
239
- # Machine-readable status
240
- gsd headless --json status
274
+ # Instant JSON snapshot (no LLM, ~50ms)
275
+ gsd headless query
241
276
 
242
277
  # Force a specific pipeline phase
243
278
  gsd headless dispatch plan
244
279
  ```
245
280
 
246
- Headless auto-responds to interactive prompts, detects completion, and exits with structured codes: `0` complete, `1` error/timeout, `2` blocked. Pair with [remote questions](./docs/remote-questions.md) to route decisions to Slack or Discord when human input is needed.
281
+ Headless auto-responds to interactive prompts, detects completion, and exits with structured codes: `0` complete, `1` error/timeout, `2` blocked. Auto-restarts on crash with exponential backoff. Use `gsd headless query` for instant, machine-readable state inspection — returns phase, next dispatch preview, and parallel worker costs as a single JSON object without spawning an LLM session. Pair with [remote questions](./docs/remote-questions.md) to route decisions to Slack or Discord when human input is needed.
282
+
283
+ **Multi-session orchestration** — headless mode supports file-based IPC in `.gsd/parallel/` for coordinating multiple GSD workers across milestones. Build orchestrators that spawn, monitor, and budget-cap a fleet of GSD workers.
247
284
 
248
285
  ### First launch
249
286
 
@@ -269,6 +306,8 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
269
306
  | `/gsd forensics` | Post-mortem investigation of auto-mode failures |
270
307
  | `/gsd cleanup` | Archive phase directories from completed milestones |
271
308
  | `/gsd doctor` | Runtime health checks with auto-fix for common issues |
309
+ | `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
310
+ | `/gsd export --html` | Generate HTML report for current or completed milestone |
272
311
  | `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
273
312
  | `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
274
313
  | `/exit` | Graceful shutdown — saves session state before exiting |
@@ -277,9 +316,11 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
277
316
  | `Ctrl+Alt+G` | Toggle dashboard overlay |
278
317
  | `Ctrl+Alt+V` | Toggle voice transcription |
279
318
  | `Ctrl+Alt+B` | Show background shell processes |
319
+ | `Alt+V` | Paste clipboard image (macOS) |
280
320
  | `gsd config` | Re-run the setup wizard (LLM provider + tool keys) |
281
321
  | `gsd update` | Update GSD to the latest version |
282
322
  | `gsd headless [cmd]` | Run `/gsd` commands without TUI (CI, cron, scripts) |
323
+ | `gsd headless query` | Instant JSON snapshot — state, next dispatch, costs (no LLM) |
283
324
  | `gsd --continue` (`-c`) | Resume the most recent session for the current directory |
284
325
  | `gsd sessions` | Interactive session picker — browse and resume any saved session |
285
326
 
@@ -321,7 +362,7 @@ gsd/M001/S01 (deleted after merge):
321
362
  feat(S01/T01): core types and interfaces
322
363
  ```
323
364
 
324
- One squash commit per milestone on main (or whichever branch you started from). The worktree is torn down after merge. Git bisect works. Individual milestones are revertable.
365
+ One squash commit per milestone on main (or whichever branch you started from). The worktree is torn down after merge. Git bisect works. Individual milestones are revertable. Commit messages are generated from task summaries — no more generic "complete task" messages.
325
366
 
326
367
  ### Verification
327
368
 
@@ -343,6 +384,15 @@ The verification ladder: static checks → command execution → behavioral test
343
384
  - Cost projections based on completed work
344
385
  - Completed and in-progress units
345
386
 
387
+ ### HTML Reports
388
+
389
+ After a milestone completes, GSD auto-generates a self-contained HTML report in `.gsd/reports/`. Each report includes project summary, progress tree, slice dependency graph (SVG DAG), cost/token metrics with bar charts, execution timeline, changelog, and knowledge base sections. No external dependencies — all CSS and JS are inlined, printable to PDF from any browser.
390
+
391
+ An auto-generated `index.html` shows all reports with progression metrics across milestones.
392
+
393
+ - **Automatic** — generated after milestone completion (configurable via `auto_report` preference)
394
+ - **Manual** — run `/gsd export --html` anytime
395
+
346
396
  ---
347
397
 
348
398
  ## Configuration
@@ -370,6 +420,10 @@ auto_supervisor:
370
420
  hard_timeout_minutes: 30
371
421
  budget_ceiling: 50.00
372
422
  unique_milestone_ids: true
423
+ verification_commands:
424
+ - npm run lint
425
+ - npm run test
426
+ auto_report: true
373
427
  ---
374
428
  ```
375
429
 
@@ -386,7 +440,13 @@ unique_milestone_ids: true
386
440
  | `skill_rules` | Situational rules for skill routing |
387
441
  | `skill_staleness_days` | Skills unused for N days get deprioritized (default: 60, 0 = disabled) |
388
442
  | `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
389
- | `git.isolation` | `worktree` (default) or `none` — disable worktree isolation for projects that don't need it |
443
+ | `git.isolation` | `worktree` (default), `branch`, or `none` — disable worktree isolation for projects that don't need it |
444
+ | `git.manage_gitignore` | Set `false` to prevent GSD from modifying `.gitignore` |
445
+ | `verification_commands`| Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
446
+ | `verification_auto_fix`| Auto-retry on verification failures (default: true) |
447
+ | `verification_max_retries` | Max retries for verification failures (default: 2) |
448
+ | `require_slice_discussion` | Pause auto-mode before each slice for human discussion review |
449
+ | `auto_report` | Auto-generate HTML reports after milestone completion (default: true) |
390
450
 
391
451
  ### Agent Instructions
392
452
 
@@ -471,6 +531,10 @@ The best practice for working in teams is to ensure unique milestone names acros
471
531
  .gsd/runtime/
472
532
  # Git worktree working copies
473
533
  .gsd/worktrees/
534
+ # Parallel orchestration IPC and worker status
535
+ .gsd/parallel/
536
+ # Generated HTML reports (regenerable via /gsd export --html)
537
+ .gsd/reports/
474
538
  # Session-specific interrupted-work markers
475
539
  .gsd/milestones/**/continue.md
476
540
  .gsd/milestones/**/*-CONTINUE.md
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import { loadStoredEnvKeys } from './wizard.js';
8
8
  import { getPiDefaultModelAndProvider, migratePiCredentials } from './pi-migration.js';
9
9
  import { shouldRunOnboarding, runOnboarding } from './onboarding.js';
10
10
  import chalk from 'chalk';
11
- import { checkForUpdates, checkAndPromptForUpdates } from './update-check.js';
11
+ import { checkForUpdates } from './update-check.js';
12
12
  import { printHelp, printSubcommandHelp } from './help-text.js';
13
13
  function exitIfManagedResourcesAreNewer(currentAgentDir) {
14
14
  const currentVersion = process.env.GSD_VERSION || '0.0.0';
@@ -71,6 +71,21 @@ function parseCliArgs(argv) {
71
71
  }
72
72
  const cliFlags = parseCliArgs(process.argv);
73
73
  const isPrintMode = cliFlags.print || cliFlags.mode !== undefined;
74
+ // Early resource-skew check — must run before TTY gate so version mismatch
75
+ // errors surface even in non-TTY environments.
76
+ exitIfManagedResourcesAreNewer(agentDir);
77
+ // Early TTY check — must come before heavy initialization to avoid dangling
78
+ // handles that prevent process.exit() from completing promptly.
79
+ const hasSubcommand = cliFlags.messages.length > 0;
80
+ if (!process.stdin.isTTY && !isPrintMode && !hasSubcommand && !cliFlags.listModels) {
81
+ process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
82
+ process.stderr.write('[gsd] Non-interactive alternatives:\n');
83
+ process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
84
+ process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
85
+ process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
86
+ process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
87
+ process.exit(1);
88
+ }
74
89
  // `gsd <subcommand> --help` — show subcommand-specific help
75
90
  const subcommand = cliFlags.messages[0];
76
91
  if (subcommand && process.argv.includes('--help')) {
@@ -169,18 +184,11 @@ if (!isPrintMode && shouldRunOnboarding(authStorage, settingsManager.getDefaultP
169
184
  process.stdin.setRawMode(false);
170
185
  process.stdin.pause();
171
186
  }
172
- // Update check — interactive prompt when stdin is a TTY, passive banner otherwise
187
+ // Update check — non-blocking banner check; interactive prompt deferred to avoid
188
+ // blocking startup. The passive checkForUpdates() prints a banner if an update is
189
+ // available (using cached data or a background fetch) without blocking the TUI.
173
190
  if (!isPrintMode) {
174
- if (process.stdin.isTTY) {
175
- const updated = await checkAndPromptForUpdates().catch(() => false);
176
- if (updated) {
177
- // User chose to update — exit so they relaunch with the new version
178
- process.exit(0);
179
- }
180
- }
181
- else {
182
- checkForUpdates().catch(() => { });
183
- }
191
+ checkForUpdates().catch(() => { });
184
192
  }
185
193
  // Warn if terminal is too narrow for readable output
186
194
  if (!isPrintMode && process.stdout.columns && process.stdout.columns < 40) {
@@ -239,7 +247,9 @@ const configuredExists = configuredProvider && configuredModel &&
239
247
  allModels.some((m) => m.provider === configuredProvider && m.id === configuredModel);
240
248
  const configuredAvailable = configuredProvider && configuredModel &&
241
249
  availableModels.some((m) => m.provider === configuredProvider && m.id === configuredModel);
242
- if (!configuredModel || !configuredExists || !configuredAvailable) {
250
+ if (!configuredModel || !configuredExists) {
251
+ // Model not configured at all, or removed from registry — pick a fallback.
252
+ // Only fires when the model is genuinely unknown (not just temporarily unavailable).
243
253
  const piDefault = getPiDefaultModelAndProvider();
244
254
  const preferred = (piDefault
245
255
  ? availableModels.find((m) => m.provider === piDefault.provider && m.id === piDefault.model)
@@ -254,7 +264,7 @@ if (!configuredModel || !configuredExists || !configuredAvailable) {
254
264
  settingsManager.setDefaultModelAndProvider(preferred.provider, preferred.id);
255
265
  }
256
266
  }
257
- if (settingsManager.getDefaultThinkingLevel() !== 'off' && (!configuredExists || !configuredAvailable)) {
267
+ if (settingsManager.getDefaultThinkingLevel() !== 'off' && !configuredExists) {
258
268
  settingsManager.setDefaultThinkingLevel('off');
259
269
  }
260
270
  // GSD always uses quiet startup — the gsd extension renders its own branded header
@@ -425,14 +435,5 @@ if (enabledModelPatterns && enabledModelPatterns.length > 0) {
425
435
  session.setScopedModels(scopedModels);
426
436
  }
427
437
  }
428
- if (!process.stdin.isTTY) {
429
- process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
430
- process.stderr.write('[gsd] Non-interactive alternatives:\n');
431
- process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
432
- process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
433
- process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
434
- process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
435
- process.exit(1);
436
- }
437
438
  const interactiveMode = new InteractiveMode(session);
438
439
  await interactiveMode.run();
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Resolves the entry-point file(s) for a single extension directory.
3
+ *
4
+ * 1. If the directory contains a package.json with a `pi.extensions` array,
5
+ * each entry is resolved relative to the directory and returned (if it exists).
6
+ * 2. Otherwise falls back to `index.ts` → `index.js`.
7
+ */
8
+ export declare function resolveExtensionEntries(dir: string): string[];
9
+ /**
10
+ * Discovers all extension entry-point paths under an extensions directory.
11
+ *
12
+ * - Top-level .ts/.js files are treated as standalone extension entry points.
13
+ * - Subdirectories are resolved via `resolveExtensionEntries()` (package.json →
14
+ * pi.extensions, then index.ts/index.js fallback).
15
+ */
16
+ export declare function discoverExtensionEntryPaths(extensionsDir: string): string[];
@@ -0,0 +1,66 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ function isExtensionFile(name) {
4
+ return name.endsWith('.ts') || name.endsWith('.js');
5
+ }
6
+ /**
7
+ * Resolves the entry-point file(s) for a single extension directory.
8
+ *
9
+ * 1. If the directory contains a package.json with a `pi.extensions` array,
10
+ * each entry is resolved relative to the directory and returned (if it exists).
11
+ * 2. Otherwise falls back to `index.ts` → `index.js`.
12
+ */
13
+ export function resolveExtensionEntries(dir) {
14
+ const packageJsonPath = join(dir, 'package.json');
15
+ if (existsSync(packageJsonPath)) {
16
+ try {
17
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
18
+ const declared = pkg?.pi?.extensions;
19
+ if (Array.isArray(declared)) {
20
+ const resolved = declared
21
+ .filter((entry) => typeof entry === 'string')
22
+ .map((entry) => resolve(dir, entry))
23
+ .filter((entry) => existsSync(entry));
24
+ if (resolved.length > 0) {
25
+ return resolved;
26
+ }
27
+ }
28
+ }
29
+ catch {
30
+ // Ignore malformed manifests and fall back to index.ts/index.js discovery.
31
+ }
32
+ }
33
+ const indexTs = join(dir, 'index.ts');
34
+ if (existsSync(indexTs)) {
35
+ return [indexTs];
36
+ }
37
+ const indexJs = join(dir, 'index.js');
38
+ if (existsSync(indexJs)) {
39
+ return [indexJs];
40
+ }
41
+ return [];
42
+ }
43
+ /**
44
+ * Discovers all extension entry-point paths under an extensions directory.
45
+ *
46
+ * - Top-level .ts/.js files are treated as standalone extension entry points.
47
+ * - Subdirectories are resolved via `resolveExtensionEntries()` (package.json →
48
+ * pi.extensions, then index.ts/index.js fallback).
49
+ */
50
+ export function discoverExtensionEntryPaths(extensionsDir) {
51
+ if (!existsSync(extensionsDir)) {
52
+ return [];
53
+ }
54
+ const discovered = [];
55
+ for (const entry of readdirSync(extensionsDir, { withFileTypes: true })) {
56
+ const entryPath = join(extensionsDir, entry.name);
57
+ if ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {
58
+ discovered.push(entryPath);
59
+ continue;
60
+ }
61
+ if (entry.isDirectory() || entry.isSymbolicLink()) {
62
+ discovered.push(...resolveExtensionEntries(entryPath));
63
+ }
64
+ }
65
+ return discovered;
66
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Answer Injector — pre-supply answers to headless mode questions.
3
+ *
4
+ * Loads a JSON answer file and intercepts extension_ui_request events
5
+ * to automatically respond with pre-configured answers, bypassing the
6
+ * default auto-responder or supervised mode.
7
+ */
8
+ export interface AnswerFile {
9
+ questions?: Record<string, string | string[]>;
10
+ secrets?: Record<string, string>;
11
+ defaults?: {
12
+ strategy?: 'first_option' | 'cancel';
13
+ };
14
+ }
15
+ export interface AnswerInjectorStats {
16
+ questionsAnswered: number;
17
+ questionsDefaulted: number;
18
+ secretsProvided: number;
19
+ }
20
+ export declare function loadAndValidateAnswerFile(path: string): AnswerFile;
21
+ export declare class AnswerInjector {
22
+ private readonly answerFile;
23
+ private readonly questionMetaByTitle;
24
+ private readonly deferredEvents;
25
+ private readonly usedQuestionIds;
26
+ private readonly usedSecretKeys;
27
+ private readonly stats;
28
+ constructor(answerFile: AnswerFile);
29
+ /**
30
+ * Observe every event for question metadata (tool_execution_start of ask_user_questions).
31
+ */
32
+ observeEvent(event: Record<string, unknown>): void;
33
+ /**
34
+ * Try to handle an extension_ui_request with pre-supplied answers.
35
+ * Returns true if the event was handled (or deferred for async handling).
36
+ */
37
+ tryHandle(event: Record<string, unknown>, writeToStdin: (data: string) => void): boolean;
38
+ /**
39
+ * Get secret environment variables to inject into the RPC child process.
40
+ */
41
+ getSecretEnvVars(): Record<string, string>;
42
+ /**
43
+ * Get a copy of the current stats.
44
+ */
45
+ getStats(): AnswerInjectorStats;
46
+ /**
47
+ * Get warnings for unused question IDs and secret keys.
48
+ */
49
+ getUnusedWarnings(): string[];
50
+ private processWithMeta;
51
+ }
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Answer Injector — pre-supply answers to headless mode questions.
3
+ *
4
+ * Loads a JSON answer file and intercepts extension_ui_request events
5
+ * to automatically respond with pre-configured answers, bypassing the
6
+ * default auto-responder or supervised mode.
7
+ */
8
+ import { readFileSync } from 'node:fs';
9
+ import { serializeJsonLine } from '@gsd/pi-coding-agent';
10
+ // ---------------------------------------------------------------------------
11
+ // Answer File Loader
12
+ // ---------------------------------------------------------------------------
13
+ export function loadAndValidateAnswerFile(path) {
14
+ const raw = readFileSync(path, 'utf-8');
15
+ let parsed;
16
+ try {
17
+ parsed = JSON.parse(raw);
18
+ }
19
+ catch {
20
+ throw new Error(`Invalid JSON in answer file: ${path}`);
21
+ }
22
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
23
+ throw new Error('Answer file must be a JSON object');
24
+ }
25
+ const obj = parsed;
26
+ if (obj.questions !== undefined) {
27
+ if (typeof obj.questions !== 'object' || obj.questions === null || Array.isArray(obj.questions)) {
28
+ throw new Error('Answer file "questions" must be an object');
29
+ }
30
+ const questions = obj.questions;
31
+ for (const [key, value] of Object.entries(questions)) {
32
+ if (typeof value === 'string')
33
+ continue;
34
+ if (Array.isArray(value) && value.every((v) => typeof v === 'string'))
35
+ continue;
36
+ throw new Error(`Answer file "questions.${key}" must be a string or string[]`);
37
+ }
38
+ }
39
+ if (obj.secrets !== undefined) {
40
+ if (typeof obj.secrets !== 'object' || obj.secrets === null || Array.isArray(obj.secrets)) {
41
+ throw new Error('Answer file "secrets" must be an object');
42
+ }
43
+ const secrets = obj.secrets;
44
+ for (const [key, value] of Object.entries(secrets)) {
45
+ if (typeof value !== 'string') {
46
+ throw new Error(`Answer file "secrets.${key}" must be a string`);
47
+ }
48
+ }
49
+ }
50
+ if (obj.defaults !== undefined) {
51
+ if (typeof obj.defaults !== 'object' || obj.defaults === null || Array.isArray(obj.defaults)) {
52
+ throw new Error('Answer file "defaults" must be an object');
53
+ }
54
+ const defaults = obj.defaults;
55
+ if (defaults.strategy !== undefined) {
56
+ if (defaults.strategy !== 'first_option' && defaults.strategy !== 'cancel') {
57
+ throw new Error('Answer file "defaults.strategy" must be "first_option" or "cancel"');
58
+ }
59
+ }
60
+ }
61
+ return obj;
62
+ }
63
+ export class AnswerInjector {
64
+ answerFile;
65
+ questionMetaByTitle = new Map();
66
+ deferredEvents = new Map();
67
+ usedQuestionIds = new Set();
68
+ usedSecretKeys = new Set();
69
+ stats = {
70
+ questionsAnswered: 0,
71
+ questionsDefaulted: 0,
72
+ secretsProvided: 0,
73
+ };
74
+ constructor(answerFile) {
75
+ this.answerFile = answerFile;
76
+ }
77
+ /**
78
+ * Observe every event for question metadata (tool_execution_start of ask_user_questions).
79
+ */
80
+ observeEvent(event) {
81
+ if (event.type !== 'tool_execution_start' || event.toolName !== 'ask_user_questions')
82
+ return;
83
+ // Extract questions from event.input.questions or event.args?.questions
84
+ const input = (event.input ?? event.args);
85
+ const questions = (input?.questions);
86
+ if (!Array.isArray(questions))
87
+ return;
88
+ for (const q of questions) {
89
+ const header = String(q.header ?? '');
90
+ const question = String(q.question ?? '');
91
+ const title = `${header}: ${question}`;
92
+ const options = Array.isArray(q.options)
93
+ ? q.options.map((o) => String(o.label ?? ''))
94
+ : [];
95
+ this.questionMetaByTitle.set(title, {
96
+ id: String(q.id ?? ''),
97
+ header,
98
+ question,
99
+ options,
100
+ allowMultiple: !!q.allowMultiple,
101
+ });
102
+ }
103
+ // Process any deferred events that now have metadata
104
+ for (const [title, deferred] of Array.from(this.deferredEvents)) {
105
+ if (this.questionMetaByTitle.has(title)) {
106
+ clearTimeout(deferred.timer);
107
+ this.deferredEvents.delete(title);
108
+ this.processWithMeta(deferred.event, deferred.writeToStdin);
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Try to handle an extension_ui_request with pre-supplied answers.
114
+ * Returns true if the event was handled (or deferred for async handling).
115
+ */
116
+ tryHandle(event, writeToStdin) {
117
+ const method = String(event.method ?? '');
118
+ // Only handle 'select' — let auto-responder handle confirm, input, etc.
119
+ if (method !== 'select')
120
+ return false;
121
+ const title = String(event.title ?? '');
122
+ const meta = this.questionMetaByTitle.get(title);
123
+ if (meta) {
124
+ return this.processWithMeta(event, writeToStdin);
125
+ }
126
+ // No metadata yet (out-of-order) — defer and handle asynchronously
127
+ const strategy = this.answerFile.defaults?.strategy ?? 'first_option';
128
+ const timer = setTimeout(() => {
129
+ this.deferredEvents.delete(title);
130
+ this.stats.questionsDefaulted++;
131
+ if (strategy === 'cancel') {
132
+ const response = { type: 'extension_ui_response', id: event.id, cancelled: true };
133
+ writeToStdin(serializeJsonLine(response));
134
+ }
135
+ else {
136
+ // first_option — send first option as response
137
+ const options = event.options;
138
+ const response = { type: 'extension_ui_response', id: event.id, value: options?.[0] ?? '' };
139
+ writeToStdin(serializeJsonLine(response));
140
+ }
141
+ }, 500);
142
+ this.deferredEvents.set(title, { event, writeToStdin, timer });
143
+ return true;
144
+ }
145
+ /**
146
+ * Get secret environment variables to inject into the RPC child process.
147
+ */
148
+ getSecretEnvVars() {
149
+ return this.answerFile.secrets ?? {};
150
+ }
151
+ /**
152
+ * Get a copy of the current stats.
153
+ */
154
+ getStats() {
155
+ return { ...this.stats };
156
+ }
157
+ /**
158
+ * Get warnings for unused question IDs and secret keys.
159
+ */
160
+ getUnusedWarnings() {
161
+ const warnings = [];
162
+ if (this.answerFile.questions) {
163
+ for (const id of Object.keys(this.answerFile.questions)) {
164
+ if (!this.usedQuestionIds.has(id)) {
165
+ warnings.push(`[answers] Warning: question ID '${id}' was never matched`);
166
+ }
167
+ }
168
+ }
169
+ if (this.answerFile.secrets) {
170
+ for (const key of Object.keys(this.answerFile.secrets)) {
171
+ if (!this.usedSecretKeys.has(key)) {
172
+ warnings.push(`[answers] Warning: secret '${key}' was provided but never requested`);
173
+ }
174
+ }
175
+ }
176
+ return warnings;
177
+ }
178
+ // -------------------------------------------------------------------------
179
+ // Private
180
+ // -------------------------------------------------------------------------
181
+ processWithMeta(event, writeToStdin) {
182
+ const title = String(event.title ?? '');
183
+ const meta = this.questionMetaByTitle.get(title);
184
+ if (!meta)
185
+ return false;
186
+ const answer = this.answerFile.questions?.[meta.id];
187
+ const eventOptions = event.options;
188
+ if (answer !== undefined) {
189
+ if (meta.allowMultiple) {
190
+ // Multi-select: answer must be an array
191
+ const values = Array.isArray(answer) ? answer : [answer];
192
+ const valid = values.every((v) => eventOptions?.includes(v));
193
+ if (valid) {
194
+ const response = { type: 'extension_ui_response', id: event.id, values };
195
+ writeToStdin(serializeJsonLine(response));
196
+ this.usedQuestionIds.add(meta.id);
197
+ this.stats.questionsAnswered++;
198
+ return true;
199
+ }
200
+ }
201
+ else {
202
+ // Single-select: answer must be a string in the options
203
+ const value = Array.isArray(answer) ? answer[0] : answer;
204
+ if (eventOptions?.includes(value)) {
205
+ const response = { type: 'extension_ui_response', id: event.id, value };
206
+ writeToStdin(serializeJsonLine(response));
207
+ this.usedQuestionIds.add(meta.id);
208
+ this.stats.questionsAnswered++;
209
+ return true;
210
+ }
211
+ }
212
+ }
213
+ // Answer not found or not valid — apply default strategy
214
+ const strategy = this.answerFile.defaults?.strategy ?? 'first_option';
215
+ this.stats.questionsDefaulted++;
216
+ if (strategy === 'cancel') {
217
+ const response = { type: 'extension_ui_response', id: event.id, cancelled: true };
218
+ writeToStdin(serializeJsonLine(response));
219
+ return true;
220
+ }
221
+ // first_option: return false to let the auto-responder handle it
222
+ return false;
223
+ }
224
+ }