@workerstack/repo 0.0.0-stage → 0.1.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 (438) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +0 -3
  4. package/agents/global-settings/antigravity.json +3 -0
  5. package/agents/global-settings/claude.json +6 -0
  6. package/agents/global-settings/codex.toml +2 -0
  7. package/agents/global-settings/cursor.json +3 -0
  8. package/agents/global-settings/grok.toml +36 -0
  9. package/agents/global-settings/manifest.json +36 -0
  10. package/agents/grok/hooks/orchestrate-parent.json +60 -0
  11. package/agents/grok/hooks/rtk.json +16 -0
  12. package/agents/grok/hooks/rulesync.json +3 -0
  13. package/agents/grok/roles/scout.toml +5 -0
  14. package/agents/hooks.jsonc +67 -0
  15. package/agents/mcp-policy.jsonc +16 -0
  16. package/agents/rules/overview.md +21 -0
  17. package/agents/settings/claude.json +5 -0
  18. package/agents/skills/ask/SKILL.md +13 -0
  19. package/agents/skills/auto/SKILL.md +13 -0
  20. package/agents/skills/away/SKILL.md +19 -0
  21. package/agents/skills/blast-radius/SKILL.md +54 -0
  22. package/agents/skills/bro/SKILL.md +9 -0
  23. package/agents/skills/browser/SKILL.md +16 -0
  24. package/agents/skills/clasp/SKILL.md +11 -0
  25. package/agents/skills/commit/SKILL.md +35 -0
  26. package/agents/skills/commit-and-push/SKILL.md +9 -0
  27. package/agents/skills/commit-push/SKILL.md +59 -0
  28. package/agents/skills/commit-push-deploy/SKILL.md +74 -0
  29. package/agents/skills/commit-push-release/SKILL.md +75 -0
  30. package/agents/skills/correct/SKILL.md +39 -0
  31. package/agents/skills/do/SKILL.md +21 -0
  32. package/agents/skills/explain/SKILL.md +13 -0
  33. package/agents/skills/google-workspace/SKILL.md +12 -0
  34. package/agents/skills/handoff/SKILL.md +81 -0
  35. package/agents/skills/implement-plan/SKILL.md +29 -0
  36. package/agents/skills/implement-roadmap/SKILL.md +27 -0
  37. package/agents/skills/jev/SKILL.md +17 -0
  38. package/agents/skills/listen/SKILL.md +15 -0
  39. package/agents/skills/pickup/SKILL.md +58 -0
  40. package/agents/skills/principle-attack-the-premise/SKILL.md +24 -0
  41. package/agents/skills/principle-boundary-discipline/SKILL.md +38 -0
  42. package/agents/skills/principle-build-the-lever/SKILL.md +28 -0
  43. package/agents/skills/principle-encode-lessons-in-structure/SKILL.md +15 -0
  44. package/agents/skills/principle-exhaust-the-design-space/SKILL.md +12 -0
  45. package/agents/skills/principle-experience-first/SKILL.md +22 -0
  46. package/agents/skills/principle-explain-the-number/SKILL.md +21 -0
  47. package/agents/skills/principle-fix-root-causes/SKILL.md +24 -0
  48. package/agents/skills/principle-foundational-thinking/SKILL.md +25 -0
  49. package/agents/skills/principle-guard-the-context-window/SKILL.md +16 -0
  50. package/agents/skills/principle-laziness-protocol/SKILL.md +13 -0
  51. package/agents/skills/principle-make-operations-idempotent/SKILL.md +25 -0
  52. package/agents/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +18 -0
  53. package/agents/skills/principle-minimize-reader-load/SKILL.md +22 -0
  54. package/agents/skills/principle-model-the-domain/SKILL.md +26 -0
  55. package/agents/skills/principle-never-block-on-the-human/SKILL.md +17 -0
  56. package/agents/skills/principle-outcome-oriented-execution/SKILL.md +25 -0
  57. package/agents/skills/principle-prove-it-works/SKILL.md +25 -0
  58. package/agents/skills/principle-redesign-from-first-principles/SKILL.md +18 -0
  59. package/agents/skills/principle-separate-before-serializing-shared-state/SKILL.md +20 -0
  60. package/agents/skills/principle-sequence-verifiable-units/SKILL.md +22 -0
  61. package/agents/skills/principle-subtract-before-you-add/SKILL.md +21 -0
  62. package/agents/skills/principle-test-behavior-not-implementation/SKILL.md +24 -0
  63. package/agents/skills/principle-type-system-discipline/SKILL.md +17 -0
  64. package/agents/skills/review-plan/SKILL.md +28 -0
  65. package/agents/skills/review-roadmap/SKILL.md +28 -0
  66. package/agents/skills/show-me/SKILL.md +21 -0
  67. package/agents/skills/speak/SKILL.md +15 -0
  68. package/agents/skills/su/SKILL.md +11 -0
  69. package/agents/skills/teach/SKILL.md +25 -0
  70. package/agents/skills/tmp/SKILL.md +54 -0
  71. package/agents/skills/typescript-best-practices/SKILL.md +32 -0
  72. package/agents/skills/typescript-best-practices/references/patterns.md +328 -0
  73. package/agents/skills/unslop/SKILL.md +62 -0
  74. package/agents/skills/write-plan/SKILL.md +33 -0
  75. package/agents/skills/write-roadmap/SKILL.md +66 -0
  76. package/agents/subagents/implementer-deep.md +57 -0
  77. package/agents/subagents/implementer-fast.md +57 -0
  78. package/agents/subagents/orchestrator.md +43 -0
  79. package/agents/subagents/researcher.md +47 -0
  80. package/agents/subagents/scout.md +44 -0
  81. package/bin/repo.ts +4 -0
  82. package/cli/actionlint-default.test.ts +38 -0
  83. package/cli/actionlint-download.test.ts +162 -0
  84. package/cli/actionlint-real.test.ts +33 -0
  85. package/cli/actionlint.constants.ts +43 -0
  86. package/cli/actionlint.test.ts +108 -0
  87. package/cli/actionlint.ts +178 -0
  88. package/cli/bin.test.ts +54 -0
  89. package/cli/bin.ts +40 -0
  90. package/cli/check-changelog.test.ts +40 -0
  91. package/cli/check-changelog.ts +12 -0
  92. package/cli/check-comments.test.ts +157 -0
  93. package/cli/check-comments.ts +123 -0
  94. package/cli/check-env-modules.test.ts +85 -0
  95. package/cli/check-env-modules.ts +56 -0
  96. package/cli/check-magic.test.ts +139 -0
  97. package/cli/check-magic.ts +120 -0
  98. package/cli/check-manifests.constants.ts +4 -0
  99. package/cli/check-manifests.test.ts +210 -0
  100. package/cli/check-manifests.ts +71 -0
  101. package/cli/check-nightly.test.ts +103 -0
  102. package/cli/check-nightly.ts +37 -0
  103. package/cli/check-ratchets-missing.test.ts +46 -0
  104. package/cli/check-ratchets-mutation.test.ts +49 -0
  105. package/cli/check-ratchets.constants.ts +20 -0
  106. package/cli/check-ratchets.test.ts +190 -0
  107. package/cli/check-ratchets.ts +193 -0
  108. package/cli/check-rejections.test.ts +220 -0
  109. package/cli/check-rejections.ts +153 -0
  110. package/cli/check-reports.ts +37 -0
  111. package/cli/check-tsconfig.test.ts +507 -0
  112. package/cli/check-tsconfig.ts +205 -0
  113. package/cli/commands.test.ts +114 -0
  114. package/cli/commands.ts +218 -0
  115. package/cli/commit-changelog.ts +27 -0
  116. package/cli/commit-msg-changelog.test.ts +93 -0
  117. package/cli/commit-msg-range.test.ts +126 -0
  118. package/cli/commit-msg-red-proof.test.ts +147 -0
  119. package/cli/commit-msg-repo.test.ts +153 -0
  120. package/cli/commit-msg.test.ts +101 -0
  121. package/cli/commit-msg.ts +194 -0
  122. package/cli/commit-range.constants.ts +17 -0
  123. package/cli/commit-range.ts +57 -0
  124. package/cli/config-knip.test.ts +70 -0
  125. package/cli/config-nightly.test.ts +84 -0
  126. package/cli/config-tdd.test.ts +46 -0
  127. package/cli/config.test.ts +576 -0
  128. package/cli/config.ts +261 -0
  129. package/cli/conventional.ts +9 -0
  130. package/cli/coverage-config.ts +62 -0
  131. package/cli/coverage.constants.ts +6 -0
  132. package/cli/coverage.test.ts +199 -0
  133. package/cli/coverage.ts +127 -0
  134. package/cli/env.constants.ts +10 -0
  135. package/cli/env.test.ts +56 -0
  136. package/cli/env.ts +72 -0
  137. package/cli/fixtures/base-config.ts +13 -0
  138. package/cli/fixtures/gate-world.ts +48 -0
  139. package/cli/fixtures/knip-run.ts +38 -0
  140. package/cli/fixtures/mutate-fakes.ts +137 -0
  141. package/cli/fixtures/planted-repo.ts +50 -0
  142. package/cli/fixtures/publish-world.ts +71 -0
  143. package/cli/fixtures/red-proof-repo.ts +72 -0
  144. package/cli/fixtures/release-context.ts +15 -0
  145. package/cli/fixtures/release-world.ts +111 -0
  146. package/cli/fixtures/stub-bin.ts +40 -0
  147. package/cli/guard-diagnostics.test.ts +157 -0
  148. package/cli/guard-diagnostics.ts +195 -0
  149. package/cli/init.test.ts +487 -0
  150. package/cli/init.ts +275 -0
  151. package/cli/knip-check-ignores.test.ts +106 -0
  152. package/cli/knip-check-real.test.ts +65 -0
  153. package/cli/knip-check.constants.ts +46 -0
  154. package/cli/knip-check.test.ts +114 -0
  155. package/cli/knip-check.ts +169 -0
  156. package/cli/knip-schema.ts +67 -0
  157. package/cli/known-failures.constants.ts +22 -0
  158. package/cli/known-failures.test.ts +138 -0
  159. package/cli/known-failures.ts +131 -0
  160. package/cli/lint/as-needs-reason.ts +41 -0
  161. package/cli/lint/boundaries.ts +73 -0
  162. package/cli/lint/class-file.ts +39 -0
  163. package/cli/lint/config-file.ts +32 -0
  164. package/cli/lint/entry-file.ts +54 -0
  165. package/cli/lint/env-in-config.ts +66 -0
  166. package/cli/lint/filename-matches-export.ts +63 -0
  167. package/cli/lint/index-file.ts +22 -0
  168. package/cli/lint/index.ts +47 -0
  169. package/cli/lint/is-reason.ts +6 -0
  170. package/cli/lint/manifest.ts +46 -0
  171. package/cli/lint/names.ts +59 -0
  172. package/cli/lint/no-commented-out-code.ts +105 -0
  173. package/cli/lint/no-mock-of-subject.ts +64 -0
  174. package/cli/lint/no-module-side-effects.ts +94 -0
  175. package/cli/lint/no-module-state.ts +58 -0
  176. package/cli/lint/no-side-effect-import.ts +17 -0
  177. package/cli/lint/no-v8-ignore.ts +18 -0
  178. package/cli/lint/script-rules.ts +9 -0
  179. package/cli/lint/skip-on-platform.constants.ts +8 -0
  180. package/cli/lint/skip-on-platform.ts +118 -0
  181. package/cli/lint/todo-needs-id.ts +63 -0
  182. package/cli/lint/types-file.ts +28 -0
  183. package/cli/lint-schema.ts +32 -0
  184. package/cli/magic/fixtures/magic-repo.ts +64 -0
  185. package/cli/magic/magic-hit.ts +2 -0
  186. package/cli/magic/magic-nodes.ts +44 -0
  187. package/cli/magic/magic-numbers.test.ts +99 -0
  188. package/cli/magic/magic-numbers.ts +117 -0
  189. package/cli/magic/magic-strings.test.ts +38 -0
  190. package/cli/magic/magic-strings.ts +81 -0
  191. package/cli/main.test.ts +853 -0
  192. package/cli/main.ts +292 -0
  193. package/cli/mutate-args.ts +79 -0
  194. package/cli/mutate-check.test.ts +147 -0
  195. package/cli/mutate-deps.ts +42 -0
  196. package/cli/mutate-edges.test.ts +150 -0
  197. package/cli/mutate-files.test.ts +100 -0
  198. package/cli/mutate-files.ts +31 -0
  199. package/cli/mutate-floors.test.ts +91 -0
  200. package/cli/mutate-floors.ts +104 -0
  201. package/cli/mutate-real-deps.ts +57 -0
  202. package/cli/mutate-real.test.ts +96 -0
  203. package/cli/mutate-report.ts +96 -0
  204. package/cli/mutate-run.ts +128 -0
  205. package/cli/mutate-shards.ts +64 -0
  206. package/cli/mutate.constants.ts +67 -0
  207. package/cli/mutate.test.ts +182 -0
  208. package/cli/mutate.ts +64 -0
  209. package/cli/nested-vitest-flags.ts +8 -0
  210. package/cli/nightly-config.constants.ts +14 -0
  211. package/cli/nightly-config.ts +62 -0
  212. package/cli/prompt.test.ts +202 -0
  213. package/cli/prompt.ts +1 -0
  214. package/cli/red-proof-edges.test.ts +78 -0
  215. package/cli/red-proof-failures.test.ts +82 -0
  216. package/cli/red-proof-tree.test.ts +157 -0
  217. package/cli/red-proof-verdict.test.ts +44 -0
  218. package/cli/red-proof.constants.ts +14 -0
  219. package/cli/red-proof.ts +202 -0
  220. package/cli/release/changelog-parse.ts +83 -0
  221. package/cli/release/changelog.test.ts +141 -0
  222. package/cli/release/changelog.ts +106 -0
  223. package/cli/release/gate-refusals.test.ts +85 -0
  224. package/cli/release/gate.test.ts +63 -0
  225. package/cli/release/gate.ts +70 -0
  226. package/cli/release/git.ts +66 -0
  227. package/cli/release/github.test.ts +128 -0
  228. package/cli/release/github.ts +46 -0
  229. package/cli/release/list-dir.test.ts +11 -0
  230. package/cli/release/list-dir.ts +6 -0
  231. package/cli/release/main.test.ts +48 -0
  232. package/cli/release/main.ts +51 -0
  233. package/cli/release/manifest.test.ts +24 -0
  234. package/cli/release/manifest.ts +34 -0
  235. package/cli/release/pack.test.ts +107 -0
  236. package/cli/release/pack.ts +76 -0
  237. package/cli/release/plan.ts +127 -0
  238. package/cli/release/publish-run.test.ts +98 -0
  239. package/cli/release/publish.test.ts +127 -0
  240. package/cli/release/publish.ts +125 -0
  241. package/cli/release/refuse.ts +5 -0
  242. package/cli/release/release-messages.constants.ts +96 -0
  243. package/cli/release/release-refusals.test.ts +149 -0
  244. package/cli/release/release.constants.ts +128 -0
  245. package/cli/release/release.test.ts +199 -0
  246. package/cli/release/release.ts +145 -0
  247. package/cli/release/version.test.ts +118 -0
  248. package/cli/release/version.ts +69 -0
  249. package/cli/release/wait.test.ts +101 -0
  250. package/cli/release/wait.ts +95 -0
  251. package/cli/script-diagnostics.test.ts +76 -0
  252. package/cli/script-diagnostics.ts +62 -0
  253. package/cli/scripts/board.ts +519 -0
  254. package/cli/scripts/browser.ts +994 -0
  255. package/cli/scripts/change-set.ts +105 -0
  256. package/cli/scripts/check-globals.ts +199 -0
  257. package/cli/scripts/ci-skips.constants.ts +17 -0
  258. package/cli/scripts/ci-skips.ts +118 -0
  259. package/cli/scripts/ci-wait-run.ts +28 -0
  260. package/cli/scripts/ci-wait.constants.ts +44 -0
  261. package/cli/scripts/ci-wait.ts +175 -0
  262. package/cli/scripts/ci.constants.ts +15 -0
  263. package/cli/scripts/ci.ts +208 -0
  264. package/cli/scripts/clean.ts +363 -0
  265. package/cli/scripts/comments-step.ts +15 -0
  266. package/cli/scripts/doctor.ts +828 -0
  267. package/cli/scripts/emit-agent-shell-tools.ts +91 -0
  268. package/cli/scripts/emit-mcp-policy.ts +402 -0
  269. package/cli/scripts/folder-map.ts +353 -0
  270. package/cli/scripts/gate-fat-tools.ts +1095 -0
  271. package/cli/scripts/gitignore-guard.ts +338 -0
  272. package/cli/scripts/google-workspace.ts +779 -0
  273. package/cli/scripts/hook-command.ts +72 -0
  274. package/cli/scripts/hook-input.ts +178 -0
  275. package/cli/scripts/hook-io.constants.ts +5 -0
  276. package/cli/scripts/hook-io.ts +46 -0
  277. package/cli/scripts/hooks-union.ts +469 -0
  278. package/cli/scripts/interactive.ts +30 -0
  279. package/cli/scripts/jev.ts +420 -0
  280. package/cli/scripts/job.ts +934 -0
  281. package/cli/scripts/jsonc.ts +9 -0
  282. package/cli/scripts/lessons.ts +564 -0
  283. package/cli/scripts/lint-baseline.ts +233 -0
  284. package/cli/scripts/lint-main.ts +24 -0
  285. package/cli/scripts/lint-skips.ts +139 -0
  286. package/cli/scripts/lint.constants.ts +6 -0
  287. package/cli/scripts/lint.ts +142 -0
  288. package/cli/scripts/listen.ts +962 -0
  289. package/cli/scripts/managed-text.ts +47 -0
  290. package/cli/scripts/orchestrate-parent.ts +1155 -0
  291. package/cli/scripts/parse-need.ts +81 -0
  292. package/cli/scripts/persist-handoff.ts +228 -0
  293. package/cli/scripts/persist-implementation.ts +276 -0
  294. package/cli/scripts/persist-plan.ts +888 -0
  295. package/cli/scripts/persist-roadmap.ts +478 -0
  296. package/cli/scripts/persist-tmp.ts +177 -0
  297. package/cli/scripts/persist.ts +54 -0
  298. package/cli/scripts/phase-files.ts +121 -0
  299. package/cli/scripts/prompt.ts +38 -0
  300. package/cli/scripts/purge-global-mcps.ts +313 -0
  301. package/cli/scripts/rejections-step.ts +37 -0
  302. package/cli/scripts/rtk-grok.ts +102 -0
  303. package/cli/scripts/scrub-spawn-prompt.ts +103 -0
  304. package/cli/scripts/scrub-text-lib.ts +58 -0
  305. package/cli/scripts/session-map.ts +69 -0
  306. package/cli/scripts/setup.ts +862 -0
  307. package/cli/scripts/skill-conflicts.ts +82 -0
  308. package/cli/scripts/speak.ts +370 -0
  309. package/cli/scripts/strategy.ts +168 -0
  310. package/cli/scripts/sync-global-settings.ts +316 -0
  311. package/cli/scripts/turn-steps.ts +249 -0
  312. package/cli/scripts/turn.ts +157 -0
  313. package/cli/scripts/typecheck-step.ts +43 -0
  314. package/cli/scripts/vscode-tasks.ts +175 -0
  315. package/cli/scripts/workspace-root.ts +160 -0
  316. package/cli/scripts/worktree.ts +806 -0
  317. package/cli/spawn.test.ts +34 -0
  318. package/cli/spawn.ts +27 -0
  319. package/cli/staged-change.constants.ts +11 -0
  320. package/cli/staged-change.ts +79 -0
  321. package/cli/stryker-preload.test.ts +50 -0
  322. package/cli/stryker-preload.ts +9 -0
  323. package/cli/sync/agents/frontmatter.test.ts +197 -0
  324. package/cli/sync/agents/frontmatter.ts +140 -0
  325. package/cli/sync/agents/hooks.test.ts +517 -0
  326. package/cli/sync/agents/hooks.ts +401 -0
  327. package/cli/sync/agents/rules.test.ts +229 -0
  328. package/cli/sync/agents/rules.ts +84 -0
  329. package/cli/sync/agents/sources.test.ts +375 -0
  330. package/cli/sync/agents/sources.ts +244 -0
  331. package/cli/sync/agents/subagents.test.ts +149 -0
  332. package/cli/sync/agents/subagents.ts +158 -0
  333. package/cli/sync/agents-text.test.ts +31 -0
  334. package/cli/sync/agents-text.ts +36 -0
  335. package/cli/sync/fixtures/copied.README.md +35 -0
  336. package/cli/sync/fixtures/copied.tgz +0 -0
  337. package/cli/sync/fixtures/maps/golden/INDEX.md +22 -0
  338. package/cli/sync/fixtures/maps-ws.tgz +0 -0
  339. package/cli/sync/git-files.test.ts +340 -0
  340. package/cli/sync/git-files.ts +197 -0
  341. package/cli/sync/git-hooks.test.ts +94 -0
  342. package/cli/sync/golden.test.ts +15 -0
  343. package/cli/sync/hooks-mode.test.ts +99 -0
  344. package/cli/sync/hosts.ts +28 -0
  345. package/cli/sync/knip-config.constants.ts +4 -0
  346. package/cli/sync/knip-config.test.ts +147 -0
  347. package/cli/sync/knip-config.ts +108 -0
  348. package/cli/sync/manifest.test.ts +78 -0
  349. package/cli/sync/manifest.ts +60 -0
  350. package/cli/sync/maps.test.ts +304 -0
  351. package/cli/sync/maps.ts +297 -0
  352. package/cli/sync/migrate.test.ts +2000 -0
  353. package/cli/sync/migrate.ts +1104 -0
  354. package/cli/sync/nightly-jobs.test.ts +63 -0
  355. package/cli/sync/nightly.constants.ts +48 -0
  356. package/cli/sync/nightly.test.ts +100 -0
  357. package/cli/sync/nightly.ts +75 -0
  358. package/cli/sync/outputs.test.ts +351 -0
  359. package/cli/sync/outputs.ts +168 -0
  360. package/cli/sync/oxlint-config.test.ts +178 -0
  361. package/cli/sync/oxlint-config.ts +168 -0
  362. package/cli/sync/release-jobs.test.ts +29 -0
  363. package/cli/sync/release-reports.test.ts +31 -0
  364. package/cli/sync/release-workflow.constants.ts +61 -0
  365. package/cli/sync/release-workflow.test.ts +192 -0
  366. package/cli/sync/release-workflow.ts +86 -0
  367. package/cli/sync/release.constants.ts +93 -0
  368. package/cli/sync/release.test.ts +187 -0
  369. package/cli/sync/release.ts +112 -0
  370. package/cli/sync/repo-dir.test.ts +371 -0
  371. package/cli/sync/repo-dir.ts +205 -0
  372. package/cli/sync/standards.constants.ts +8 -0
  373. package/cli/sync/standards.test.ts +206 -0
  374. package/cli/sync/standards.ts +179 -0
  375. package/cli/sync/stock-history.json +2796 -0
  376. package/cli/sync/stock-history.test.ts +66 -0
  377. package/cli/sync/stock-history.ts +84 -0
  378. package/cli/sync/stock.test.ts +47 -0
  379. package/cli/sync/stock.ts +24 -0
  380. package/cli/sync/trees.test.ts +621 -0
  381. package/cli/sync/trees.ts +280 -0
  382. package/cli/sync/validate.test.ts +299 -0
  383. package/cli/sync/validate.ts +402 -0
  384. package/cli/sync/workspace.test.ts +180 -0
  385. package/cli/sync/workspace.ts +138 -0
  386. package/cli/sync/write.test.ts +341 -0
  387. package/cli/sync/write.ts +231 -0
  388. package/cli/sync.test.ts +1495 -0
  389. package/cli/sync.ts +360 -0
  390. package/cli/tdd-scope.test.ts +36 -0
  391. package/cli/tdd-scope.ts +41 -0
  392. package/cli/test-files.ts +16 -0
  393. package/cli/ts-program.ts +69 -0
  394. package/cli/tsconfig.constants.ts +8 -0
  395. package/cli/workerstack-config.types.ts +21 -0
  396. package/dist/cli/env.d.ts +10 -0
  397. package/dist/cli/env.js +64 -0
  398. package/dist/presets/temp-root-env.d.ts +10 -0
  399. package/dist/presets/temp-root-env.js +20 -0
  400. package/dist/presets/temp-root.constants.d.ts +6 -0
  401. package/dist/presets/temp-root.constants.js +6 -0
  402. package/dist/presets/temp-root.d.ts +2 -0
  403. package/dist/presets/temp-root.js +60 -0
  404. package/dist/presets/vitest.constants.d.ts +16 -0
  405. package/dist/presets/vitest.constants.js +16 -0
  406. package/dist/presets/vitest.d.ts +11 -0
  407. package/dist/presets/vitest.js +67 -0
  408. package/dist/presets/workers-plugin.d.ts +10 -0
  409. package/dist/presets/workers-plugin.js +54 -0
  410. package/package.json +141 -4
  411. package/references/INDEX.md +100 -0
  412. package/references/browser.md +66 -0
  413. package/references/cascade.md +15 -0
  414. package/references/clasp.md +21 -0
  415. package/references/cloudflare.md +36 -0
  416. package/references/google-workspace.md +79 -0
  417. package/references/hooks.md +103 -0
  418. package/references/implementation-format.md +119 -0
  419. package/references/jev.md +56 -0
  420. package/references/lessons.md +73 -0
  421. package/references/listen.md +80 -0
  422. package/references/map.md +107 -0
  423. package/references/output.md +47 -0
  424. package/references/plan-format.md +264 -0
  425. package/references/review-loop.md +48 -0
  426. package/references/roadmap-format.md +104 -0
  427. package/references/rtk.md +27 -0
  428. package/references/scope.md +76 -0
  429. package/references/setup.md +42 -0
  430. package/references/speak.md +59 -0
  431. package/tsconfig/base.json +28 -0
  432. package/tsconfig/bun.d.ts +1 -0
  433. package/tsconfig/bun.json +8 -0
  434. package/tsconfig/reset.d.ts +1 -0
  435. package/tsconfig/strict.json +12 -0
  436. package/tsconfig/web.json +7 -0
  437. package/tsconfig/worker.d.ts +1 -0
  438. package/tsconfig/worker.json +8 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The repo hooks and the one command every host runs for each. Pure and dependency free, because consumers that still
