bigpowers 2.83.3 → 2.84.0

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 (487) hide show
  1. package/.codebuddy/skills/align-grid/SKILL.md +110 -0
  2. package/.codebuddy/skills/assess-impact/SKILL.md +91 -0
  3. package/.codebuddy/skills/audit-code/SKILL.md +187 -0
  4. package/.codebuddy/skills/audit-plan/SKILL.md +89 -0
  5. package/.codebuddy/skills/build-epic/SKILL.md +105 -0
  6. package/.codebuddy/skills/change-request/SKILL.md +121 -0
  7. package/.codebuddy/skills/commit-message/SKILL.md +140 -0
  8. package/.codebuddy/skills/compose-workflow/SKILL.md +82 -0
  9. package/.codebuddy/skills/context7-mcp/SKILL.md +55 -0
  10. package/.codebuddy/skills/craft-skill/SKILL.md +179 -0
  11. package/.codebuddy/skills/deepen-architecture/SKILL.md +260 -0
  12. package/.codebuddy/skills/define-language/SKILL.md +80 -0
  13. package/.codebuddy/skills/define-success/SKILL.md +65 -0
  14. package/.codebuddy/skills/delegate-task/SKILL.md +91 -0
  15. package/.codebuddy/skills/deploy/SKILL.md +198 -0
  16. package/.codebuddy/skills/design-interface/SKILL.md +97 -0
  17. package/.codebuddy/skills/develop-tdd/SKILL.md +406 -0
  18. package/.codebuddy/skills/diagnose-root/SKILL.md +24 -0
  19. package/.codebuddy/skills/diagnose-stall/SKILL.md +54 -0
  20. package/.codebuddy/skills/dispatch-agents/SKILL.md +118 -0
  21. package/.codebuddy/skills/edit-document/SKILL.md +23 -0
  22. package/.codebuddy/skills/elaborate-spec/SKILL.md +101 -0
  23. package/.codebuddy/skills/enforce-first/SKILL.md +32 -0
  24. package/.codebuddy/skills/evolve-skill/SKILL.md +55 -0
  25. package/.codebuddy/skills/execute-plan/SKILL.md +61 -0
  26. package/.codebuddy/skills/extract-design/SKILL.md +132 -0
  27. package/.codebuddy/skills/find-way/SKILL.md +191 -0
  28. package/.codebuddy/skills/fix-bug/SKILL.md +67 -0
  29. package/.codebuddy/skills/gate-trace/SKILL.md +88 -0
  30. package/.codebuddy/skills/generate-allure-report/SKILL.md +285 -0
  31. package/.codebuddy/skills/grill-me/SKILL.md +96 -0
  32. package/.codebuddy/skills/grill-with-docs/SKILL.md +41 -0
  33. package/.codebuddy/skills/guard-git/SKILL.md +231 -0
  34. package/.codebuddy/skills/harden-vps/SKILL.md +288 -0
  35. package/.codebuddy/skills/hook-commits/SKILL.md +94 -0
  36. package/.codebuddy/skills/inspect-quality/SKILL.md +106 -0
  37. package/.codebuddy/skills/investigate-bug/SKILL.md +127 -0
  38. package/.codebuddy/skills/kickoff-branch/SKILL.md +143 -0
  39. package/.codebuddy/skills/maintain-wiki/SKILL.md +64 -0
  40. package/.codebuddy/skills/map-codebase/SKILL.md +71 -0
  41. package/.codebuddy/skills/migrate-spec/SKILL.md +862 -0
  42. package/.codebuddy/skills/model-domain/SKILL.md +232 -0
  43. package/.codebuddy/skills/orchestrate-project/SKILL.md +174 -0
  44. package/.codebuddy/skills/organize-workspace/SKILL.md +164 -0
  45. package/.codebuddy/skills/plan-refactor/SKILL.md +87 -0
  46. package/.codebuddy/skills/plan-release/SKILL.md +145 -0
  47. package/.codebuddy/skills/plan-tests/SKILL.md +75 -0
  48. package/.codebuddy/skills/plan-work/SKILL.md +260 -0
  49. package/.codebuddy/skills/publish-package/SKILL.md +328 -0
  50. package/.codebuddy/skills/quick-fix/SKILL.md +114 -0
  51. package/.codebuddy/skills/release-branch/SKILL.md +298 -0
  52. package/.codebuddy/skills/request-review/SKILL.md +112 -0
  53. package/.codebuddy/skills/research-first/SKILL.md +87 -0
  54. package/.codebuddy/skills/reset-baseline/SKILL.md +21 -0
  55. package/.codebuddy/skills/respond-review/SKILL.md +71 -0
  56. package/.codebuddy/skills/run-benchmark/SKILL.md +85 -0
  57. package/.codebuddy/skills/run-evals/SKILL.md +80 -0
  58. package/.codebuddy/skills/run-planning/SKILL.md +101 -0
  59. package/.codebuddy/skills/scope-work/SKILL.md +63 -0
  60. package/.codebuddy/skills/search-skills/SKILL.md +73 -0
  61. package/.codebuddy/skills/security-review/SKILL.md +384 -0
  62. package/.codebuddy/skills/seed-conventions/SKILL.md +285 -0
  63. package/.codebuddy/skills/session-state/SKILL.md +146 -0
  64. package/.codebuddy/skills/setup-environment/SKILL.md +39 -0
  65. package/.codebuddy/skills/simulate-agents/SKILL.md +26 -0
  66. package/.codebuddy/skills/slice-tasks/SKILL.md +68 -0
  67. package/.codebuddy/skills/smoke-test/SKILL.md +242 -0
  68. package/.codebuddy/skills/spike-prototype/SKILL.md +95 -0
  69. package/.codebuddy/skills/stocktake-skills/SKILL.md +72 -0
  70. package/.codebuddy/skills/survey-context/SKILL.md +135 -0
  71. package/.codebuddy/skills/terse-mode/SKILL.md +42 -0
  72. package/.codebuddy/skills/trace-requirement/SKILL.md +69 -0
  73. package/.codebuddy/skills/using-bigpowers/SKILL.md +111 -0
  74. package/.codebuddy/skills/validate-contracts/SKILL.md +309 -0
  75. package/.codebuddy/skills/validate-fix/SKILL.md +106 -0
  76. package/.codebuddy/skills/verify-work/SKILL.md +191 -0
  77. package/.codebuddy/skills/visual-dashboard/SKILL.md +50 -0
  78. package/.codebuddy/skills/wire-ci/SKILL.md +375 -0
  79. package/.codebuddy/skills/wire-observability/SKILL.md +97 -0
  80. package/.codebuddy/skills/write-document/SKILL.md +255 -0
  81. package/.codex/skills/align-grid/SKILL.md +110 -0
  82. package/.codex/skills/assess-impact/SKILL.md +91 -0
  83. package/.codex/skills/audit-code/SKILL.md +187 -0
  84. package/.codex/skills/audit-plan/SKILL.md +89 -0
  85. package/.codex/skills/build-epic/SKILL.md +105 -0
  86. package/.codex/skills/change-request/SKILL.md +121 -0
  87. package/.codex/skills/commit-message/SKILL.md +140 -0
  88. package/.codex/skills/compose-workflow/SKILL.md +82 -0
  89. package/.codex/skills/context7-mcp/SKILL.md +55 -0
  90. package/.codex/skills/craft-skill/SKILL.md +179 -0
  91. package/.codex/skills/deepen-architecture/SKILL.md +260 -0
  92. package/.codex/skills/define-language/SKILL.md +80 -0
  93. package/.codex/skills/define-success/SKILL.md +65 -0
  94. package/.codex/skills/delegate-task/SKILL.md +91 -0
  95. package/.codex/skills/deploy/SKILL.md +198 -0
  96. package/.codex/skills/design-interface/SKILL.md +97 -0
  97. package/.codex/skills/develop-tdd/SKILL.md +406 -0
  98. package/.codex/skills/diagnose-root/SKILL.md +24 -0
  99. package/.codex/skills/diagnose-stall/SKILL.md +54 -0
  100. package/.codex/skills/dispatch-agents/SKILL.md +118 -0
  101. package/.codex/skills/edit-document/SKILL.md +23 -0
  102. package/.codex/skills/elaborate-spec/SKILL.md +101 -0
  103. package/.codex/skills/enforce-first/SKILL.md +32 -0
  104. package/.codex/skills/evolve-skill/SKILL.md +55 -0
  105. package/.codex/skills/execute-plan/SKILL.md +61 -0
  106. package/.codex/skills/extract-design/SKILL.md +132 -0
  107. package/.codex/skills/find-way/SKILL.md +191 -0
  108. package/.codex/skills/fix-bug/SKILL.md +67 -0
  109. package/.codex/skills/gate-trace/SKILL.md +88 -0
  110. package/.codex/skills/generate-allure-report/SKILL.md +285 -0
  111. package/.codex/skills/grill-me/SKILL.md +96 -0
  112. package/.codex/skills/grill-with-docs/SKILL.md +41 -0
  113. package/.codex/skills/guard-git/SKILL.md +231 -0
  114. package/.codex/skills/harden-vps/SKILL.md +288 -0
  115. package/.codex/skills/hook-commits/SKILL.md +94 -0
  116. package/.codex/skills/inspect-quality/SKILL.md +106 -0
  117. package/.codex/skills/investigate-bug/SKILL.md +127 -0
  118. package/.codex/skills/kickoff-branch/SKILL.md +143 -0
  119. package/.codex/skills/maintain-wiki/SKILL.md +64 -0
  120. package/.codex/skills/map-codebase/SKILL.md +71 -0
  121. package/.codex/skills/migrate-spec/SKILL.md +862 -0
  122. package/.codex/skills/model-domain/SKILL.md +232 -0
  123. package/.codex/skills/orchestrate-project/SKILL.md +174 -0
  124. package/.codex/skills/organize-workspace/SKILL.md +164 -0
  125. package/.codex/skills/plan-refactor/SKILL.md +87 -0
  126. package/.codex/skills/plan-release/SKILL.md +145 -0
  127. package/.codex/skills/plan-tests/SKILL.md +75 -0
  128. package/.codex/skills/plan-work/SKILL.md +260 -0
  129. package/.codex/skills/publish-package/SKILL.md +328 -0
  130. package/.codex/skills/quick-fix/SKILL.md +114 -0
  131. package/.codex/skills/release-branch/SKILL.md +298 -0
  132. package/.codex/skills/request-review/SKILL.md +112 -0
  133. package/.codex/skills/research-first/SKILL.md +87 -0
  134. package/.codex/skills/reset-baseline/SKILL.md +21 -0
  135. package/.codex/skills/respond-review/SKILL.md +71 -0
  136. package/.codex/skills/run-benchmark/SKILL.md +85 -0
  137. package/.codex/skills/run-evals/SKILL.md +80 -0
  138. package/.codex/skills/run-planning/SKILL.md +101 -0
  139. package/.codex/skills/scope-work/SKILL.md +63 -0
  140. package/.codex/skills/search-skills/SKILL.md +73 -0
  141. package/.codex/skills/security-review/SKILL.md +384 -0
  142. package/.codex/skills/seed-conventions/SKILL.md +285 -0
  143. package/.codex/skills/session-state/SKILL.md +146 -0
  144. package/.codex/skills/setup-environment/SKILL.md +39 -0
  145. package/.codex/skills/simulate-agents/SKILL.md +26 -0
  146. package/.codex/skills/slice-tasks/SKILL.md +68 -0
  147. package/.codex/skills/smoke-test/SKILL.md +242 -0
  148. package/.codex/skills/spike-prototype/SKILL.md +95 -0
  149. package/.codex/skills/stocktake-skills/SKILL.md +72 -0
  150. package/.codex/skills/survey-context/SKILL.md +135 -0
  151. package/.codex/skills/terse-mode/SKILL.md +42 -0
  152. package/.codex/skills/trace-requirement/SKILL.md +69 -0
  153. package/.codex/skills/using-bigpowers/SKILL.md +111 -0
  154. package/.codex/skills/validate-contracts/SKILL.md +309 -0
  155. package/.codex/skills/validate-fix/SKILL.md +106 -0
  156. package/.codex/skills/verify-work/SKILL.md +191 -0
  157. package/.codex/skills/visual-dashboard/SKILL.md +50 -0
  158. package/.codex/skills/wire-ci/SKILL.md +375 -0
  159. package/.codex/skills/wire-observability/SKILL.md +97 -0
  160. package/.codex/skills/write-document/SKILL.md +255 -0
  161. package/.kilocode/rules/align-grid.md +110 -0
  162. package/.kilocode/rules/assess-impact.md +91 -0
  163. package/.kilocode/rules/audit-code.md +187 -0
  164. package/.kilocode/rules/audit-plan.md +89 -0
  165. package/.kilocode/rules/build-epic.md +105 -0
  166. package/.kilocode/rules/change-request.md +121 -0
  167. package/.kilocode/rules/commit-message.md +140 -0
  168. package/.kilocode/rules/compose-workflow.md +82 -0
  169. package/.kilocode/rules/context7-mcp.md +55 -0
  170. package/.kilocode/rules/craft-skill.md +179 -0
  171. package/.kilocode/rules/deepen-architecture.md +260 -0
  172. package/.kilocode/rules/define-language.md +80 -0
  173. package/.kilocode/rules/define-success.md +65 -0
  174. package/.kilocode/rules/delegate-task.md +91 -0
  175. package/.kilocode/rules/deploy.md +198 -0
  176. package/.kilocode/rules/design-interface.md +97 -0
  177. package/.kilocode/rules/develop-tdd.md +406 -0
  178. package/.kilocode/rules/diagnose-root.md +24 -0
  179. package/.kilocode/rules/diagnose-stall.md +54 -0
  180. package/.kilocode/rules/dispatch-agents.md +118 -0
  181. package/.kilocode/rules/edit-document.md +23 -0
  182. package/.kilocode/rules/elaborate-spec.md +101 -0
  183. package/.kilocode/rules/enforce-first.md +32 -0
  184. package/.kilocode/rules/evolve-skill.md +55 -0
  185. package/.kilocode/rules/execute-plan.md +61 -0
  186. package/.kilocode/rules/extract-design.md +132 -0
  187. package/.kilocode/rules/find-way.md +191 -0
  188. package/.kilocode/rules/fix-bug.md +67 -0
  189. package/.kilocode/rules/gate-trace.md +88 -0
  190. package/.kilocode/rules/generate-allure-report.md +285 -0
  191. package/.kilocode/rules/grill-me.md +96 -0
  192. package/.kilocode/rules/grill-with-docs.md +41 -0
  193. package/.kilocode/rules/guard-git.md +231 -0
  194. package/.kilocode/rules/harden-vps.md +288 -0
  195. package/.kilocode/rules/hook-commits.md +94 -0
  196. package/.kilocode/rules/inspect-quality.md +106 -0
  197. package/.kilocode/rules/investigate-bug.md +127 -0
  198. package/.kilocode/rules/kickoff-branch.md +143 -0
  199. package/.kilocode/rules/maintain-wiki.md +64 -0
  200. package/.kilocode/rules/map-codebase.md +71 -0
  201. package/.kilocode/rules/migrate-spec.md +862 -0
  202. package/.kilocode/rules/model-domain.md +232 -0
  203. package/.kilocode/rules/orchestrate-project.md +174 -0
  204. package/.kilocode/rules/organize-workspace.md +164 -0
  205. package/.kilocode/rules/plan-refactor.md +87 -0
  206. package/.kilocode/rules/plan-release.md +145 -0
  207. package/.kilocode/rules/plan-tests.md +75 -0
  208. package/.kilocode/rules/plan-work.md +260 -0
  209. package/.kilocode/rules/publish-package.md +328 -0
  210. package/.kilocode/rules/quick-fix.md +114 -0
  211. package/.kilocode/rules/release-branch.md +298 -0
  212. package/.kilocode/rules/request-review.md +112 -0
  213. package/.kilocode/rules/research-first.md +87 -0
  214. package/.kilocode/rules/reset-baseline.md +21 -0
  215. package/.kilocode/rules/respond-review.md +71 -0
  216. package/.kilocode/rules/run-benchmark.md +85 -0
  217. package/.kilocode/rules/run-evals.md +80 -0
  218. package/.kilocode/rules/run-planning.md +101 -0
  219. package/.kilocode/rules/scope-work.md +63 -0
  220. package/.kilocode/rules/search-skills.md +73 -0
  221. package/.kilocode/rules/security-review.md +384 -0
  222. package/.kilocode/rules/seed-conventions.md +285 -0
  223. package/.kilocode/rules/session-state.md +146 -0
  224. package/.kilocode/rules/setup-environment.md +39 -0
  225. package/.kilocode/rules/simulate-agents.md +26 -0
  226. package/.kilocode/rules/slice-tasks.md +68 -0
  227. package/.kilocode/rules/smoke-test.md +242 -0
  228. package/.kilocode/rules/spike-prototype.md +95 -0
  229. package/.kilocode/rules/stocktake-skills.md +72 -0
  230. package/.kilocode/rules/survey-context.md +135 -0
  231. package/.kilocode/rules/terse-mode.md +42 -0
  232. package/.kilocode/rules/trace-requirement.md +69 -0
  233. package/.kilocode/rules/using-bigpowers.md +111 -0
  234. package/.kilocode/rules/validate-contracts.md +309 -0
  235. package/.kilocode/rules/validate-fix.md +106 -0
  236. package/.kilocode/rules/verify-work.md +191 -0
  237. package/.kilocode/rules/visual-dashboard.md +50 -0
  238. package/.kilocode/rules/wire-ci.md +375 -0
  239. package/.kilocode/rules/wire-observability.md +97 -0
  240. package/.kilocode/rules/write-document.md +255 -0
  241. package/.pi/package.json +1 -1
  242. package/.trae/skills/align-grid/SKILL.md +110 -0
  243. package/.trae/skills/assess-impact/SKILL.md +91 -0
  244. package/.trae/skills/audit-code/SKILL.md +187 -0
  245. package/.trae/skills/audit-plan/SKILL.md +89 -0
  246. package/.trae/skills/build-epic/SKILL.md +105 -0
  247. package/.trae/skills/change-request/SKILL.md +121 -0
  248. package/.trae/skills/commit-message/SKILL.md +140 -0
  249. package/.trae/skills/compose-workflow/SKILL.md +82 -0
  250. package/.trae/skills/context7-mcp/SKILL.md +55 -0
  251. package/.trae/skills/craft-skill/SKILL.md +179 -0
  252. package/.trae/skills/deepen-architecture/SKILL.md +260 -0
  253. package/.trae/skills/define-language/SKILL.md +80 -0
  254. package/.trae/skills/define-success/SKILL.md +65 -0
  255. package/.trae/skills/delegate-task/SKILL.md +91 -0
  256. package/.trae/skills/deploy/SKILL.md +198 -0
  257. package/.trae/skills/design-interface/SKILL.md +97 -0
  258. package/.trae/skills/develop-tdd/SKILL.md +406 -0
  259. package/.trae/skills/diagnose-root/SKILL.md +24 -0
  260. package/.trae/skills/diagnose-stall/SKILL.md +54 -0
  261. package/.trae/skills/dispatch-agents/SKILL.md +118 -0
  262. package/.trae/skills/edit-document/SKILL.md +23 -0
  263. package/.trae/skills/elaborate-spec/SKILL.md +101 -0
  264. package/.trae/skills/enforce-first/SKILL.md +32 -0
  265. package/.trae/skills/evolve-skill/SKILL.md +55 -0
  266. package/.trae/skills/execute-plan/SKILL.md +61 -0
  267. package/.trae/skills/extract-design/SKILL.md +132 -0
  268. package/.trae/skills/find-way/SKILL.md +191 -0
  269. package/.trae/skills/fix-bug/SKILL.md +67 -0
  270. package/.trae/skills/gate-trace/SKILL.md +88 -0
  271. package/.trae/skills/generate-allure-report/SKILL.md +285 -0
  272. package/.trae/skills/grill-me/SKILL.md +96 -0
  273. package/.trae/skills/grill-with-docs/SKILL.md +41 -0
  274. package/.trae/skills/guard-git/SKILL.md +231 -0
  275. package/.trae/skills/harden-vps/SKILL.md +288 -0
  276. package/.trae/skills/hook-commits/SKILL.md +94 -0
  277. package/.trae/skills/inspect-quality/SKILL.md +106 -0
  278. package/.trae/skills/investigate-bug/SKILL.md +127 -0
  279. package/.trae/skills/kickoff-branch/SKILL.md +143 -0
  280. package/.trae/skills/maintain-wiki/SKILL.md +64 -0
  281. package/.trae/skills/map-codebase/SKILL.md +71 -0
  282. package/.trae/skills/migrate-spec/SKILL.md +862 -0
  283. package/.trae/skills/model-domain/SKILL.md +232 -0
  284. package/.trae/skills/orchestrate-project/SKILL.md +174 -0
  285. package/.trae/skills/organize-workspace/SKILL.md +164 -0
  286. package/.trae/skills/plan-refactor/SKILL.md +87 -0
  287. package/.trae/skills/plan-release/SKILL.md +145 -0
  288. package/.trae/skills/plan-tests/SKILL.md +75 -0
  289. package/.trae/skills/plan-work/SKILL.md +260 -0
  290. package/.trae/skills/publish-package/SKILL.md +328 -0
  291. package/.trae/skills/quick-fix/SKILL.md +114 -0
  292. package/.trae/skills/release-branch/SKILL.md +298 -0
  293. package/.trae/skills/request-review/SKILL.md +112 -0
  294. package/.trae/skills/research-first/SKILL.md +87 -0
  295. package/.trae/skills/reset-baseline/SKILL.md +21 -0
  296. package/.trae/skills/respond-review/SKILL.md +71 -0
  297. package/.trae/skills/run-benchmark/SKILL.md +85 -0
  298. package/.trae/skills/run-evals/SKILL.md +80 -0
  299. package/.trae/skills/run-planning/SKILL.md +101 -0
  300. package/.trae/skills/scope-work/SKILL.md +63 -0
  301. package/.trae/skills/search-skills/SKILL.md +73 -0
  302. package/.trae/skills/security-review/SKILL.md +384 -0
  303. package/.trae/skills/seed-conventions/SKILL.md +285 -0
  304. package/.trae/skills/session-state/SKILL.md +146 -0
  305. package/.trae/skills/setup-environment/SKILL.md +39 -0
  306. package/.trae/skills/simulate-agents/SKILL.md +26 -0
  307. package/.trae/skills/slice-tasks/SKILL.md +68 -0
  308. package/.trae/skills/smoke-test/SKILL.md +242 -0
  309. package/.trae/skills/spike-prototype/SKILL.md +95 -0
  310. package/.trae/skills/stocktake-skills/SKILL.md +72 -0
  311. package/.trae/skills/survey-context/SKILL.md +135 -0
  312. package/.trae/skills/terse-mode/SKILL.md +42 -0
  313. package/.trae/skills/trace-requirement/SKILL.md +69 -0
  314. package/.trae/skills/using-bigpowers/SKILL.md +111 -0
  315. package/.trae/skills/validate-contracts/SKILL.md +309 -0
  316. package/.trae/skills/validate-fix/SKILL.md +106 -0
  317. package/.trae/skills/verify-work/SKILL.md +191 -0
  318. package/.trae/skills/visual-dashboard/SKILL.md +50 -0
  319. package/.trae/skills/wire-ci/SKILL.md +375 -0
  320. package/.trae/skills/wire-observability/SKILL.md +97 -0
  321. package/.trae/skills/write-document/SKILL.md +255 -0
  322. package/.windsurf/rules/align-grid.md +110 -0
  323. package/.windsurf/rules/assess-impact.md +91 -0
  324. package/.windsurf/rules/audit-code.md +187 -0
  325. package/.windsurf/rules/audit-plan.md +89 -0
  326. package/.windsurf/rules/build-epic.md +105 -0
  327. package/.windsurf/rules/change-request.md +121 -0
  328. package/.windsurf/rules/commit-message.md +140 -0
  329. package/.windsurf/rules/compose-workflow.md +82 -0
  330. package/.windsurf/rules/context7-mcp.md +55 -0
  331. package/.windsurf/rules/craft-skill.md +179 -0
  332. package/.windsurf/rules/deepen-architecture.md +260 -0
  333. package/.windsurf/rules/define-language.md +80 -0
  334. package/.windsurf/rules/define-success.md +65 -0
  335. package/.windsurf/rules/delegate-task.md +91 -0
  336. package/.windsurf/rules/deploy.md +198 -0
  337. package/.windsurf/rules/design-interface.md +97 -0
  338. package/.windsurf/rules/develop-tdd.md +406 -0
  339. package/.windsurf/rules/diagnose-root.md +24 -0
  340. package/.windsurf/rules/diagnose-stall.md +54 -0
  341. package/.windsurf/rules/dispatch-agents.md +118 -0
  342. package/.windsurf/rules/edit-document.md +23 -0
  343. package/.windsurf/rules/elaborate-spec.md +101 -0
  344. package/.windsurf/rules/enforce-first.md +32 -0
  345. package/.windsurf/rules/evolve-skill.md +55 -0
  346. package/.windsurf/rules/execute-plan.md +61 -0
  347. package/.windsurf/rules/extract-design.md +132 -0
  348. package/.windsurf/rules/find-way.md +191 -0
  349. package/.windsurf/rules/fix-bug.md +67 -0
  350. package/.windsurf/rules/gate-trace.md +88 -0
  351. package/.windsurf/rules/generate-allure-report.md +285 -0
  352. package/.windsurf/rules/grill-me.md +96 -0
  353. package/.windsurf/rules/grill-with-docs.md +41 -0
  354. package/.windsurf/rules/guard-git.md +231 -0
  355. package/.windsurf/rules/harden-vps.md +288 -0
  356. package/.windsurf/rules/hook-commits.md +94 -0
  357. package/.windsurf/rules/inspect-quality.md +106 -0
  358. package/.windsurf/rules/investigate-bug.md +127 -0
  359. package/.windsurf/rules/kickoff-branch.md +143 -0
  360. package/.windsurf/rules/maintain-wiki.md +64 -0
  361. package/.windsurf/rules/map-codebase.md +71 -0
  362. package/.windsurf/rules/migrate-spec.md +862 -0
  363. package/.windsurf/rules/model-domain.md +232 -0
  364. package/.windsurf/rules/orchestrate-project.md +174 -0
  365. package/.windsurf/rules/organize-workspace.md +164 -0
  366. package/.windsurf/rules/plan-refactor.md +87 -0
  367. package/.windsurf/rules/plan-release.md +145 -0
  368. package/.windsurf/rules/plan-tests.md +75 -0
  369. package/.windsurf/rules/plan-work.md +260 -0
  370. package/.windsurf/rules/publish-package.md +328 -0
  371. package/.windsurf/rules/quick-fix.md +114 -0
  372. package/.windsurf/rules/release-branch.md +298 -0
  373. package/.windsurf/rules/request-review.md +112 -0
  374. package/.windsurf/rules/research-first.md +87 -0
  375. package/.windsurf/rules/reset-baseline.md +21 -0
  376. package/.windsurf/rules/respond-review.md +71 -0
  377. package/.windsurf/rules/run-benchmark.md +85 -0
  378. package/.windsurf/rules/run-evals.md +80 -0
  379. package/.windsurf/rules/run-planning.md +101 -0
  380. package/.windsurf/rules/scope-work.md +63 -0
  381. package/.windsurf/rules/search-skills.md +73 -0
  382. package/.windsurf/rules/security-review.md +384 -0
  383. package/.windsurf/rules/seed-conventions.md +285 -0
  384. package/.windsurf/rules/session-state.md +146 -0
  385. package/.windsurf/rules/setup-environment.md +39 -0
  386. package/.windsurf/rules/simulate-agents.md +26 -0
  387. package/.windsurf/rules/slice-tasks.md +68 -0
  388. package/.windsurf/rules/smoke-test.md +242 -0
  389. package/.windsurf/rules/spike-prototype.md +95 -0
  390. package/.windsurf/rules/stocktake-skills.md +72 -0
  391. package/.windsurf/rules/survey-context.md +135 -0
  392. package/.windsurf/rules/terse-mode.md +42 -0
  393. package/.windsurf/rules/trace-requirement.md +69 -0
  394. package/.windsurf/rules/using-bigpowers.md +111 -0
  395. package/.windsurf/rules/validate-contracts.md +309 -0
  396. package/.windsurf/rules/validate-fix.md +106 -0
  397. package/.windsurf/rules/verify-work.md +191 -0
  398. package/.windsurf/rules/visual-dashboard.md +50 -0
  399. package/.windsurf/rules/wire-ci.md +375 -0
  400. package/.windsurf/rules/wire-observability.md +97 -0
  401. package/.windsurf/rules/write-document.md +255 -0
  402. package/CHANGELOG.md +37 -0
  403. package/CONVENTIONS.md +22 -0
  404. package/bin/setup.js +35 -7
  405. package/instructions +1 -0
  406. package/package.json +1 -1
  407. package/scripts/adapters/cline.sh +53 -3
  408. package/scripts/adapters/codebuddy.sh +58 -0
  409. package/scripts/adapters/codex.sh +58 -0
  410. package/scripts/adapters/copilot.sh +58 -0
  411. package/scripts/adapters/kilocode.sh +44 -3
  412. package/scripts/adapters/opencode.sh +58 -0
  413. package/scripts/adapters/qwen.sh +53 -1
  414. package/scripts/adapters/trae.sh +58 -0
  415. package/scripts/adapters/windsurf.sh +52 -0
  416. package/scripts/bp-yaml-set.sh +2 -0
  417. package/scripts/generate-wave-b-hub.py +31 -0
  418. package/scripts/hooks/cline/HOOKS.md +16 -0
  419. package/scripts/hooks/cline/hooks-manifest.json +12 -0
  420. package/scripts/hooks/cline/plugin/guard-git-plugin.ts +16 -0
  421. package/scripts/hooks/codebuddy/HOOKS.md +24 -0
  422. package/scripts/hooks/codebuddy/hooks-manifest.json +20 -0
  423. package/scripts/hooks/codebuddy/pre-tool-git-guard.sh +22 -0
  424. package/scripts/hooks/codebuddy/settings.example.json +16 -0
  425. package/scripts/hooks/codex/HOOKS.md +21 -0
  426. package/scripts/hooks/codex/hooks-manifest.json +17 -0
  427. package/scripts/hooks/codex/pre-tool-git-guard.sh +22 -0
  428. package/scripts/hooks/codex/settings.example.json +16 -0
  429. package/scripts/hooks/kilocode/HOOKS.md +16 -0
  430. package/scripts/hooks/kilocode/hooks-manifest.json +12 -0
  431. package/scripts/hooks/kilocode/plugin/guard-git-plugin.ts +16 -0
  432. package/scripts/hooks/qwen/HOOKS.md +27 -0
  433. package/scripts/hooks/qwen/hooks-manifest.json +23 -0
  434. package/scripts/hooks/qwen/pre-tool-git-guard.sh +22 -0
  435. package/scripts/hooks/qwen/settings.example.json +16 -0
  436. package/scripts/hooks/trae/HOOKS.md +17 -0
  437. package/scripts/hooks/trae/hooks-manifest.json +13 -0
  438. package/scripts/hooks/trae/pre-tool-git-guard.sh +22 -0
  439. package/scripts/hooks/trae/settings.example.json +16 -0
  440. package/scripts/hooks/windsurf/HOOKS.md +23 -0
  441. package/scripts/hooks/windsurf/hooks-manifest.json +19 -0
  442. package/scripts/hooks/windsurf/pre-tool-git-guard.sh +22 -0
  443. package/scripts/hooks/windsurf/settings.example.json +16 -0
  444. package/scripts/install.sh +33 -373
  445. package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
  446. package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
  447. package/scripts/lib/context-wire.sh +5 -0
  448. package/scripts/lib/install-grep.sh +18 -0
  449. package/scripts/lib/install-helpers.js +139 -2
  450. package/scripts/lib/install-targets-a.sh +227 -0
  451. package/scripts/lib/install-targets-b.sh +226 -0
  452. package/scripts/lib/install-targets-c.sh +128 -0
  453. package/scripts/lib/install-targets-d.sh +179 -0
  454. package/scripts/lib/srp-engine.py +2 -70
  455. package/scripts/lib/srp_engine_links.py +59 -0
  456. package/scripts/lib/wave_b_hub_codegen_helpers.py +273 -0
  457. package/scripts/lib/wave_b_hub_codegen_install.py +134 -0
  458. package/scripts/lib/wave_b_hub_config.py +130 -0
  459. package/scripts/lib/wave_b_hub_patch.py +213 -0
  460. package/scripts/record-cycle-time.sh +3 -14
  461. package/scripts/targets.yaml +75 -2
  462. package/scripts/test-agy-hub.sh +11 -10
  463. package/scripts/test-cline-adapter.sh +55 -0
  464. package/scripts/test-cline-hub.sh +48 -0
  465. package/scripts/test-codebuddy-adapter.sh +63 -0
  466. package/scripts/test-codebuddy-hub.sh +49 -0
  467. package/scripts/test-codex-adapter.sh +63 -0
  468. package/scripts/test-codex-hub.sh +49 -0
  469. package/scripts/test-copilot-adapter.sh +47 -0
  470. package/scripts/test-copilot-hub.sh +43 -0
  471. package/scripts/test-gemini-hub.sh +10 -9
  472. package/scripts/test-hermes-hub.sh +7 -6
  473. package/scripts/test-install-distribute-only.sh +3 -0
  474. package/scripts/test-install-helpers.js +9 -3
  475. package/scripts/test-kilocode-adapter.sh +55 -0
  476. package/scripts/test-kilocode-hub.sh +48 -0
  477. package/scripts/test-mimo-hub.sh +7 -6
  478. package/scripts/test-opencode-adapter.sh +47 -0
  479. package/scripts/test-opencode-hub.sh +43 -0
  480. package/scripts/test-qwen-adapter.sh +63 -0
  481. package/scripts/test-qwen-hub.sh +49 -0
  482. package/scripts/test-trae-adapter.sh +63 -0
  483. package/scripts/test-trae-hub.sh +49 -0
  484. package/scripts/test-windsurf-adapter.sh +63 -0
  485. package/scripts/test-windsurf-hub.sh +49 -0
  486. package/scripts/test-zcode-hub.sh +7 -6
  487. package/scripts/verify-install.sh +83 -29
