gsd-pi 2.29.0 → 2.30.0-dev.7e1bbce

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 (328) hide show
  1. package/README.md +24 -17
  2. package/dist/cli.js +51 -0
  3. package/dist/extension-registry.d.ts +63 -0
  4. package/dist/extension-registry.js +166 -0
  5. package/dist/headless.js +4 -0
  6. package/dist/help-text.js +35 -0
  7. package/dist/loader.js +10 -1
  8. package/dist/resource-loader.js +11 -1
  9. package/dist/resources/extensions/async-jobs/extension-manifest.json +13 -0
  10. package/dist/resources/extensions/bg-shell/extension-manifest.json +14 -0
  11. package/dist/resources/extensions/bg-shell/process-manager.ts +13 -0
  12. package/dist/resources/extensions/browser-tools/extension-manifest.json +37 -0
  13. package/dist/resources/extensions/context7/extension-manifest.json +12 -0
  14. package/dist/resources/extensions/google-search/extension-manifest.json +12 -0
  15. package/dist/resources/extensions/gsd/auto-dashboard.ts +31 -0
  16. package/dist/resources/extensions/gsd/auto-dispatch.ts +32 -3
  17. package/dist/resources/extensions/gsd/auto-post-unit.ts +45 -13
  18. package/dist/resources/extensions/gsd/auto-prompts.ts +40 -17
  19. package/dist/resources/extensions/gsd/auto-recovery.ts +18 -23
  20. package/dist/resources/extensions/gsd/auto-start.ts +18 -32
  21. package/dist/resources/extensions/gsd/auto-worktree.ts +21 -182
  22. package/dist/resources/extensions/gsd/auto.ts +2 -24
  23. package/dist/resources/extensions/gsd/captures.ts +4 -10
  24. package/dist/resources/extensions/gsd/commands-extensions.ts +328 -0
  25. package/dist/resources/extensions/gsd/commands-handlers.ts +22 -2
  26. package/dist/resources/extensions/gsd/commands-logs.ts +13 -14
  27. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +44 -14
  28. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  29. package/dist/resources/extensions/gsd/commands.ts +108 -24
  30. package/dist/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  31. package/dist/resources/extensions/gsd/detection.ts +2 -1
  32. package/dist/resources/extensions/gsd/doctor-checks.ts +49 -1
  33. package/dist/resources/extensions/gsd/doctor-types.ts +3 -1
  34. package/dist/resources/extensions/gsd/extension-manifest.json +18 -0
  35. package/dist/resources/extensions/gsd/forensics.ts +2 -2
  36. package/dist/resources/extensions/gsd/git-service.ts +3 -2
  37. package/dist/resources/extensions/gsd/gitignore.ts +9 -63
  38. package/dist/resources/extensions/gsd/gsd-db.ts +1 -165
  39. package/dist/resources/extensions/gsd/guided-flow.ts +8 -5
  40. package/dist/resources/extensions/gsd/index.ts +16 -3
  41. package/dist/resources/extensions/gsd/json-persistence.ts +16 -1
  42. package/dist/resources/extensions/gsd/md-importer.ts +3 -2
  43. package/dist/resources/extensions/gsd/mechanical-completion.ts +430 -0
  44. package/dist/resources/extensions/gsd/migrate/command.ts +3 -2
  45. package/dist/resources/extensions/gsd/migrate/writer.ts +2 -1
  46. package/dist/resources/extensions/gsd/migrate-external.ts +123 -0
  47. package/dist/resources/extensions/gsd/paths.ts +24 -2
  48. package/dist/resources/extensions/gsd/post-unit-hooks.ts +6 -5
  49. package/dist/resources/extensions/gsd/preferences-models.ts +7 -1
  50. package/dist/resources/extensions/gsd/preferences-validation.ts +2 -1
  51. package/dist/resources/extensions/gsd/preferences.ts +10 -5
  52. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  53. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  54. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  55. package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  56. package/dist/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  57. package/dist/resources/extensions/gsd/queue-order.ts +10 -11
  58. package/dist/resources/extensions/gsd/repo-identity.ts +148 -0
  59. package/dist/resources/extensions/gsd/resource-version.ts +99 -0
  60. package/dist/resources/extensions/gsd/roadmap-slices.ts +22 -7
  61. package/dist/resources/extensions/gsd/session-forensics.ts +4 -3
  62. package/dist/resources/extensions/gsd/session-lock.ts +53 -4
  63. package/dist/resources/extensions/gsd/session-status-io.ts +23 -41
  64. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +2 -2
  65. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  66. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +3 -3
  67. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  68. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -58
  69. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +3 -4
  70. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  71. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +5 -18
  72. package/dist/resources/extensions/gsd/tests/git-service.test.ts +10 -37
  73. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +4 -4
  74. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  75. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  76. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  77. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  78. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  79. package/dist/resources/extensions/gsd/triage-resolution.ts +2 -1
  80. package/dist/resources/extensions/gsd/types.ts +2 -0
  81. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  82. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  83. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  84. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  85. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  86. package/dist/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  87. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  88. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  89. package/dist/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  90. package/dist/resources/extensions/gsd/workflow-templates.ts +241 -0
  91. package/dist/resources/extensions/gsd/worktree-command.ts +1 -11
  92. package/dist/resources/extensions/gsd/worktree-manager.ts +3 -2
  93. package/dist/resources/extensions/gsd/worktree.ts +42 -5
  94. package/dist/resources/extensions/mac-tools/extension-manifest.json +16 -0
  95. package/dist/resources/extensions/mcp-client/index.ts +459 -0
  96. package/dist/resources/extensions/mcporter/extension-manifest.json +12 -0
  97. package/dist/resources/extensions/remote-questions/discord-adapter.ts +8 -19
  98. package/dist/resources/extensions/remote-questions/extension-manifest.json +11 -0
  99. package/dist/resources/extensions/remote-questions/http-client.ts +76 -0
  100. package/dist/resources/extensions/remote-questions/slack-adapter.ts +11 -17
  101. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +8 -19
  102. package/dist/resources/extensions/search-the-web/extension-manifest.json +13 -0
  103. package/dist/resources/extensions/slash-commands/extension-manifest.json +11 -0
  104. package/dist/resources/extensions/subagent/extension-manifest.json +13 -0
  105. package/dist/resources/extensions/ttsr/extension-manifest.json +11 -0
  106. package/dist/resources/extensions/universal-config/extension-manifest.json +13 -0
  107. package/dist/resources/extensions/voice/extension-manifest.json +12 -0
  108. package/dist/resources/skills/create-gsd-extension/SKILL.md +87 -0
  109. package/dist/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  110. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  111. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  112. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  113. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  114. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  115. package/dist/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  116. package/dist/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  117. package/dist/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  118. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  119. package/dist/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  120. package/dist/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  121. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  122. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  123. package/dist/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  124. package/dist/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  125. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  126. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  127. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  128. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  129. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  130. package/dist/resources/skills/create-skill/SKILL.md +184 -0
  131. package/dist/resources/skills/create-skill/references/api-security.md +226 -0
  132. package/dist/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  133. package/dist/resources/skills/create-skill/references/common-patterns.md +595 -0
  134. package/dist/resources/skills/create-skill/references/core-principles.md +437 -0
  135. package/dist/resources/skills/create-skill/references/executable-code.md +175 -0
  136. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  137. package/dist/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  138. package/dist/resources/skills/create-skill/references/recommended-structure.md +168 -0
  139. package/dist/resources/skills/create-skill/references/skill-structure.md +372 -0
  140. package/dist/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  141. package/dist/resources/skills/create-skill/references/using-scripts.md +113 -0
  142. package/dist/resources/skills/create-skill/references/using-templates.md +112 -0
  143. package/dist/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  144. package/dist/resources/skills/create-skill/templates/router-skill.md +73 -0
  145. package/dist/resources/skills/create-skill/templates/simple-skill.md +33 -0
  146. package/dist/resources/skills/create-skill/workflows/add-reference.md +96 -0
  147. package/dist/resources/skills/create-skill/workflows/add-script.md +93 -0
  148. package/dist/resources/skills/create-skill/workflows/add-template.md +74 -0
  149. package/dist/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  150. package/dist/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  151. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  152. package/dist/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  153. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  154. package/dist/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  155. package/dist/resources/skills/react-best-practices/SKILL.md +1 -1
  156. package/dist/worktree-cli.d.ts +34 -0
  157. package/dist/worktree-cli.js +294 -0
  158. package/dist/worktree-name-gen.d.ts +7 -0
  159. package/dist/worktree-name-gen.js +44 -0
  160. package/package.json +1 -1
  161. package/packages/native/dist/native.d.ts +2 -0
  162. package/packages/native/dist/native.js +19 -5
  163. package/packages/native/src/native.ts +23 -9
  164. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  165. package/packages/pi-coding-agent/dist/core/extensions/loader.js +13 -0
  166. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  167. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  168. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -0
  169. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  170. package/packages/pi-coding-agent/package.json +1 -1
  171. package/packages/pi-coding-agent/src/core/extensions/loader.ts +13 -0
  172. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -0
  173. package/pkg/package.json +1 -1
  174. package/src/resources/extensions/async-jobs/extension-manifest.json +13 -0
  175. package/src/resources/extensions/bg-shell/extension-manifest.json +14 -0
  176. package/src/resources/extensions/bg-shell/process-manager.ts +13 -0
  177. package/src/resources/extensions/browser-tools/extension-manifest.json +37 -0
  178. package/src/resources/extensions/context7/extension-manifest.json +12 -0
  179. package/src/resources/extensions/google-search/extension-manifest.json +12 -0
  180. package/src/resources/extensions/gsd/auto-dashboard.ts +31 -0
  181. package/src/resources/extensions/gsd/auto-dispatch.ts +32 -3
  182. package/src/resources/extensions/gsd/auto-post-unit.ts +45 -13
  183. package/src/resources/extensions/gsd/auto-prompts.ts +40 -17
  184. package/src/resources/extensions/gsd/auto-recovery.ts +18 -23
  185. package/src/resources/extensions/gsd/auto-start.ts +18 -32
  186. package/src/resources/extensions/gsd/auto-worktree.ts +21 -182
  187. package/src/resources/extensions/gsd/auto.ts +2 -24
  188. package/src/resources/extensions/gsd/captures.ts +4 -10
  189. package/src/resources/extensions/gsd/commands-extensions.ts +328 -0
  190. package/src/resources/extensions/gsd/commands-handlers.ts +22 -2
  191. package/src/resources/extensions/gsd/commands-logs.ts +13 -14
  192. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +44 -14
  193. package/src/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  194. package/src/resources/extensions/gsd/commands.ts +108 -24
  195. package/src/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  196. package/src/resources/extensions/gsd/detection.ts +2 -1
  197. package/src/resources/extensions/gsd/doctor-checks.ts +49 -1
  198. package/src/resources/extensions/gsd/doctor-types.ts +3 -1
  199. package/src/resources/extensions/gsd/extension-manifest.json +18 -0
  200. package/src/resources/extensions/gsd/forensics.ts +2 -2
  201. package/src/resources/extensions/gsd/git-service.ts +3 -2
  202. package/src/resources/extensions/gsd/gitignore.ts +9 -63
  203. package/src/resources/extensions/gsd/gsd-db.ts +1 -165
  204. package/src/resources/extensions/gsd/guided-flow.ts +8 -5
  205. package/src/resources/extensions/gsd/index.ts +16 -3
  206. package/src/resources/extensions/gsd/json-persistence.ts +16 -1
  207. package/src/resources/extensions/gsd/md-importer.ts +3 -2
  208. package/src/resources/extensions/gsd/mechanical-completion.ts +430 -0
  209. package/src/resources/extensions/gsd/migrate/command.ts +3 -2
  210. package/src/resources/extensions/gsd/migrate/writer.ts +2 -1
  211. package/src/resources/extensions/gsd/migrate-external.ts +123 -0
  212. package/src/resources/extensions/gsd/paths.ts +24 -2
  213. package/src/resources/extensions/gsd/post-unit-hooks.ts +6 -5
  214. package/src/resources/extensions/gsd/preferences-models.ts +7 -1
  215. package/src/resources/extensions/gsd/preferences-validation.ts +2 -1
  216. package/src/resources/extensions/gsd/preferences.ts +10 -5
  217. package/src/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  218. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  219. package/src/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  220. package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  221. package/src/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  222. package/src/resources/extensions/gsd/queue-order.ts +10 -11
  223. package/src/resources/extensions/gsd/repo-identity.ts +148 -0
  224. package/src/resources/extensions/gsd/resource-version.ts +99 -0
  225. package/src/resources/extensions/gsd/roadmap-slices.ts +22 -7
  226. package/src/resources/extensions/gsd/session-forensics.ts +4 -3
  227. package/src/resources/extensions/gsd/session-lock.ts +53 -4
  228. package/src/resources/extensions/gsd/session-status-io.ts +23 -41
  229. package/src/resources/extensions/gsd/tests/activity-log.test.ts +2 -2
  230. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  231. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +3 -3
  232. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  233. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -58
  234. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +3 -4
  235. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  236. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +5 -18
  237. package/src/resources/extensions/gsd/tests/git-service.test.ts +10 -37
  238. package/src/resources/extensions/gsd/tests/knowledge.test.ts +4 -4
  239. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  240. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  241. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  242. package/src/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  243. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  244. package/src/resources/extensions/gsd/triage-resolution.ts +2 -1
  245. package/src/resources/extensions/gsd/types.ts +2 -0
  246. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  247. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  248. package/src/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  249. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  250. package/src/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  251. package/src/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  252. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  253. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  254. package/src/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  255. package/src/resources/extensions/gsd/workflow-templates.ts +241 -0
  256. package/src/resources/extensions/gsd/worktree-command.ts +1 -11
  257. package/src/resources/extensions/gsd/worktree-manager.ts +3 -2
  258. package/src/resources/extensions/gsd/worktree.ts +42 -5
  259. package/src/resources/extensions/mac-tools/extension-manifest.json +16 -0
  260. package/src/resources/extensions/mcp-client/index.ts +459 -0
  261. package/src/resources/extensions/mcporter/extension-manifest.json +12 -0
  262. package/src/resources/extensions/remote-questions/discord-adapter.ts +8 -19
  263. package/src/resources/extensions/remote-questions/extension-manifest.json +11 -0
  264. package/src/resources/extensions/remote-questions/http-client.ts +76 -0
  265. package/src/resources/extensions/remote-questions/slack-adapter.ts +11 -17
  266. package/src/resources/extensions/remote-questions/telegram-adapter.ts +8 -19
  267. package/src/resources/extensions/search-the-web/extension-manifest.json +13 -0
  268. package/src/resources/extensions/slash-commands/extension-manifest.json +11 -0
  269. package/src/resources/extensions/subagent/extension-manifest.json +13 -0
  270. package/src/resources/extensions/ttsr/extension-manifest.json +11 -0
  271. package/src/resources/extensions/universal-config/extension-manifest.json +13 -0
  272. package/src/resources/extensions/voice/extension-manifest.json +12 -0
  273. package/src/resources/skills/create-gsd-extension/SKILL.md +87 -0
  274. package/src/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  275. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  276. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  277. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  278. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  279. package/src/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  280. package/src/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  281. package/src/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  282. package/src/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  283. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  284. package/src/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  285. package/src/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  286. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  287. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  288. package/src/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  289. package/src/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  290. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  291. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  292. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  293. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  294. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  295. package/src/resources/skills/create-skill/SKILL.md +184 -0
  296. package/src/resources/skills/create-skill/references/api-security.md +226 -0
  297. package/src/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  298. package/src/resources/skills/create-skill/references/common-patterns.md +595 -0
  299. package/src/resources/skills/create-skill/references/core-principles.md +437 -0
  300. package/src/resources/skills/create-skill/references/executable-code.md +175 -0
  301. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  302. package/src/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  303. package/src/resources/skills/create-skill/references/recommended-structure.md +168 -0
  304. package/src/resources/skills/create-skill/references/skill-structure.md +372 -0
  305. package/src/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  306. package/src/resources/skills/create-skill/references/using-scripts.md +113 -0
  307. package/src/resources/skills/create-skill/references/using-templates.md +112 -0
  308. package/src/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  309. package/src/resources/skills/create-skill/templates/router-skill.md +73 -0
  310. package/src/resources/skills/create-skill/templates/simple-skill.md +33 -0
  311. package/src/resources/skills/create-skill/workflows/add-reference.md +96 -0
  312. package/src/resources/skills/create-skill/workflows/add-script.md +93 -0
  313. package/src/resources/skills/create-skill/workflows/add-template.md +74 -0
  314. package/src/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  315. package/src/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  316. package/src/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  317. package/src/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  318. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  319. package/src/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  320. package/src/resources/skills/react-best-practices/SKILL.md +1 -1
  321. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +0 -198
  322. package/dist/resources/extensions/gsd/tests/worktree-db-integration.test.ts +0 -205
  323. package/dist/resources/extensions/gsd/tests/worktree-db.test.ts +0 -442
  324. package/dist/resources/extensions/mcporter/index.ts +0 -525
  325. package/src/resources/extensions/gsd/auto-worktree-sync.ts +0 -198
  326. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +0 -205
  327. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +0 -442
  328. package/src/resources/extensions/mcporter/index.ts +0 -525
