gsd-pi 2.29.0-dev.953d788 → 2.29.0-dev.f08b4fe

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 (316) hide show
  1. package/README.md +24 -17
  2. package/dist/extension-registry.d.ts +63 -0
  3. package/dist/extension-registry.js +166 -0
  4. package/dist/headless.js +4 -0
  5. package/dist/loader.js +10 -1
  6. package/dist/resource-loader.js +11 -1
  7. package/dist/resources/extensions/async-jobs/extension-manifest.json +13 -0
  8. package/dist/resources/extensions/bg-shell/extension-manifest.json +14 -0
  9. package/dist/resources/extensions/bg-shell/process-manager.ts +13 -0
  10. package/dist/resources/extensions/browser-tools/extension-manifest.json +37 -0
  11. package/dist/resources/extensions/context7/extension-manifest.json +12 -0
  12. package/dist/resources/extensions/google-search/extension-manifest.json +12 -0
  13. package/dist/resources/extensions/gsd/auto-dashboard.ts +217 -65
  14. package/dist/resources/extensions/gsd/auto-dispatch.ts +32 -3
  15. package/dist/resources/extensions/gsd/auto-post-unit.ts +45 -13
  16. package/dist/resources/extensions/gsd/auto-prompts.ts +40 -17
  17. package/dist/resources/extensions/gsd/auto-recovery.ts +18 -23
  18. package/dist/resources/extensions/gsd/auto-start.ts +18 -32
  19. package/dist/resources/extensions/gsd/auto-worktree.ts +21 -182
  20. package/dist/resources/extensions/gsd/auto.ts +2 -24
  21. package/dist/resources/extensions/gsd/captures.ts +4 -10
  22. package/dist/resources/extensions/gsd/commands-extensions.ts +328 -0
  23. package/dist/resources/extensions/gsd/commands-handlers.ts +22 -2
  24. package/dist/resources/extensions/gsd/commands-logs.ts +13 -14
  25. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +44 -14
  26. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  27. package/dist/resources/extensions/gsd/commands.ts +108 -24
  28. package/dist/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  29. package/dist/resources/extensions/gsd/detection.ts +2 -1
  30. package/dist/resources/extensions/gsd/doctor-checks.ts +49 -1
  31. package/dist/resources/extensions/gsd/doctor-types.ts +3 -1
  32. package/dist/resources/extensions/gsd/extension-manifest.json +18 -0
  33. package/dist/resources/extensions/gsd/forensics.ts +2 -2
  34. package/dist/resources/extensions/gsd/git-service.ts +3 -2
  35. package/dist/resources/extensions/gsd/gitignore.ts +9 -63
  36. package/dist/resources/extensions/gsd/gsd-db.ts +1 -165
  37. package/dist/resources/extensions/gsd/guided-flow.ts +8 -5
  38. package/dist/resources/extensions/gsd/index.ts +3 -3
  39. package/dist/resources/extensions/gsd/json-persistence.ts +16 -1
  40. package/dist/resources/extensions/gsd/md-importer.ts +3 -2
  41. package/dist/resources/extensions/gsd/mechanical-completion.ts +430 -0
  42. package/dist/resources/extensions/gsd/migrate/command.ts +3 -2
  43. package/dist/resources/extensions/gsd/migrate/writer.ts +2 -1
  44. package/dist/resources/extensions/gsd/migrate-external.ts +123 -0
  45. package/dist/resources/extensions/gsd/paths.ts +24 -2
  46. package/dist/resources/extensions/gsd/post-unit-hooks.ts +6 -5
  47. package/dist/resources/extensions/gsd/preferences-models.ts +7 -1
  48. package/dist/resources/extensions/gsd/preferences-validation.ts +2 -1
  49. package/dist/resources/extensions/gsd/preferences.ts +10 -5
  50. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  51. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  52. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  53. package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  54. package/dist/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  55. package/dist/resources/extensions/gsd/queue-order.ts +10 -11
  56. package/dist/resources/extensions/gsd/repo-identity.ts +148 -0
  57. package/dist/resources/extensions/gsd/resource-version.ts +99 -0
  58. package/dist/resources/extensions/gsd/session-forensics.ts +4 -3
  59. package/dist/resources/extensions/gsd/session-status-io.ts +23 -41
  60. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +2 -2
  61. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  62. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +3 -3
  63. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  64. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -58
  65. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +3 -4
  66. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  67. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +5 -18
  68. package/dist/resources/extensions/gsd/tests/git-service.test.ts +10 -37
  69. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +4 -4
  70. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  71. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  72. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  73. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  74. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  75. package/dist/resources/extensions/gsd/triage-resolution.ts +2 -1
  76. package/dist/resources/extensions/gsd/types.ts +2 -0
  77. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  78. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  79. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  80. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  81. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  82. package/dist/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  83. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  84. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  85. package/dist/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  86. package/dist/resources/extensions/gsd/workflow-templates.ts +241 -0
  87. package/dist/resources/extensions/gsd/worktree-command.ts +1 -11
  88. package/dist/resources/extensions/gsd/worktree-manager.ts +3 -2
  89. package/dist/resources/extensions/gsd/worktree.ts +42 -5
  90. package/dist/resources/extensions/mac-tools/extension-manifest.json +16 -0
  91. package/dist/resources/extensions/mcp-client/index.ts +459 -0
  92. package/dist/resources/extensions/mcporter/extension-manifest.json +12 -0
  93. package/dist/resources/extensions/remote-questions/discord-adapter.ts +8 -19
  94. package/dist/resources/extensions/remote-questions/extension-manifest.json +11 -0
  95. package/dist/resources/extensions/remote-questions/http-client.ts +76 -0
  96. package/dist/resources/extensions/remote-questions/slack-adapter.ts +11 -17
  97. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +8 -19
  98. package/dist/resources/extensions/search-the-web/extension-manifest.json +13 -0
  99. package/dist/resources/extensions/slash-commands/extension-manifest.json +11 -0
  100. package/dist/resources/extensions/subagent/extension-manifest.json +13 -0
  101. package/dist/resources/extensions/ttsr/extension-manifest.json +11 -0
  102. package/dist/resources/extensions/universal-config/extension-manifest.json +13 -0
  103. package/dist/resources/extensions/voice/extension-manifest.json +12 -0
  104. package/dist/resources/skills/create-gsd-extension/SKILL.md +87 -0
  105. package/dist/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  106. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  107. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  108. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  109. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  110. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  111. package/dist/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  112. package/dist/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  113. package/dist/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  114. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  115. package/dist/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  116. package/dist/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  117. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  118. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  119. package/dist/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  120. package/dist/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  121. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  122. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  123. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  124. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  125. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  126. package/dist/resources/skills/create-skill/SKILL.md +184 -0
  127. package/dist/resources/skills/create-skill/references/api-security.md +226 -0
  128. package/dist/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  129. package/dist/resources/skills/create-skill/references/common-patterns.md +595 -0
  130. package/dist/resources/skills/create-skill/references/core-principles.md +437 -0
  131. package/dist/resources/skills/create-skill/references/executable-code.md +175 -0
  132. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  133. package/dist/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  134. package/dist/resources/skills/create-skill/references/recommended-structure.md +168 -0
  135. package/dist/resources/skills/create-skill/references/skill-structure.md +372 -0
  136. package/dist/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  137. package/dist/resources/skills/create-skill/references/using-scripts.md +113 -0
  138. package/dist/resources/skills/create-skill/references/using-templates.md +112 -0
  139. package/dist/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  140. package/dist/resources/skills/create-skill/templates/router-skill.md +73 -0
  141. package/dist/resources/skills/create-skill/templates/simple-skill.md +33 -0
  142. package/dist/resources/skills/create-skill/workflows/add-reference.md +96 -0
  143. package/dist/resources/skills/create-skill/workflows/add-script.md +93 -0
  144. package/dist/resources/skills/create-skill/workflows/add-template.md +74 -0
  145. package/dist/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  146. package/dist/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  147. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  148. package/dist/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  149. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  150. package/dist/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  151. package/dist/resources/skills/react-best-practices/SKILL.md +1 -1
  152. package/package.json +1 -1
  153. package/packages/native/dist/native.d.ts +2 -0
  154. package/packages/native/dist/native.js +19 -5
  155. package/packages/native/src/native.ts +23 -9
  156. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  157. package/packages/pi-coding-agent/dist/core/extensions/loader.js +13 -0
  158. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  159. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  160. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -0
  161. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  162. package/packages/pi-coding-agent/src/core/extensions/loader.ts +13 -0
  163. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -0
  164. package/src/resources/extensions/async-jobs/extension-manifest.json +13 -0
  165. package/src/resources/extensions/bg-shell/extension-manifest.json +14 -0
  166. package/src/resources/extensions/bg-shell/process-manager.ts +13 -0
  167. package/src/resources/extensions/browser-tools/extension-manifest.json +37 -0
  168. package/src/resources/extensions/context7/extension-manifest.json +12 -0
  169. package/src/resources/extensions/google-search/extension-manifest.json +12 -0
  170. package/src/resources/extensions/gsd/auto-dashboard.ts +217 -65
  171. package/src/resources/extensions/gsd/auto-dispatch.ts +32 -3
  172. package/src/resources/extensions/gsd/auto-post-unit.ts +45 -13
  173. package/src/resources/extensions/gsd/auto-prompts.ts +40 -17
  174. package/src/resources/extensions/gsd/auto-recovery.ts +18 -23
  175. package/src/resources/extensions/gsd/auto-start.ts +18 -32
  176. package/src/resources/extensions/gsd/auto-worktree.ts +21 -182
  177. package/src/resources/extensions/gsd/auto.ts +2 -24
  178. package/src/resources/extensions/gsd/captures.ts +4 -10
  179. package/src/resources/extensions/gsd/commands-extensions.ts +328 -0
  180. package/src/resources/extensions/gsd/commands-handlers.ts +22 -2
  181. package/src/resources/extensions/gsd/commands-logs.ts +13 -14
  182. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +44 -14
  183. package/src/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  184. package/src/resources/extensions/gsd/commands.ts +108 -24
  185. package/src/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  186. package/src/resources/extensions/gsd/detection.ts +2 -1
  187. package/src/resources/extensions/gsd/doctor-checks.ts +49 -1
  188. package/src/resources/extensions/gsd/doctor-types.ts +3 -1
  189. package/src/resources/extensions/gsd/extension-manifest.json +18 -0
  190. package/src/resources/extensions/gsd/forensics.ts +2 -2
  191. package/src/resources/extensions/gsd/git-service.ts +3 -2
  192. package/src/resources/extensions/gsd/gitignore.ts +9 -63
  193. package/src/resources/extensions/gsd/gsd-db.ts +1 -165
  194. package/src/resources/extensions/gsd/guided-flow.ts +8 -5
  195. package/src/resources/extensions/gsd/index.ts +3 -3
  196. package/src/resources/extensions/gsd/json-persistence.ts +16 -1
  197. package/src/resources/extensions/gsd/md-importer.ts +3 -2
  198. package/src/resources/extensions/gsd/mechanical-completion.ts +430 -0
  199. package/src/resources/extensions/gsd/migrate/command.ts +3 -2
  200. package/src/resources/extensions/gsd/migrate/writer.ts +2 -1
  201. package/src/resources/extensions/gsd/migrate-external.ts +123 -0
  202. package/src/resources/extensions/gsd/paths.ts +24 -2
  203. package/src/resources/extensions/gsd/post-unit-hooks.ts +6 -5
  204. package/src/resources/extensions/gsd/preferences-models.ts +7 -1
  205. package/src/resources/extensions/gsd/preferences-validation.ts +2 -1
  206. package/src/resources/extensions/gsd/preferences.ts +10 -5
  207. package/src/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  208. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  209. package/src/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  210. package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  211. package/src/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  212. package/src/resources/extensions/gsd/queue-order.ts +10 -11
  213. package/src/resources/extensions/gsd/repo-identity.ts +148 -0
  214. package/src/resources/extensions/gsd/resource-version.ts +99 -0
  215. package/src/resources/extensions/gsd/session-forensics.ts +4 -3
  216. package/src/resources/extensions/gsd/session-status-io.ts +23 -41
  217. package/src/resources/extensions/gsd/tests/activity-log.test.ts +2 -2
  218. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  219. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +3 -3
  220. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  221. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -58
  222. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +3 -4
  223. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  224. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +5 -18
  225. package/src/resources/extensions/gsd/tests/git-service.test.ts +10 -37
  226. package/src/resources/extensions/gsd/tests/knowledge.test.ts +4 -4
  227. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  228. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  229. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  230. package/src/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  231. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  232. package/src/resources/extensions/gsd/triage-resolution.ts +2 -1
  233. package/src/resources/extensions/gsd/types.ts +2 -0
  234. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  235. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  236. package/src/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  237. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  238. package/src/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  239. package/src/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  240. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  241. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  242. package/src/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  243. package/src/resources/extensions/gsd/workflow-templates.ts +241 -0
  244. package/src/resources/extensions/gsd/worktree-command.ts +1 -11
  245. package/src/resources/extensions/gsd/worktree-manager.ts +3 -2
  246. package/src/resources/extensions/gsd/worktree.ts +42 -5
  247. package/src/resources/extensions/mac-tools/extension-manifest.json +16 -0
  248. package/src/resources/extensions/mcp-client/index.ts +459 -0
  249. package/src/resources/extensions/mcporter/extension-manifest.json +12 -0
  250. package/src/resources/extensions/remote-questions/discord-adapter.ts +8 -19
  251. package/src/resources/extensions/remote-questions/extension-manifest.json +11 -0
  252. package/src/resources/extensions/remote-questions/http-client.ts +76 -0
  253. package/src/resources/extensions/remote-questions/slack-adapter.ts +11 -17
  254. package/src/resources/extensions/remote-questions/telegram-adapter.ts +8 -19
  255. package/src/resources/extensions/search-the-web/extension-manifest.json +13 -0
  256. package/src/resources/extensions/slash-commands/extension-manifest.json +11 -0
  257. package/src/resources/extensions/subagent/extension-manifest.json +13 -0
  258. package/src/resources/extensions/ttsr/extension-manifest.json +11 -0
  259. package/src/resources/extensions/universal-config/extension-manifest.json +13 -0
  260. package/src/resources/extensions/voice/extension-manifest.json +12 -0
  261. package/src/resources/skills/create-gsd-extension/SKILL.md +87 -0
  262. package/src/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  263. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  264. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  265. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  266. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  267. package/src/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  268. package/src/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  269. package/src/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  270. package/src/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  271. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  272. package/src/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  273. package/src/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  274. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  275. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  276. package/src/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  277. package/src/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  278. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  279. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  280. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  281. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  282. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  283. package/src/resources/skills/create-skill/SKILL.md +184 -0
  284. package/src/resources/skills/create-skill/references/api-security.md +226 -0
  285. package/src/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  286. package/src/resources/skills/create-skill/references/common-patterns.md +595 -0
  287. package/src/resources/skills/create-skill/references/core-principles.md +437 -0
  288. package/src/resources/skills/create-skill/references/executable-code.md +175 -0
  289. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  290. package/src/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  291. package/src/resources/skills/create-skill/references/recommended-structure.md +168 -0
  292. package/src/resources/skills/create-skill/references/skill-structure.md +372 -0
  293. package/src/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  294. package/src/resources/skills/create-skill/references/using-scripts.md +113 -0
  295. package/src/resources/skills/create-skill/references/using-templates.md +112 -0
  296. package/src/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  297. package/src/resources/skills/create-skill/templates/router-skill.md +73 -0
  298. package/src/resources/skills/create-skill/templates/simple-skill.md +33 -0
  299. package/src/resources/skills/create-skill/workflows/add-reference.md +96 -0
  300. package/src/resources/skills/create-skill/workflows/add-script.md +93 -0
  301. package/src/resources/skills/create-skill/workflows/add-template.md +74 -0
  302. package/src/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  303. package/src/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  304. package/src/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  305. package/src/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  306. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  307. package/src/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  308. package/src/resources/skills/react-best-practices/SKILL.md +1 -1
  309. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +0 -198
  310. package/dist/resources/extensions/gsd/tests/worktree-db-integration.test.ts +0 -205
  311. package/dist/resources/extensions/gsd/tests/worktree-db.test.ts +0 -442
  312. package/dist/resources/extensions/mcporter/index.ts +0 -525
  313. package/src/resources/extensions/gsd/auto-worktree-sync.ts +0 -198
  314. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +0 -205
  315. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +0 -442
  316. package/src/resources/extensions/mcporter/index.ts +0 -525
