gsd-pi 2.27.0 → 2.28.0-dev.b23c118

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 (1235) hide show
  1. package/README.md +39 -12
  2. package/dist/cli.js +5 -12
  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 +2 -0
  16. package/dist/headless.js +67 -186
  17. package/dist/help-text.js +6 -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 +17 -1561
  28. package/dist/resources/extensions/bg-shell/overlay.ts +4 -0
  29. package/dist/resources/extensions/bg-shell/utilities.ts +4 -16
  30. package/dist/resources/extensions/browser-tools/capture.ts +34 -2
  31. package/dist/resources/extensions/browser-tools/lifecycle.ts +5 -5
  32. package/dist/resources/extensions/browser-tools/settle.ts +1 -1
  33. package/dist/resources/extensions/browser-tools/state.ts +5 -5
  34. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  35. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  36. package/dist/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  37. package/dist/resources/extensions/browser-tools/tools/device.ts +1 -1
  38. package/dist/resources/extensions/browser-tools/tools/extract.ts +1 -1
  39. package/dist/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  40. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  41. package/dist/resources/extensions/browser-tools/tools/pages.ts +1 -1
  42. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  43. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  44. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  45. package/dist/resources/extensions/browser-tools/utils.ts +5 -5
  46. package/dist/resources/extensions/get-secrets-from-user.ts +1 -1
  47. package/dist/resources/extensions/google-search/index.ts +21 -8
  48. package/dist/resources/extensions/gsd/activity-log.ts +2 -1
  49. package/dist/resources/extensions/gsd/atomic-write.ts +35 -0
  50. package/dist/resources/extensions/gsd/auto/session.ts +12 -0
  51. package/dist/resources/extensions/gsd/auto-dashboard.ts +84 -3
  52. package/dist/resources/extensions/gsd/auto-idempotency.ts +150 -0
  53. package/dist/resources/extensions/gsd/auto-post-unit.ts +591 -0
  54. package/dist/resources/extensions/gsd/auto-prompts.ts +116 -22
  55. package/dist/resources/extensions/gsd/auto-recovery.ts +4 -9
  56. package/dist/resources/extensions/gsd/auto-start.ts +500 -0
  57. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  58. package/dist/resources/extensions/gsd/auto-timers.ts +223 -0
  59. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +3 -1
  60. package/dist/resources/extensions/gsd/auto-verification.ts +195 -0
  61. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +8 -31
  62. package/dist/resources/extensions/gsd/auto-worktree.ts +83 -67
  63. package/dist/resources/extensions/gsd/auto.ts +364 -1873
  64. package/dist/resources/extensions/gsd/commands-config.ts +102 -0
  65. package/dist/resources/extensions/gsd/commands-handlers.ts +402 -0
  66. package/dist/resources/extensions/gsd/commands-inspect.ts +90 -0
  67. package/dist/resources/extensions/gsd/commands-logs.ts +537 -0
  68. package/dist/resources/extensions/gsd/commands-maintenance.ts +206 -0
  69. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +747 -0
  70. package/dist/resources/extensions/gsd/commands.ts +378 -1431
  71. package/dist/resources/extensions/gsd/constants.ts +21 -0
  72. package/dist/resources/extensions/gsd/context-budget.ts +25 -2
  73. package/dist/resources/extensions/gsd/crash-recovery.ts +4 -2
  74. package/dist/resources/extensions/gsd/dashboard-overlay.ts +13 -4
  75. package/dist/resources/extensions/gsd/db-writer.ts +21 -2
  76. package/dist/resources/extensions/gsd/detection.ts +469 -0
  77. package/dist/resources/extensions/gsd/diff-context.ts +2 -1
  78. package/dist/resources/extensions/gsd/dispatch-guard.ts +4 -0
  79. package/dist/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  80. package/dist/resources/extensions/gsd/doctor-checks.ts +564 -0
  81. package/dist/resources/extensions/gsd/doctor-format.ts +78 -0
  82. package/dist/resources/extensions/gsd/doctor-types.ts +72 -0
  83. package/dist/resources/extensions/gsd/doctor.ts +64 -701
  84. package/dist/resources/extensions/gsd/errors.ts +0 -2
  85. package/dist/resources/extensions/gsd/export-html.ts +367 -11
  86. package/dist/resources/extensions/gsd/export.ts +119 -30
  87. package/dist/resources/extensions/gsd/files.ts +8 -126
  88. package/dist/resources/extensions/gsd/forensics.ts +2 -12
  89. package/dist/resources/extensions/gsd/git-constants.ts +11 -0
  90. package/dist/resources/extensions/gsd/git-service.ts +13 -9
  91. package/dist/resources/extensions/gsd/gsd-db.ts +26 -6
  92. package/dist/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  93. package/dist/resources/extensions/gsd/guided-flow.ts +231 -514
  94. package/dist/resources/extensions/gsd/history.ts +2 -20
  95. package/dist/resources/extensions/gsd/index.ts +206 -45
  96. package/dist/resources/extensions/gsd/init-wizard.ts +615 -0
  97. package/dist/resources/extensions/gsd/jsonl-utils.ts +21 -0
  98. package/dist/resources/extensions/gsd/key-manager.ts +995 -0
  99. package/dist/resources/extensions/gsd/metrics.ts +32 -5
  100. package/dist/resources/extensions/gsd/migrate/command.ts +1 -1
  101. package/dist/resources/extensions/gsd/migrate/parsers.ts +10 -95
  102. package/dist/resources/extensions/gsd/milestone-actions.ts +126 -0
  103. package/dist/resources/extensions/gsd/milestone-ids.ts +95 -0
  104. package/dist/resources/extensions/gsd/native-git-bridge.ts +5 -10
  105. package/dist/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  106. package/dist/resources/extensions/gsd/paths.ts +1 -3
  107. package/dist/resources/extensions/gsd/plugin-importer.ts +3 -2
  108. package/dist/resources/extensions/gsd/preferences-hooks.ts +10 -0
  109. package/dist/resources/extensions/gsd/preferences-models.ts +323 -0
  110. package/dist/resources/extensions/gsd/preferences-skills.ts +169 -0
  111. package/dist/resources/extensions/gsd/preferences-types.ts +223 -0
  112. package/dist/resources/extensions/gsd/preferences-validation.ts +597 -0
  113. package/dist/resources/extensions/gsd/preferences.ts +219 -1305
  114. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  115. package/dist/resources/extensions/gsd/prompt-compressor.ts +508 -0
  116. package/dist/resources/extensions/gsd/prompt-loader.ts +4 -2
  117. package/dist/resources/extensions/gsd/prompt-ordering.ts +200 -0
  118. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  119. package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  120. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  121. package/dist/resources/extensions/gsd/prompts/discuss.md +13 -5
  122. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -2
  123. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  124. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  125. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  126. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  127. package/dist/resources/extensions/gsd/prompts/queue.md +30 -0
  128. package/dist/resources/extensions/gsd/prompts/quick-task.md +0 -6
  129. package/dist/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  130. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  131. package/dist/resources/extensions/gsd/prompts/system.md +5 -2
  132. package/dist/resources/extensions/gsd/provider-error-pause.ts +59 -10
  133. package/dist/resources/extensions/gsd/queue-order.ts +1 -1
  134. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  135. package/dist/resources/extensions/gsd/quick.ts +18 -15
  136. package/dist/resources/extensions/gsd/reports.ts +1 -7
  137. package/dist/resources/extensions/gsd/safe-fs.ts +47 -0
  138. package/dist/resources/extensions/gsd/semantic-chunker.ts +336 -0
  139. package/dist/resources/extensions/gsd/session-forensics.ts +8 -23
  140. package/dist/resources/extensions/gsd/session-lock.ts +284 -0
  141. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +80 -16
  142. package/dist/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +35 -6
  143. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +7 -2
  144. package/dist/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +4 -13
  145. package/dist/resources/extensions/gsd/state.ts +54 -2
  146. package/dist/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  147. package/dist/resources/extensions/gsd/summary-distiller.ts +258 -0
  148. package/dist/resources/extensions/gsd/templates/preferences.md +34 -0
  149. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  150. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  151. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  152. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  153. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  154. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  155. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  156. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  157. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  158. package/dist/resources/extensions/gsd/tests/detection.test.ts +398 -0
  159. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  160. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  161. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  162. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  163. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  164. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  165. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  166. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  167. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  168. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  169. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  170. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  171. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  172. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  173. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  174. package/dist/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  175. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +3 -0
  176. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  177. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  178. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  179. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +3 -0
  180. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  181. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  182. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +23 -47
  183. package/dist/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  184. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  185. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  186. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  187. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  188. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  189. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  190. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  191. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  192. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  193. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  194. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  195. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  196. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  197. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  198. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  199. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  200. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  201. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  202. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +69 -73
  203. package/dist/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  204. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  205. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +115 -1
  206. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +2 -2
  207. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  208. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  209. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  210. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  211. package/dist/resources/extensions/gsd/token-counter.ts +20 -0
  212. package/dist/resources/extensions/gsd/triage-ui.ts +1 -1
  213. package/dist/resources/extensions/gsd/types.ts +4 -1
  214. package/dist/resources/extensions/gsd/validate-directory.ts +164 -0
  215. package/dist/resources/extensions/gsd/verification-evidence.ts +7 -4
  216. package/dist/resources/extensions/gsd/verification-gate.ts +70 -5
  217. package/dist/resources/extensions/gsd/visualizer-data.ts +1 -1
  218. package/dist/resources/extensions/gsd/visualizer-overlay.ts +5 -2
  219. package/dist/resources/extensions/gsd/visualizer-views.ts +2 -3
  220. package/dist/resources/extensions/gsd/worktree-command.ts +4 -51
  221. package/dist/resources/extensions/gsd/worktree-manager.ts +7 -9
  222. package/dist/resources/extensions/gsd/worktree.ts +41 -1
  223. package/dist/resources/extensions/mcporter/index.ts +27 -14
  224. package/dist/resources/extensions/remote-questions/manager.ts +6 -24
  225. package/dist/resources/extensions/remote-questions/mod.ts +16 -0
  226. package/dist/resources/extensions/remote-questions/notify.ts +91 -0
  227. package/dist/resources/extensions/remote-questions/remote-command.ts +1 -1
  228. package/dist/resources/extensions/remote-questions/store.ts +5 -1
  229. package/dist/resources/extensions/remote-questions/types.ts +26 -3
  230. package/dist/resources/extensions/search-the-web/native-search.ts +7 -0
  231. package/dist/resources/extensions/search-the-web/provider.ts +15 -3
  232. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  233. package/dist/resources/extensions/search-the-web/tool-search.ts +1 -13
  234. package/dist/resources/extensions/shared/format-utils.ts +53 -0
  235. package/dist/resources/extensions/shared/frontmatter.ts +117 -0
  236. package/dist/resources/extensions/shared/mod.ts +30 -0
  237. package/dist/resources/extensions/shared/sanitize.ts +19 -0
  238. package/dist/resources/extensions/slash-commands/create-extension.ts +1 -1
  239. package/dist/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  240. package/dist/resources/extensions/subagent/index.ts +1 -2
  241. package/dist/resources/extensions/ttsr/index.ts +5 -0
  242. package/dist/resources/extensions/ttsr/rule-loader.ts +4 -51
  243. package/dist/resources/extensions/universal-config/discovery.ts +37 -15
  244. package/dist/resources/extensions/voice/index.ts +1 -1
  245. package/dist/resources/skills/accessibility/SKILL.md +522 -0
  246. package/dist/resources/skills/accessibility/references/WCAG.md +162 -0
  247. package/dist/resources/skills/agent-browser/SKILL.md +517 -0
  248. package/dist/resources/skills/agent-browser/references/authentication.md +202 -0
  249. package/dist/resources/skills/agent-browser/references/commands.md +263 -0
  250. package/dist/resources/skills/agent-browser/references/profiling.md +120 -0
  251. package/dist/resources/skills/agent-browser/references/proxy-support.md +194 -0
  252. package/dist/resources/skills/agent-browser/references/session-management.md +193 -0
  253. package/dist/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  254. package/dist/resources/skills/agent-browser/references/video-recording.md +173 -0
  255. package/dist/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  256. package/dist/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  257. package/dist/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  258. package/dist/resources/skills/best-practices/SKILL.md +583 -0
  259. package/dist/resources/skills/code-optimizer/SKILL.md +160 -0
  260. package/dist/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  261. package/dist/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  262. package/dist/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  263. package/dist/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  264. package/dist/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  265. package/dist/resources/skills/code-optimizer/references/config-infra.md +71 -0
  266. package/dist/resources/skills/code-optimizer/references/data-structures.md +80 -0
  267. package/dist/resources/skills/code-optimizer/references/database-queries.md +76 -0
  268. package/dist/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  269. package/dist/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  270. package/dist/resources/skills/code-optimizer/references/io-network.md +89 -0
  271. package/dist/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  272. package/dist/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  273. package/dist/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  274. package/dist/resources/skills/code-optimizer/references/security-performance.md +68 -0
  275. package/dist/resources/skills/core-web-vitals/SKILL.md +441 -0
  276. package/dist/resources/skills/core-web-vitals/references/LCP.md +208 -0
  277. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  278. package/dist/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  279. package/dist/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  280. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  281. package/dist/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  282. package/dist/resources/skills/react-best-practices/README.md +123 -0
  283. package/dist/resources/skills/react-best-practices/SKILL.md +136 -0
  284. package/dist/resources/skills/react-best-practices/metadata.json +15 -0
  285. package/dist/resources/skills/react-best-practices/rules/_sections.md +46 -0
  286. package/dist/resources/skills/react-best-practices/rules/_template.md +28 -0
  287. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  288. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  289. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  290. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  291. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  292. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  293. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  294. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  295. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  296. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  297. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  298. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  299. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  300. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  301. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  302. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  303. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  304. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  305. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  306. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  307. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  308. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  309. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  310. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  311. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  312. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  313. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  314. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  315. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  316. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  317. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  318. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  319. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  320. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  321. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  322. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  323. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  324. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  325. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  326. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  327. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  328. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  329. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  330. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  331. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  332. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  333. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  334. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  335. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  336. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  337. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  338. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  339. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  340. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  341. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  342. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  343. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  344. package/dist/resources/skills/userinterface-wiki/SKILL.md +253 -0
  345. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  346. package/dist/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  347. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  348. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  349. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  350. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  351. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  352. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  353. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  354. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  355. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  356. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  357. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  358. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  359. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  360. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  361. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  362. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  363. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  364. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  365. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  366. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  367. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  368. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  369. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  370. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  371. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  372. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  373. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  374. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  375. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  376. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  377. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  378. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  379. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  380. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  381. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  382. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  383. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  384. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  385. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  386. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  387. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  388. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  389. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  390. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  391. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  392. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  393. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  394. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  395. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  396. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  397. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  398. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  399. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  400. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  401. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  402. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  403. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  404. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  405. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  406. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  407. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  408. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  409. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  410. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  411. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  412. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  413. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  414. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  415. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  416. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  417. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  418. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  419. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  420. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  421. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  422. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  423. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  424. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  425. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  426. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  427. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  428. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  429. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  430. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  431. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  432. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  433. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  434. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  435. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  436. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  437. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  438. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  439. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  440. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  441. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  442. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  443. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  444. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  445. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  446. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  447. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  448. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  449. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  450. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  451. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  452. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  453. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  454. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  455. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  456. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  457. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  458. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  459. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  460. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  461. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  462. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  463. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  464. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  465. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  466. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  467. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  468. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  469. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  470. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  471. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  472. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  473. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  474. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  475. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  476. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  477. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  478. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  479. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  480. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  481. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  482. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  483. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  484. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  485. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  486. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  487. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  488. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  489. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  490. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  491. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  492. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  493. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  494. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  495. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  496. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  497. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  498. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  499. package/dist/resources/skills/web-design-guidelines/SKILL.md +39 -0
  500. package/dist/resources/skills/web-quality-audit/SKILL.md +170 -0
  501. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  502. package/dist/update-check.js +1 -1
  503. package/package.json +20 -8
  504. package/packages/native/package.json +28 -0
  505. package/packages/pi-agent-core/package.json +6 -0
  506. package/packages/pi-ai/dist/models.generated.d.ts +43 -11
  507. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  508. package/packages/pi-ai/dist/models.generated.js +34 -26
  509. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  510. package/packages/pi-ai/dist/providers/anthropic.js +3 -2
  511. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  512. package/packages/pi-ai/dist/providers/openai-codex-responses.js +14 -4
  513. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  514. package/packages/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  515. package/packages/pi-ai/dist/utils/oauth/anthropic.js +2 -0
  516. package/packages/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  517. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  518. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +5 -1
  519. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  520. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  521. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +4 -0
  522. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  523. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  524. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +6 -0
  525. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  526. package/packages/pi-ai/dist/utils/oauth/index.js +2 -2
  527. package/packages/pi-ai/dist/utils/oauth/index.js.map +1 -1
  528. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  529. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +2 -0
  530. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  531. package/packages/pi-ai/oauth.d.ts +1 -0
  532. package/packages/pi-ai/oauth.js +1 -0
  533. package/packages/pi-ai/package.json +2 -2
  534. package/packages/pi-ai/src/models.generated.ts +42 -34
  535. package/packages/pi-ai/src/providers/anthropic.ts +3 -2
  536. package/packages/pi-ai/src/providers/openai-codex-responses.ts +15 -4
  537. package/packages/pi-ai/src/utils/oauth/anthropic.ts +2 -0
  538. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +5 -1
  539. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +4 -0
  540. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +6 -0
  541. package/packages/pi-ai/src/utils/oauth/index.ts +2 -2
  542. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +2 -0
  543. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  544. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  545. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  546. package/packages/pi-coding-agent/dist/core/auth-storage.js +2 -1
  547. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  548. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  549. package/packages/pi-coding-agent/dist/core/bash-executor.js +23 -1
  550. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  551. package/packages/pi-coding-agent/dist/core/blob-store.d.ts +8 -0
  552. package/packages/pi-coding-agent/dist/core/blob-store.d.ts.map +1 -1
  553. package/packages/pi-coding-agent/dist/core/blob-store.js +50 -1
  554. package/packages/pi-coding-agent/dist/core/blob-store.js.map +1 -1
  555. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  556. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +2 -1
  557. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  558. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  559. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +3 -2
  560. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  561. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  562. package/packages/pi-coding-agent/dist/core/compaction/utils.js +2 -2
  563. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  564. package/packages/pi-coding-agent/dist/core/constants.d.ts +29 -0
  565. package/packages/pi-coding-agent/dist/core/constants.d.ts.map +1 -0
  566. package/packages/pi-coding-agent/dist/core/constants.js +44 -0
  567. package/packages/pi-coding-agent/dist/core/constants.js.map +1 -0
  568. package/packages/pi-coding-agent/dist/core/extensions/loader.js +1 -1
  569. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  570. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  571. package/packages/pi-coding-agent/dist/core/extensions/runner.js +32 -10
  572. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  573. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts +2 -0
  574. package/packages/pi-coding-agent/dist/core/extensions/runner.test.d.ts.map +1 -0
  575. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +77 -0
  576. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -0
  577. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts +7 -0
  578. package/packages/pi-coding-agent/dist/core/fs-utils.d.ts.map +1 -0
  579. package/packages/pi-coding-agent/dist/core/fs-utils.js +12 -0
  580. package/packages/pi-coding-agent/dist/core/fs-utils.js.map +1 -0
  581. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts +2 -0
  582. package/packages/pi-coding-agent/dist/core/fs-utils.test.d.ts.map +1 -0
  583. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +67 -0
  584. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -0
  585. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  586. package/packages/pi-coding-agent/dist/core/lsp/client.js +22 -2
  587. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  588. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  589. package/packages/pi-coding-agent/dist/core/lsp/index.js +30 -4
  590. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  591. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  592. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +13 -5
  593. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  594. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  595. package/packages/pi-coding-agent/dist/core/model-resolver.js +14 -0
  596. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  597. package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  598. package/packages/pi-coding-agent/dist/core/resolve-config-value.js +12 -4
  599. package/packages/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  600. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +49 -0
  601. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +7 -0
  603. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  604. package/packages/pi-coding-agent/dist/core/session-manager.js +108 -14
  605. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  606. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  607. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  608. package/packages/pi-coding-agent/dist/core/settings-manager.js +14 -5
  609. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  610. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js +2 -2
  611. package/packages/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
  612. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  613. package/packages/pi-coding-agent/dist/core/tools/find.js +2 -1
  614. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  615. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js +4 -4
  616. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -1
  617. package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts +1 -1
  618. package/packages/pi-coding-agent/dist/core/tools/hashline.js +1 -1
  619. package/packages/pi-coding-agent/dist/core/tools/hashline.js.map +1 -1
  620. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js +8 -8
  621. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -1
  622. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +1 -1
  623. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -1
  624. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  625. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts +1 -0
  626. package/packages/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  627. package/packages/pi-coding-agent/dist/core/tools/path-utils.js +1 -1
  628. package/packages/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  629. package/packages/pi-coding-agent/dist/core/tools/truncate.d.ts.map +1 -1
  630. package/packages/pi-coding-agent/dist/core/tools/truncate.js +2 -1
  631. package/packages/pi-coding-agent/dist/core/tools/truncate.js.map +1 -1
  632. package/packages/pi-coding-agent/dist/index.d.ts +2 -1
  633. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  634. package/packages/pi-coding-agent/dist/index.js +3 -1
  635. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  636. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  637. package/packages/pi-coding-agent/dist/main.js +6 -0
  638. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  639. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +9 -0
  640. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  641. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +47 -5
  642. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts +1 -1
  644. package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
  645. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js +1 -1
  646. package/packages/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
  647. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +4 -4
  648. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  649. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  650. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  651. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +12 -0
  652. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  653. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  654. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +30 -2
  655. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  656. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  657. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +11 -0
  658. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  659. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  660. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +12 -2
  661. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  662. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.d.ts.map +1 -1
  663. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js +25 -3
  664. package/packages/pi-coding-agent/dist/resources/extensions/memory/pipeline.js.map +1 -1
  665. package/packages/pi-coding-agent/package.json +0 -4
  666. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  667. package/packages/pi-coding-agent/src/core/auth-storage.ts +2 -1
  668. package/packages/pi-coding-agent/src/core/bash-executor.ts +23 -1
  669. package/packages/pi-coding-agent/src/core/blob-store.ts +46 -1
  670. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -1
  671. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -2
  672. package/packages/pi-coding-agent/src/core/compaction/utils.ts +2 -2
  673. package/packages/pi-coding-agent/src/core/constants.ts +59 -0
  674. package/packages/pi-coding-agent/src/core/extensions/loader.ts +1 -1
  675. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +84 -0
  676. package/packages/pi-coding-agent/src/core/extensions/runner.ts +31 -10
  677. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +66 -0
  678. package/packages/pi-coding-agent/src/core/fs-utils.ts +12 -0
  679. package/packages/pi-coding-agent/src/core/lsp/client.ts +22 -2
  680. package/packages/pi-coding-agent/src/core/lsp/index.ts +31 -5
  681. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +13 -5
  682. package/packages/pi-coding-agent/src/core/model-resolver.ts +14 -0
  683. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +58 -0
  684. package/packages/pi-coding-agent/src/core/resolve-config-value.ts +14 -4
  685. package/packages/pi-coding-agent/src/core/session-manager.ts +113 -18
  686. package/packages/pi-coding-agent/src/core/settings-manager.ts +22 -5
  687. package/packages/pi-coding-agent/src/core/tools/edit-diff.ts +2 -2
  688. package/packages/pi-coding-agent/src/core/tools/find.ts +2 -1
  689. package/packages/pi-coding-agent/src/core/tools/hashline-edit.ts +4 -4
  690. package/packages/pi-coding-agent/src/core/tools/hashline.test.ts +8 -8
  691. package/packages/pi-coding-agent/src/core/tools/hashline.ts +1 -1
  692. package/packages/pi-coding-agent/src/core/tools/index.ts +1 -1
  693. package/packages/pi-coding-agent/src/core/tools/path-utils.ts +1 -1
  694. package/packages/pi-coding-agent/src/core/tools/truncate.ts +3 -1
  695. package/packages/pi-coding-agent/src/index.ts +9 -0
  696. package/packages/pi-coding-agent/src/main.ts +7 -0
  697. package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +49 -5
  698. package/packages/pi-coding-agent/src/modes/interactive/components/index.ts +1 -1
  699. package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +4 -4
  700. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  701. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +32 -1
  702. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +12 -0
  703. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +11 -2
  704. package/packages/pi-coding-agent/src/resources/extensions/memory/pipeline.ts +23 -3
  705. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts +2 -0
  706. package/packages/pi-tui/dist/__tests__/autocomplete.test.d.ts.map +1 -0
  707. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +149 -0
  708. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -0
  709. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts +2 -0
  710. package/packages/pi-tui/dist/__tests__/fuzzy.test.d.ts.map +1 -0
  711. package/packages/pi-tui/dist/__tests__/fuzzy.test.js +94 -0
  712. package/packages/pi-tui/dist/__tests__/fuzzy.test.js.map +1 -0
  713. package/packages/pi-tui/dist/autocomplete.d.ts +5 -1
  714. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  715. package/packages/pi-tui/dist/autocomplete.js +6 -2
  716. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  717. package/packages/pi-tui/package.json +8 -2
  718. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +186 -0
  719. package/packages/pi-tui/src/__tests__/fuzzy.test.ts +112 -0
  720. package/packages/pi-tui/src/autocomplete.ts +8 -1
  721. package/src/resources/extensions/ask-user-questions.ts +3 -2
  722. package/src/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  723. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  724. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  725. package/src/resources/extensions/bg-shell/index.ts +17 -1561
  726. package/src/resources/extensions/bg-shell/overlay.ts +4 -0
  727. package/src/resources/extensions/bg-shell/utilities.ts +4 -16
  728. package/src/resources/extensions/browser-tools/capture.ts +34 -2
  729. package/src/resources/extensions/browser-tools/lifecycle.ts +5 -5
  730. package/src/resources/extensions/browser-tools/settle.ts +1 -1
  731. package/src/resources/extensions/browser-tools/state.ts +5 -5
  732. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +1 -1
  733. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +3 -3
  734. package/src/resources/extensions/browser-tools/tools/assertions.ts +1 -1
  735. package/src/resources/extensions/browser-tools/tools/device.ts +1 -1
  736. package/src/resources/extensions/browser-tools/tools/extract.ts +1 -1
  737. package/src/resources/extensions/browser-tools/tools/navigation.ts +6 -6
  738. package/src/resources/extensions/browser-tools/tools/network-mock.ts +1 -1
  739. package/src/resources/extensions/browser-tools/tools/pages.ts +1 -1
  740. package/src/resources/extensions/browser-tools/tools/screenshot.ts +28 -10
  741. package/src/resources/extensions/browser-tools/tools/state-persistence.ts +1 -1
  742. package/src/resources/extensions/browser-tools/tools/visual-diff.ts +1 -1
  743. package/src/resources/extensions/browser-tools/utils.ts +5 -5
  744. package/src/resources/extensions/get-secrets-from-user.ts +1 -1
  745. package/src/resources/extensions/google-search/index.ts +21 -8
  746. package/src/resources/extensions/gsd/activity-log.ts +2 -1
  747. package/src/resources/extensions/gsd/atomic-write.ts +35 -0
  748. package/src/resources/extensions/gsd/auto/session.ts +12 -0
  749. package/src/resources/extensions/gsd/auto-dashboard.ts +84 -3
  750. package/src/resources/extensions/gsd/auto-idempotency.ts +150 -0
  751. package/src/resources/extensions/gsd/auto-post-unit.ts +591 -0
  752. package/src/resources/extensions/gsd/auto-prompts.ts +116 -22
  753. package/src/resources/extensions/gsd/auto-recovery.ts +4 -9
  754. package/src/resources/extensions/gsd/auto-start.ts +500 -0
  755. package/src/resources/extensions/gsd/auto-stuck-detection.ts +220 -0
  756. package/src/resources/extensions/gsd/auto-timers.ts +223 -0
  757. package/src/resources/extensions/gsd/auto-unit-closeout.ts +3 -1
  758. package/src/resources/extensions/gsd/auto-verification.ts +195 -0
  759. package/src/resources/extensions/gsd/auto-worktree-sync.ts +8 -31
  760. package/src/resources/extensions/gsd/auto-worktree.ts +83 -67
  761. package/src/resources/extensions/gsd/auto.ts +364 -1873
  762. package/src/resources/extensions/gsd/commands-config.ts +102 -0
  763. package/src/resources/extensions/gsd/commands-handlers.ts +402 -0
  764. package/src/resources/extensions/gsd/commands-inspect.ts +90 -0
  765. package/src/resources/extensions/gsd/commands-logs.ts +537 -0
  766. package/src/resources/extensions/gsd/commands-maintenance.ts +206 -0
  767. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +747 -0
  768. package/src/resources/extensions/gsd/commands.ts +378 -1431
  769. package/src/resources/extensions/gsd/constants.ts +21 -0
  770. package/src/resources/extensions/gsd/context-budget.ts +25 -2
  771. package/src/resources/extensions/gsd/crash-recovery.ts +4 -2
  772. package/src/resources/extensions/gsd/dashboard-overlay.ts +13 -4
  773. package/src/resources/extensions/gsd/db-writer.ts +21 -2
  774. package/src/resources/extensions/gsd/detection.ts +469 -0
  775. package/src/resources/extensions/gsd/diff-context.ts +2 -1
  776. package/src/resources/extensions/gsd/dispatch-guard.ts +4 -0
  777. package/src/resources/extensions/gsd/docs/preferences-reference.md +83 -0
  778. package/src/resources/extensions/gsd/doctor-checks.ts +564 -0
  779. package/src/resources/extensions/gsd/doctor-format.ts +78 -0
  780. package/src/resources/extensions/gsd/doctor-types.ts +72 -0
  781. package/src/resources/extensions/gsd/doctor.ts +64 -701
  782. package/src/resources/extensions/gsd/errors.ts +0 -2
  783. package/src/resources/extensions/gsd/export-html.ts +367 -11
  784. package/src/resources/extensions/gsd/export.ts +119 -30
  785. package/src/resources/extensions/gsd/files.ts +8 -126
  786. package/src/resources/extensions/gsd/forensics.ts +2 -12
  787. package/src/resources/extensions/gsd/git-constants.ts +11 -0
  788. package/src/resources/extensions/gsd/git-service.ts +13 -9
  789. package/src/resources/extensions/gsd/gsd-db.ts +26 -6
  790. package/src/resources/extensions/gsd/guided-flow-queue.ts +451 -0
  791. package/src/resources/extensions/gsd/guided-flow.ts +231 -514
  792. package/src/resources/extensions/gsd/history.ts +2 -20
  793. package/src/resources/extensions/gsd/index.ts +206 -45
  794. package/src/resources/extensions/gsd/init-wizard.ts +615 -0
  795. package/src/resources/extensions/gsd/jsonl-utils.ts +21 -0
  796. package/src/resources/extensions/gsd/key-manager.ts +995 -0
  797. package/src/resources/extensions/gsd/metrics.ts +32 -5
  798. package/src/resources/extensions/gsd/migrate/command.ts +1 -1
  799. package/src/resources/extensions/gsd/migrate/parsers.ts +10 -95
  800. package/src/resources/extensions/gsd/milestone-actions.ts +126 -0
  801. package/src/resources/extensions/gsd/milestone-ids.ts +95 -0
  802. package/src/resources/extensions/gsd/native-git-bridge.ts +5 -10
  803. package/src/resources/extensions/gsd/parallel-eligibility.ts +3 -3
  804. package/src/resources/extensions/gsd/paths.ts +1 -3
  805. package/src/resources/extensions/gsd/plugin-importer.ts +3 -2
  806. package/src/resources/extensions/gsd/preferences-hooks.ts +10 -0
  807. package/src/resources/extensions/gsd/preferences-models.ts +323 -0
  808. package/src/resources/extensions/gsd/preferences-skills.ts +169 -0
  809. package/src/resources/extensions/gsd/preferences-types.ts +223 -0
  810. package/src/resources/extensions/gsd/preferences-validation.ts +597 -0
  811. package/src/resources/extensions/gsd/preferences.ts +219 -1305
  812. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  813. package/src/resources/extensions/gsd/prompt-compressor.ts +508 -0
  814. package/src/resources/extensions/gsd/prompt-loader.ts +4 -2
  815. package/src/resources/extensions/gsd/prompt-ordering.ts +200 -0
  816. package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -2
  817. package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  818. package/src/resources/extensions/gsd/prompts/discuss-headless.md +2 -4
  819. package/src/resources/extensions/gsd/prompts/discuss.md +13 -5
  820. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -2
  821. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  822. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -1
  823. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -2
  824. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -2
  825. package/src/resources/extensions/gsd/prompts/queue.md +30 -0
  826. package/src/resources/extensions/gsd/prompts/quick-task.md +0 -6
  827. package/src/resources/extensions/gsd/prompts/replan-slice.md +0 -1
  828. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +0 -1
  829. package/src/resources/extensions/gsd/prompts/system.md +5 -2
  830. package/src/resources/extensions/gsd/provider-error-pause.ts +59 -10
  831. package/src/resources/extensions/gsd/queue-order.ts +1 -1
  832. package/src/resources/extensions/gsd/queue-reorder-ui.ts +15 -2
  833. package/src/resources/extensions/gsd/quick.ts +18 -15
  834. package/src/resources/extensions/gsd/reports.ts +1 -7
  835. package/src/resources/extensions/gsd/safe-fs.ts +47 -0
  836. package/src/resources/extensions/gsd/semantic-chunker.ts +336 -0
  837. package/src/resources/extensions/gsd/session-forensics.ts +8 -23
  838. package/src/resources/extensions/gsd/session-lock.ts +284 -0
  839. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +80 -16
  840. package/src/resources/extensions/gsd/skills/gsd-headless/references/answer-injection.md +35 -6
  841. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +7 -2
  842. package/src/resources/extensions/gsd/skills/gsd-headless/references/multi-session.md +4 -13
  843. package/src/resources/extensions/gsd/state.ts +54 -2
  844. package/src/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  845. package/src/resources/extensions/gsd/summary-distiller.ts +258 -0
  846. package/src/resources/extensions/gsd/templates/preferences.md +34 -0
  847. package/src/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  848. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  849. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +197 -0
  850. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +33 -39
  851. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +108 -2
  852. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  853. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +3 -0
  854. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  855. package/src/resources/extensions/gsd/tests/context-budget.test.ts +69 -0
  856. package/src/resources/extensions/gsd/tests/detection.test.ts +398 -0
  857. package/src/resources/extensions/gsd/tests/discuss-prompt.test.ts +12 -24
  858. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +118 -94
  859. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  860. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -3
  861. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +75 -0
  862. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +17 -55
  863. package/src/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  864. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +375 -0
  865. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +122 -0
  866. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +3 -0
  867. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  868. package/src/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  869. package/src/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +24 -82
  870. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  871. package/src/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  872. package/src/resources/extensions/gsd/tests/metrics.test.ts +173 -305
  873. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +3 -0
  874. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +59 -1
  875. package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +18 -61
  876. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +17 -8
  877. package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +3 -0
  878. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  879. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  880. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +23 -47
  881. package/src/resources/extensions/gsd/tests/preferences.test.ts +284 -0
  882. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  883. package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  884. package/src/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  885. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  886. package/src/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  887. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +1 -1
  888. package/src/resources/extensions/gsd/tests/remote-status.test.ts +2 -2
  889. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +43 -60
  890. package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  891. package/src/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  892. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -0
  893. package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +8 -5
  894. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  895. package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  896. package/src/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  897. package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  898. package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  899. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  900. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +69 -73
  901. package/src/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  902. package/src/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  903. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +115 -1
  904. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +2 -2
  905. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +2 -1
  906. package/src/resources/extensions/gsd/tests/workspace-index.test.ts +24 -61
  907. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +5 -2
  908. package/src/resources/extensions/gsd/tests/write-gate.test.ts +132 -43
  909. package/src/resources/extensions/gsd/token-counter.ts +20 -0
  910. package/src/resources/extensions/gsd/triage-ui.ts +1 -1
  911. package/src/resources/extensions/gsd/types.ts +4 -1
  912. package/src/resources/extensions/gsd/validate-directory.ts +164 -0
  913. package/src/resources/extensions/gsd/verification-evidence.ts +7 -4
  914. package/src/resources/extensions/gsd/verification-gate.ts +70 -5
  915. package/src/resources/extensions/gsd/visualizer-data.ts +1 -1
  916. package/src/resources/extensions/gsd/visualizer-overlay.ts +5 -2
  917. package/src/resources/extensions/gsd/visualizer-views.ts +2 -3
  918. package/src/resources/extensions/gsd/worktree-command.ts +4 -51
  919. package/src/resources/extensions/gsd/worktree-manager.ts +7 -9
  920. package/src/resources/extensions/gsd/worktree.ts +41 -1
  921. package/src/resources/extensions/mcporter/index.ts +27 -14
  922. package/src/resources/extensions/remote-questions/manager.ts +6 -24
  923. package/src/resources/extensions/remote-questions/mod.ts +16 -0
  924. package/src/resources/extensions/remote-questions/notify.ts +91 -0
  925. package/src/resources/extensions/remote-questions/remote-command.ts +1 -1
  926. package/src/resources/extensions/remote-questions/store.ts +5 -1
  927. package/src/resources/extensions/remote-questions/types.ts +26 -3
  928. package/src/resources/extensions/search-the-web/native-search.ts +7 -0
  929. package/src/resources/extensions/search-the-web/provider.ts +15 -3
  930. package/src/resources/extensions/search-the-web/tool-llm-context.ts +1 -13
  931. package/src/resources/extensions/search-the-web/tool-search.ts +1 -13
  932. package/src/resources/extensions/shared/format-utils.ts +53 -0
  933. package/src/resources/extensions/shared/frontmatter.ts +117 -0
  934. package/src/resources/extensions/shared/mod.ts +30 -0
  935. package/src/resources/extensions/shared/sanitize.ts +19 -0
  936. package/src/resources/extensions/slash-commands/create-extension.ts +1 -1
  937. package/src/resources/extensions/slash-commands/create-slash-command.ts +1 -1
  938. package/src/resources/extensions/subagent/index.ts +1 -2
  939. package/src/resources/extensions/ttsr/index.ts +5 -0
  940. package/src/resources/extensions/ttsr/rule-loader.ts +4 -51
  941. package/src/resources/extensions/universal-config/discovery.ts +37 -15
  942. package/src/resources/extensions/voice/index.ts +1 -1
  943. package/src/resources/skills/accessibility/SKILL.md +522 -0
  944. package/src/resources/skills/accessibility/references/WCAG.md +162 -0
  945. package/src/resources/skills/agent-browser/SKILL.md +517 -0
  946. package/src/resources/skills/agent-browser/references/authentication.md +202 -0
  947. package/src/resources/skills/agent-browser/references/commands.md +263 -0
  948. package/src/resources/skills/agent-browser/references/profiling.md +120 -0
  949. package/src/resources/skills/agent-browser/references/proxy-support.md +194 -0
  950. package/src/resources/skills/agent-browser/references/session-management.md +193 -0
  951. package/src/resources/skills/agent-browser/references/snapshot-refs.md +194 -0
  952. package/src/resources/skills/agent-browser/references/video-recording.md +173 -0
  953. package/src/resources/skills/agent-browser/templates/authenticated-session.sh +105 -0
  954. package/src/resources/skills/agent-browser/templates/capture-workflow.sh +69 -0
  955. package/src/resources/skills/agent-browser/templates/form-automation.sh +62 -0
  956. package/src/resources/skills/best-practices/SKILL.md +583 -0
  957. package/src/resources/skills/code-optimizer/SKILL.md +160 -0
  958. package/src/resources/skills/code-optimizer/references/algorithmic-complexity.md +66 -0
  959. package/src/resources/skills/code-optimizer/references/build-compilation.md +90 -0
  960. package/src/resources/skills/code-optimizer/references/bundle-dependencies.md +82 -0
  961. package/src/resources/skills/code-optimizer/references/caching-memoization.md +76 -0
  962. package/src/resources/skills/code-optimizer/references/concurrency-async.md +80 -0
  963. package/src/resources/skills/code-optimizer/references/config-infra.md +71 -0
  964. package/src/resources/skills/code-optimizer/references/data-structures.md +80 -0
  965. package/src/resources/skills/code-optimizer/references/database-queries.md +76 -0
  966. package/src/resources/skills/code-optimizer/references/dead-code-redundancy.md +84 -0
  967. package/src/resources/skills/code-optimizer/references/error-resilience.md +80 -0
  968. package/src/resources/skills/code-optimizer/references/io-network.md +89 -0
  969. package/src/resources/skills/code-optimizer/references/logging-observability.md +64 -0
  970. package/src/resources/skills/code-optimizer/references/memory-resources.md +66 -0
  971. package/src/resources/skills/code-optimizer/references/rendering-ui.md +90 -0
  972. package/src/resources/skills/code-optimizer/references/security-performance.md +68 -0
  973. package/src/resources/skills/core-web-vitals/SKILL.md +441 -0
  974. package/src/resources/skills/core-web-vitals/references/LCP.md +208 -0
  975. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +122 -0
  976. package/src/resources/skills/make-interfaces-feel-better/animations.md +379 -0
  977. package/src/resources/skills/make-interfaces-feel-better/performance.md +88 -0
  978. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +247 -0
  979. package/src/resources/skills/make-interfaces-feel-better/typography.md +123 -0
  980. package/src/resources/skills/react-best-practices/README.md +123 -0
  981. package/src/resources/skills/react-best-practices/SKILL.md +136 -0
  982. package/src/resources/skills/react-best-practices/metadata.json +15 -0
  983. package/src/resources/skills/react-best-practices/rules/_sections.md +46 -0
  984. package/src/resources/skills/react-best-practices/rules/_template.md +28 -0
  985. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  986. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +42 -0
  987. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
  988. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +38 -0
  989. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +80 -0
  990. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +51 -0
  991. package/src/resources/skills/react-best-practices/rules/async-parallel.md +28 -0
  992. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  993. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  994. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  995. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  996. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  997. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +50 -0
  998. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  999. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  1000. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  1001. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  1002. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
  1003. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  1004. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  1005. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  1006. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  1007. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +50 -0
  1008. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  1009. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +37 -0
  1010. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  1011. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  1012. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  1013. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  1014. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +26 -0
  1015. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  1016. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  1017. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  1018. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  1019. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  1020. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  1021. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  1022. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  1023. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  1024. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  1025. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  1026. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  1027. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  1028. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  1029. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  1030. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +44 -0
  1031. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  1032. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  1033. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  1034. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  1035. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  1036. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +96 -0
  1037. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  1038. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +76 -0
  1039. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +65 -0
  1040. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  1041. package/src/resources/skills/react-best-practices/rules/server-serialization.md +38 -0
  1042. package/src/resources/skills/userinterface-wiki/SKILL.md +253 -0
  1043. package/src/resources/skills/userinterface-wiki/rules/_sections.md +66 -0
  1044. package/src/resources/skills/userinterface-wiki/rules/_template.md +24 -0
  1045. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
  1046. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
  1047. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
  1048. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
  1049. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
  1050. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
  1051. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
  1052. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
  1053. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
  1054. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
  1055. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
  1056. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
  1057. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
  1058. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
  1059. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
  1060. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
  1061. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
  1062. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
  1063. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
  1064. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
  1065. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
  1066. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
  1067. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
  1068. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
  1069. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
  1070. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
  1071. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
  1072. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
  1073. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
  1074. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
  1075. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
  1076. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
  1077. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
  1078. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
  1079. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
  1080. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
  1081. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
  1082. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
  1083. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
  1084. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
  1085. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
  1086. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
  1087. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
  1088. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
  1089. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
  1090. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
  1091. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
  1092. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
  1093. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
  1094. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
  1095. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
  1096. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
  1097. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
  1098. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
  1099. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
  1100. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
  1101. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
  1102. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
  1103. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
  1104. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
  1105. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
  1106. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
  1107. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
  1108. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
  1109. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
  1110. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
  1111. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
  1112. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
  1113. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
  1114. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
  1115. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
  1116. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
  1117. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
  1118. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
  1119. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
  1120. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
  1121. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
  1122. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
  1123. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
  1124. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
  1125. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
  1126. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
  1127. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
  1128. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
  1129. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
  1130. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
  1131. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
  1132. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
  1133. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
  1134. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
  1135. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
  1136. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
  1137. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
  1138. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
  1139. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
  1140. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
  1141. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
  1142. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
  1143. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
  1144. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
  1145. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
  1146. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
  1147. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
  1148. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
  1149. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
  1150. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
  1151. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
  1152. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
  1153. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
  1154. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
  1155. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
  1156. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
  1157. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
  1158. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
  1159. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
  1160. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
  1161. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
  1162. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
  1163. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
  1164. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
  1165. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
  1166. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
  1167. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
  1168. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
  1169. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
  1170. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
  1171. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
  1172. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
  1173. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
  1174. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
  1175. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
  1176. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
  1177. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
  1178. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
  1179. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
  1180. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
  1181. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
  1182. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
  1183. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
  1184. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
  1185. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
  1186. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
  1187. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
  1188. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
  1189. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
  1190. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
  1191. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
  1192. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
  1193. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
  1194. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
  1195. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
  1196. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
  1197. package/src/resources/skills/web-design-guidelines/SKILL.md +39 -0
  1198. package/src/resources/skills/web-quality-audit/SKILL.md +170 -0
  1199. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +91 -0
  1200. package/dist/resources/extensions/gsd/complexity.ts +0 -237
  1201. package/dist/resources/extensions/gsd/github-client.ts +0 -235
  1202. package/dist/resources/extensions/gsd/mcp-server.ts +0 -108
  1203. package/dist/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1204. package/dist/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1205. package/dist/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1206. package/dist/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1207. package/dist/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1208. package/dist/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1209. package/dist/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1210. package/dist/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -104
  1211. package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1212. package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1213. package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1214. package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1215. package/dist/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1216. package/dist/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1217. package/dist/resources/extensions/shared/bundled-extension-paths.ts +0 -11
  1218. package/src/resources/extensions/gsd/complexity.ts +0 -237
  1219. package/src/resources/extensions/gsd/github-client.ts +0 -235
  1220. package/src/resources/extensions/gsd/mcp-server.ts +0 -108
  1221. package/src/resources/extensions/gsd/tests/activity-log-prune.test.ts +0 -297
  1222. package/src/resources/extensions/gsd/tests/activity-log-save.test.ts +0 -127
  1223. package/src/resources/extensions/gsd/tests/agent-end-provider-error.test.ts +0 -110
  1224. package/src/resources/extensions/gsd/tests/auto-draft-pause.test.ts +0 -115
  1225. package/src/resources/extensions/gsd/tests/complexity-routing.test.ts +0 -294
  1226. package/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts +0 -202
  1227. package/src/resources/extensions/gsd/tests/metrics-io.test.ts +0 -176
  1228. package/src/resources/extensions/gsd/tests/network-error-fallback.test.ts +0 -104
  1229. package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -120
  1230. package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -226
  1231. package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +0 -110
  1232. package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -207
  1233. package/src/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +0 -183
  1234. package/src/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +0 -168
  1235. 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,6 +59,7 @@ 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
