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,63 @@
1
+ #!/usr/bin/env bash
2
+ # story: e65s01
3
+ # scenario: SC-e65s01-P1-02
4
+ # Regression tests for Codex CLI adapter render + hook templates.
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+
10
+ PASS=0
11
+ FAIL=0
12
+
13
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
14
+ fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); }
15
+
16
+ echo "=== test-codex-adapter.sh ==="
17
+
18
+ TMP=$(mktemp -d)
19
+ trap 'rm -rf "$TMP"' EXIT
20
+
21
+ if echo '{"name":"test-skill","description":"test desc","body":"test body"}' \
22
+ | CODEX_SKILLS="$TMP" bash "$REPO_ROOT/scripts/adapters/codex.sh" \
23
+ && [[ -f $TMP/test-skill/SKILL.md ]] \
24
+ && grep -q 'name: test-skill' $TMP/test-skill/SKILL.md \
25
+ && grep -q 'test body' $TMP/test-skill/SKILL.md; then
26
+ pass "render_skill emits artifact from stdin SkillIR"
27
+ else
28
+ fail "render_skill emits artifact from stdin SkillIR"
29
+ fi
30
+
31
+ if ! echo '{"name":"../escape","description":"d","body":"b"}' \
32
+ | CODEX_SKILLS="$TMP/bad" bash "$REPO_ROOT/scripts/adapters/codex.sh" 2>/dev/null; then
33
+ pass "rejects path traversal in skill name"
34
+ else
35
+ fail "rejects path traversal in skill name"
36
+ fi
37
+
38
+ if [[ -f "$REPO_ROOT/scripts/hooks/codex/pre-tool-git-guard.sh" ]] \
39
+ && [[ -f "$REPO_ROOT/scripts/hooks/codex/hooks-manifest.json" ]] \
40
+ && [[ -f "$REPO_ROOT/scripts/hooks/codex/settings.example.json" ]]; then
41
+ pass "hook template bundle present"
42
+ else
43
+ fail "hook template bundle present"
44
+ fi
45
+
46
+ BLOCK_OUT=$(echo '{"tool_input":{"command":"git push --force origin main"}}' \
47
+ | bash "$REPO_ROOT/scripts/hooks/codex/pre-tool-git-guard.sh")
48
+ if echo "$BLOCK_OUT" | grep -q 'block'; then
49
+ pass "pre-tool guard blocks dangerous command"
50
+ else
51
+ fail "pre-tool guard blocks dangerous command"
52
+ fi
53
+
54
+ ADAPTER_OUT=$(bash "$REPO_ROOT/scripts/test-adapters.sh" codex 2>&1 || true)
55
+ if echo "$ADAPTER_OUT" | grep -q '0 failed'; then
56
+ pass "test-adapters.sh codex"
57
+ else
58
+ fail "test-adapters.sh codex"
59
+ echo "$ADAPTER_OUT"
60
+ fi
61
+
62
+ echo "test-codex-adapter: $PASS passed, $FAIL failed"
63
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+ # story: e65s02
3
+ # Regression tests for Codex CLI install hub wiring (Wave B).
4
+ set -euo pipefail
5
+
6
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
+ PASS=0
8
+ FAIL=0
9
+
10
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
11
+ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
12
+
13
+ echo "=== test-codex-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
17
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
18
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
19
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
20
+
21
+ install_grep -q 'install_codex()' && pass 'install.sh: install_codex()' || fail 'install.sh: missing install_codex()'
22
+ install_grep -q 'uninstall_codex()' && pass 'install.sh: uninstall_codex()' || fail 'install.sh: missing uninstall_codex()'
23
+ install_grep -q 'CODEX_SKILLS_DIR=' && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
24
+ install_grep -q 'install_codex' && install_grep -q 'uninstall_codex' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing codex'
25
+
26
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
27
+ grep -q 'Codex CLI →' <<< "$DRY_OUT" && pass 'dry-run: Codex CLI section' || fail 'dry-run: missing Codex CLI section'
28
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
29
+ grep -q 'Codex CLI →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: Codex CLI section' || fail 'dry-run uninstall: missing Codex CLI section'
30
+
31
+ grep -q "case 'codex'" "$HELPERS_JS" && pass 'install-helpers: codex case' || fail 'install-helpers: missing codex case'
32
+ install_grep -q 'CODEX_HOOK_SRC=' && pass 'install.sh: hook src' || fail 'install.sh: missing hook src'
33
+ install_grep -q 'pre-tool-git-guard.sh' && pass 'install.sh: git-guard hook' || fail 'install.sh: missing git-guard hook'
34
+
35
+ SETUP_SRC="$(cat "$SETUP_JS")"
36
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
37
+ grep -q "'codex'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: codex in SUPPORTED_IDS' || fail 'setup.js: codex not in SUPPORTED_IDS'
38
+
39
+ grep -q 'id: codex' "$TARGETS_YAML" && pass 'targets.yaml: codex row' || fail 'targets.yaml: missing codex row'
40
+ grep -q 'adapter: codex' "$TARGETS_YAML" && pass 'targets.yaml: codex adapter' || fail 'targets.yaml: missing codex adapter'
41
+ grep -q 'codex_hooks_manifest' "$TARGETS_YAML" && pass 'targets.yaml: codex_hooks_manifest' || fail 'targets.yaml: missing codex_hooks_manifest'
42
+ grep -q 'install_codex()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_codex assertion' || fail 'verify-install: missing install_codex assertion'
43
+
44
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
45
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
46
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
47
+
48
+ echo "test-codex-hub: $PASS passed, $FAIL failed"
49
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env bash
2
+ # story: e71s01
3
+ # scenario: SC-e71s01-P1-02
4
+ # Regression tests for Copilot CLI adapter render + hook templates.
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+
10
+ PASS=0
11
+ FAIL=0
12
+
13
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
14
+ fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); }
15
+
16
+ echo "=== test-copilot-adapter.sh ==="
17
+
18
+ TMP=$(mktemp -d)
19
+ trap 'rm -rf "$TMP"' EXIT
20
+
21
+ if echo '{"name":"test-skill","description":"test desc","body":"test body"}' \
22
+ | COPILOT_SKILLS="$TMP" bash "$REPO_ROOT/scripts/adapters/copilot.sh" \
23
+ && [[ -f $TMP/test-skill/SKILL.md ]] \
24
+ && grep -q 'name: test-skill' $TMP/test-skill/SKILL.md \
25
+ && grep -q 'test body' $TMP/test-skill/SKILL.md; then
26
+ pass "render_skill emits artifact from stdin SkillIR"
27
+ else
28
+ fail "render_skill emits artifact from stdin SkillIR"
29
+ fi
30
+
31
+ if ! echo '{"name":"../escape","description":"d","body":"b"}' \
32
+ | COPILOT_SKILLS="$TMP/bad" bash "$REPO_ROOT/scripts/adapters/copilot.sh" 2>/dev/null; then
33
+ pass "rejects path traversal in skill name"
34
+ else
35
+ fail "rejects path traversal in skill name"
36
+ fi
37
+
38
+ ADAPTER_OUT=$(bash "$REPO_ROOT/scripts/test-adapters.sh" copilot 2>&1 || true)
39
+ if echo "$ADAPTER_OUT" | grep -q '0 failed'; then
40
+ pass "test-adapters.sh copilot"
41
+ else
42
+ fail "test-adapters.sh copilot"
43
+ echo "$ADAPTER_OUT"
44
+ fi
45
+
46
+ echo "test-copilot-adapter: $PASS passed, $FAIL failed"
47
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ # story: e71s02
3
+ # Regression tests for Copilot CLI install hub wiring (Wave B).
4
+ set -euo pipefail
5
+
6
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
+ PASS=0
8
+ FAIL=0
9
+
10
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
11
+ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
12
+
13
+ echo "=== test-copilot-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
17
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
18
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
19
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
20
+
21
+ install_grep -q 'install_copilot()' && pass 'install.sh: install_copilot()' || fail 'install.sh: missing install_copilot()'
22
+ install_grep -q 'uninstall_copilot()' && pass 'install.sh: uninstall_copilot()' || fail 'install.sh: missing uninstall_copilot()'
23
+ install_grep -q 'COPILOT_SKILLS_DIR=' && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
24
+ install_grep -q 'install_copilot' && install_grep -q 'uninstall_copilot' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing copilot'
25
+
26
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
27
+ grep -q 'Copilot CLI →' <<< "$DRY_OUT" && pass 'dry-run: Copilot CLI section' || fail 'dry-run: missing Copilot CLI section'
28
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
29
+ grep -q 'Copilot CLI →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: Copilot CLI section' || fail 'dry-run uninstall: missing Copilot CLI section'
30
+
31
+ grep -q "case 'copilot'" "$HELPERS_JS" && pass 'install-helpers: copilot case' || fail 'install-helpers: missing copilot case'
32
+
33
+ SETUP_SRC="$(cat "$SETUP_JS")"
34
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
35
+ grep -q "'copilot'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: copilot in SUPPORTED_IDS' || fail 'setup.js: copilot not in SUPPORTED_IDS'
36
+
37
+
38
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
39
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
40
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
41
+
42
+ echo "test-copilot-hub: $PASS passed, $FAIL failed"
43
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -13,22 +13,23 @@ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
13
13
  echo "=== test-gemini-hub.sh ==="
