bigpowers 2.82.3 → 2.83.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 (355) hide show
  1. package/.agents/skills/align-grid/SKILL.md +110 -0
  2. package/.agents/skills/assess-impact/SKILL.md +91 -0
  3. package/.agents/skills/audit-code/SKILL.md +187 -0
  4. package/.agents/skills/audit-plan/SKILL.md +89 -0
  5. package/.agents/skills/build-epic/SKILL.md +105 -0
  6. package/.agents/skills/change-request/SKILL.md +121 -0
  7. package/.agents/skills/commit-message/SKILL.md +140 -0
  8. package/.agents/skills/compose-workflow/SKILL.md +82 -0
  9. package/.agents/skills/context7-mcp/SKILL.md +55 -0
  10. package/.agents/skills/craft-skill/SKILL.md +179 -0
  11. package/.agents/skills/deepen-architecture/SKILL.md +260 -0
  12. package/.agents/skills/define-language/SKILL.md +80 -0
  13. package/.agents/skills/define-success/SKILL.md +65 -0
  14. package/.agents/skills/delegate-task/SKILL.md +91 -0
  15. package/.agents/skills/deploy/SKILL.md +198 -0
  16. package/.agents/skills/design-interface/SKILL.md +97 -0
  17. package/.agents/skills/develop-tdd/SKILL.md +406 -0
  18. package/.agents/skills/diagnose-root/SKILL.md +24 -0
  19. package/.agents/skills/diagnose-stall/SKILL.md +54 -0
  20. package/.agents/skills/dispatch-agents/SKILL.md +118 -0
  21. package/.agents/skills/edit-document/SKILL.md +23 -0
  22. package/.agents/skills/elaborate-spec/SKILL.md +101 -0
  23. package/.agents/skills/enforce-first/SKILL.md +32 -0
  24. package/.agents/skills/evolve-skill/SKILL.md +55 -0
  25. package/.agents/skills/execute-plan/SKILL.md +61 -0
  26. package/.agents/skills/extract-design/SKILL.md +132 -0
  27. package/.agents/skills/find-way/SKILL.md +191 -0
  28. package/.agents/skills/fix-bug/SKILL.md +67 -0
  29. package/.agents/skills/gate-trace/SKILL.md +88 -0
  30. package/.agents/skills/generate-allure-report/SKILL.md +285 -0
  31. package/.agents/skills/grill-me/SKILL.md +96 -0
  32. package/.agents/skills/grill-with-docs/SKILL.md +41 -0
  33. package/.agents/skills/guard-git/SKILL.md +231 -0
  34. package/.agents/skills/harden-vps/SKILL.md +288 -0
  35. package/.agents/skills/hook-commits/SKILL.md +94 -0
  36. package/.agents/skills/inspect-quality/SKILL.md +106 -0
  37. package/.agents/skills/investigate-bug/SKILL.md +127 -0
  38. package/.agents/skills/kickoff-branch/SKILL.md +143 -0
  39. package/.agents/skills/maintain-wiki/SKILL.md +64 -0
  40. package/.agents/skills/map-codebase/SKILL.md +71 -0
  41. package/.agents/skills/migrate-spec/SKILL.md +862 -0
  42. package/.agents/skills/model-domain/SKILL.md +232 -0
  43. package/.agents/skills/orchestrate-project/SKILL.md +174 -0
  44. package/.agents/skills/organize-workspace/SKILL.md +164 -0
  45. package/.agents/skills/plan-refactor/SKILL.md +87 -0
  46. package/.agents/skills/plan-release/SKILL.md +145 -0
  47. package/.agents/skills/plan-tests/SKILL.md +75 -0
  48. package/.agents/skills/plan-work/SKILL.md +260 -0
  49. package/.agents/skills/publish-package/SKILL.md +328 -0
  50. package/.agents/skills/quick-fix/SKILL.md +114 -0
  51. package/.agents/skills/release-branch/SKILL.md +298 -0
  52. package/.agents/skills/request-review/SKILL.md +112 -0
  53. package/.agents/skills/research-first/SKILL.md +87 -0
  54. package/.agents/skills/reset-baseline/SKILL.md +21 -0
  55. package/.agents/skills/respond-review/SKILL.md +71 -0
  56. package/.agents/skills/run-benchmark/SKILL.md +85 -0
  57. package/.agents/skills/run-evals/SKILL.md +80 -0
  58. package/.agents/skills/run-planning/SKILL.md +101 -0
  59. package/.agents/skills/scope-work/SKILL.md +63 -0
  60. package/.agents/skills/search-skills/SKILL.md +73 -0
  61. package/.agents/skills/security-review/SKILL.md +384 -0
  62. package/.agents/skills/seed-conventions/SKILL.md +285 -0
  63. package/.agents/skills/session-state/SKILL.md +146 -0
  64. package/.agents/skills/setup-environment/SKILL.md +39 -0
  65. package/.agents/skills/simulate-agents/SKILL.md +26 -0
  66. package/.agents/skills/slice-tasks/SKILL.md +68 -0
  67. package/.agents/skills/smoke-test/SKILL.md +242 -0
  68. package/.agents/skills/spike-prototype/SKILL.md +95 -0
  69. package/.agents/skills/stocktake-skills/SKILL.md +72 -0
  70. package/.agents/skills/survey-context/SKILL.md +135 -0
  71. package/.agents/skills/terse-mode/SKILL.md +42 -0
  72. package/.agents/skills/trace-requirement/SKILL.md +69 -0
  73. package/.agents/skills/using-bigpowers/SKILL.md +111 -0
  74. package/.agents/skills/validate-contracts/SKILL.md +309 -0
  75. package/.agents/skills/validate-fix/SKILL.md +106 -0
  76. package/.agents/skills/verify-work/SKILL.md +191 -0
  77. package/.agents/skills/visual-dashboard/SKILL.md +50 -0
  78. package/.agents/skills/wire-ci/SKILL.md +375 -0
  79. package/.agents/skills/wire-observability/SKILL.md +97 -0
  80. package/.agents/skills/write-document/SKILL.md +255 -0
  81. package/.hermes/skills/align-grid/SKILL.md +110 -0
  82. package/.hermes/skills/assess-impact/SKILL.md +91 -0
  83. package/.hermes/skills/audit-code/SKILL.md +187 -0
  84. package/.hermes/skills/audit-plan/SKILL.md +89 -0
  85. package/.hermes/skills/build-epic/SKILL.md +105 -0
  86. package/.hermes/skills/change-request/SKILL.md +121 -0
  87. package/.hermes/skills/commit-message/SKILL.md +140 -0
  88. package/.hermes/skills/compose-workflow/SKILL.md +82 -0
  89. package/.hermes/skills/context7-mcp/SKILL.md +55 -0
  90. package/.hermes/skills/craft-skill/SKILL.md +179 -0
  91. package/.hermes/skills/deepen-architecture/SKILL.md +260 -0
  92. package/.hermes/skills/define-language/SKILL.md +80 -0
  93. package/.hermes/skills/define-success/SKILL.md +65 -0
  94. package/.hermes/skills/delegate-task/SKILL.md +91 -0
  95. package/.hermes/skills/deploy/SKILL.md +198 -0
  96. package/.hermes/skills/design-interface/SKILL.md +97 -0
  97. package/.hermes/skills/develop-tdd/SKILL.md +406 -0
  98. package/.hermes/skills/diagnose-root/SKILL.md +24 -0
  99. package/.hermes/skills/diagnose-stall/SKILL.md +54 -0
  100. package/.hermes/skills/dispatch-agents/SKILL.md +118 -0
  101. package/.hermes/skills/edit-document/SKILL.md +23 -0
  102. package/.hermes/skills/elaborate-spec/SKILL.md +101 -0
  103. package/.hermes/skills/enforce-first/SKILL.md +32 -0
  104. package/.hermes/skills/evolve-skill/SKILL.md +55 -0
  105. package/.hermes/skills/execute-plan/SKILL.md +61 -0
  106. package/.hermes/skills/extract-design/SKILL.md +132 -0
  107. package/.hermes/skills/find-way/SKILL.md +191 -0
  108. package/.hermes/skills/fix-bug/SKILL.md +67 -0
  109. package/.hermes/skills/gate-trace/SKILL.md +88 -0
  110. package/.hermes/skills/generate-allure-report/SKILL.md +285 -0
  111. package/.hermes/skills/grill-me/SKILL.md +96 -0
  112. package/.hermes/skills/grill-with-docs/SKILL.md +41 -0
  113. package/.hermes/skills/guard-git/SKILL.md +231 -0
  114. package/.hermes/skills/harden-vps/SKILL.md +288 -0
  115. package/.hermes/skills/hook-commits/SKILL.md +94 -0
  116. package/.hermes/skills/inspect-quality/SKILL.md +106 -0
  117. package/.hermes/skills/investigate-bug/SKILL.md +127 -0
  118. package/.hermes/skills/kickoff-branch/SKILL.md +143 -0
  119. package/.hermes/skills/maintain-wiki/SKILL.md +64 -0
  120. package/.hermes/skills/map-codebase/SKILL.md +71 -0
  121. package/.hermes/skills/migrate-spec/SKILL.md +862 -0
  122. package/.hermes/skills/model-domain/SKILL.md +232 -0
  123. package/.hermes/skills/orchestrate-project/SKILL.md +174 -0
  124. package/.hermes/skills/organize-workspace/SKILL.md +164 -0
  125. package/.hermes/skills/plan-refactor/SKILL.md +87 -0
  126. package/.hermes/skills/plan-release/SKILL.md +145 -0
  127. package/.hermes/skills/plan-tests/SKILL.md +75 -0
  128. package/.hermes/skills/plan-work/SKILL.md +260 -0
  129. package/.hermes/skills/publish-package/SKILL.md +328 -0
  130. package/.hermes/skills/quick-fix/SKILL.md +114 -0
  131. package/.hermes/skills/release-branch/SKILL.md +298 -0
  132. package/.hermes/skills/request-review/SKILL.md +112 -0
  133. package/.hermes/skills/research-first/SKILL.md +87 -0
  134. package/.hermes/skills/reset-baseline/SKILL.md +21 -0
  135. package/.hermes/skills/respond-review/SKILL.md +71 -0
  136. package/.hermes/skills/run-benchmark/SKILL.md +85 -0
  137. package/.hermes/skills/run-evals/SKILL.md +80 -0
  138. package/.hermes/skills/run-planning/SKILL.md +101 -0
  139. package/.hermes/skills/scope-work/SKILL.md +63 -0
  140. package/.hermes/skills/search-skills/SKILL.md +73 -0
  141. package/.hermes/skills/security-review/SKILL.md +384 -0
  142. package/.hermes/skills/seed-conventions/SKILL.md +285 -0
  143. package/.hermes/skills/session-state/SKILL.md +146 -0
  144. package/.hermes/skills/setup-environment/SKILL.md +39 -0
  145. package/.hermes/skills/simulate-agents/SKILL.md +26 -0
  146. package/.hermes/skills/slice-tasks/SKILL.md +68 -0
  147. package/.hermes/skills/smoke-test/SKILL.md +242 -0
  148. package/.hermes/skills/spike-prototype/SKILL.md +95 -0
  149. package/.hermes/skills/stocktake-skills/SKILL.md +72 -0
  150. package/.hermes/skills/survey-context/SKILL.md +135 -0
  151. package/.hermes/skills/terse-mode/SKILL.md +42 -0
  152. package/.hermes/skills/trace-requirement/SKILL.md +69 -0
  153. package/.hermes/skills/using-bigpowers/SKILL.md +111 -0
  154. package/.hermes/skills/validate-contracts/SKILL.md +309 -0
  155. package/.hermes/skills/validate-fix/SKILL.md +106 -0
  156. package/.hermes/skills/verify-work/SKILL.md +191 -0
  157. package/.hermes/skills/visual-dashboard/SKILL.md +50 -0
  158. package/.hermes/skills/wire-ci/SKILL.md +375 -0
  159. package/.hermes/skills/wire-observability/SKILL.md +97 -0
  160. package/.hermes/skills/write-document/SKILL.md +255 -0
  161. package/.mimocode/skills/align-grid/SKILL.md +110 -0
  162. package/.mimocode/skills/assess-impact/SKILL.md +91 -0
  163. package/.mimocode/skills/audit-code/SKILL.md +187 -0
  164. package/.mimocode/skills/audit-plan/SKILL.md +89 -0
  165. package/.mimocode/skills/build-epic/SKILL.md +105 -0
  166. package/.mimocode/skills/change-request/SKILL.md +121 -0
  167. package/.mimocode/skills/commit-message/SKILL.md +140 -0
  168. package/.mimocode/skills/compose-workflow/SKILL.md +82 -0
  169. package/.mimocode/skills/context7-mcp/SKILL.md +55 -0
  170. package/.mimocode/skills/craft-skill/SKILL.md +179 -0
  171. package/.mimocode/skills/deepen-architecture/SKILL.md +260 -0
  172. package/.mimocode/skills/define-language/SKILL.md +80 -0
  173. package/.mimocode/skills/define-success/SKILL.md +65 -0
  174. package/.mimocode/skills/delegate-task/SKILL.md +91 -0
  175. package/.mimocode/skills/deploy/SKILL.md +198 -0
  176. package/.mimocode/skills/design-interface/SKILL.md +97 -0
  177. package/.mimocode/skills/develop-tdd/SKILL.md +406 -0
  178. package/.mimocode/skills/diagnose-root/SKILL.md +24 -0
  179. package/.mimocode/skills/diagnose-stall/SKILL.md +54 -0
  180. package/.mimocode/skills/dispatch-agents/SKILL.md +118 -0
  181. package/.mimocode/skills/edit-document/SKILL.md +23 -0
  182. package/.mimocode/skills/elaborate-spec/SKILL.md +101 -0
  183. package/.mimocode/skills/enforce-first/SKILL.md +32 -0
  184. package/.mimocode/skills/evolve-skill/SKILL.md +55 -0
  185. package/.mimocode/skills/execute-plan/SKILL.md +61 -0
  186. package/.mimocode/skills/extract-design/SKILL.md +132 -0
  187. package/.mimocode/skills/find-way/SKILL.md +191 -0
  188. package/.mimocode/skills/fix-bug/SKILL.md +67 -0
  189. package/.mimocode/skills/gate-trace/SKILL.md +88 -0
  190. package/.mimocode/skills/generate-allure-report/SKILL.md +285 -0
  191. package/.mimocode/skills/grill-me/SKILL.md +96 -0
  192. package/.mimocode/skills/grill-with-docs/SKILL.md +41 -0
  193. package/.mimocode/skills/guard-git/SKILL.md +231 -0
  194. package/.mimocode/skills/harden-vps/SKILL.md +288 -0
  195. package/.mimocode/skills/hook-commits/SKILL.md +94 -0
  196. package/.mimocode/skills/inspect-quality/SKILL.md +106 -0
  197. package/.mimocode/skills/investigate-bug/SKILL.md +127 -0
  198. package/.mimocode/skills/kickoff-branch/SKILL.md +143 -0
  199. package/.mimocode/skills/maintain-wiki/SKILL.md +64 -0
  200. package/.mimocode/skills/map-codebase/SKILL.md +71 -0
  201. package/.mimocode/skills/migrate-spec/SKILL.md +862 -0
  202. package/.mimocode/skills/model-domain/SKILL.md +232 -0
  203. package/.mimocode/skills/orchestrate-project/SKILL.md +174 -0
  204. package/.mimocode/skills/organize-workspace/SKILL.md +164 -0
  205. package/.mimocode/skills/plan-refactor/SKILL.md +87 -0
  206. package/.mimocode/skills/plan-release/SKILL.md +145 -0
  207. package/.mimocode/skills/plan-tests/SKILL.md +75 -0
  208. package/.mimocode/skills/plan-work/SKILL.md +260 -0
  209. package/.mimocode/skills/publish-package/SKILL.md +328 -0
  210. package/.mimocode/skills/quick-fix/SKILL.md +114 -0
  211. package/.mimocode/skills/release-branch/SKILL.md +298 -0
  212. package/.mimocode/skills/request-review/SKILL.md +112 -0
  213. package/.mimocode/skills/research-first/SKILL.md +87 -0
  214. package/.mimocode/skills/reset-baseline/SKILL.md +21 -0
  215. package/.mimocode/skills/respond-review/SKILL.md +71 -0
  216. package/.mimocode/skills/run-benchmark/SKILL.md +85 -0
  217. package/.mimocode/skills/run-evals/SKILL.md +80 -0
  218. package/.mimocode/skills/run-planning/SKILL.md +101 -0
  219. package/.mimocode/skills/scope-work/SKILL.md +63 -0
  220. package/.mimocode/skills/search-skills/SKILL.md +73 -0
  221. package/.mimocode/skills/security-review/SKILL.md +384 -0
  222. package/.mimocode/skills/seed-conventions/SKILL.md +285 -0
  223. package/.mimocode/skills/session-state/SKILL.md +146 -0
  224. package/.mimocode/skills/setup-environment/SKILL.md +39 -0
  225. package/.mimocode/skills/simulate-agents/SKILL.md +26 -0
  226. package/.mimocode/skills/slice-tasks/SKILL.md +68 -0
  227. package/.mimocode/skills/smoke-test/SKILL.md +242 -0
  228. package/.mimocode/skills/spike-prototype/SKILL.md +95 -0
  229. package/.mimocode/skills/stocktake-skills/SKILL.md +72 -0
  230. package/.mimocode/skills/survey-context/SKILL.md +135 -0
  231. package/.mimocode/skills/terse-mode/SKILL.md +42 -0
  232. package/.mimocode/skills/trace-requirement/SKILL.md +69 -0
  233. package/.mimocode/skills/using-bigpowers/SKILL.md +111 -0
  234. package/.mimocode/skills/validate-contracts/SKILL.md +309 -0
  235. package/.mimocode/skills/validate-fix/SKILL.md +106 -0
  236. package/.mimocode/skills/verify-work/SKILL.md +191 -0
  237. package/.mimocode/skills/visual-dashboard/SKILL.md +50 -0
  238. package/.mimocode/skills/wire-ci/SKILL.md +375 -0
  239. package/.mimocode/skills/wire-observability/SKILL.md +97 -0
  240. package/.mimocode/skills/write-document/SKILL.md +255 -0
  241. package/.pi/package.json +1 -1
  242. package/.zcode/skills/align-grid/SKILL.md +110 -0
  243. package/.zcode/skills/assess-impact/SKILL.md +91 -0
  244. package/.zcode/skills/audit-code/SKILL.md +187 -0
  245. package/.zcode/skills/audit-plan/SKILL.md +89 -0
  246. package/.zcode/skills/build-epic/SKILL.md +105 -0
  247. package/.zcode/skills/change-request/SKILL.md +121 -0
  248. package/.zcode/skills/commit-message/SKILL.md +140 -0
  249. package/.zcode/skills/compose-workflow/SKILL.md +82 -0
  250. package/.zcode/skills/context7-mcp/SKILL.md +55 -0
  251. package/.zcode/skills/craft-skill/SKILL.md +179 -0
  252. package/.zcode/skills/deepen-architecture/SKILL.md +260 -0
  253. package/.zcode/skills/define-language/SKILL.md +80 -0
  254. package/.zcode/skills/define-success/SKILL.md +65 -0
  255. package/.zcode/skills/delegate-task/SKILL.md +91 -0
  256. package/.zcode/skills/deploy/SKILL.md +198 -0
  257. package/.zcode/skills/design-interface/SKILL.md +97 -0
  258. package/.zcode/skills/develop-tdd/SKILL.md +406 -0
  259. package/.zcode/skills/diagnose-root/SKILL.md +24 -0
  260. package/.zcode/skills/diagnose-stall/SKILL.md +54 -0
  261. package/.zcode/skills/dispatch-agents/SKILL.md +118 -0
  262. package/.zcode/skills/edit-document/SKILL.md +23 -0
  263. package/.zcode/skills/elaborate-spec/SKILL.md +101 -0
  264. package/.zcode/skills/enforce-first/SKILL.md +32 -0
  265. package/.zcode/skills/evolve-skill/SKILL.md +55 -0
  266. package/.zcode/skills/execute-plan/SKILL.md +61 -0
  267. package/.zcode/skills/extract-design/SKILL.md +132 -0
  268. package/.zcode/skills/find-way/SKILL.md +191 -0
  269. package/.zcode/skills/fix-bug/SKILL.md +67 -0
  270. package/.zcode/skills/gate-trace/SKILL.md +88 -0
  271. package/.zcode/skills/generate-allure-report/SKILL.md +285 -0
  272. package/.zcode/skills/grill-me/SKILL.md +96 -0
  273. package/.zcode/skills/grill-with-docs/SKILL.md +41 -0
  274. package/.zcode/skills/guard-git/SKILL.md +231 -0
  275. package/.zcode/skills/harden-vps/SKILL.md +288 -0
  276. package/.zcode/skills/hook-commits/SKILL.md +94 -0
  277. package/.zcode/skills/inspect-quality/SKILL.md +106 -0
  278. package/.zcode/skills/investigate-bug/SKILL.md +127 -0
  279. package/.zcode/skills/kickoff-branch/SKILL.md +143 -0
  280. package/.zcode/skills/maintain-wiki/SKILL.md +64 -0
  281. package/.zcode/skills/map-codebase/SKILL.md +71 -0
  282. package/.zcode/skills/migrate-spec/SKILL.md +862 -0
  283. package/.zcode/skills/model-domain/SKILL.md +232 -0
  284. package/.zcode/skills/orchestrate-project/SKILL.md +174 -0
  285. package/.zcode/skills/organize-workspace/SKILL.md +164 -0
  286. package/.zcode/skills/plan-refactor/SKILL.md +87 -0
  287. package/.zcode/skills/plan-release/SKILL.md +145 -0
  288. package/.zcode/skills/plan-tests/SKILL.md +75 -0
  289. package/.zcode/skills/plan-work/SKILL.md +260 -0
  290. package/.zcode/skills/publish-package/SKILL.md +328 -0
  291. package/.zcode/skills/quick-fix/SKILL.md +114 -0
  292. package/.zcode/skills/release-branch/SKILL.md +298 -0
  293. package/.zcode/skills/request-review/SKILL.md +112 -0
  294. package/.zcode/skills/research-first/SKILL.md +87 -0
  295. package/.zcode/skills/reset-baseline/SKILL.md +21 -0
  296. package/.zcode/skills/respond-review/SKILL.md +71 -0
  297. package/.zcode/skills/run-benchmark/SKILL.md +85 -0
  298. package/.zcode/skills/run-evals/SKILL.md +80 -0
  299. package/.zcode/skills/run-planning/SKILL.md +101 -0
  300. package/.zcode/skills/scope-work/SKILL.md +63 -0
  301. package/.zcode/skills/search-skills/SKILL.md +73 -0
  302. package/.zcode/skills/security-review/SKILL.md +384 -0
  303. package/.zcode/skills/seed-conventions/SKILL.md +285 -0
  304. package/.zcode/skills/session-state/SKILL.md +146 -0
  305. package/.zcode/skills/setup-environment/SKILL.md +39 -0
  306. package/.zcode/skills/simulate-agents/SKILL.md +26 -0
  307. package/.zcode/skills/slice-tasks/SKILL.md +68 -0
  308. package/.zcode/skills/smoke-test/SKILL.md +242 -0
  309. package/.zcode/skills/spike-prototype/SKILL.md +95 -0
  310. package/.zcode/skills/stocktake-skills/SKILL.md +72 -0
  311. package/.zcode/skills/survey-context/SKILL.md +135 -0
  312. package/.zcode/skills/terse-mode/SKILL.md +42 -0
  313. package/.zcode/skills/trace-requirement/SKILL.md +69 -0
  314. package/.zcode/skills/using-bigpowers/SKILL.md +111 -0
  315. package/.zcode/skills/validate-contracts/SKILL.md +309 -0
  316. package/.zcode/skills/validate-fix/SKILL.md +106 -0
  317. package/.zcode/skills/verify-work/SKILL.md +191 -0
  318. package/.zcode/skills/visual-dashboard/SKILL.md +50 -0
  319. package/.zcode/skills/wire-ci/SKILL.md +375 -0
  320. package/.zcode/skills/wire-observability/SKILL.md +97 -0
  321. package/.zcode/skills/write-document/SKILL.md +255 -0
  322. package/CHANGELOG.md +27 -0
  323. package/bin/setup.js +13 -4
  324. package/package.json +1 -1
  325. package/scripts/adapters/agy.sh +44 -1
  326. package/scripts/adapters/gemini.sh +83 -0
  327. package/scripts/adapters/hermes.sh +53 -1
  328. package/scripts/adapters/mimo.sh +41 -0
  329. package/scripts/adapters/zcode.sh +37 -0
  330. package/scripts/hooks/hermes/gateway/session-log/HOOK.yaml +5 -0
  331. package/scripts/hooks/hermes/gateway/session-log/handler.py +7 -0
  332. package/scripts/hooks/hermes/plugin/guard-git-plugin.py +14 -0
  333. package/scripts/hooks/hermes/shell/block-dangerous-terminal.sh +23 -0
  334. package/scripts/hooks/hermes/shell/hooks-config.example.yaml +7 -0
  335. package/scripts/install-cursor-skills-local.sh +8 -6
  336. package/scripts/install-cursor-skills.sh +15 -25
  337. package/scripts/install.sh +211 -13
  338. package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
  339. package/scripts/lib/golden-suite-gates.sh +2 -1
  340. package/scripts/lib/install-helpers.js +199 -4
  341. package/scripts/lib/sync-render.sh +43 -0
  342. package/scripts/lib/target-contracts.sh +22 -0
  343. package/scripts/lib/trace-matrix.py +1 -1
  344. package/scripts/lib/trace-stories.py +1 -1
  345. package/scripts/targets.yaml +31 -1
  346. package/scripts/test-agy-hub.sh +59 -0
  347. package/scripts/test-gemini-adapter.sh +70 -0
  348. package/scripts/test-gemini-hub.sh +55 -0
  349. package/scripts/test-hermes-adapter.sh +85 -0
  350. package/scripts/test-hermes-hub.sh +51 -0
  351. package/scripts/test-install-helpers.js +103 -0
  352. package/scripts/test-install-helpers.sh +7 -0
  353. package/scripts/test-mimo-hub.sh +51 -0
  354. package/scripts/test-zcode-hub.sh +51 -0
  355. package/scripts/verify-install.sh +31 -0