42
64
  - **[Visualizer](./docs/visualizer.md)** — workflow visualizer with stats and discussion status
43
65
  - **[Migration from v1](./docs/migration.md)** — `.planning` → `.gsd` migration
@@ -141,21 +163,23 @@ Auto mode is a state machine driven by files on disk. It reads `.gsd/STATE.md`,
141
163
 
142
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.
143
165
 
144
- 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.
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.
145
169
 
146
- 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.
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.
147
171
 
148
- 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.
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.
149
173
 
150
- 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.
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.
151
175
 
152
- 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.
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.
153
177
 
154
- 9. **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.
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.
155
179
 
156
- 10. **Milestone validation** — After all slices complete, a `validate-milestone` gate compares roadmap success criteria against actual results before sealing the milestone.
180
+ 11. **Milestone validation** — After all slices complete, a `validate-milestone` gate compares roadmap success criteria against actual results before sealing the milestone.
157
181
 
158
- 11. **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.
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.
159
183
 
160
184
  ### `/gsd` and `/gsd next` — Step Mode
161
185
 
@@ -247,14 +271,14 @@ gsd headless new-milestone --context spec.md --auto
247
271
  # One unit at a time (cron-friendly)
248
272
  gsd headless next
249
273
 
250
- # Machine-readable JSONL event stream
251
- gsd headless --json status
274
+ # Instant JSON snapshot (no LLM, ~50ms)
275
+ gsd headless query
252
276
 