3
+ * copy `cli/scripts/` import it from `hooks-union.ts`, where `cli/` does not exist.
4
+ */
5
+
6
+ /** Each repo hook, and the file its command ran before it went through `repo hook`. */
7
+ export const HOOK_SCRIPTS = {
8
+ "gate-fat-tools": "gate-fat-tools.ts",
9
+ "orchestrate-parent": "orchestrate-parent.ts",
10
+ "rtk-grok": "rtk-grok.ts",
11
+ "scrub-spawn-prompt": "scrub-spawn-prompt.ts",
12
+ "session-map": "session-map.ts",
13
+ worktree: "worktree.ts",
14
+ } as const;
15
+
16
+ export type HookName = keyof typeof HOOK_SCRIPTS;
17
+
18
+ export const HOOK_NAMES: (
19
+ | "gate-fat-tools"
20
+ | "orchestrate-parent"
21
+ | "rtk-grok"
22
+ | "scrub-spawn-prompt"
23
+ | "session-map"
24
+ | "worktree"
25
+ )[] = (Object.keys(HOOK_SCRIPTS) as HookName[]).sort();
26
+
27
+ export function isHookName(name: string | undefined): name is HookName {
28
+ return name !== undefined && Object.hasOwn(HOOK_SCRIPTS, name);
29
+ }
30
+
31
+ export const HOOK_USAGE: string = `use ${HOOK_NAMES.slice(0, -1).join(", ")} or ${HOOK_NAMES.at(-1)}`;
32
+
33
+ /**
34
+ * Shell text that sets `$r` to the installed bin, which bun links as `repo` on POSIX and as `repo.exe` on Windows,
35
+ * starting from `start` (shell text, expanded once). The start, its git toplevel, then the main checkout of a linked
36
+ * worktree are probed in that order, so an uninstalled worktree runs the main checkout's bin; the root stays the
37
+ * worktree. A checkout with no install anywhere gets a message and exit 1; exit 2 would block the `bun install` that
38
+ * fixes it. `resolveRepoBin` in `gate-fat-tools.ts` keeps the same order.
39
+ */
40
+ export function repoBinLookup(start: string): string {
41
+ return (
42
+ `d="${start}"; b=node_modules/.bin/repo; ` +
43
+ `[ -e "$d/$b" ] || [ -e "$d/$b.exe" ] || d="$(git -C "$d" rev-parse --show-toplevel 2>/dev/null || echo "$d")"; ` +
44
+ `m="$(git -C "$d" rev-parse --path-format=absolute --git-common-dir 2>/dev/null)"; m="\${m%/*}"; r=; ` +
45
+ `for c in "$d" "$m"; do for e in "" .exe; do [ -n "$c" ] && [ -e "$c/$b$e" ] && { r="$c/$b$e"; break 2; }; done; done; ` +
46
+ `[ -x "$r" ] || { echo "repo: $d/$b is missing; run bun install" >&2; exit 1; }`
47
+ );
48
+ }
49
+
50
+ /** The hook command every host runs: the bin found from the agent's project dir, the way hooks always have. */
51
+ export function hookCommand(name: HookName): string {
52
+ return `${repoBinLookup("${GROK_WORKSPACE_ROOT:-${CLAUDE_PROJECT_DIR:-.}}")}; "$r" hook ${name}`;
53
+ }
54
+
55
+ /** The short form stock sources use for a repo hook command, `repo hook <name>`. */
56
+ const SHORT_FORM = /^repo hook ([\w-]+)$/;
57
+
58
+ /** `hookCommand(name)` for a `repo hook <name>` source command; any other command comes back unchanged. */
59
+ export function expandHookCommand(command: string): string {
60
+ const name = SHORT_FORM.exec(command)?.[1];
61
+ return isHookName(name) ? hookCommand(name) : command;
62
+ }
63
+
64
+ /** The repo hook a command runs, in the `repo hook <name>` form or the older direct script form; null for any other command. */
65
+ export function hookNameOf(command: string): HookName | null {
66
+ const viaBin = /(?:\$r"|[\s"'/]repo"?|^repo)\s+hook\s+([\w-]+)\s*$/.exec(command);
67
+ if (viaBin) return isHookName(viaBin[1]) ? viaBin[1] : null;
68
+ for (const name of HOOK_NAMES) {
69
+ if (new RegExp(`[\\\\/"'\\s]${HOOK_SCRIPTS[name].replace(".", "\\.")}(?:["'\\s]|$)`).test(command)) return name;
70
+ }
71
+ return null;
72
+ }
@@ -0,0 +1,178 @@
1
+ /** The stdin payload every hook entry receives. Claude, Codex, Cursor, Grok and Antigravity spell the same facts differently, so each spelling is its own optional field. */
2
+
3
+ /** Antigravity's tool call: the tool name and its arguments. */
4
+ interface HookToolCall {
5
+ name?: string;
6
+ args?: Record<string, unknown>;
7
+ }
8
+
9
+ /** The nested agent object some harnesses send in place of flat agent fields. */
10
+ export interface HookAgent {
11
+ id?: string;
12
+ type?: string;
13
+ name?: string;
14
+ subagentType?: string;
15
+ subagent_type?: string;
16
+ agentType?: string;
17
+ agentId?: string;
18
+ agent_id?: string;
19
+ spawnedBy?: string;
20
+ spawned_by?: string;
21
+ }
22
+
23
+ export interface HookInput {
24
+ session_id?: string;
25
+ sessionId?: string;
26
+ conversationId?: string;
27
+ cwd?: string;
28
+ /** The workspace the harness works in: Grok and Cursor send one string, Antigravity a list. */
29
+ workspaceRoot?: string;
30
+ workspace_root?: string;
31
+ workspacePaths?: string[];
32
+ hook_event_name?: string;
33
+ hookEventName?: string;
34
+ tool_name?: string;
35
+ toolName?: string;
36
+ /** Shape varies per tool; callers narrow it. */
37
+ tool_input?: Record<string, unknown>;
38
+ toolInput?: Record<string, unknown>;
39
+ /** Antigravity's call, instead of the tool name and input fields. */
40
+ toolCall?: HookToolCall;
41
+ transcript_path?: string;
42
+ transcriptPath?: string;
43
+ prompt?: string;
44
+ userPrompt?: string;
45
+ user_prompt?: string;
46
+ content?: string;
47
+ lastUserInput?: string;
48
+ last_assistant_message?: string;
49
+ lastAssistantMessage?: string;
50
+ reason?: string;
51
+ stop_hook_active?: boolean;
52
+ stopHookActive?: boolean;
53
+ agent_type?: string;
54
+ agentType?: string;
55
+ agent_name?: string;
56
+ agentName?: string;
57
+ subagent_type?: string;
58
+ subagentType?: string;
59
+ agent_id?: string;
60
+ agentId?: string;
61
+ spawned_by?: string;
62
+ spawnedBy?: string;
63
+ /** A name string (Grok) or a nested object (Cursor). */
64
+ agent?: string | HookAgent;
65
+ /** Present only on Cursor payloads. */
66
+ cursor_version?: string;
67
+ /** Codex sends turn_id and model on every tool hook. */
68
+ turn_id?: string;
69
+ model?: string;
70
+ /** Claude WorktreeCreate: the requested worktree name. */
71
+ name?: string;
72
+ /** Claude WorktreeRemove: the worktree directory. */
73
+ worktree_path?: string;
74
+ }
75
+
76
+ const STRING_FIELDS = [
77
+ "session_id",
78
+ "sessionId",
79
+ "conversationId",
80
+ "cwd",
81
+ "workspaceRoot",
82
+ "workspace_root",
83
+ "hook_event_name",
84
+ "hookEventName",
85
+ "tool_name",
86
+ "toolName",
87
+ "transcript_path",
88
+ "transcriptPath",
89
+ "prompt",
90
+ "userPrompt",
91
+ "user_prompt",
92
+ "content",
93
+ "lastUserInput",
94
+ "last_assistant_message",
95
+ "lastAssistantMessage",
96
+ "reason",
97
+ "agent_type",
98
+ "agentType",
99
+ "agent_name",
100
+ "agentName",
101
+ "subagent_type",
102
+ "subagentType",
103
+ "agent_id",
104
+ "agentId",
105
+ "spawned_by",
106
+ "spawnedBy",
107
+ "cursor_version",
108
+ "turn_id",
109
+ "model",
110
+ "name",
111
+ "worktree_path",
112
+ ] as const;
113
+
114
+ const AGENT_FIELDS = [
115
+ "id",
116
+ "type",
117
+ "name",
118
+ "subagentType",
119
+ "subagent_type",
120
+ "agentType",
121
+ "agentId",
122
+ "agent_id",
123
+ "spawnedBy",
124
+ "spawned_by",
125
+ ] as const;
126
+
127
+ const BOOLEAN_FIELDS = ["stop_hook_active", "stopHookActive"] as const;
128
+
129
+ const TOOL_INPUT_FIELDS = ["tool_input", "toolInput"] as const;
130
+
131
+ export function isRecord(v: unknown): v is Record<string, unknown> {
132
+ return v !== null && typeof v === "object" && !Array.isArray(v);
133
+ }
134
+
135
+ /** Parses stdin text into a HookInput, or null when it is not JSON or not an object. A field whose type is wrong is dropped; the rest are kept. */
136
+ export function parseHookInput(raw: string): HookInput | null {
137
+ let value: unknown;
138
+ try {
139
+ value = JSON.parse(raw);
140
+ } catch {
141
+ return null;
142
+ }
143
+ if (!isRecord(value)) return null;
144
+ const out: HookInput = {};
145
+ for (const key of STRING_FIELDS) {
146
+ const v = value[key];
147
+ if (typeof v === "string") out[key] = v;
148
+ }
149
+ if (Array.isArray(value.workspacePaths)) {
150
+ out.workspacePaths = value.workspacePaths.filter((p): p is string => typeof p === "string");
151
+ }
152
+ for (const key of BOOLEAN_FIELDS) {
153
+ const v = value[key];
154
+ if (typeof v === "boolean") out[key] = v;
155
+ }
156
+ for (const key of TOOL_INPUT_FIELDS) {
157
+ const v = value[key];
158
+ if (isRecord(v)) out[key] = v;
159
+ }
160
+ const call = value.toolCall;
161
+ if (isRecord(call)) {
162
+ const toolCall: HookToolCall = {};
163
+ if (typeof call.name === "string") toolCall.name = call.name;
164
+ if (isRecord(call.args)) toolCall.args = call.args;
165
+ out.toolCall = toolCall;
166
+ }
167
+ const agent = value.agent;
168
+ if (typeof agent === "string") out.agent = agent;
169
+ else if (isRecord(agent)) {
170
+ const nested: HookAgent = {};
171
+ for (const key of AGENT_FIELDS) {
172
+ const v = agent[key];
173
+ if (typeof v === "string") nested[key] = v;
174
+ }
175
+ out.agent = nested;
176
+ }
177
+ return out;
178
+ }
@@ -0,0 +1,5 @@
1
+ /** Bytes a hook asks the OS for per read of stdin. */
2
+ export const HOOK_READ_CHUNK_BYTES = 8192;
3
+
4
+ /** File descriptor of stdin. */
5
+ export const STDIN_FD = 0;
@@ -0,0 +1,46 @@
1
+ /** The edge every hook reads its payload from and writes its reply to; tests pass a fake in place of the process. */
2
+ import fs from "node:fs";
3
+ import { parseHookInput, type HookInput } from "./hook-input.ts";
4
+ import { HOOK_READ_CHUNK_BYTES, STDIN_FD } from "./hook-io.constants.ts";
5
+
6
+ export interface HookIo {
7
+ /** The next bytes of the payload; null once the stream is closed or unreadable. */
8
+ readChunk(): Uint8Array | null;
9
+ write(text: string): void;
10
+ }
11
+
12
+ /** Reads `fd` (stdin unless a test plants a file) and writes stdout. */
13
+ export function processHookIo(fd: number = STDIN_FD): HookIo {
14
+ const chunk = Buffer.alloc(HOOK_READ_CHUNK_BYTES);
15
+ return {
16
+ readChunk: () => {
17
+ try {
18
+ const n = fs.readSync(fd, chunk, 0, chunk.length, null);
19
+ return n === 0 ? null : chunk.subarray(0, n);
20
+ } catch {
21
+ return null;
22
+ }
23
+ },
24
+ write: (text) => {
25
+ process.stdout.write(text);
26
+ },
27
+ };
28
+ }
29
+
30
+ /** Read until the bytes parse as one JSON object, without waiting for EOF (some hosts keep stdin open); null when they never do. */
31
+ export function readHookInput(io: HookIo): HookInput | null {
32
+ let buf = Buffer.alloc(0);
33
+ for (let chunk = io.readChunk(); chunk; chunk = io.readChunk()) {
34
+ buf = Buffer.concat([buf, chunk]);
35
+ const parsed = parseHookInput(buf.toString("utf8"));
36
+ if (parsed) return parsed;
37
+ }
38
+ return null;
39
+ }
40
+
41
+ /** Read to EOF and decode as utf8, for a body such as markdown that is never one JSON object. */
42
+ export function readAllText(io: HookIo): string {
43
+ const chunks: Uint8Array[] = [];
44
+ for (let chunk = io.readChunk(); chunk; chunk = io.readChunk()) chunks.push(Uint8Array.from(chunk));
45
+ return Buffer.concat(chunks).toString("utf8");
46
+ }