@@ -0,0 +1,241 @@
1
+ /**
2
+ * GSD Workflow Templates — Registry & Resolution
3
+ *
4
+ * Loads the workflow template registry and resolves templates by name,
5
+ * alias, or trigger-keyword matching against user input.
6
+ */
7
+
8
+ import { readFileSync, existsSync } from "node:fs";
9
+ import { join, dirname } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+
12
+ const __extensionDir = dirname(fileURLToPath(import.meta.url));
13
+ const registryPath = join(__extensionDir, "workflow-templates", "registry.json");
14
+
15
+ // ─── Types ───────────────────────────────────────────────────────────────────
16
+
17
+ export interface TemplateEntry {
18
+ name: string;
19
+ description: string;
20
+ file: string;
21
+ phases: string[];
22
+ triggers: string[];
23
+ artifact_dir: string | null;
24
+ estimated_complexity: string;
25
+ requires_project: boolean;
26
+ }
27
+
28
+ export interface TemplateRegistry {
29
+ version: number;
30
+ templates: Record<string, TemplateEntry>;
31
+ }
32
+
33
+ export interface TemplateMatch {
34
+ id: string;
35
+ template: TemplateEntry;
36
+ confidence: "exact" | "high" | "medium" | "low";
37
+ matchedTrigger?: string;
38
+ }
39
+
40
+ // ─── Registry Cache ──────────────────────────────────────────────────────────
41
+
42
+ let cachedRegistry: TemplateRegistry | null = null;
43
+
44
+ /**
45
+ * Load and cache the workflow template registry.
46
+ */
47
+ export function loadRegistry(): TemplateRegistry {
48
+ if (cachedRegistry) return cachedRegistry;
49
+
50
+ const content = readFileSync(registryPath, "utf-8");
51
+ cachedRegistry = JSON.parse(content) as TemplateRegistry;
52
+ return cachedRegistry;
53
+ }
54
+
55
+ /**
56
+ * Resolve a template by exact name or alias.
57
+ * Returns null if no match found.
58
+ */
59
+ export function resolveByName(nameOrAlias: string): TemplateMatch | null {
60
+ const registry = loadRegistry();
61
+ const normalized = nameOrAlias.toLowerCase().trim();
62
+
63
+ // Exact key match
64
+ if (registry.templates[normalized]) {
65
+ return {
66
+ id: normalized,
67
+ template: registry.templates[normalized],
68
+ confidence: "exact",
69
+ };
70
+ }
71
+
72
+ // Match by template name (case-insensitive)
73
+ for (const [id, entry] of Object.entries(registry.templates)) {
74
+ if (entry.name.toLowerCase() === normalized) {
75
+ return { id, template: entry, confidence: "exact" };
76
+ }
77
+ }
78
+
79
+ // Fuzzy: prefix match on id
80
+ for (const [id, entry] of Object.entries(registry.templates)) {
81
+ if (id.startsWith(normalized) || normalized.startsWith(id)) {
82
+ return { id, template: entry, confidence: "high" };
83
+ }
84
+ }
85
+
86
+ // Common aliases
87
+ const aliases: Record<string, string> = {
88
+ "bug": "bugfix",
89
+ "fix": "bugfix",
90
+ "feature": "small-feature",
91
+ "feat": "small-feature",
92
+ "research": "spike",
93
+ "investigate": "spike",
94
+ "hot": "hotfix",
95
+ "urgent": "hotfix",
96
+ "security": "security-audit",
97
+ "audit": "security-audit",
98
+ "upgrade": "dep-upgrade",
99
+ "deps": "dep-upgrade",
100
+ "update-deps": "dep-upgrade",
101
+ "migration": "refactor",
102
+ "project": "full-project",
103
+ "full": "full-project",
104
+ };
105
+
106
+ const aliasMatch = aliases[normalized];
107
+ if (aliasMatch && registry.templates[aliasMatch]) {
108
+ return {
109
+ id: aliasMatch,
110
+ template: registry.templates[aliasMatch],
111
+ confidence: "high",
112
+ };
113
+ }
114
+
115
+ return null;
116
+ }
117
+
118
+ /**
119
+ * Auto-detect the best template based on user description text.
120
+ * Returns ranked matches sorted by confidence.
121
+ */
122
+ export function autoDetect(description: string): TemplateMatch[] {
123
+ const registry = loadRegistry();
124
+ const lower = description.toLowerCase();
125
+ const words = lower.split(/\s+/);
126
+ const matches: TemplateMatch[] = [];
127
+
128
+ for (const [id, entry] of Object.entries(registry.templates)) {
129
+ let bestScore = 0;
130
+ let bestTrigger = "";
131
+
132
+ for (const trigger of entry.triggers) {
133
+ const triggerLower = trigger.toLowerCase();
134
+
135
+ // Exact phrase match in description
136
+ if (lower.includes(triggerLower)) {
137
+ const score = triggerLower.split(/\s+/).length * 2; // multi-word triggers score higher
138
+ if (score > bestScore) {
139
+ bestScore = score;
140
+ bestTrigger = trigger;
141
+ }
142
+ continue;
143
+ }
144
+
145
+ // Single-word trigger match against description words
146
+ if (!triggerLower.includes(" ") && words.includes(triggerLower)) {
147
+ if (1 > bestScore) {
148
+ bestScore = 1;
149
+ bestTrigger = trigger;
150
+ }
151
+ }
152
+ }
153
+
154
+ if (bestScore > 0) {
155
+ const confidence = bestScore >= 4 ? "high" : bestScore >= 2 ? "medium" : "low";
156
+ matches.push({
157
+ id,
158
+ template: entry,
159
+ confidence,
160
+ matchedTrigger: bestTrigger,
161
+ });
162
+ }
163
+ }
164
+
165
+ // Sort by confidence (high > medium > low), then alphabetically
166
+ const order = { exact: 0, high: 1, medium: 2, low: 3 };
167
+ matches.sort((a, b) => order[a.confidence] - order[b.confidence] || a.id.localeCompare(b.id));
168
+
169
+ return matches;
170
+ }
171
+
172
+ /**
173
+ * List all templates as formatted text for display.
174
+ */
175
+ export function listTemplates(): string {
176
+ const registry = loadRegistry();
177
+ const lines: string[] = ["Workflow Templates\n"];
178
+
179
+ for (const [id, entry] of Object.entries(registry.templates)) {
180
+ const phases = entry.phases.join(" → ");
181
+ const complexity = entry.estimated_complexity;
182
+ lines.push(` ${id.padEnd(16)} ${entry.name}`);
183
+ lines.push(` ${"".padEnd(16)} ${entry.description}`);
184
+ lines.push(` ${"".padEnd(16)} Phases: ${phases} | Complexity: ${complexity}`);
185
+ lines.push("");
186
+ }
187
+
188
+ lines.push("Usage: /gsd start <template> [description]");
189
+ lines.push(" /gsd templates info <name>");
190
+
191
+ return lines.join("\n");
192
+ }
193
+
194
+ /**
195
+ * Get detailed info about a specific template.
196
+ */
197
+ export function getTemplateInfo(name: string): string | null {
198
+ const match = resolveByName(name);
199
+ if (!match) return null;
200
+
201
+ const { id, template: t } = match;
202
+ const lines = [
203
+ `Template: ${t.name} (${id})`,
204
+ "",
205
+ `Description: ${t.description}`,
206
+ `Complexity: ${t.estimated_complexity}`,
207
+ `Requires .gsd/: ${t.requires_project ? "yes" : "no"}`,
208
+ "",
209
+ "Phases:",
210
+ ...t.phases.map((p, i) => ` ${i + 1}. ${p}`),
211
+ "",
212
+ "Triggers:",
213
+ ` ${t.triggers.join(", ")}`,
214
+ ];
215
+
216
+ if (t.artifact_dir) {
217
+ lines.push("", `Artifacts: ${t.artifact_dir}`);
218
+ }
219
+
220
+ const templateFilePath = join(__extensionDir, "workflow-templates", t.file);
221
+ if (existsSync(templateFilePath)) {
222
+ lines.push("", "Template file: loaded");
223
+ } else {
224
+ lines.push("", "Template file: not yet created");
225
+ }
226
+
227
+ return lines.join("\n");
228
+ }
229
+
230
+ /**
231
+ * Load the raw content of a workflow template .md file.
232
+ */
233
+ export function loadWorkflowTemplate(templateId: string): string | null {
234
+ const match = resolveByName(templateId);
235
+ if (!match) return null;
236
+
237
+ const filePath = join(__extensionDir, "workflow-templates", match.template.file);
238
+ if (!existsSync(filePath)) return null;
239
+
240
+ return readFileSync(filePath, "utf-8");
241
+ }
@@ -50,7 +50,7 @@ export function getWorktreeOriginalCwd(): string | null {
50
50
  export function getActiveWorktreeName(): string | null {
51
51
  if (!originalCwd) return null;
52
52
  const cwd = process.cwd();
53
- const wtDir = join(originalCwd, ".gsd", "worktrees");
53
+ const wtDir = join(gsdRoot(originalCwd), "worktrees");
54
54
  if (!cwd.startsWith(wtDir)) return null;
55
55
  const rel = cwd.slice(wtDir.length + 1);
56
56
  const name = rel.split("/")[0] ?? rel.split("\\")[0];
@@ -633,16 +633,6 @@ async function handleMerge(
633
633
  const commitType = inferCommitType(name);
634
634
  const commitMessage = `${commitType}(${name}): merge worktree ${name}`;
635
635
 
636
- // Reconcile worktree DB into main DB before squash merge
637
- const wtDbPath = join(worktreePath(basePath, name), ".gsd", "gsd.db");
638
- const mainDbPath = join(basePath, ".gsd", "gsd.db");
639
- if (existsSync(wtDbPath) && existsSync(mainDbPath)) {
640
- try {
641
- const { reconcileWorktreeDb } = await import("./gsd-db.js");
642
- reconcileWorktreeDb(mainDbPath, wtDbPath);
643
- } catch { /* non-fatal */ }
644
- }
645
-
646
636
  try {
647
637
  mergeWorktreeToMain(basePath, name, commitMessage);
648
638
  ctx.ui.notify(
@@ -17,6 +17,7 @@
17
17
 
18
18
  import { existsSync, mkdirSync, readFileSync, realpathSync } from "node:fs";
19
19
  import { join, resolve, sep } from "node:path";
20
+ import { gsdRoot } from "./paths.js";
20
21
  import { GSDError, GSD_PARSE_ERROR, GSD_STALE_STATE, GSD_LOCK_HELD, GSD_GIT_ERROR, GSD_MERGE_CONFLICT } from "./errors.js";
21
22
  import {
22
23
  nativeBranchDelete,
@@ -100,7 +101,7 @@ export function resolveGitDir(basePath: string): string {
100
101
  }
101
102
 
102
103
  export function worktreesDir(basePath: string): string {
103
- return join(basePath, ".gsd", "worktrees");
104
+ return join(gsdRoot(basePath), "worktrees");
104
105
  }
105
106
 
106
107
  export function worktreePath(basePath: string, name: string): string {
@@ -193,7 +194,7 @@ export function listWorktrees(basePath: string): WorktreeInfo[] {
193
194
  const seenRoots = new Set<string>();
194
195
  const worktreeRoots = baseVariants
195
196
  .map(baseVariant => {
196
- const path = join(baseVariant, ".gsd", "worktrees");
197
+ const path = join(gsdRoot(baseVariant), "worktrees");
197
198
  return {
198
199
  normalized: normalizePathForComparison(path),
199
200
  };
@@ -12,7 +12,7 @@
12
12
  * SLICE_BRANCH_RE) remain for backwards compatibility with legacy branches.
13
13
  */
14
14
 
15
- import { existsSync, readFileSync, utimesSync } from "node:fs";
15
+ import { existsSync, lstatSync, readFileSync, utimesSync } from "node:fs";
16
16
  import { join, resolve, sep } from "node:path";
17
17
 
18
18
  import { GitServiceImpl, writeIntegrationBranch, type TaskCommitContext } from "./git-service.js";
@@ -72,6 +72,25 @@ export function captureIntegrationBranch(basePath: string, milestoneId: string,
72
72
  * Returns null if not inside a GSD worktree (.gsd/worktrees/<name>/).
73
73
  */
74
74
  export function detectWorktreeName(basePath: string): string | null {
75
+ // Primary: use git metadata — .git file with gitdir: pointer
76
+ const gitPath = join(basePath, ".git");
77
+ try {
78
+ const stat = lstatSync(gitPath);
79
+ if (stat.isFile()) {
80
+ const content = readFileSync(gitPath, "utf-8").trim();
81
+ if (content.startsWith("gitdir:")) {
82
+ const gitdir = content.slice(7).trim();
83
+ // Git worktree gitdir format: <repo>/.git/worktrees/<name>
84
+ const parts = gitdir.replace(/\\/g, "/").split("/");
85
+ const wtIdx = parts.lastIndexOf("worktrees");
86
+ if (wtIdx !== -1 && wtIdx < parts.length - 1) {
87
+ return parts[wtIdx + 1] || null;
88
+ }
89
+ }
90
+ }
91
+ } catch { /* fall through */ }
92
+
93
+ // Fallback: path-based detection for legacy setups
75
94
  const normalizedPath = basePath.replaceAll("\\", "/");
76
95
  const marker = "/.gsd/worktrees/";
77
96
  const idx = normalizedPath.indexOf(marker);
@@ -90,14 +109,32 @@ export function detectWorktreeName(basePath: string): string | null {
90
109
  * operate against the real project root, not a worktree subdirectory.
91
110
  */
92
111
  export function resolveProjectRoot(basePath: string): string {
112
+ // Primary: use git metadata to resolve the main worktree root
113
+ const gitPath = join(basePath, ".git");
114
+ try {
115
+ const stat = lstatSync(gitPath);
116
+ if (stat.isFile()) {
117
+ const content = readFileSync(gitPath, "utf-8").trim();
118
+ if (content.startsWith("gitdir:")) {
119
+ const gitdir = resolve(basePath, content.slice(7).trim());
120
+ // Git worktree gitdir: <repo>/.git/worktrees/<name>
121
+ // Walk up to <repo>
122
+ const parts = gitdir.replace(/\\/g, "/").split("/");
123
+ const wtIdx = parts.lastIndexOf("worktrees");
124
+ if (wtIdx >= 2 && parts[wtIdx - 1] === ".git") {
125
+ return parts.slice(0, wtIdx - 1).join("/");
126
+ }
127
+ }
128
+ }
129
+ } catch { /* fall through */ }
130
+
131
+ // Fallback: legacy path-based detection
93
132
  const normalizedPath = basePath.replaceAll("\\", "/");
94
133
  const marker = "/.gsd/worktrees/";
95
134
  const idx = normalizedPath.indexOf(marker);
96
135
  if (idx === -1) return basePath;
97
- // Return the original path up to the .gsd/ marker (un-normalized)
98
- // Account for potential OS-specific separators
99
- const sep = basePath.includes("\\") ? "\\" : "/";
100
- const markerOs = `${sep}.gsd${sep}worktrees${sep}`;
136
+ const osSep = basePath.includes("\\") ? "\\" : "/";
137
+ const markerOs = `${osSep}.gsd${osSep}worktrees${osSep}`;
101
138
  const idxOs = basePath.indexOf(markerOs);
102
139
  if (idxOs !== -1) return basePath.slice(0, idxOs);
103
140
  return basePath.slice(0, idx);
@@ -0,0 +1,16 @@
1
+ {
2
+ "id": "mac-tools",
3
+ "name": "Mac Tools",
4
+ "version": "1.0.0",
5
+ "description": "macOS automation via Accessibility API — screenshots, UI inspection, clicks, and typing",
6
+ "tier": "bundled",
7
+ "requires": { "platform": ">=2.29.0" },
8
+ "provides": {
9
+ "tools": [
10
+ "mac_check_permissions", "mac_list_apps", "mac_launch_app", "mac_activate_app",
11
+ "mac_quit_app", "mac_list_windows", "mac_screenshot", "mac_find",
12
+ "mac_get_tree", "mac_click", "mac_type", "mac_read"
13
+ ],
14
+ "hooks": ["before_agent_start"]
15
+ }
16
+ }