14
14
 
15
15
  INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
16
17
  HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
17
18
  SETUP_JS="$REPO_ROOT/bin/setup.js"
18
19
  TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
19
20
 
20
- grep -q 'install_gemini()' "$INSTALL_SH" && pass 'install.sh: install_gemini()' || fail 'install.sh: missing install_gemini()'
21
- grep -q 'uninstall_gemini()' "$INSTALL_SH" && pass 'install.sh: uninstall_gemini()' || fail 'install.sh: missing uninstall_gemini()'
22
- grep -q 'GEMINI_HOOKS_SRC=' "$INSTALL_SH" && pass 'install.sh: GEMINI_HOOKS_SRC' || fail 'install.sh: missing GEMINI_HOOKS_SRC'
23
- grep -q 'before-tool-git-guard.sh' "$INSTALL_SH" && pass 'install.sh: Wave A git-guard hook' || fail 'install.sh: missing before-tool-git-guard.sh'
24
- grep -q 'before-tool-rtk.sh' "$INSTALL_SH" && pass 'install.sh: Wave A rtk hook' || fail 'install.sh: missing before-tool-rtk.sh'
25
- grep -q 'install_gemini' "$INSTALL_SH" && grep -q 'uninstall_gemini' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing gemini'
21
+ install_grep -q 'install_gemini()' && pass 'install.sh: install_gemini()' || fail 'install.sh: missing install_gemini()'
22
+ install_grep -q 'uninstall_gemini()' && pass 'install.sh: uninstall_gemini()' || fail 'install.sh: missing uninstall_gemini()'
23
+ install_grep -q 'GEMINI_HOOKS_SRC=' && pass 'install.sh: GEMINI_HOOKS_SRC' || fail 'install.sh: missing GEMINI_HOOKS_SRC'
24
+ install_grep -q 'before-tool-git-guard.sh' && pass 'install.sh: Wave A git-guard hook' || fail 'install.sh: missing before-tool-git-guard.sh'
25
+ install_grep -q 'before-tool-rtk.sh' && pass 'install.sh: Wave A rtk hook' || fail 'install.sh: missing before-tool-rtk.sh'
26
+ install_grep -q 'install_gemini' && install_grep -q 'uninstall_gemini' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing gemini'
26
27
 