@@ -1,198 +0,0 @@
1
- /**
2
- * Worktree ↔ project root state synchronization for auto-mode.
3
- *
4
- * When auto-mode runs inside a worktree, dispatch-critical state files
5
- * (.gsd/ metadata) diverge between the worktree (where work happens)
6
- * and the project root (where startAutoMode reads initial state on restart).
7
- * Without syncing, restarting auto-mode reads stale state from the project
8
- * root and re-dispatches already-completed units.
9
- *
10
- * Also contains resource staleness detection and stale worktree escape.
11
- */
12
-
13
- import { existsSync, mkdirSync, readFileSync, cpSync, unlinkSync, readdirSync } from "node:fs";
14
- import { join, sep as pathSep } from "node:path";
15
- import { homedir } from "node:os";
16
- import { safeCopy, safeCopyRecursive } from "./safe-fs.js";
17
- import { atomicWriteSync } from "./atomic-write.js";
18
-
19
- // ─── Project Root → Worktree Sync ─────────────────────────────────────────
20
-
21
- /**
22
- * Sync milestone artifacts from project root INTO worktree before deriveState.
23
- * Covers the case where the LLM wrote artifacts to the main repo filesystem
24
- * (e.g. via absolute paths) but the worktree has stale data. Also deletes
25
- * gsd.db in the worktree so it rebuilds from fresh disk state (#853).
26
- * Non-fatal — sync failure should never block dispatch.
27
- */
28
- export function syncProjectRootToWorktree(projectRoot: string, worktreePath: string, milestoneId: string | null): void {
29
- if (!worktreePath || !projectRoot || worktreePath === projectRoot) return;
30
- if (!milestoneId) return;
31
-
32
- const prGsd = join(projectRoot, ".gsd");
33
- const wtGsd = join(worktreePath, ".gsd");
34
-
35
- // Copy milestone directory from project root to worktree if the project root
36
- // has newer artifacts (e.g. slices that don't exist in the worktree yet)
37
- safeCopyRecursive(join(prGsd, "milestones", milestoneId), join(wtGsd, "milestones", milestoneId))
38
-
39
- // Copy living documents from project root to worktree so agents have the
40
- // latest decisions, requirements, project state, and knowledge.
41
- for (const doc of ["DECISIONS.md", "REQUIREMENTS.md", "PROJECT.md", "KNOWLEDGE.md"]) {
42
- safeCopy(join(prGsd, doc), join(wtGsd, doc), { force: true });
43
- }
44
-
45
- // Delete worktree gsd.db so it rebuilds from the freshly synced files.
46
- // Stale DB rows are the root cause of the infinite skip loop (#853).
47
- try {
48
- const wtDb = join(wtGsd, "gsd.db");
49
- if (existsSync(wtDb)) {
50
- unlinkSync(wtDb);
51
- }
52
- } catch { /* non-fatal */ }
53
- }
54
-
55
- // ─── Worktree → Project Root Sync ─────────────────────────────────────────
56
-
57
- /**
58
- * Sync dispatch-critical .gsd/ state files from worktree to project root.
59
- * Only runs when inside an auto-worktree (worktreePath differs from projectRoot).
60
- * Copies: STATE.md + active milestone directory (roadmap, slice plans, task summaries).
61
- * Non-fatal — sync failure should never block dispatch.
62
- */
63
- export function syncStateToProjectRoot(worktreePath: string, projectRoot: string, milestoneId: string | null): void {
64
- if (!worktreePath || !projectRoot || worktreePath === projectRoot) return;
65
- if (!milestoneId) return;
66
-
67
- const wtGsd = join(worktreePath, ".gsd");
68
- const prGsd = join(projectRoot, ".gsd");
69
-
70
- // 1. STATE.md — the quick-glance status used by initial deriveState()
71
- safeCopy(join(wtGsd, "STATE.md"), join(prGsd, "STATE.md"), { force: true })
72
-
73
- // 2. Milestone directory — ROADMAP, slice PLANs, task summaries
74
- // Copy the entire milestone .gsd subtree so deriveState reads current checkboxes
75
- safeCopyRecursive(join(wtGsd, "milestones", milestoneId), join(prGsd, "milestones", milestoneId), { force: true })
76
-
77
- // 3. Merge completed-units.json (set-union of both locations)
78
- // Prevents already-completed units from being re-dispatched after crash/restart.
79
- const srcKeysFile = join(wtGsd, "completed-units.json");
80
- const dstKeysFile = join(prGsd, "completed-units.json");
81
- if (existsSync(srcKeysFile)) {
82
- try {
83
- const srcKeys: string[] = JSON.parse(readFileSync(srcKeysFile, "utf8"));
84
- let dstKeys: string[] = [];
85
- if (existsSync(dstKeysFile)) {
86
- try { dstKeys = JSON.parse(readFileSync(dstKeysFile, "utf8")); } catch { /* ignore corrupt dst */ }
87
- }
88
- const merged = [...new Set([...dstKeys, ...srcKeys])];
89
- atomicWriteSync(dstKeysFile, JSON.stringify(merged, null, 2));
90
- } catch { /* non-fatal */ }
91
- }
92
-
93
- // 4. Runtime records — unit dispatch state used by selfHealRuntimeRecords().
94
- // Without this, a crash during a unit leaves the runtime record only in the
95
- // worktree. If the next session resolves basePath before worktree re-entry,
96
- // selfHeal can't find or clear the stale record (#769).
97
- safeCopyRecursive(join(wtGsd, "runtime", "units"), join(prGsd, "runtime", "units"), { force: true })
98
-
99
- // 5. Living documents — decisions, requirements, project description, knowledge.
100
- // Agents update these during slice execution. Without syncing, a new session
101
- // reads stale copies from the project root, losing architectural decisions,
102
- // requirement status updates, and accumulated knowledge (#1168).
103
- for (const doc of ["DECISIONS.md", "REQUIREMENTS.md", "PROJECT.md", "KNOWLEDGE.md"]) {
104
- safeCopy(join(wtGsd, doc), join(prGsd, doc), { force: true });
105
- }
106
- }
107
-
108
- // ─── Resource Staleness ───────────────────────────────────────────────────
109
-
110
- /**
111
- * Read the resource version (semver) from the managed-resources manifest.
112
- * Uses gsdVersion instead of syncedAt so that launching a second session
113
- * doesn't falsely trigger staleness (#804).
114
- */
115
- export function readResourceVersion(): string | null {
116
- const agentDir = process.env.GSD_CODING_AGENT_DIR || join(homedir(), ".gsd", "agent");
117
- const manifestPath = join(agentDir, "managed-resources.json");
118
- try {
119
- const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
120
- return typeof manifest?.gsdVersion === "string" ? manifest.gsdVersion : null;
121
- } catch {
122
- return null;
123
- }
124
- }
125
-
126
- /**
127
- * Check if managed resources have been updated since session start.
128
- * Returns a warning message if stale, null otherwise.
129
- */
130
- export function checkResourcesStale(versionOnStart: string | null): string | null {
131
- if (versionOnStart === null) return null;
132
- const current = readResourceVersion();
133
- if (current === null) return null;
134
- if (current !== versionOnStart) {
135
- return "GSD resources were updated since this session started. Restart gsd to load the new code.";
136
- }
137
- return null;
138
- }
139
-
140
- // ─── Stale Worktree Escape ────────────────────────────────────────────────
141
-
142
- /**
143
- * Detect and escape a stale worktree cwd (#608).
144
- *
145
- * After milestone completion + merge, the worktree directory is removed but
146
- * the process cwd may still point inside `.gsd/worktrees/<MID>/`.
147
- * When a new session starts, `process.cwd()` is passed as `base` to startAuto
148
- * and all subsequent writes land in the wrong directory. This function detects
149
- * that scenario and chdir back to the project root.
150
- *
151
- * Returns the corrected base path.
152
- */
153
- export function escapeStaleWorktree(base: string): string {
154
- const marker = `${pathSep}.gsd${pathSep}worktrees${pathSep}`;
155
- const idx = base.indexOf(marker);
156
- if (idx === -1) return base;
157
-
158
- // base is inside .gsd/worktrees/<something> — extract the project root
159
- const projectRoot = base.slice(0, idx);
160
- try {
161
- process.chdir(projectRoot);
162
- } catch {
163
- // If chdir fails, return the original — caller will handle errors downstream
164
- return base;
165
- }
166
- return projectRoot;
167
- }
168
-
169
- /**
170
- * Clean stale runtime unit files for completed milestones.
171
- *
172
- * After restart, stale runtime/units/*.json from prior milestones can
173
- * cause deriveState to resume the wrong milestone (#887). Removes files
174
- * for milestones that have a SUMMARY (fully complete).
175
- */
176
- export function cleanStaleRuntimeUnits(
177
- gsdRootPath: string,
178
- hasMilestoneSummary: (mid: string) => boolean,
179
- ): number {
180
- const runtimeUnitsDir = join(gsdRootPath, "runtime", "units");
181
- if (!existsSync(runtimeUnitsDir)) return 0;
182
-
183
- let cleaned = 0;
184
- try {
185
- for (const file of readdirSync(runtimeUnitsDir)) {
186
- if (!file.endsWith(".json")) continue;
187
- const midMatch = file.match(/(M\d+(?:-[a-z0-9]{6})?)/);
188
- if (!midMatch) continue;
189
- if (hasMilestoneSummary(midMatch[1])) {
190
- try {
191
- unlinkSync(join(runtimeUnitsDir, file));
192
- cleaned++;
193
- } catch { /* non-fatal */ }
194
- }
195
- }
196
- } catch { /* non-fatal */ }
197
- return cleaned;
198
- }
@@ -1,205 +0,0 @@
1
- /**
2
- * worktree-db-integration.test.ts
3
- *
4
- * Integration tests for the worktree DB copy and reconcile hooks.
5
- * Uses real temp git repos and real SQLite databases.
6
- *
7
- * Test cases:
8
- * 1. Copy: createAutoWorktree seeds .gsd/gsd.db into the worktree when main has one
9
- * 2. Copy-skip: createAutoWorktree silently skips when main has no gsd.db
10
- * 3. Reconcile: reconcileWorktreeDb merges worktree rows into main DB
11
- * 4. Reconcile-skip: reconcileWorktreeDb is non-fatal when both paths are nonexistent
12
- * 5. Failure path: reconcileWorktreeDb emits to stderr on open failure (observable)
13
- */
14
-
15
- import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync, realpathSync } from "node:fs";
16
- import { join } from "node:path";
17
- import { tmpdir } from "node:os";
18
- import { execSync } from "node:child_process";
19
-
20
- import { createAutoWorktree } from "../auto-worktree.ts";
21
- import { worktreePath } from "../worktree-manager.ts";
22
- import {
23
- copyWorktreeDb,
24
- reconcileWorktreeDb,
25
- openDatabase,
26
- closeDatabase,
27
- upsertDecision,
28
- getActiveDecisions,
29
- isDbAvailable,
30
- } from "../gsd-db.ts";
31
-
32
- import { createTestContext } from "./test-helpers.ts";
33
-
34
- const { assertEq, assertTrue, report } = createTestContext();
35
-
36
- function run(command: string, cwd: string): string {
37
- return execSync(command, { cwd, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
38
- }
39
-
40
- function createTempRepo(): string {
41
- const dir = realpathSync(mkdtempSync(join(tmpdir(), "wt-db-int-test-")));
42
- run("git init", dir);
43
- run("git config user.email test@test.com", dir);
44
- run("git config user.name Test", dir);
45
- writeFileSync(join(dir, "README.md"), "# test\n");
46
- run("git add .", dir);
47
- run("git commit -m init", dir);
48
- run("git branch -M main", dir);
49
- return dir;
50
- }
51
-
52
- async function main(): Promise<void> {
53
- const savedCwd = process.cwd();
54
- const tempDirs: string[] = [];
55
-
56
- function makeTempDir(): string {
57
- const dir = realpathSync(mkdtempSync(join(tmpdir(), "wt-db-int-")));
58
- tempDirs.push(dir);
59
- return dir;
60
- }
61
-
62
- try {
63
-
64
- // ─── Test 1: copy on worktree creation ───────────────────────────
65
- console.log("\n=== Test 1: copy on worktree creation ===");
66
- {
67
- const tempDir = createTempRepo();
68
- tempDirs.push(tempDir);
69
-
70
- // Seed a gsd.db in the main repo
71
- const gsdDir = join(tempDir, ".gsd");
72
- mkdirSync(gsdDir, { recursive: true });
73
- const mainDbPath = join(gsdDir, "gsd.db");
74
- openDatabase(mainDbPath);
75
- closeDatabase();
76
-
77
- // Commit so createAutoWorktree can copy planning artifacts
78
- run("git add .", tempDir);
79
- run('git commit -m "add gsd dir"', tempDir);
80
-
81
- // createAutoWorktree should copy the DB into the worktree
82
- const wtPath = createAutoWorktree(tempDir, "M004");
83
-
84
- const worktreeDbPath = join(worktreePath(tempDir, "M004"), ".gsd", "gsd.db");
85
- assertTrue(
86
- existsSync(worktreeDbPath),
87
- "gsd.db exists in worktree .gsd after createAutoWorktree",
88
- );
89
-
90
- // Restore cwd for next test
91
- process.chdir(savedCwd);
92
- }
93
-
94
- // ─── Test 2: copy skip when no source DB ─────────────────────────
95
- console.log("\n=== Test 2: copy skip when no source DB ===");
96
- {
97
- const tempDir = createTempRepo();
98
- tempDirs.push(tempDir);
99
-
100
- // No gsd.db — just a bare repo
101
- let threw = false;
102
- let wtPath: string | null = null;
103
- try {
104
- wtPath = createAutoWorktree(tempDir, "M004");
105
- } catch (err) {
106
- threw = true;
107
- console.error(" Unexpected throw:", err);
108
- }
109
-
110
- assertTrue(!threw, "createAutoWorktree does not throw when no source DB");
111
-
112
- const worktreeDbPath = join(worktreePath(tempDir, "M004"), ".gsd", "gsd.db");
113
- assertTrue(
114
- !existsSync(worktreeDbPath),
115
- "gsd.db is absent in worktree when source had none",
116
- );
117
-
118
- process.chdir(savedCwd);
119
- }
120
-
121
- // ─── Test 3: reconcile inserts worktree rows into main ───────────
122
- console.log("\n=== Test 3: reconcile merges worktree rows into main ===");
123
- {
124
- const mainDbPath = join(makeTempDir(), "main.db");
125
- const worktreeDbPath = join(makeTempDir(), "wt.db");
126
-
127
- // Seed main DB (empty schema)
128
- openDatabase(mainDbPath);
129
- closeDatabase();
130
-
131
- // Seed worktree DB with one decision
132
- openDatabase(worktreeDbPath);
133
- upsertDecision({
134
- id: "D-WT-001",
135
- when_context: "integration test",
136
- scope: "test",
137
- decision: "use reconcile",
138
- choice: "reconcile on merge",
139
- rationale: "test coverage",
140
- revisable: "no",
141
- superseded_by: null,
142
- });
143
- closeDatabase();
144
-
145
- // Reconcile worktree → main
146
- const result = reconcileWorktreeDb(mainDbPath, worktreeDbPath);
147
- assertTrue(result.decisions >= 1, "reconcile reports at least 1 decision merged");
148
-
149
- // Open main DB and verify the row is present
150
- openDatabase(mainDbPath);
151
- const decisions = getActiveDecisions();
152
- closeDatabase();
153
-
154
- const found = decisions.some((d) => d.id === "D-WT-001");
155
- assertTrue(found, "worktree decision D-WT-001 present in main DB after reconcile");
156
- }
157
-
158
- // ─── Test 4: reconcile non-fatal when both paths nonexistent ─────
159
- console.log("\n=== Test 4: reconcile non-fatal on nonexistent paths ===");
160
- {
161
- let threw = false;
162
- try {
163
- reconcileWorktreeDb("/nonexistent/path/gsd.db", "/also/nonexistent/gsd.db");
164
- } catch {
165
- threw = true;
166
- }
167
- assertTrue(!threw, "reconcileWorktreeDb does not throw when worktree DB is absent");
168
- }
169
-
170
- // ─── Test 5: failure path observable via stderr (diagnostic) ─────
171
- // reconcileWorktreeDb emits to stderr on reconciliation failures.
172
- // We can't easily intercept stderr in this test harness, but we verify
173
- // that the function returns the zero-result shape (not undefined/throws)
174
- // when the worktree DB is missing — confirming the failure path is non-fatal
175
- // and returns a structured result.
176
- console.log("\n=== Test 5: reconcile returns zero-shape when worktree DB absent ===");
177
- {
178
- const mainDbPath = join(makeTempDir(), "main2.db");
179
- openDatabase(mainDbPath);
180
- closeDatabase();
181
-
182
- const result = reconcileWorktreeDb(mainDbPath, "/definitely/does/not/exist.db");
183
- assertEq(result.decisions, 0, "decisions is 0 when worktree DB absent");
184
- assertEq(result.requirements, 0, "requirements is 0 when worktree DB absent");
185
- assertEq(result.artifacts, 0, "artifacts is 0 when worktree DB absent");
186
- assertEq(result.conflicts.length, 0, "conflicts is empty when worktree DB absent");
187
- }
188
-
189
- } finally {
190
- // Always restore cwd
191
- process.chdir(savedCwd);
192
- // Ensure DB is closed
193
- if (isDbAvailable()) closeDatabase();
194
- // Remove all temp dirs
195
- for (const dir of tempDirs) {
196
- if (existsSync(dir)) {
197
- rmSync(dir, { recursive: true, force: true });
198
- }
199
- }
200
- }
201
-
202
- report();
203
- }
204
-
205
- main();