@@ -0,0 +1,273 @@
1
+ """Generate helpers, hub tests, and targets rows for Wave B."""
2
+ from __future__ import annotations
3
+
4
+ from wave_b_hub_config import prefix
5
+
6
+ def helpers_global_case(cfg: dict) -> str:
7
+ fn = cfg["fn"]
8
+ setup_id = cfg["setup_id"]
9
+ home = cfg["home"]
10
+ sub = cfg["skills_sub"]
11
+ rendered = cfg["rendered"]
12
+ kind = cfg["kind"]
13
+ ctx = cfg.get("context", {})
14
+ hooks = cfg.get("hooks")
15
+ story = cfg["story"]
16
+
17
+ p = []
18
+ p.append(f" case '{setup_id}':")
19
+ if setup_id != fn:
20
+ p.append(f" case '{fn}':")
21
+
22
+ if kind == "skill_dir":
23
+ p.append(f" linkRenderedSkills(path.join(repoRoot, '{rendered}'), path.join(homeDir, '{home}', '{sub}'));")
24
+ else:
25
+ p.append(f" {{")
26
+ p.append(f" const renderedDir = path.join(repoRoot, '{rendered}');")
27
+ p.append(f" const targetDir = path.join(homeDir, '{home}', '{sub}');")
28
+ p.append(f" fs.mkdirSync(targetDir, {{ recursive: true }});")
29
+ p.append(f" if (fs.existsSync(renderedDir)) {{")
30
+ p.append(f" for (const f of fs.readdirSync(renderedDir)) {{")
31
+ p.append(f" if (!f.endsWith('.md')) continue;")
32
+ p.append(f" linkFile(path.join(renderedDir, f), path.join(targetDir, f));")
33
+ p.append(f" }}")
34
+ p.append(f" }}")
35
+ p.append(f" }}")
36
+
37
+ mode = ctx.get("mode")
38
+ if mode == "config-bridge":
39
+ p.append(f" bridgeHermesConfig(path.join(homeDir, '{home}', '{ctx['bridge']}'));")
40
+ elif mode == "symlink":
41
+ p.append(f" {{")
42
+ p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
43
+ p.append(f" const agentsDst = path.join(homeDir, '{home}', '{ctx['file']}');")
44
+ p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
45
+ p.append(f" linkFile(agentsSrc, agentsDst);")
46
+ p.append(f" }}")
47
+ elif mode == "copy":
48
+ p.append(f" {{")
49
+ p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
50
+ p.append(f" const agentsDst = path.join(homeDir, '{home}', '{ctx['file']}');")
51
+ p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
52
+ p.append(f" if (fs.existsSync(agentsSrc)) fs.copyFileSync(agentsSrc, agentsDst);")
53
+ p.append(f" }}")
54
+
55
+ if hooks is True:
56
+ p.append(f" {{")
57
+ p.append(f" const hookSrc = path.join(repoRoot, 'scripts', 'hooks', '{fn}', 'pre-tool-git-guard.sh');")
58
+ p.append(f" const hookDst = path.join(homeDir, '{home}', 'hooks', 'pre-tool-git-guard.sh');")
59
+ p.append(f" if (fs.existsSync(hookSrc)) {{")
60
+ p.append(f" fs.mkdirSync(path.dirname(hookDst), {{ recursive: true }});")
61
+ p.append(f" linkHook(hookSrc, hookDst);")
62
+ p.append(f" }}")
63
+ p.append(f" }}")
64
+
65
+ p.append(f" break; // story: {story}")
66
+ return "\n".join(p)
67
+
68
+
69
+ def helpers_local_case(cfg: dict) -> str:
70
+ fn = cfg["fn"]
71
+ setup_id = cfg["setup_id"]
72
+ home = cfg["home"]
73
+ sub = cfg["skills_sub"]
74
+ rendered = cfg["rendered"]
75
+ kind = cfg["kind"]
76
+ ctx = cfg.get("context", {})
77
+ story = cfg["story"]
78
+
79
+ # local paths use cwd-relative versions
80
+ local_home = home if not home.startswith(".config") else home.replace(".config/", ".config/")
81
+ p = []
82
+ p.append(f" case '{setup_id}':")
83
+ if setup_id != fn:
84
+ p.append(f" case '{fn}':")
85
+
86
+ if kind == "skill_dir":
87
+ p.append(f" linkRenderedSkills(path.join(repoRoot, '{rendered}'), path.join(cwd, '{local_home}', '{sub}'));")
88
+ else:
89
+ p.append(f" {{")
90
+ p.append(f" const renderedDir = path.join(repoRoot, '{rendered}');")
91
+ p.append(f" const targetDir = path.join(cwd, '{local_home}', '{sub}');")
92
+ p.append(f" fs.mkdirSync(targetDir, {{ recursive: true }});")
93
+ p.append(f" if (fs.existsSync(renderedDir)) {{")
94
+ p.append(f" for (const f of fs.readdirSync(renderedDir)) {{")
95
+ p.append(f" if (!f.endsWith('.md')) continue;")
96
+ p.append(f" linkFile(path.join(renderedDir, f), path.join(targetDir, f));")
97
+ p.append(f" }}")
98
+ p.append(f" }}")
99
+ p.append(f" }}")
100
+
101
+ mode = ctx.get("mode")
102
+ if mode == "config-bridge":
103
+ p.append(f" bridgeHermesConfig(path.join(cwd, '{local_home}', '{ctx['bridge']}'));")
104
+ elif mode == "symlink":
105
+ p.append(f" {{")
106
+ p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
107
+ p.append(f" const agentsDst = path.join(cwd, '{local_home}', '{ctx['file']}');")
108
+ p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
109
+ p.append(f" linkFile(agentsSrc, agentsDst);")
110
+ p.append(f" }}")
111
+ elif mode == "copy":
112
+ p.append(f" {{")
113
+ p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
114
+ p.append(f" const agentsDst = path.join(cwd, '{local_home}', '{ctx['file']}');")
115
+ p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
116
+ p.append(f" if (fs.existsSync(agentsSrc)) fs.copyFileSync(agentsSrc, agentsDst);")
117
+ p.append(f" }}")
118
+
119
+ p.append(f" break; // story: {story}")
120
+ return "\n".join(p)
121
+
122
+
123
+ def helpers_uninstall_case(cfg: dict) -> str:
124
+ fn = cfg["fn"]
125
+ setup_id = cfg["setup_id"]
126
+ home = cfg["home"]
127
+ sub = cfg["skills_sub"]
128
+ kind = cfg["kind"]
129
+ ctx = cfg.get("context", {})
130
+ hooks = cfg.get("hooks")
131
+ story = cfg["story"]
132
+
133
+ p = []
134
+ p.append(f" case '{setup_id}':")
135
+ if setup_id != fn:
136
+ p.append(f" case '{fn}':")
137
+
138
+ if kind == "skill_dir":
139
+ p.append(f" {{")
140
+ p.append(f" const skillsDir = path.join(homeDir, '{home}', '{sub}');")
141
+ p.append(f" if (fs.existsSync(skillsDir)) {{")
142
+ p.append(f" for (const entry of fs.readdirSync(skillsDir, {{ withFileTypes: true }})) {{")
143
+ p.append(f" if (!entry.isSymbolicLink()) continue;")
144
+ p.append(f" removeSymlink(path.join(skillsDir, entry.name));")
145
+ p.append(f" }}")
146
+ p.append(f" }}")
147
+ p.append(f" }}")
148
+ else:
149
+ p.append(f" {{")
150
+ p.append(f" const rulesDir = path.join(homeDir, '{home}', '{sub}');")
151
+ p.append(f" if (fs.existsSync(rulesDir)) {{")
152
+ p.append(f" for (const f of fs.readdirSync(rulesDir)) {{")
153
+ p.append(f" removeSymlink(path.join(rulesDir, f));")
154
+ p.append(f" }}")
155
+ p.append(f" }}")
156
+ p.append(f" }}")
157
+
158
+ if ctx.get("mode") in ("symlink", "copy"):
159
+ p.append(f" removeSymlink(path.join(homeDir, '{home}', '{ctx['file']}'));")
160
+ if hooks is True:
161
+ p.append(f" removeSymlink(path.join(homeDir, '{home}', 'hooks', 'pre-tool-git-guard.sh'));")
162
+ p.append(f" break; // story: {story}")
163
+ return "\n".join(p)
164
+
165
+
166
+ def test_hub_sh(cfg: dict) -> str:
167
+ fn = cfg["fn"]
168
+ setup_id = cfg["setup_id"]
169
+ label = cfg["label"]
170
+ story = cfg["story"]
171
+ p = prefix(cfg)
172
+ hooks = cfg.get("hooks")
173
+ manifest = cfg.get("manifest")
174
+
175
+ hook_checks = ""
176
+ if hooks is True:
177
+ hook_checks = f"""grep -q '{p}_HOOK_SRC=' "$INSTALL_SH" && pass 'install.sh: hook src' || fail 'install.sh: missing hook src'
178
+ grep -q 'pre-tool-git-guard.sh' "$INSTALL_SH" && pass 'install.sh: git-guard hook' || fail 'install.sh: missing git-guard hook'
179
+ """
180
+ elif hooks == "plugin":
181
+ hook_checks = f"""grep -q 'scripts/hooks/{fn}/plugin' "$INSTALL_SH" && pass 'install.sh: plugin hook template' || fail 'install.sh: missing plugin template'
182
+ """
183
+
184
+ manifest_checks = ""
185
+ if manifest:
186
+ manifest_checks = f"""grep -q 'id: {fn}' "$TARGETS_YAML" && pass 'targets.yaml: {fn} row' || fail 'targets.yaml: missing {fn} row'
187
+ grep -q 'adapter: {fn}' "$TARGETS_YAML" && pass 'targets.yaml: {fn} adapter' || fail 'targets.yaml: missing {fn} adapter'
188
+ grep -q '{manifest}' "$TARGETS_YAML" && pass 'targets.yaml: {manifest}' || fail 'targets.yaml: missing {manifest}'
189
+ grep -q 'install_{fn}()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_{fn} assertion' || fail 'verify-install: missing install_{fn} assertion'
190
+ """
191
+
192
+ return f"""#!/usr/bin/env bash
193
+ # story: {story}
194
+ # Regression tests for {label} install hub wiring (Wave B).
195
+ set -euo pipefail
196
+
197
+ REPO_ROOT="$(cd "$(dirname "${{BASH_SOURCE[0]}}")/.." && pwd)"
198
+ PASS=0
199
+ FAIL=0
200
+
201
+ pass() {{ echo "PASS: $1"; PASS=$((PASS + 1)); }}
202
+ fail() {{ echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }}
203
+
204
+ echo "=== test-{fn}-hub.sh ==="
205
+
206
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
207
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
208
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
209
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
210
+
211
+ grep -q 'install_{fn}()' "$INSTALL_SH" && pass 'install.sh: install_{fn}()' || fail 'install.sh: missing install_{fn}()'
212
+ grep -q 'uninstall_{fn}()' "$INSTALL_SH" && pass 'install.sh: uninstall_{fn}()' || fail 'install.sh: missing uninstall_{fn}()'
213
+ grep -q '{p}_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
214
+ grep -q 'install_{fn}' "$INSTALL_SH" && grep -q 'uninstall_{fn}' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing {fn}'
215
+
216
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
217
+ grep -q '{label} →' <<< "$DRY_OUT" && pass 'dry-run: {label} section' || fail 'dry-run: missing {label} section'
218
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
219
+ grep -q '{label} →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: {label} section' || fail 'dry-run uninstall: missing {label} section'
220
+
221
+ grep -q "case '{setup_id}'" "$HELPERS_JS" && pass 'install-helpers: {setup_id} case' || fail 'install-helpers: missing {setup_id} case'
222
+ {hook_checks}
223
+ SETUP_SRC="$(cat "$SETUP_JS")"
224
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
225
+ grep -q "'{setup_id}'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: {setup_id} in SUPPORTED_IDS' || fail 'setup.js: {setup_id} not in SUPPORTED_IDS'
226
+
227
+ {manifest_checks}
228
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
229
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
230
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
231
+
232
+ echo "test-{fn}-hub: $PASS passed, $FAIL failed"
233
+ [[ "$FAIL" -eq 0 ]] || exit 1
234
+ """
235
+
236
+
237
+ def targets_row(cfg: dict) -> str:
238
+ fn = cfg["fn"]
239
+ label = cfg["label"]
240
+ rendered = cfg["rendered"]
241
+ ctx = cfg.get("context", {})
242
+ manifest = cfg.get("manifest")
243
+ mode = ctx.get("mode", "native")
244
+ contracts = [f" - {manifest}"] if manifest else [" - agents_md_exists"]
245
+ wire_file = ctx.get("file") or ctx.get("wire") or "AGENTS.md"
246
+ skill_block = ""
247
+ if cfg["kind"] == "rules_file":
248
+ skill_block = f""" skill:
249
+ adapter: {fn}
250
+ output: {rendered}"""
251
+ else:
252
+ skill_block = f""" skill:
253
+ adapter: {fn}
254
+ output: {rendered}"""
255
+ ctx_mode = mode if mode != "config-bridge" else "config-bridge"
256
+ ctx_extra = ""
257
+ if mode == "config-bridge":
258
+ ctx_extra = f"""
259
+ bridge_file: {ctx['bridge']}
260
+ bridge_key: {ctx['key']}"""
261
+ return f""" - id: {fn}
262
+ name: {label}
263
+ tier: opt_in
264
+ {skill_block}
265
+ context:
266
+ adapter: {fn}
267
+ mode: {ctx_mode}
268
+ file: {wire_file}{ctx_extra}
269
+ contracts:
270
+ {chr(10).join(contracts)}
271
+ """
272
+
273
+
@@ -0,0 +1,134 @@
1
+ """Generate install.sh blocks for Wave B hub wiring."""
2
+ from __future__ import annotations
3
+
4
+ from wave_b_hub_config import prefix
5
+
6
+ def install_sh_block(cfg: dict) -> str:
7
+ p = prefix(cfg)
8
+ fn = cfg["fn"]
9
+ label = cfg["label"]
10
+ story = cfg["story"]
11
+ home = cfg["home"]
12
+ sub = cfg["skills_sub"]
13
+ rendered = cfg["rendered"]
14
+ kind = cfg["kind"]
15
+ ctx = cfg.get("context", {})
16
+ hooks = cfg.get("hooks")
17
+
18
+ lines = [
19
+ f"# ── {label} ({story}) ───────────────────────────────────────────────────────",
20
+ "",
21
+ f'{p}_CONFIG_DIR="$HOME/{home}"',
22
+ f'{p}_SKILLS_DIR="${p}_CONFIG_DIR/{sub}"',
23
+ f'{p}_RENDERED="$REPO_ROOT/{rendered}"',
24
+ ]
25
+
26
+ if ctx.get("mode") == "config-bridge":
27
+ lines.append(f'{p}_CONFIG_FILE="${p}_CONFIG_DIR/{ctx["bridge"]}"')
28
+ elif ctx.get("mode") in ("symlink", "copy"):
29
+ lines.append(f'{p}_CONTEXT="${p}_CONFIG_DIR/{ctx["file"]}"')
30
+
31
+ if hooks is True:
32
+ lines.append(f'{p}_HOOKS_DIR="${p}_CONFIG_DIR/hooks"')
33
+ lines.append(f'{p}_HOOK_SRC="$REPO_ROOT/scripts/hooks/{fn}/pre-tool-git-guard.sh"')
34
+
35
+ lines.extend(["", f"install_{fn}() {{", " echo \"\"", f' echo "{label} → ${p}_SKILLS_DIR/"'])
36
+
37
+ if kind == "skill_dir":
38
+ lines.extend([
39
+ f' if [[ ! -d "${p}_RENDERED" ]]; then',
40
+ f' echo " WARNING: ${p}_RENDERED not found — run sync-skills.sh first"',
41
+ " return",
42
+ " fi",
43
+ " local count=0",
44
+ f' for skill_dir in "${p}_RENDERED"/*/; do',
45
+ ' [[ -f "${skill_dir}SKILL.md" ]] || continue',
46
+ ' local name; name="$(basename "$skill_dir")"',
47
+ f' link "$skill_dir" "${p}_SKILLS_DIR/$name"',
48
+ " count=$((count + 1))",
49
+ " done",
50
+ ' echo " $count skills installed"',
51
+ ])
52
+ else:
53
+ lines.extend([
54
+ f' if [[ ! -d "${p}_RENDERED" ]]; then',
55
+ f' echo " WARNING: ${p}_RENDERED not found — run sync-skills.sh first"',
56
+ " return",
57
+ " fi",
58
+ " local count=0",
59
+ f' for rule in "${p}_RENDERED"/*.md; do',
60
+ ' [[ -f "$rule" ]] || continue',
61
+ f' link "$rule" "${p}_SKILLS_DIR/$(basename "$rule")"',
62
+ " count=$((count + 1))",
63
+ " done",
64
+ f' echo " $count rules installed"',
65
+ ])
66
+
67
+ mode = ctx.get("mode")
68
+ if mode and mode != "native":
69
+ ctx_target = f"${p}_CONFIG_FILE" if mode == "config-bridge" else f"${p}_CONTEXT"
70
+ lines.extend([
71
+ f' echo "{label} → context {mode} {ctx_target}"',
72
+ ' source "$REPO_ROOT/scripts/lib/context-wire.sh"',
73
+ ' local agents_src="$REPO_ROOT/AGENTS.md"',
74
+ ' [[ -f "$agents_src" ]] || agents_src="$REPO_ROOT/docs/templates/AGENTS.md"',
75
+ ])
76
+ if mode == "config-bridge":
77
+ lines.append(
78
+ f' wire_context_mode config-bridge "${p}_CONFIG_FILE" "{ctx["key"]}" "{ctx["wire"]}"'
79
+ )
80
+ elif mode == "symlink":
81
+ lines.append(f' wire_context_mode symlink "${p}_CONTEXT" "" read "$agents_src"')
82
+ elif mode == "copy":
83
+ lines.append(f' run mkdir -p "$(dirname "${p}_CONTEXT")"')
84
+ lines.append(f' run cp "$agents_src" "${p}_CONTEXT"')
85
+
86
+ if hooks is True:
87
+ lines.extend([
88
+ f' if [[ -f "${p}_HOOK_SRC" ]]; then',
89
+ f' echo "{label} Hooks → ${p}_HOOKS_DIR/"',
90
+ f' link "${p}_HOOK_SRC" "${p}_HOOKS_DIR/pre-tool-git-guard.sh"',
91
+ f' chmod +x "${p}_HOOK_SRC" 2>/dev/null || true',
92
+ f' echo " NOTE: copy $REPO_ROOT/scripts/hooks/{fn}/settings.example.json into tool config"',
93
+ " fi",
94
+ ])
95
+ elif hooks == "plugin":
96
+ lines.extend([
97
+ f' if [[ -d "$REPO_ROOT/scripts/hooks/{fn}/plugin" ]]; then',
98
+ f' echo "{label} → hook plugin template at scripts/hooks/{fn}/plugin/ (manual install)"',
99
+ " fi",
100
+ ])
101
+
102
+ lines.extend(["}", ""])
103
+
104
+ lines.append(f"uninstall_{fn}() {{")
105
+ lines.append(' echo ""')
106
+ lines.append(f' echo "{label} → removing management from ${p}_CONFIG_DIR/"')
107
+ if kind == "skill_dir":
108
+ lines.extend([
109
+ f' if [[ -d "${p}_SKILLS_DIR" ]]; then',
110
+ f' for dst in "${p}_SKILLS_DIR"/*/; do',
111
+ ' [[ -L "${dst%/}" ]] || continue',
112
+ ' unlink_if_managed "${dst%/}" "$REPO_ROOT/"',
113
+ " done",
114
+ " fi",
115
+ ])
116
+ else:
117
+ lines.extend([
118
+ f' if [[ -d "${p}_SKILLS_DIR" ]]; then',
119
+ f' for dst in "${p}_SKILLS_DIR"/*.md; do',
120
+ ' [[ -L "$dst" ]] || continue',
121
+ ' unlink_if_managed "$dst" "$REPO_ROOT/"',
122
+ " done",
123
+ " fi",
124
+ ])
125
+ if ctx.get("mode") in ("symlink", "copy"):
126
+ lines.append(f' unlink_if_managed "${p}_CONTEXT" "$REPO_ROOT/"')
127
+ if ctx.get("mode") == "config-bridge":
128
+ lines.append(f' # config-bridge file ${p}_CONFIG_FILE left for user')
129
+ if hooks is True:
130
+ lines.append(f' unlink_if_managed "${p}_HOOKS_DIR/pre-tool-git-guard.sh" "$REPO_ROOT/"')
131
+ lines.extend(["}", ""])
132
+ return "\n".join(lines)
133
+
134
+
@@ -0,0 +1,130 @@
1
+ """Wave B hub epic configuration."""
2
+ from __future__ import annotations
3
+
4
+ HUB_ORDER = ["e65", "e68", "e72", "e66", "e67", "e70", "e73", "e62", "e71"]
5
+
6
+ HUB_EPICS: dict[str, dict] = {
7
+ "e65": {
8
+ "story": "e65s02",
9
+ "fn": "codex",
10
+ "setup_id": "codex",
11
+ "label": "Codex CLI",
12
+ "home": ".codex",
13
+ "skills_sub": "skills",
14
+ "rendered": ".codex/skills",
15
+ "kind": "skill_dir",
16
+ "context": {"mode": "config-bridge", "bridge": "config.toml", "key": "instructions", "wire": "AGENTS.md"},
17
+ "hooks": True,
18
+ "manifest": "codex_hooks_manifest",
19
+ },
20
+ "e68": {
21
+ "story": "e68s02",
22
+ "fn": "qwen",
23
+ "setup_id": "qwen",
24
+ "label": "Qwen Code",
25
+ "home": ".qwen",
26
+ "skills_sub": "skills",
27
+ "rendered": ".qwen/skills",
28
+ "kind": "skill_dir",
29
+ "context": {"mode": "symlink", "file": "QWEN.md"},
30
+ "hooks": True,
31
+ "manifest": "qwen_hooks_manifest",
32
+ },
33
+ "e72": {
34
+ "story": "e72s02",
35
+ "fn": "codebuddy",
36
+ "setup_id": "codebuddy",
37
+ "label": "CodeBuddy",
38
+ "home": ".codebuddy",
39
+ "skills_sub": "skills",
40
+ "rendered": ".codebuddy/skills",
41
+ "kind": "skill_dir",
42
+ "context": {"mode": "symlink", "file": "AGENTS.md"},
43
+ "hooks": True,
44
+ "manifest": "codebuddy_hooks_manifest",
45
+ },
46
+ "e66": {
47
+ "story": "e66s02",
48
+ "fn": "cline",
49
+ "setup_id": "cline",
50
+ "label": "Cline",
51
+ "home": ".cline",
52
+ "skills_sub": "skills",
53
+ "rendered": ".cline/skills",
54
+ "kind": "skill_dir",
55
+ "context": {"mode": "native"},
56
+ "hooks": "plugin",
57
+ "manifest": "cline_hooks_manifest",
58
+ },
59
+ "e67": {
60
+ "story": "e67s02",
61
+ "fn": "kilocode",
62
+ "setup_id": "kilo",
63
+ "label": "Kilo",
64
+ "home": ".kilocode",
65
+ "skills_sub": "rules",
66
+ "rendered": ".kilocode/rules",
67
+ "kind": "rules_file",
68
+ "context": {"mode": "copy", "file": "AGENTS.md"},
69
+ "hooks": "plugin",
70
+ "manifest": "kilocode_hooks_manifest",
71
+ },
72
+ "e70": {
73
+ "story": "e70s02",
74
+ "fn": "trae",
75
+ "setup_id": "trae",
76
+ "label": "Trae",
77
+ "home": ".trae",
78
+ "skills_sub": "skills",
79
+ "rendered": ".trae/skills",
80
+ "kind": "skill_dir",
81
+ "context": {"mode": "symlink", "file": "AGENTS.md"},
82
+ "hooks": True,
83
+ "manifest": "trae_hooks_manifest",
84
+ },
85
+ "e73": {
86
+ "story": "e73s02",
87
+ "fn": "windsurf",
88
+ "setup_id": "windsurf",
89
+ "label": "Windsurf",
90
+ "home": ".codeium/windsurf",
91
+ "skills_sub": "rules",
92
+ "rendered": ".windsurf/rules",
93
+ "kind": "rules_file",
94
+ "context": {"mode": "copy", "file": "AGENTS.md"},
95
+ "hooks": True,
96
+ "manifest": "windsurf_hooks_manifest",
97
+ },
98
+ "e62": {
99
+ "story": "e62s02",
100
+ "fn": "opencode",
101
+ "setup_id": "opencode",
102
+ "label": "OpenCode",
103
+ "home": ".config/opencode",
104
+ "skills_sub": "skills",
105
+ "rendered": ".opencode/skills",
106
+ "kind": "skill_dir",
107
+ "context": {"mode": "symlink", "file": "AGENTS.md"},
108
+ "hooks": False,
109
+ "manifest": None,
110
+ },
111
+ "e71": {
112
+ "story": "e71s02",
113
+ "fn": "copilot",
114
+ "setup_id": "copilot",
115
+ "label": "Copilot CLI",
116
+ "home": ".copilot",
117
+ "skills_sub": "skills",
118
+ "rendered": ".copilot/skills",
119
+ "kind": "skill_dir",
120
+ "context": {"mode": "copy", "file": "AGENTS.md"},
121
+ "hooks": False,
122
+ "manifest": None,
123
+ },
124
+ }
125
+
126
+
127
+
128
+
129
+ def prefix(cfg: dict) -> str:
130
+ return cfg["fn"].upper().replace("-", "_")