27
28
  DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
28
- echo "$DRY_OUT" | grep -q 'Gemini CLI →' && pass 'dry-run: Gemini CLI section' || fail 'dry-run: missing Gemini CLI section'
29
- echo "$DRY_OUT" | grep -q 'before-tool-git-guard.sh' && pass 'dry-run: git-guard hook symlink' || fail 'dry-run: missing git-guard hook'
29
+ grep -q 'Gemini CLI →' <<< "$DRY_OUT" && pass 'dry-run: Gemini CLI section' || fail 'dry-run: missing Gemini CLI section'
30
+ grep -q 'before-tool-git-guard.sh' <<< "$DRY_OUT" && pass 'dry-run: git-guard hook symlink' || fail 'dry-run: missing git-guard hook'
30
31
  DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
31
- echo "$DRY_UNINSTALL" | grep -q 'Gemini CLI →' && pass 'dry-run uninstall: Gemini CLI section' || fail 'dry-run uninstall: missing Gemini CLI section'
32
+ grep -q 'Gemini CLI →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: Gemini CLI section' || fail 'dry-run uninstall: missing Gemini CLI section'
32
33
 
33
34
  grep -q "case 'gemini'" "$HELPERS_JS" && pass 'install-helpers: gemini global case' || fail 'install-helpers: missing gemini global case'