@@ -1,5 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  // story: e60s01
3
+ // story: e61s02
4
+ // story: e64s02
5
+ // story: e76s02
6
+ // story: e69s02
7
+ // story: e74s02
3
8
  // install-helpers.js — symlink helpers for bigpowers setup
4
9
 
5
10
  const fs = require('fs');
@@ -23,6 +28,11 @@ function linkSkills(skillsDir, targetDir) {
23
28
  }
24
29
 
25
30
  function linkDir(src, dst) {
31
+ if (!fs.existsSync(src)) {
32
+ throw new Error(
33
+ `Link source missing: ${src} (run bash scripts/sync-skills.sh first)`
34
+ );
35
+ }
26
36
  try {
27
37
  const stat = fs.lstatSync(dst);
28
38
  if (stat.isSymbolicLink()) fs.unlinkSync(dst);
@@ -38,8 +48,31 @@ function linkFile(src, dst) {
38
48
  fs.symlinkSync(src, dst);
39
49
  }
40
50
 
51
+ function linkRenderedSkills(renderedDir, targetDir) {
52
+ if (!fs.existsSync(renderedDir)) return;
53
+ fs.mkdirSync(targetDir, { recursive: true });
54
+ for (const entry of fs.readdirSync(renderedDir, { withFileTypes: true })) {
55
+ if (!entry.isDirectory()) continue;
56
+ if (!fs.existsSync(path.join(renderedDir, entry.name, 'SKILL.md'))) continue;
57
+ linkDir(path.join(renderedDir, entry.name), path.join(targetDir, entry.name));
58
+ }
59
+ }
60
+
61
+ function bridgeHermesConfig(configPath) {
62
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
63
+ if (fs.existsSync(configPath)) {
64
+ const existing = fs.readFileSync(configPath, 'utf8');
65
+ if (/^instructions:/m.test(existing)) return;
66
+ }
67
+ fs.writeFileSync(configPath, 'instructions: AGENTS.md\n');
68
+ }
69
+
41
70
  function linkHook(src, dst) {
42
- if (!fs.existsSync(src)) return;
71
+ if (!fs.existsSync(src)) {
72
+ throw new Error(
73
+ `Hook source missing: ${src} (expected under repo skills/ or scripts/hooks/; fix path or restore file)`
74
+ );
75
+ }
43
76
  try {
44
77
  const stat = fs.lstatSync(dst);
45
78
  if (stat.isSymbolicLink()) fs.unlinkSync(dst);
@@ -63,9 +96,14 @@ function installGlobal(tool, repoRoot) {
63
96
  const hooksDir = path.join(homeDir, '.claude', 'hooks');
64
97
  fs.mkdirSync(hooksDir, { recursive: true });
65
98
  linkHook(
66
- path.join(repoRoot, 'guard-git', 'scripts', 'block-dangerous-git.sh'),
99
+ path.join(repoRoot, 'skills', 'guard-git', 'scripts', 'block-dangerous-git.sh'),
67
100
  path.join(hooksDir, 'block-dangerous-git.sh')
68
101
  );
102
+ // story: e63 — hook sources SCRIPT_DIR/lib/git-guardrails-core.sh
103
+ linkDir(
104
+ path.join(repoRoot, 'skills', 'guard-git', 'scripts', 'lib'),
105
+ path.join(hooksDir, 'lib')
106
+ );
69
107
  linkHook(
70
108
  path.join(repoRoot, 'scripts', 'hooks', 'rtk-rewrite.sh'),
71
109
  path.join(hooksDir, 'rtk-rewrite.sh')
@@ -77,6 +115,18 @@ function installGlobal(tool, repoRoot) {
77
115
  const extDst = path.join(homeDir, '.gemini', 'config', 'plugins', 'bigpowers');
78
116
  fs.mkdirSync(path.dirname(extDst), { recursive: true });
79
117
  linkDir(extSrc, extDst);
118
+ const hooksSrc = path.join(extSrc, 'hooks');
119
+ const hooksDst = path.join(homeDir, '.gemini', 'hooks');
120
+ fs.mkdirSync(hooksDst, { recursive: true });
121
+ for (const hookFile of [
122
+ 'session-start',
123
+ 'run-hook.cmd',
124
+ 'before-tool-git-guard.sh',
125
+ 'before-tool-rtk.sh',
126
+ 'before-tool-token-mgmt.sh',
127
+ ]) {
128
+ linkHook(path.join(hooksSrc, hookFile), path.join(hooksDst, hookFile));
129
+ }
80
130
  break;
81
131
  }
82
132
  case 'pi': {
@@ -85,6 +135,46 @@ function installGlobal(tool, repoRoot) {
85
135
  linkSkills(skillsDir, targetDir);
86
136
  break;
87
137
  }
138
+ case 'hermes': {
139
+ const renderedDir = path.join(repoRoot, '.hermes', 'skills');
140
+ const targetDir = path.join(homeDir, '.hermes', 'skills');
141
+ linkRenderedSkills(renderedDir, targetDir);
142
+ bridgeHermesConfig(path.join(homeDir, '.hermes', 'config.yaml'));
143
+ const hookSrc = path.join(repoRoot, 'scripts', 'hooks', 'hermes', 'gateway', 'session-log');
144
+ const hookDst = path.join(homeDir, '.hermes', 'hooks', 'session-log');
145
+ if (fs.existsSync(hookSrc)) {
146
+ fs.mkdirSync(path.dirname(hookDst), { recursive: true });
147
+ linkDir(hookSrc, hookDst);
148
+ }
149
+ break;
150
+ }
151
+ case 'zcode': {
152
+ const renderedDir = path.join(repoRoot, '.zcode', 'skills');
153
+ const targetDir = path.join(homeDir, '.zcode', 'skills');
154
+ linkRenderedSkills(renderedDir, targetDir);
155
+ const agentsSrc = path.join(repoRoot, 'AGENTS.md');
156
+ const agentsDst = path.join(homeDir, '.zcode', 'AGENTS.md');
157
+ fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
158
+ linkFile(agentsSrc, agentsDst);
159
+ break;
160
+ }
161
+ case 'mimo': {
162
+ const renderedDir = path.join(repoRoot, '.mimocode', 'skills');
163
+ const targetDir = path.join(homeDir, '.mimocode', 'skills');
164
+ linkRenderedSkills(renderedDir, targetDir);
165
+ const agentsSrc = path.join(repoRoot, 'AGENTS.md');
166
+ const agentsDst = path.join(homeDir, '.mimocode', 'AGENTS.md');
167
+ fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
168
+ linkFile(agentsSrc, agentsDst);
169
+ break;
170
+ }
171
+ case 'antigravity':
172
+ case 'agy': {
173
+ const renderedDir = path.join(repoRoot, '.agents', 'skills');
174
+ const targetDir = path.join(homeDir, '.gemini', 'antigravity-cli', 'skills');
175
+ linkRenderedSkills(renderedDir, targetDir);
176
+ break;
177
+ }
88
178
  case 'cursor': {
89
179
  const rulesSrc = path.join(repoRoot, '.cursor', 'rules');
90
180
  const rulesDst = path.join(homeDir, '.cursor', 'rules');
@@ -126,6 +216,45 @@ function installLocal(tool, repoRoot) {
126
216
  linkSkills(skillsDir, targetDir);
127
217
  break;
128
218
  }
219
+ case 'hermes': {
220
+ const renderedDir = path.join(repoRoot, '.hermes', 'skills');
221
+ const targetDir = path.join(cwd, '.hermes', 'skills');
222
+ linkRenderedSkills(renderedDir, targetDir);
223
+ bridgeHermesConfig(path.join(cwd, '.hermes', 'config.yaml'));
224
+ break;
225
+ }
226
+ case 'zcode': {
227
+ const renderedDir = path.join(repoRoot, '.zcode', 'skills');
228
+ const targetDir = path.join(cwd, '.zcode', 'skills');
229
+ linkRenderedSkills(renderedDir, targetDir);
230
+ const agentsSrc = path.join(repoRoot, 'AGENTS.md');
231
+ const agentsDst = path.join(cwd, '.zcode', 'AGENTS.md');
232
+ fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
233
+ linkFile(agentsSrc, agentsDst);
234
+ break;
235
+ }
236
+ case 'mimo': {
237
+ const renderedDir = path.join(repoRoot, '.mimocode', 'skills');
238
+ const targetDir = path.join(cwd, '.mimocode', 'skills');
239
+ linkRenderedSkills(renderedDir, targetDir);
240
+ const agentsSrc = path.join(repoRoot, 'AGENTS.md');
241
+ const agentsDst = path.join(cwd, '.mimocode', 'AGENTS.md');
242
+ fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
243
+ linkFile(agentsSrc, agentsDst);
244
+ break;
245
+ }
246
+ case 'antigravity':
247
+ case 'agy': {
248
+ const renderedDir = path.join(repoRoot, '.agents', 'skills');
249
+ const targetDir = path.join(cwd, '.agents', 'skills');
250
+ linkRenderedSkills(renderedDir, targetDir);
251
+ const agentsSrc = path.join(repoRoot, 'AGENTS.md');
252
+ const agentsDst = path.join(cwd, 'AGENTS.md');
253
+ if (!fs.existsSync(agentsDst)) {
254
+ linkFile(agentsSrc, agentsDst);
255
+ }
256
+ break;
257
+ }
129
258
  case 'cursor': {
130
259
  const rulesSrc = path.join(repoRoot, '.cursor', 'rules');
131
260
  const rulesDst = path.join(cwd, '.cursor', 'rules');
@@ -155,7 +284,7 @@ function uninstallTool(toolId, repoRoot) {
155
284
  for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
156
285
  if (!entry.isSymbolicLink()) continue;
157
286
  const target = fs.readlinkSync(path.join(skillsDir, entry.name));
158
- if (target.includes('bigpowers')) {
287
+ if (target.startsWith(repoRoot)) {
159
288
  removeSymlink(path.join(skillsDir, entry.name));
160
289
  }
161
290
  }
@@ -163,10 +292,20 @@ function uninstallTool(toolId, repoRoot) {
163
292
  const hooksDir = path.join(homeDir, '.claude', 'hooks');
164
293
  removeSymlink(path.join(hooksDir, 'block-dangerous-git.sh'));
165
294
  removeSymlink(path.join(hooksDir, 'rtk-rewrite.sh'));
295
+ removeSymlink(path.join(hooksDir, 'lib'));
166
296
  break;
167
297
  }
168
298
  case 'gemini':
169
299
  removeSymlink(path.join(homeDir, '.gemini', 'config', 'plugins', 'bigpowers'));
300
+ for (const hookFile of [
301
+ 'session-start',
302
+ 'run-hook.cmd',
303
+ 'before-tool-git-guard.sh',
304
+ 'before-tool-rtk.sh',
305
+ 'before-tool-token-mgmt.sh',
306
+ ]) {
307
+ removeSymlink(path.join(homeDir, '.gemini', 'hooks', hookFile));
308
+ }
170
309
  break;
171
310
  case 'pi': {
172
311
  const skillsDir = path.join(homeDir, '.pi', 'agent', 'skills');
@@ -174,7 +313,63 @@ function uninstallTool(toolId, repoRoot) {
174
313
  for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
175
314
  if (!entry.isSymbolicLink()) continue;
176
315
  const target = fs.readlinkSync(path.join(skillsDir, entry.name));
177
- if (target.includes('bigpowers')) {
316
+ if (target.startsWith(repoRoot)) {
317
+ removeSymlink(path.join(skillsDir, entry.name));
318
+ }
319
+ }
320
+ }
321
+ break;
322
+ }
323
+ case 'hermes': {
324
+ const skillsDir = path.join(homeDir, '.hermes', 'skills');
325
+ if (fs.existsSync(skillsDir)) {
326
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
327
+ if (!entry.isSymbolicLink()) continue;
328
+ const target = fs.readlinkSync(path.join(skillsDir, entry.name));
329
+ if (target.startsWith(repoRoot) || target.includes('.hermes/skills')) {
330
+ removeSymlink(path.join(skillsDir, entry.name));
331
+ }
332
+ }
333
+ }
334
+ removeSymlink(path.join(homeDir, '.hermes', 'hooks', 'session-log'));
335
+ break;
336
+ }
337
+ case 'zcode': {
338
+ const skillsDir = path.join(homeDir, '.zcode', 'skills');
339
+ if (fs.existsSync(skillsDir)) {
340
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
341
+ if (!entry.isSymbolicLink()) continue;
342
+ const target = fs.readlinkSync(path.join(skillsDir, entry.name));
343
+ if (target.includes('bigpowers') || target.includes('.zcode/skills')) {
344
+ removeSymlink(path.join(skillsDir, entry.name));
345
+ }
346
+ }
347
+ }
348
+ removeSymlink(path.join(homeDir, '.zcode', 'AGENTS.md'));
349
+ break;
350
+ }
351
+ case 'mimo': {
352
+ const skillsDir = path.join(homeDir, '.mimocode', 'skills');
353
+ if (fs.existsSync(skillsDir)) {
354
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
355
+ if (!entry.isSymbolicLink()) continue;
356
+ const target = fs.readlinkSync(path.join(skillsDir, entry.name));
357
+ if (target.includes('bigpowers') || target.includes('.mimocode/skills')) {
358
+ removeSymlink(path.join(skillsDir, entry.name));
359
+ }
360
+ }
361
+ }
362
+ removeSymlink(path.join(homeDir, '.mimocode', 'AGENTS.md'));
363
+ break;
364
+ }
365
+ case 'antigravity':
366
+ case 'agy': {
367
+ const skillsDir = path.join(homeDir, '.gemini', 'antigravity-cli', 'skills');
368
+ if (fs.existsSync(skillsDir)) {
369
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
370
+ if (!entry.isSymbolicLink()) continue;
371
+ const target = fs.readlinkSync(path.join(skillsDir, entry.name));
372
+ if (target.includes('bigpowers') || target.includes('.agents/skills')) {
178
373
  removeSymlink(path.join(skillsDir, entry.name));
179
374
  }
180
375
  }
@@ -54,6 +54,49 @@ render_gemini_command() {
54
54
  } > "$GEMINI_COMMANDS/$IR_NAME.toml"
55
55
  }
56
56
 
57
+ render_gemini_hooks_manifest() {
58
+ local hookdir="${GEMINI_HOOKS_DIR:-$GEMINI_EXT_DIR/hooks}"
59
+ mkdir -p "$hookdir"
60
+ cat > "$hookdir/hooks-manifest.json" <<'JSON'
61
+ {
62
+ "schema_version": 1,
63
+ "target": "gemini",
64
+ "config_path": "~/.gemini/settings.json",
65
+ "events_total": 11,
66
+ "events": [
67
+ "BeforeTool",
68
+ "AfterTool",
69
+ "BeforeAgent",
70
+ "AfterAgent",
71
+ "BeforeModel",
72
+ "BeforeToolSelection",
73
+ "AfterModel",
74
+ "SessionStart",
75
+ "SessionEnd",
76
+ "Notification",
77
+ "PreCompress"
78
+ ],
79
+ "shipped_hooks": [
80
+ {
81
+ "event": "SessionStart",
82
+ "script": "session-start",
83
+ "matcher": "startup|clear|compact",
84
+ "wave": "a",
85
+ "status": "shipped"
86
+ },
87
+ {
88
+ "event": "BeforeTool",
89
+ "script": "before-tool-git-guard.sh",
90
+ "matcher": "run_shell_command",
91
+ "wave": "a",
92
+ "status": "template"
93
+ }
94
+ ],
95
+ "polyglot_launcher": "run-hook.cmd"
96
+ }
97
+ JSON
98
+ }
99
+
57
100
  render_pi_skill() {
58
101
  mkdir -p "$PI_SKILLS/$IR_NAME"
59
102
  {
@@ -42,6 +42,16 @@ assert_gemini_ext_exists() {
42
42
  return 1
43
43
  }
44
44
 
45
+ assert_gemini_hooks_manifest() {
46
+ local id="$1"
47
+ if GEMINI_EXT_DIR=".gemini/extensions/bigpowers" bash scripts/adapters/gemini.sh --validate-hooks >/dev/null 2>&1; then
48
+ echo "PASS $id:gemini_hooks_manifest"
49
+ return 0
50
+ fi
51
+ echo "FAIL $id:gemini_hooks_manifest — hook templates invalid"
52
+ return 1
53
+ }
54
+
45
55
  assert_pi_skills_nonempty() {
46
56
  local id="$1"
47
57
  if [[ -d .pi/skills ]] && [[ -n "$(ls -A .pi/skills 2>/dev/null)" ]]; then
@@ -62,6 +72,16 @@ assert_aider_bridge() {
62
72
  return 0
63
73
  }
64
74
 
75
+ assert_agy_skills_nonempty() {
76
+ local id="$1"
77
+ if [[ -d .agents/skills ]] && [[ -n "$(ls -A .agents/skills 2>/dev/null)" ]]; then
78
+ echo "PASS $id:agy_skills_nonempty"
79
+ return 0
80
+ fi
81
+ echo "FAIL $id:agy_skills_nonempty — .agents/skills empty"
82
+ return 1
83
+ }
84
+
65
85
  run_contract() {
66
86
  local id="$1"
67
87
  local contract="$2"
@@ -70,7 +90,9 @@ run_contract() {
70
90
  symlink_claude_md) assert_symlink_claude_md "$id" ;;
71
91
  cursor_rules_nonempty) assert_cursor_rules_nonempty "$id" ;;
72
92
  gemini_ext_exists) assert_gemini_ext_exists "$id" ;;
93
+ gemini_hooks_manifest) assert_gemini_hooks_manifest "$id" ;;
73
94
  pi_skills_nonempty) assert_pi_skills_nonempty "$id" ;;
95
+ agy_skills_nonempty) assert_agy_skills_nonempty "$id" ;;
74
96
  aider_bridge) assert_aider_bridge "$id" ;;
75
97
  *) echo "SKIP $id:$contract — unknown contract"; return 0 ;;
76
98
  esac
@@ -103,7 +103,7 @@ import subprocess
103
103
  result = subprocess.run(
104
104
  ["grep", "-rn", "--include=*.md", "--include=*.sh", "--include=*.py",
105
105
  "--include=*.js", "--include=*.ts", "--include=*.yaml", "--include=*.yml",
106
- "-E", r"story:\s*e\d{2}s\d{2}", str(ROOT)],
106
+ "-E", r"story:\s*e[0-9]{2}s[0-9]{2}", str(ROOT)],
107
107
  capture_output=True, text=True, cwd=str(ROOT)
108
108
  )
109
109
 
@@ -79,7 +79,7 @@ for epic in epics:
79
79
  result = subprocess.run(
80
80
  ["grep", "-rn", "--include=*.md", "--include=*.sh", "--include=*.py",
81
81
  "--include=*.js", "--include=*.ts", "--include=*.yaml", "--include=*.yml",
82
- "-E", r"story:\s*e\d{2}s\d{2}", str(ROOT)],
82
+ "-E", r"story:\s*e[0-9]{2}s[0-9]{2}", str(ROOT)],
83
83
  capture_output=True, text=True, cwd=str(ROOT))
84
84
 
85
85
  tag_inventory: list[dict] = []
@@ -29,6 +29,7 @@ targets:
29
29
  file: GEMINI.md
30
30
  contracts:
31
31
  - gemini_ext_exists
32
+ - gemini_hooks_manifest
32
33
 
33
34
  - id: pi
34
35
  name: pi Agent
@@ -79,12 +80,15 @@ targets:
79
80
  - id: agy
80
81
  name: Antigravity agy (proprietary beta)
81
82
  tier: opt_in
82
- skill: null
83
+ skill:
84
+ adapter: agy
85
+ output: .agents/skills
83
86
  context:
84
87
  adapter: agy
85
88
  mode: symlink
86
89
  file: CLAUDE.md
87
90
  contracts:
91
+ - agy_skills_nonempty
88
92
  - symlink_claude_md
89
93
 
90
94
  # Wave B (e37s10) — skills-dir adapters
@@ -128,6 +132,32 @@ targets:
128
132
  contracts:
129
133
  - agents_md_exists
130
134
 
135
+ - id: zcode
136
+ name: ZCode
137
+ tier: opt_in
138
+ skill:
139
+ adapter: zcode
140
+ output: .zcode/skills
141
+ context:
142
+ adapter: zcode
143
+ mode: symlink
144
+ file: AGENTS.md
145
+ contracts:
146
+ - agents_md_exists
147
+
148
+ - id: mimo
149
+ name: MiMo Code
150
+ tier: opt_in
151
+ skill:
152
+ adapter: mimo
153
+ output: .mimocode/skills
154
+ context:
155
+ adapter: mimo
156
+ mode: symlink
157
+ file: AGENTS.md
158
+ contracts:
159
+ - agents_md_exists
160
+
131
161
  # Wave C (e37s11)
132
162
  - id: qwen
133
163
  name: Qwen (Alibaba)
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env bash
2
+ # story: e74s02
3
+ # Regression tests for Antigravity 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-agy-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
17
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
18
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
19
+
20
+ grep -q 'install_agy()' "$INSTALL_SH" && pass 'install.sh: install_agy()' || fail 'install.sh: missing install_agy()'
21
+ grep -q 'install_antigravity()' "$INSTALL_SH" && pass 'install.sh: install_antigravity alias' || fail 'install.sh: missing install_antigravity()'
22
+ grep -q 'uninstall_agy()' "$INSTALL_SH" && pass 'install.sh: uninstall_agy()' || fail 'install.sh: missing uninstall_agy()'
23
+ grep -q 'uninstall_antigravity()' "$INSTALL_SH" && pass 'install.sh: uninstall_antigravity alias' || fail 'install.sh: missing uninstall_antigravity()'
24
+ grep -q 'AGY_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: AGY_SKILLS_DIR' || fail 'install.sh: missing AGY_SKILLS_DIR'
25
+ grep -q 'antigravity-cli/skills' "$INSTALL_SH" && pass 'install.sh: antigravity-cli path' || fail 'install.sh: missing antigravity-cli path'
26
+ grep -q 'install_agy' "$INSTALL_SH" && grep -q 'uninstall_agy' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing agy'
27
+ ! grep -q '\.gemini/extensions/bigpowers' <<< "$(sed -n '/install_agy/,/^}/p' "$INSTALL_SH")" \
28
+ && pass 'install.sh: no gemini extension path' || fail 'install.sh: touches gemini extension path'
29
+
30
+ DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
31
+ echo "$DRY_OUT" | grep -q 'Antigravity CLI →' && pass 'dry-run: Antigravity CLI section' || fail 'dry-run: missing Antigravity CLI section'
32
+ DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
33
+ echo "$DRY_UNINSTALL" | grep -q 'Antigravity CLI →' && pass 'dry-run uninstall: Antigravity CLI section' || fail 'dry-run uninstall: missing Antigravity CLI section'
34
+
35
+ grep -q "case 'antigravity'" "$HELPERS_JS" && pass 'install-helpers: antigravity case' || fail 'install-helpers: missing antigravity case'
36
+ grep -q "case 'agy'" "$HELPERS_JS" && pass 'install-helpers: agy case' || fail 'install-helpers: missing agy case'
37
+ grep -q "'antigravity-cli', 'skills'" "$HELPERS_JS" && pass 'install-helpers: antigravity-cli global path' || fail 'install-helpers: missing antigravity-cli path'
38
+ grep -q "'\\.agents', 'skills'" "$HELPERS_JS" && pass 'install-helpers: .agents/skills local path' || fail 'install-helpers: missing .agents/skills path'
39
+
40
+ SETUP_SRC="$(cat "$SETUP_JS")"
41
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
42
+ echo "$SETUP_SRC" | grep -q "'antigravity'" && pass 'setup.js: antigravity in TOOLS/SUPPORTED_IDS' || fail 'setup.js: antigravity missing'
43
+ echo "$SETUP_SRC" | grep -q "'agy'" && pass 'setup.js: agy in SUPPORTED_IDS' || fail 'setup.js: agy missing from SUPPORTED_IDS'
44
+ echo "$SETUP_SRC" | grep -q 'antigravity-cli/skills' && pass 'setup.js: antigravity-cli global path' || fail 'setup.js: wrong antigravity global path'
45
+ echo "$SETUP_SRC" | grep -q "'\\.agents/skills'" && pass 'setup.js: .agents/skills local path' || fail 'setup.js: wrong antigravity local path'
46
+
47
+ grep -q 'id: agy' "$TARGETS_YAML" && pass 'targets.yaml: agy row' || fail 'targets.yaml: missing agy row'
48
+ grep -q 'adapter: agy' "$TARGETS_YAML" && pass 'targets.yaml: agy adapter' || fail 'targets.yaml: missing agy adapter'
49
+ grep -q 'output: .agents/skills' "$TARGETS_YAML" && pass 'targets.yaml: agy output path' || fail 'targets.yaml: missing agy output'
50
+ grep -q 'agy_skills_nonempty' "$TARGETS_YAML" && pass 'targets.yaml: agy contract' || fail 'targets.yaml: missing agy contract'
51
+
52
+ grep -q 'install_agy()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_agy assertion' || fail 'verify-install: missing install_agy assertion'
53
+
54
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
55
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
56
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
57
+
58
+ echo "test-agy-hub: $PASS passed, $FAIL failed"
59
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ # story: e64s01
3
+ # Validates Gemini adapter hook templates and stdin render path.
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
8
+ GEMINI_EXT="$REPO_ROOT/.gemini/extensions/bigpowers"
9
+
10
+ echo "=== test-gemini-adapter.sh ==="
11
+
12
+ # Test 1: validate hook templates via adapter CLI
13
+ echo "Test 1: validate_hook_templates"
14
+ GEMINI_EXT_DIR="$GEMINI_EXT" GEMINI_HOOKS_DIR="$GEMINI_EXT/hooks" \
15
+ bash "$REPO_ROOT/scripts/adapters/gemini.sh" --validate-hooks
16
+
17
+ # Test 2: event count
18
+ echo "Test 2: hook event count"
19
+ COUNT="$(GEMINI_EXT_DIR="$GEMINI_EXT" bash "$REPO_ROOT/scripts/adapters/gemini.sh" --list-hook-events | wc -l | tr -d ' ')"
20
+ if [[ "$COUNT" != "11" ]]; then
21
+ echo "FAIL: expected 11 events, got $COUNT"
22
+ exit 1
23
+ fi
24
+
25
+ # Test 3: HOOKS.md documents all events
26
+ echo "Test 3: HOOKS.md coverage"
27
+ for ev in BeforeTool AfterTool BeforeAgent AfterAgent BeforeModel BeforeToolSelection AfterModel SessionStart SessionEnd Notification PreCompress; do
28
+ grep -q "$ev" "$GEMINI_EXT/hooks/HOOKS.md" || { echo "FAIL: HOOKS.md missing $ev"; exit 1; }
29
+ done
30
+
31
+ # Test 4: stdin render smoke (fallback path without sync-render sourced)
32
+ echo "Test 4: stdin render smoke"
33
+ TMP_SKILL="$GEMINI_EXT/skills/_test-gemini-adapter"
34
+ TMP_CMD="$GEMINI_EXT/commands/prompts/_test-gemini-adapter.md"
35
+ rm -rf "$TMP_SKILL" "$TMP_CMD"
36
+ echo '{"name":"_test-gemini-adapter","model":"","description":"adapter test","body":"test body"}' | \
37
+ GEMINI_SKILLS="$GEMINI_EXT/skills" GEMINI_COMMANDS="$GEMINI_EXT/commands" \
38
+ bash "$REPO_ROOT/scripts/adapters/gemini.sh"
39
+ if [[ ! -f "$TMP_SKILL/SKILL.md" ]] || [[ ! -f "$TMP_CMD" ]]; then
40
+ echo "FAIL: gemini adapter did not render test skill"
41
+ exit 1
42
+ fi
43
+ rm -rf "$TMP_SKILL" "$TMP_CMD"
44
+
45
+ # Test 5: render_hooks_manifest delegates to render_gemini_hooks_manifest override
46
+ # (subshell invocation — adapters are subprocess-invoked, not sourced, per Tests 1-4 above)
47
+ echo "Test 5: render_hooks_manifest"
48
+ GEMINI_EXT_DIR="$GEMINI_EXT" bash -c "
49
+ source '$REPO_ROOT/scripts/lib/skill-common.sh' 2>/dev/null || true
50
+ source '$REPO_ROOT/scripts/lib/sync-render.sh'
51
+ source '$REPO_ROOT/scripts/adapters/gemini.sh'
52
+ render_hooks_manifest
53
+ "
54
+ grep -q '"events_total": 11' "$GEMINI_EXT/hooks/hooks-manifest.json" || {
55
+ echo "FAIL: hooks-manifest.json invalid after render"
56
+ exit 1
57
+ }
58
+
59
+ # Test 6: before-tool-git-guard gemini JSON shape
60
+ echo "Test 6: before-tool-git-guard gemini mode"
61
+ OUT="$(echo '{"tool_input":{"command":"git reset --hard"}}' | \
62
+ bash "$GEMINI_EXT/hooks/before-tool-git-guard.sh")"
63
+ echo "$OUT" | jq -e '.decision == "deny"' >/dev/null || {
64
+ echo "FAIL: git guard did not deny dangerous reset --hard"
65
+ echo "$OUT"
66
+ exit 1
67
+ }
68
+
69
+ echo "PASS: test-gemini-adapter.sh"
70
+ exit 0
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bash
2
+ # story: e64s02
3
+ # Regression tests for Gemini 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-gemini-hub.sh ==="
14
+
15
+ INSTALL_SH="$REPO_ROOT/scripts/install.sh"
16
+ HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
17
+ SETUP_JS="$REPO_ROOT/bin/setup.js"
18
+ TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
19
+
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'
26
+
27
+ 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'
30
+ 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
+
33
+ grep -q "case 'gemini'" "$HELPERS_JS" && pass 'install-helpers: gemini global case' || fail 'install-helpers: missing gemini global case'
34
+ grep -q 'before-tool-git-guard.sh' "$HELPERS_JS" && pass 'install-helpers: gemini hook wiring' || fail 'install-helpers: missing gemini hook wiring'
35
+
36
+ SETUP_SRC="$(cat "$SETUP_JS")"
37
+ echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
38
+ echo "$SETUP_SRC" | grep -q "'gemini'" "$SETUP_JS" && pass 'setup.js: gemini in TOOLS' || fail 'setup.js: gemini missing from TOOLS'
39
+ echo "$SETUP_SRC" | grep -q "'gemini'" && echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS" \
40
+ && grep -q "'gemini'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" \
41
+ && pass 'setup.js: gemini in SUPPORTED_IDS' || fail 'setup.js: gemini not in SUPPORTED_IDS'
42
+
43
+ grep -q 'id: gemini' "$TARGETS_YAML" && pass 'targets.yaml: gemini row' || fail 'targets.yaml: missing gemini row'
44
+ grep -q 'adapter: gemini' "$TARGETS_YAML" && pass 'targets.yaml: gemini adapter' || fail 'targets.yaml: missing gemini adapter'
45
+ grep -q 'gemini_hooks_manifest' "$TARGETS_YAML" && pass 'targets.yaml: gemini_hooks_manifest contract' || fail 'targets.yaml: missing gemini_hooks_manifest'
46
+
47
+ grep -q 'install_gemini()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_gemini assertion' || fail 'verify-install: missing install_gemini assertion'
48
+ grep -q 'gemini_hooks_manifest' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: gemini hook contract' || fail 'verify-install: missing gemini hook contract'
49
+
50
+ bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
51
+ node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
52
+ node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
53
+
54
+ echo "test-gemini-hub: $PASS passed, $FAIL failed"
55
+ [[ "$FAIL" -eq 0 ]] || exit 1