253
277
  # Force a specific pipeline phase
254
278
  gsd headless dispatch plan
255
279
  ```
256
280
 
257
- 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. 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.
258
282
 
259
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.
260
284
 
@@ -282,6 +306,7 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
282
306
  | `/gsd forensics` | Post-mortem investigation of auto-mode failures |
283
307
  | `/gsd cleanup` | Archive phase directories from completed milestones |
284
308
  | `/gsd doctor` | Runtime health checks with auto-fix for common issues |
309
+ | `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
285
310
  | `/gsd export --html` | Generate HTML report for current or completed milestone |
286
311
  | `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
287
312
  | `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
@@ -295,6 +320,7 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
295
320
  | `gsd config` | Re-run the setup wizard (LLM provider + tool keys) |
296
321
  | `gsd update` | Update GSD to the latest version |
297
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) |
298
324
  | `gsd --continue` (`-c`) | Resume the most recent session for the current directory |
299
325
  | `gsd sessions` | Interactive session picker — browse and resume any saved session |
300
326
 
@@ -414,7 +440,8 @@ auto_report: true
414
440
  | `skill_rules` | Situational rules for skill routing |
415
441
  | `skill_staleness_days` | Skills unused for N days get deprioritized (default: 60, 0 = disabled) |
416
442
  | `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
417
- | `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` |
418
445
  | `verification_commands`| Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
419
446
  | `verification_auto_fix`| Auto-retry on verification failures (default: true) |
420
447
  | `verification_max_retries` | Max retries for verification failures (default: 2) |
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';
@@ -169,18 +169,11 @@ if (!isPrintMode && shouldRunOnboarding(authStorage, settingsManager.getDefaultP
169
169
  process.stdin.setRawMode(false);
170
170
  process.stdin.pause();
171
171
  }
172
- // Update check — interactive prompt when stdin is a TTY, passive banner otherwise
172
+ // Update check — non-blocking banner check; interactive prompt deferred to avoid
173
+ // blocking startup. The passive checkForUpdates() prints a banner if an update is
174
+ // available (using cached data or a background fetch) without blocking the TUI.
173
175
  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
- }
176
+ checkForUpdates().catch(() => { });
184
177
  }
185
178
  // Warn if terminal is too narrow for readable output
186
179
  if (!isPrintMode && process.stdout.columns && process.stdout.columns < 40) {
@@ -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
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Headless Context Loading — stdin reading, file context, and project bootstrapping
3
+ *
4
+ * Handles loading context from files or stdin for headless new-milestone,
5
+ * and bootstraps the .gsd/ directory structure when needed.
6
+ */
7
+ interface ContextOptions {
8
+ context?: string;
9
+ contextText?: string;
10
+ }
11
+ export declare function readStdin(): Promise<string>;
12
+ export declare function loadContext(options: ContextOptions): Promise<string>;
13
+ /**
14
+ * Bootstrap .gsd/ directory structure for headless new-milestone.
15
+ * Mirrors the bootstrap logic from guided-flow.ts showSmartEntry().
16
+ */
17
+ export declare function bootstrapGsdProject(basePath: string): void;
18
+ export {};
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Headless Context Loading — stdin reading, file context, and project bootstrapping
3
+ *
4
+ * Handles loading context from files or stdin for headless new-milestone,
5
+ * and bootstraps the .gsd/ directory structure when needed.
6
+ */
7
+ import { readFileSync, mkdirSync } from 'node:fs';
8
+ import { join, resolve } from 'node:path';
9
+ // ---------------------------------------------------------------------------
10
+ // Stdin Reader
11
+ // ---------------------------------------------------------------------------
12
+ export async function readStdin() {
13
+ const chunks = [];
14
+ for await (const chunk of process.stdin) {
15
+ chunks.push(chunk);
16
+ }
17
+ return Buffer.concat(chunks).toString('utf-8');
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // Context Loading
21
+ // ---------------------------------------------------------------------------
22
+ export async function loadContext(options) {
23
+ if (options.contextText)
24
+ return options.contextText;
25
+ if (options.context === '-') {
26
+ return readStdin();
27
+ }
28
+ if (options.context) {
29
+ return readFileSync(resolve(options.context), 'utf-8');
30
+ }
31
+ throw new Error('No context provided. Use --context <file> or --context-text <text>');
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Project Bootstrap
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Bootstrap .gsd/ directory structure for headless new-milestone.
38
+ * Mirrors the bootstrap logic from guided-flow.ts showSmartEntry().
39
+ */
40
+ export function bootstrapGsdProject(basePath) {
41
+ const gsdDir = join(basePath, '.gsd');
42
+ mkdirSync(join(gsdDir, 'milestones'), { recursive: true });
43
+ mkdirSync(join(gsdDir, 'runtime'), { recursive: true });
44
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Headless Event Detection — notification classification and command detection
3
+ *
4
+ * Detects terminal notifications, blocked notifications, milestone-ready signals,
5
+ * and classifies commands as quick (single-turn) vs long-running.
6
+ */
7
+ /**
8
+ * Detect genuine auto-mode termination notifications.
9
+ *
10
+ * Only matches the actual stop signals emitted by stopAuto():
11
+ * "Auto-mode stopped..."
12
+ * "Step-mode stopped..."
13
+ *
14
+ * Does NOT match progress notifications that happen to contain words like
15
+ * "complete" or "stopped" (e.g., "Override resolved — rewrite-docs completed",
16
+ * "All slices are complete — nothing to discuss", "Skipped 5+ completed units").
17
+ *
18
+ * Blocked detection is separate — checked via isBlockedNotification.
19
+ */
20
+ export declare const TERMINAL_PREFIXES: string[];
21
+ export declare const IDLE_TIMEOUT_MS = 15000;
22
+ export declare const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120000;
23
+ export declare function isTerminalNotification(event: Record<string, unknown>): boolean;
24
+ export declare function isBlockedNotification(event: Record<string, unknown>): boolean;
25
+ export declare function isMilestoneReadyNotification(event: Record<string, unknown>): boolean;
26
+ export declare const FIRE_AND_FORGET_METHODS: Set<string>;
27
+ export declare const QUICK_COMMANDS: Set<string>;
28
+ export declare function isQuickCommand(command: string): boolean;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Headless Event Detection — notification classification and command detection
3
+ *
4
+ * Detects terminal notifications, blocked notifications, milestone-ready signals,
5
+ * and classifies commands as quick (single-turn) vs long-running.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Completion Detection
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Detect genuine auto-mode termination notifications.
12
+ *
13
+ * Only matches the actual stop signals emitted by stopAuto():
14
+ * "Auto-mode stopped..."
15
+ * "Step-mode stopped..."
16
+ *
17
+ * Does NOT match progress notifications that happen to contain words like
18
+ * "complete" or "stopped" (e.g., "Override resolved — rewrite-docs completed",
19
+ * "All slices are complete — nothing to discuss", "Skipped 5+ completed units").
20
+ *
21
+ * Blocked detection is separate — checked via isBlockedNotification.
22
+ */
23
+ export const TERMINAL_PREFIXES = ['auto-mode stopped', 'step-mode stopped'];
24
+ export const IDLE_TIMEOUT_MS = 15_000;
25
+ // new-milestone is a long-running creative task where the LLM may pause
26
+ // between tool calls (e.g. after mkdir, before writing files). Use a
27
+ // longer idle timeout to avoid killing the session prematurely (#808).
28
+ export const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120_000;
29
+ export function isTerminalNotification(event) {
30
+ if (event.type !== 'extension_ui_request' || event.method !== 'notify')
31
+ return false;
32
+ const message = String(event.message ?? '').toLowerCase();
33
+ return TERMINAL_PREFIXES.some((prefix) => message.startsWith(prefix));
34
+ }
35
+ export function isBlockedNotification(event) {
36
+ if (event.type !== 'extension_ui_request' || event.method !== 'notify')
37
+ return false;
38
+ const message = String(event.message ?? '').toLowerCase();
39
+ // Blocked notifications come through stopAuto as "Auto-mode stopped (Blocked: ...)"
40
+ return message.includes('blocked:');
41
+ }
42
+ export function isMilestoneReadyNotification(event) {
43
+ if (event.type !== 'extension_ui_request' || event.method !== 'notify')
44
+ return false;
45
+ return /milestone\s+m\d+.*ready/i.test(String(event.message ?? ''));
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // Quick Command Detection
49
+ // ---------------------------------------------------------------------------
50
+ export const FIRE_AND_FORGET_METHODS = new Set(['notify', 'setStatus', 'setWidget', 'setTitle', 'set_editor_text']);
51
+ export const QUICK_COMMANDS = new Set([
52
+ 'status', 'queue', 'history', 'hooks', 'export', 'stop', 'pause',
53
+ 'capture', 'skip', 'undo', 'knowledge', 'config', 'prefs',
54
+ 'cleanup', 'migrate', 'doctor', 'remote', 'help', 'steer',
55
+ 'triage', 'visualize',
56
+ ]);
57
+ export function isQuickCommand(command) {
58
+ return QUICK_COMMANDS.has(command);
59
+ }