34
35
  grep -q 'before-tool-git-guard.sh' "$HELPERS_JS" && pass 'install-helpers: gemini hook wiring' || fail 'install-helpers: missing gemini hook wiring'
@@ -13,19 +13,20 @@ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
13
13
  echo "=== test-hermes-hub.sh ==="
14
14
 
15
15
  INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
16
17
  HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
17
18
  SETUP_JS="$REPO_ROOT/bin/setup.js"
18
19
  TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
19
20
 
20
- grep -q 'install_hermes()' "$INSTALL_SH" && pass 'install.sh: install_hermes()' || fail 'install.sh: missing install_hermes()'
21
- grep -q 'uninstall_hermes()' "$INSTALL_SH" && pass 'install.sh: uninstall_hermes()' || fail 'install.sh: missing uninstall_hermes()'
22
- grep -q 'HERMES_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: HERMES_SKILLS_DIR' || fail 'install.sh: missing HERMES_SKILLS_DIR'
23
- grep -q 'install_hermes' "$INSTALL_SH" && grep -q 'uninstall_hermes' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing hermes'
21
+ install_grep -q 'install_hermes()' && pass 'install.sh: install_hermes()' || fail 'install.sh: missing install_hermes()'
22
+ install_grep -q 'uninstall_hermes()' && pass 'install.sh: uninstall_hermes()' || fail 'install.sh: missing uninstall_hermes()'
23
+ install_grep -q 'HERMES_SKILLS_DIR=' && pass 'install.sh: HERMES_SKILLS_DIR' || fail 'install.sh: missing HERMES_SKILLS_DIR'
24
+ install_grep -q 'install_hermes' && install_grep -q 'uninstall_hermes' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing hermes'
24
25
 
25
26
  DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
26
- echo "$DRY_OUT" | grep -q 'Hermes Agent →' && pass 'dry-run: Hermes Agent section' || fail 'dry-run: missing Hermes Agent section'
27
+ grep -q 'Hermes Agent →' <<< "$DRY_OUT" && pass 'dry-run: Hermes Agent section' || fail 'dry-run: missing Hermes Agent section'
27
28
  DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
28
- echo "$DRY_UNINSTALL" | grep -q 'Hermes Agent →' && pass 'dry-run uninstall: Hermes Agent section' || fail 'dry-run uninstall: missing Hermes Agent section'
29
+ grep -q 'Hermes Agent →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: Hermes Agent section' || fail 'dry-run uninstall: missing Hermes Agent section'
29
30
 
30
31
  grep -q "case 'hermes'" "$HELPERS_JS" && pass 'install-helpers: hermes global case' || fail 'install-helpers: missing hermes global case'
31
32
  grep -q "case 'hermes'" "$HELPERS_JS" && pass 'install-helpers: hermes cases present' || fail 'install-helpers: missing hermes cases'
@@ -20,6 +20,9 @@ grep -q -- '--distribute-only' "$SYNC_SH" && pass 'sync-skills.sh: --distribute-
20
20
  || fail 'sync-skills.sh: missing --distribute-only flag'
21
21
  grep -q "sync-skills.sh --distribute-only" "$SETUP_JS" && pass 'setup.js: invokes sync-skills.sh with --distribute-only' \
22
22
  || fail 'setup.js: does not pass --distribute-only'
23
+ grep -q "runInheritedAsync('bash scripts/sync-skills.sh --distribute-only')" "$SETUP_JS" \
24
+ && pass 'setup.js: sync-skills call is async (spinner can animate)' \
25
+ || fail 'setup.js: sync-skills call reverted to blocking runInherited (spinner would freeze)'
23
26
 
24
27
  hash_of() { [[ -f "$1" ]] && shasum -a 256 "$1" | awk '{print $1}' || echo "absent"; }
25
28
  listing_of() { [[ -d "$1" ]] && (find "$1" -maxdepth 1 -type f | sort) || echo "absent"; }
@@ -87,14 +87,20 @@ try {
87
87
  uninstallTool('cursor', ROOT);
88
88
  assert.ok(!fs.existsSync(rulesDst), 'uninstallTool(cursor) must remove rules symlink');
89
89
 
90
- const installSh = fs.readFileSync(path.join(ROOT, 'scripts/install.sh'), 'utf8');
90
+ const installPaths = [
91
+ path.join(ROOT, 'scripts', 'install.sh'),
92
+ ...fs.readdirSync(path.join(ROOT, 'scripts', 'lib'))
93
+ .filter((n) => n.startsWith('install-targets-') && n.endsWith('.sh'))
94
+ .map((n) => path.join(ROOT, 'scripts', 'lib', n)),
95
+ ];
96
+ const installSh = installPaths.map((p) => fs.readFileSync(p, 'utf8')).join('\n');
91
97
  assert.ok(
92
98
  installSh.includes('skills/guard-git/scripts/block-dangerous-git.sh'),
93
- 'install.sh must use skills/guard-git hook path'
99
+ 'install surface must use skills/guard-git hook path'
94
100
  );
95
101
  assert.ok(
96
102
  !/REPO_ROOT\/guard-git\//.test(installSh),
97
- 'install.sh must not reference bare guard-git/ path'
103
+ 'install surface must not reference bare guard-git/ path'
98
104
  );
99
105
 
100
106
  console.log('test-install-helpers: ALL PASS');
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bash
2
+ # story: e67s01
3
+ # scenario: SC-e67s01-P1-02
4
+ # Regression tests for Kilo adapter render + hook templates.
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+
10
+ PASS=0
11
+ FAIL=0
12
+
13
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
14
+ fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); }
15
+
16
+ echo "=== test-kilocode-adapter.sh ==="
17
+
18
+ TMP=$(mktemp -d)
19
+ trap 'rm -rf "$TMP"' EXIT
20
+
21
+ if echo '{"name":"test-skill","description":"test desc","body":"test body"}' \
22
+ | KILOCODE_RULES="$TMP" bash "$REPO_ROOT/scripts/adapters/kilocode.sh" \
23
+ && [[ -f $TMP/test-skill.md ]] \
24
+ && grep -q 'name: test-skill' $TMP/test-skill.md \
25
+ && grep -q 'test body' $TMP/test-skill.md; then
26
+ pass "render_skill emits artifact from stdin SkillIR"
27
+ else
28
+ fail "render_skill emits artifact from stdin SkillIR"
29
+ fi
30
+
31
+ if ! echo '{"name":"../escape","description":"d","body":"b"}' \
32
+ | KILOCODE_RULES="$TMP/bad" bash "$REPO_ROOT/scripts/adapters/kilocode.sh" 2>/dev/null; then
33
+ pass "rejects path traversal in skill name"
34
+ else
35
+ fail "rejects path traversal in skill name"
36
+ fi
37
+
38
+ if [[ -f "$REPO_ROOT/scripts/hooks/kilocode/plugin/guard-git-plugin.ts" ]] \
39
+ && [[ -f "$REPO_ROOT/scripts/hooks/kilocode/hooks-manifest.json" ]] \
40
+ && grep -q 'registerHook' "$REPO_ROOT/scripts/hooks/kilocode/plugin/guard-git-plugin.ts"; then
41
+ pass "plugin hook template present"
42
+ else
43
+ fail "plugin hook template present"
44
+ fi
45
+
46
+ ADAPTER_OUT=$(bash "$REPO_ROOT/scripts/test-adapters.sh" kilocode 2>&1 || true)
47
+ if echo "$ADAPTER_OUT" | grep -q '0 failed'; then
48
+ pass "test-adapters.sh kilocode"
49
+ else
50
+ fail "test-adapters.sh kilocode"
51
+ echo "$ADAPTER_OUT"
52
+ fi
53
+
54
+ echo "test-kilocode-adapter: $PASS passed, $FAIL failed"
55
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # story: e67s02
3
+ # Regression tests for Kilo install hub wiring (Wave B).
4
+ set -euo pipefail
5
+
6
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
+ PASS=0
8
+ FAIL=0
9
+
10
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
11
+ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
12
+
13
+ echo "=== test-kilocode-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
17
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
18
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
19
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
20
+
21
+ install_grep -q 'install_kilocode()' && pass 'install.sh: install_kilocode()' || fail 'install.sh: missing install_kilocode()'
22
+ install_grep -q 'uninstall_kilocode()' && pass 'install.sh: uninstall_kilocode()' || fail 'install.sh: missing uninstall_kilocode()'
23
+ install_grep -q 'KILOCODE_SKILLS_DIR=' && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
24
+ install_grep -q 'install_kilocode' && install_grep -q 'uninstall_kilocode' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing kilocode'
25
+
26
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
27
+ grep -q 'Kilo →' <<< "$DRY_OUT" && pass 'dry-run: Kilo section' || fail 'dry-run: missing Kilo section'
28
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
29
+ grep -q 'Kilo →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: Kilo section' || fail 'dry-run uninstall: missing Kilo section'
30
+
31
+ grep -q "case 'kilo'" "$HELPERS_JS" && pass 'install-helpers: kilo case' || fail 'install-helpers: missing kilo case'
32
+ install_grep -q 'scripts/hooks/kilocode/plugin' && pass 'install.sh: plugin hook template' || fail 'install.sh: missing plugin template'
33
+
34
+ SETUP_SRC="$(cat "$SETUP_JS")"
35
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
36
+ grep -q "'kilo'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: kilo in SUPPORTED_IDS' || fail 'setup.js: kilo not in SUPPORTED_IDS'
37
+
38
+ grep -q 'id: kilocode' "$TARGETS_YAML" && pass 'targets.yaml: kilocode row' || fail 'targets.yaml: missing kilocode row'
39
+ grep -q 'adapter: kilocode' "$TARGETS_YAML" && pass 'targets.yaml: kilocode adapter' || fail 'targets.yaml: missing kilocode adapter'
40
+ grep -q 'kilocode_hooks_manifest' "$TARGETS_YAML" && pass 'targets.yaml: kilocode_hooks_manifest' || fail 'targets.yaml: missing kilocode_hooks_manifest'
41
+ grep -q 'install_kilocode()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_kilocode assertion' || fail 'verify-install: missing install_kilocode assertion'
42
+
43
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
44
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
45
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
46
+
47
+ echo "test-kilocode-hub: $PASS passed, $FAIL failed"
48
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -13,19 +13,20 @@ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
13
13
  echo "=== test-mimo-hub.sh ==="
14
14
 
15
15
  INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
16
17
  HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
17
18
  SETUP_JS="$REPO_ROOT/bin/setup.js"
18
19
  TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
19
20
 
20
- grep -q 'install_mimo()' "$INSTALL_SH" && pass 'install.sh: install_mimo()' || fail 'install.sh: missing install_mimo()'
21
- grep -q 'uninstall_mimo()' "$INSTALL_SH" && pass 'install.sh: uninstall_mimo()' || fail 'install.sh: missing uninstall_mimo()'
22
- grep -q 'MIMO_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: MIMO_SKILLS_DIR' || fail 'install.sh: missing MIMO_SKILLS_DIR'
23
- grep -q 'install_mimo' "$INSTALL_SH" && grep -q 'uninstall_mimo' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing mimo'
21
+ install_grep -q 'install_mimo()' && pass 'install.sh: install_mimo()' || fail 'install.sh: missing install_mimo()'
22
+ install_grep -q 'uninstall_mimo()' && pass 'install.sh: uninstall_mimo()' || fail 'install.sh: missing uninstall_mimo()'
23
+ install_grep -q 'MIMO_SKILLS_DIR=' && pass 'install.sh: MIMO_SKILLS_DIR' || fail 'install.sh: missing MIMO_SKILLS_DIR'
24
+ install_grep -q 'install_mimo' && install_grep -q 'uninstall_mimo' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing mimo'
24
25
 
25
26
  DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
26
- echo "$DRY_OUT" | grep -q 'MiMo Code →' && pass 'dry-run: MiMo Code section' || fail 'dry-run: missing MiMo Code section'
27
+ grep -q 'MiMo Code →' <<< "$DRY_OUT" && pass 'dry-run: MiMo Code section' || fail 'dry-run: missing MiMo Code section'
27
28
  DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
28
- echo "$DRY_UNINSTALL" | grep -q 'MiMo Code →' && pass 'dry-run uninstall: MiMo Code section' || fail 'dry-run uninstall: missing MiMo Code section'
29
+ grep -q 'MiMo Code →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: MiMo Code section' || fail 'dry-run uninstall: missing MiMo Code section'
29
30
 
30
31
  grep -q "case 'mimo'" "$HELPERS_JS" && pass 'install-helpers: mimo global case' || fail 'install-helpers: missing mimo global case'
31
32
  grep -q "case 'mimo'" "$HELPERS_JS" && pass 'install-helpers: mimo cases present' || fail 'install-helpers: missing mimo cases'
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env bash
2
+ # story: e62s01
3
+ # scenario: SC-e62s01-P1-02
4
+ # Regression tests for OpenCode adapter render + hook templates.
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+
10
+ PASS=0
11
+ FAIL=0
12
+
13
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
14
+ fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); }
15
+
16
+ echo "=== test-opencode-adapter.sh ==="
17
+
18
+ TMP=$(mktemp -d)
19
+ trap 'rm -rf "$TMP"' EXIT
20
+
21
+ if echo '{"name":"test-skill","description":"test desc","body":"test body"}' \
22
+ | OPENCODE_SKILLS="$TMP" bash "$REPO_ROOT/scripts/adapters/opencode.sh" \
23
+ && [[ -f $TMP/test-skill/SKILL.md ]] \
24
+ && grep -q 'name: test-skill' $TMP/test-skill/SKILL.md \
25
+ && grep -q 'test body' $TMP/test-skill/SKILL.md; then
26
+ pass "render_skill emits artifact from stdin SkillIR"
27
+ else
28
+ fail "render_skill emits artifact from stdin SkillIR"
29
+ fi
30
+
31
+ if ! echo '{"name":"../escape","description":"d","body":"b"}' \
32
+ | OPENCODE_SKILLS="$TMP/bad" bash "$REPO_ROOT/scripts/adapters/opencode.sh" 2>/dev/null; then
33
+ pass "rejects path traversal in skill name"
34
+ else
35
+ fail "rejects path traversal in skill name"
36
+ fi
37
+
38
+ ADAPTER_OUT=$(bash "$REPO_ROOT/scripts/test-adapters.sh" opencode 2>&1 || true)
39
+ if echo "$ADAPTER_OUT" | grep -q '0 failed'; then
40
+ pass "test-adapters.sh opencode"
41
+ else
42
+ fail "test-adapters.sh opencode"
43
+ echo "$ADAPTER_OUT"
44
+ fi
45
+
46
+ echo "test-opencode-adapter: $PASS passed, $FAIL failed"
47
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ # story: e62s02
3
+ # Regression tests for OpenCode install hub wiring (Wave B).
4
+ set -euo pipefail
5
+
6
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
+ PASS=0
8
+ FAIL=0
9
+
10
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
11
+ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
12
+
13
+ echo "=== test-opencode-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ source "$REPO_ROOT/scripts/lib/install-grep.sh"
17
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
18
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
19
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
20
+
21
+ install_grep -q 'install_opencode()' && pass 'install.sh: install_opencode()' || fail 'install.sh: missing install_opencode()'
22
+ install_grep -q 'uninstall_opencode()' && pass 'install.sh: uninstall_opencode()' || fail 'install.sh: missing uninstall_opencode()'
23
+ install_grep -q 'OPENCODE_SKILLS_DIR=' && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
24
+ install_grep -q 'install_opencode' && install_grep -q 'uninstall_opencode' && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing opencode'
25
+
26
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
27
+ grep -q 'OpenCode →' <<< "$DRY_OUT" && pass 'dry-run: OpenCode section' || fail 'dry-run: missing OpenCode section'
28
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
29
+ grep -q 'OpenCode →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: OpenCode section' || fail 'dry-run uninstall: missing OpenCode section'
30
+
31
+ grep -q "case 'opencode'" "$HELPERS_JS" && pass 'install-helpers: opencode case' || fail 'install-helpers: missing opencode case'
32
+
33
+ SETUP_SRC="$(cat "$SETUP_JS")"
34
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
35
+ grep -q "'opencode'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: opencode in SUPPORTED_IDS' || fail 'setup.js: opencode not in SUPPORTED_IDS'
36
+
37
+
38
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
39
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
40
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
41
+
42
+ echo "test-opencode-hub: $PASS passed, $FAIL failed"
43
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env bash
2
+ # story: e68s01
3
+ # scenario: SC-e68s01-P1-02
4
+ # Regression tests for Qwen Code adapter render + hook templates.
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+
10
+ PASS=0
11
+ FAIL=0
12
+
13
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
14
+ fail() { echo "FAIL: $1"; FAIL=$((FAIL + 1)); }
15
+
16
+ echo "=== test-qwen-adapter.sh ==="
17
+
18
+ TMP=$(mktemp -d)
19
+ trap 'rm -rf "$TMP"' EXIT
20
+
21
+ if echo '{"name":"test-skill","description":"test desc","body":"test body"}' \
22
+ | QWEN_SKILLS="$TMP" bash "$REPO_ROOT/scripts/adapters/qwen.sh" \
23
+ && [[ -f $TMP/test-skill/SKILL.md ]] \
24
+ && grep -q 'name: test-skill' $TMP/test-skill/SKILL.md \
25
+ && grep -q 'test body' $TMP/test-skill/SKILL.md; then
26
+ pass "render_skill emits artifact from stdin SkillIR"
27
+ else
28
+ fail "render_skill emits artifact from stdin SkillIR"
29
+ fi
30
+
31
+ if ! echo '{"name":"../escape","description":"d","body":"b"}' \
32
+ | QWEN_SKILLS="$TMP/bad" bash "$REPO_ROOT/scripts/adapters/qwen.sh" 2>/dev/null; then
33
+ pass "rejects path traversal in skill name"
34
+ else
35
+ fail "rejects path traversal in skill name"
36
+ fi
37
+
38
+ if [[ -f "$REPO_ROOT/scripts/hooks/qwen/pre-tool-git-guard.sh" ]] \
39
+ && [[ -f "$REPO_ROOT/scripts/hooks/qwen/hooks-manifest.json" ]] \
40
+ && [[ -f "$REPO_ROOT/scripts/hooks/qwen/settings.example.json" ]]; then
41
+ pass "hook template bundle present"
42
+ else
43
+ fail "hook template bundle present"
44
+ fi
45
+
46
+ BLOCK_OUT=$(echo '{"tool_input":{"command":"git push --force origin main"}}' \
47
+ | bash "$REPO_ROOT/scripts/hooks/qwen/pre-tool-git-guard.sh")
48
+ if echo "$BLOCK_OUT" | grep -q 'block'; then
49
+ pass "pre-tool guard blocks dangerous command"
50
+ else
51
+ fail "pre-tool guard blocks dangerous command"
52
+ fi
53
+
54
+ ADAPTER_OUT=$(bash "$REPO_ROOT/scripts/test-adapters.sh" qwen 2>&1 || true)
55
+ if echo "$ADAPTER_OUT" | grep -q '0 failed'; then
56
+ pass "test-adapters.sh qwen"
57
+ else
58
+ fail "test-adapters.sh qwen"
59
+ echo "$ADAPTER_OUT"
60
+ fi
61
+
62
+ echo "test-qwen-adapter: $PASS passed, $FAIL failed"
63
+ [[ "$FAIL" -eq 0 ]] || exit 1