@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,6 @@
1
+ /** The errno code `process.kill(pid, 0)` throws when the pid exists but belongs to another user. */
2
+ export declare const PERMISSION_DENIED = "EPERM";
3
+ /** The name every run root starts with; `repo-test-<pid>-<suffix>` gives the pid of the run that made it. */
4
+ export declare const ROOT_PREFIX = "repo-test-";
5
+ /** The dir bun itself writes into TEMP when a child runs `node` through its shim (`bun-node-<hash>`); no test makes it. */
6
+ export declare const BUN_SHIM_PREFIX = "bun-node-";
@@ -0,0 +1,6 @@
1
+ /** The errno code `process.kill(pid, 0)` throws when the pid exists but belongs to another user. */
2
+ export const PERMISSION_DENIED = "EPERM";
3
+ /** The name every run root starts with; `repo-test-<pid>-<suffix>` gives the pid of the run that made it. */
4
+ export const ROOT_PREFIX = "repo-test-";
5
+ /** The dir bun itself writes into TEMP when a child runs `node` through its shim (`bun-node-<hash>`); no test makes it. */
6
+ export const BUN_SHIM_PREFIX = "bun-node-";
@@ -0,0 +1,2 @@
1
+ export declare function leakMessage(names: string[]): string;
2
+ export declare function setup(): () => void;
@@ -0,0 +1,60 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { readEnv } from "../cli/env.js";
4
+ import { rootPath } from "./temp-root-env.js";
5
+ import { BUN_SHIM_PREFIX, PERMISSION_DENIED } from "./temp-root.constants.js";
6
+ /**
7
+ * Vitest globalSetup: every run gets its own temp root, so a test that leaves a dir behind fails the run and a
8
+ * crashed run's root is removed by the next one. `defineConfig` gives test processes the root as TMPDIR, TEMP and
9
+ * TMP (`rootEnv`); this process keeps the real temp dir, so its own tooling never counts as a leak.
10
+ */
11
+ const FAILED = 1;
12
+ /** `repo-test-<pid>` names give the pid; anything else is not ours. */
13
+ function pidOf(name) {
14
+ const match = /^repo-test-(\d+)$/.exec(name);
15
+ return match?.[1] === undefined ? undefined : Number(match[1]);
16
+ }
17
+ function isAlive(pid) {
18
+ try {
19
+ process.kill(pid, 0);
20
+ return true;
21
+ }
22
+ catch (error) {
23
+ // EPERM: the pid exists but belongs to someone else.
24
+ return error instanceof Error && "code" in error && error.code === PERMISSION_DENIED;
25
+ }
26
+ }
27
+ /** Removes the roots whose run is gone; a second call finds nothing and does nothing. */
28
+ function removeDeadRoots(base) {
29
+ for (const name of fs.readdirSync(base)) {
30
+ const pid = pidOf(name);
31
+ if (pid !== undefined && !isAlive(pid))
32
+ fs.rmSync(path.join(base, name), { recursive: true, force: true });
33
+ }
34
+ }
35
+ export function leakMessage(names) {
36
+ const list = names.sort().join(", ");
37
+ const noun = names.length === 1 ? "entry" : "entries";
38
+ return `tests left ${names.length} ${noun} in the run's temp root: ${list}; remove each in the test that made it`;
39
+ }
40
+ /** Ends the run: keeps the root when asked, otherwise removes it and fails when it was not empty. */
41
+ function finish(root) {
42
+ if (readEnv().REPO_E2E_KEEP) {
43
+ process.stdout.write(`kept temp root: ${root}\n`);
44
+ return;
45
+ }
46
+ const left = fs.readdirSync(root).filter((name) => !name.startsWith(BUN_SHIM_PREFIX));
47
+ fs.rmSync(root, { recursive: true, force: true });
48
+ if (left.length === 0)
49
+ return;
50
+ process.exitCode = FAILED;
51
+ process.stderr.write(`Error: ${leakMessage(left)}\n`);
52
+ }
53
+ export function setup() {
54
+ const root = rootPath();
55
+ removeDeadRoots(path.dirname(root));
56
+ // A live pid's root is this run's own; one left by an earlier process with the same pid is stale.
57
+ fs.rmSync(root, { recursive: true, force: true });
58
+ fs.mkdirSync(root);
59
+ return () => finish(root);
60
+ }
@@ -0,0 +1,16 @@
1
+ /** The wrangler files a Worker package may have, in the order the preset looks for them. */
2
+ export declare const WRANGLER_FILES: readonly ["wrangler.jsonc", "wrangler.json", "wrangler.toml"];
3
+ /** The package that runs tests in the Workers runtime. */
4
+ export declare const PLUGIN_PACKAGE = "@cloudflare/vitest-plugin";
5
+ /** The plugin range the preset is written against. */
6
+ export declare const PLUGIN_RANGE = "^1.6.0";
7
+ /** The prefix every message from the preset starts with. */
8
+ export declare const MESSAGE_PREFIX = "@workerstack/repo/vitest";
9
+ /** The guard module's name, without the extension of the module that points at it. */
10
+ export declare const GUARD_NAME = "temp-root";
11
+ /** The package the guard loads in the runner process, which vitest must inline there. */
12
+ export declare const INLINED_PACKAGE = "zod";
13
+ /** The error code `import()` gives a package it cannot find. */
14
+ export declare const NOT_FOUND = "ERR_MODULE_NOT_FOUND";
15
+ /** The question vite ends its error with when a bare import resolves to no installed package. */
16
+ export declare const NOT_INSTALLED = "Is it installed?";
@@ -0,0 +1,16 @@
1
+ /** The wrangler files a Worker package may have, in the order the preset looks for them. */
2
+ export const WRANGLER_FILES = ["wrangler.jsonc", "wrangler.json", "wrangler.toml"];
3
+ /** The package that runs tests in the Workers runtime. */
4
+ export const PLUGIN_PACKAGE = "@cloudflare/vitest-plugin";
5
+ /** The plugin range the preset is written against. */
6
+ export const PLUGIN_RANGE = "^1.6.0";
7
+ /** The prefix every message from the preset starts with. */
8
+ export const MESSAGE_PREFIX = "@workerstack/repo/vitest";
9
+ /** The guard module's name, without the extension of the module that points at it. */
10
+ export const GUARD_NAME = "temp-root";
11
+ /** The package the guard loads in the runner process, which vitest must inline there. */
12
+ export const INLINED_PACKAGE = "zod";
13
+ /** The error code `import()` gives a package it cannot find. */
14
+ export const NOT_FOUND = "ERR_MODULE_NOT_FOUND";
15
+ /** The question vite ends its error with when a bare import resolves to no installed package. */
16
+ export const NOT_INSTALLED = "Is it installed?";
@@ -0,0 +1,11 @@
1
+ import { type UserWorkspaceConfig, type ViteUserConfig } from "vitest/config";
2
+ /** A package's vitest project: the shared timeouts and the forks pool, or the Workers runtime beside a wrangler file. */
3
+ export declare function defineProject(config: UserWorkspaceConfig): UserWorkspaceConfig;
4
+ /**
5
+ * A root vitest config: the project defaults plus istanbul coverage, overridden by `config`. The floors file
6
+ * (`coverage-floors.json` in the cwd, or `options.floors`) becomes per-file coverage thresholds; the caller's own
7
+ * thresholds are merged over them, and a missing file adds none.
8
+ */
9
+ export declare function defineConfig(config: ViteUserConfig, options?: {
10
+ floors?: string;
11
+ }): ViteUserConfig;
@@ -0,0 +1,67 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { mergeConfig } from "vitest/config";
5
+ import { rootEnv } from "./temp-root-env.js";
6
+ import { GUARD_NAME, INLINED_PACKAGE, WRANGLER_FILES } from "./vitest.constants.js";
7
+ import { workersPlugin } from "./workers-plugin.js";
8
+ /** Where `defineConfig` looks for the per-file floors `repo coverage` writes, relative to the cwd. */
9
+ const DEFAULT_FLOORS = "coverage-floors.json";
10
+ /** The temp root guard beside this module, with this module's own extension: `.ts` from source, `.js` from dist. */
11
+ function guardPath() {
12
+ const self = fileURLToPath(import.meta.url);
13
+ return path.join(path.dirname(self), `${GUARD_NAME}${path.extname(self)}`);
14
+ }
15
+ /** The project root vitest will use: the config's own, else the cwd. */
16
+ function rootOf(config) {
17
+ return path.resolve(config.test?.root ?? config.root ?? process.cwd());
18
+ }
19
+ /** The first wrangler file in `root`, or none for a package that is not a Worker. */
20
+ function wranglerFile(root) {
21
+ return WRANGLER_FILES.find((name) => fs.existsSync(path.join(root, name)));
22
+ }
23
+ // A Windows runner spawns bun and git 25-35x slower than Linux. The platform is read per call, not at module
24
+ // load, so one OS can exercise both branches.
25
+ function projectDefaults(config) {
26
+ const timeout = process.platform === "win32" ? 60_000 : 5_000;
27
+ const root = rootOf(config);
28
+ const file = wranglerFile(root);
29
+ // Bun module namespaces carry `__esModule`, so vitest's default interop would swap a namespace for its default.
30
+ const test = { testTimeout: timeout, hookTimeout: timeout, deps: { interopDefault: false } };
31
+ if (file === undefined)
32
+ return { test: { ...test, pool: "forks" } };
33
+ // The Workers pool is the plugin's; a forks default would take the tests back to node.
34
+ const configPath = path.join(root, file);
35
+ return { plugins: [workersPlugin(configPath)], test };
36
+ }
37
+ /** A package's vitest project: the shared timeouts and the forks pool, or the Workers runtime beside a wrangler file. */
38
+ export function defineProject(config) {
39
+ return mergeConfig(projectDefaults(config), config);
40
+ }
41
+ /** The floors file's per-file thresholds, or none when the file is absent. */
42
+ function readFloors(file) {
43
+ const full = path.resolve(file);
44
+ if (!fs.existsSync(full))
45
+ return {};
46
+ try {
47
+ const floors = JSON.parse(fs.readFileSync(full, "utf8"));
48
+ return floors /* the floors file holds the thresholds object repo coverage wrote */;
49
+ }
50
+ catch {
51
+ throw new Error(`${full} is not valid JSON; run \`bun repo coverage\` to write it again`);
52
+ }
53
+ }
54
+ /**
55
+ * A root vitest config: the project defaults plus istanbul coverage, overridden by `config`. The floors file
56
+ * (`coverage-floors.json` in the cwd, or `options.floors`) becomes per-file coverage thresholds; the caller's own
57
+ * thresholds are merged over them, and a missing file adds none.
58
+ */
59
+ export function defineConfig(config, options = {}) {
60
+ const thresholds = readFloors(options.floors ?? DEFAULT_FLOORS);
61
+ const coverage = { provider: "istanbul", ...(Object.keys(thresholds).length > 0 ? { thresholds } : {}) };
62
+ // The guard loads cli/env.ts in the runner process, where an external zod loses its named exports.
63
+ const guard = { globalSetup: [guardPath()], server: { deps: { inline: [INLINED_PACKAGE] } }, coverage };
64
+ // Only test processes get the root: the runner's own tooling (miniflare) makes and removes temp dirs of its own.
65
+ const defaults = mergeConfig(projectDefaults(config), { test: { ...guard, env: rootEnv() } });
66
+ return mergeConfig(defaults, config);
67
+ }
@@ -0,0 +1,10 @@
1
+ import type { ViteUserConfig } from "vitest/config";
2
+ type Plugin = Exclude<NonNullable<ViteUserConfig["plugins"]>[number], Promise<unknown>>;
3
+ /**
4
+ * The Workers plugin for the wrangler file at `configPath`, as a promise vite settles while it resolves the config;
5
+ * the plugin is ESM only, so a synchronous `require` cannot load it. A plugin that is not installed becomes the line
6
+ * that says how to install it, naming the wrangler file; a module without `cloudflareTest` is an error naming the
7
+ * expected range; any other load error passes through unchanged.
8
+ */
9
+ export declare function workersPlugin(configPath: string, load?: () => Promise<unknown>): Promise<Plugin>;
10
+ export {};
@@ -0,0 +1,54 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import path from "node:path";
10
+ import { MESSAGE_PREFIX, NOT_FOUND, NOT_INSTALLED, PLUGIN_PACKAGE, PLUGIN_RANGE } from "./vitest.constants.js";
11
+ const installHint = `bun add -d ${PLUGIN_PACKAGE}`;
12
+ /**
13
+ * True for the error `import()` gives when the plugin itself, not one of its own dependencies, is not installed:
14
+ * node and bun give a code, and vite's module runner, which loads the preset under vitest, says so in the message.
15
+ */
16
+ function isPluginMissing(error) {
17
+ if (!(error instanceof Error) || !error.message.includes(PLUGIN_PACKAGE))
18
+ return false;
19
+ return ("code" in error && error.code === NOT_FOUND) || error.message.includes(NOT_INSTALLED);
20
+ }
21
+ function hasCloudflareTest(loaded) {
22
+ return (typeof loaded === "object" &&
23
+ loaded !== null &&
24
+ "cloudflareTest" in loaded &&
25
+ typeof loaded.cloudflareTest === "function");
26
+ }
27
+ /** The plugin package, imported from the preset's own resolution scope, where an optional peer is linked. */
28
+ function importPlugin() {
29
+ const specifier = PLUGIN_PACKAGE;
30
+ return import(__rewriteRelativeImportExtension(specifier));
31
+ }
32
+ /**
33
+ * The Workers plugin for the wrangler file at `configPath`, as a promise vite settles while it resolves the config;
34
+ * the plugin is ESM only, so a synchronous `require` cannot load it. A plugin that is not installed becomes the line
35
+ * that says how to install it, naming the wrangler file; a module without `cloudflareTest` is an error naming the
36
+ * expected range; any other load error passes through unchanged.
37
+ */
38
+ export async function workersPlugin(configPath, load = importPlugin) {
39
+ let loaded;
40
+ try {
41
+ loaded = await load();
42
+ }
43
+ catch (error) {
44
+ if (!isPluginMissing(error))
45
+ throw error;
46
+ const file = path.basename(configPath);
47
+ throw new Error(`${MESSAGE_PREFIX}: ${file} is here, so tests run in the Workers runtime; ${installHint}`, {
48
+ cause: error,
49
+ });
50
+ }
51
+ if (!hasCloudflareTest(loaded))
52
+ throw new Error(`${MESSAGE_PREFIX}: ${PLUGIN_PACKAGE} does not export cloudflareTest; ${installHint}@${PLUGIN_RANGE}`);
53
+ return loaded.cloudflareTest({ wrangler: { configPath } });
54
+ }
package/package.json CHANGED
@@ -1,6 +1,143 @@
1
1
  {
2
2
  "name": "@workerstack/repo",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "description": "Agent workflow, code standards, gates, workspace and docs checks for workerstack repos",
6
+ "keywords": [
7
+ "agents",
8
+ "workerstack",
9
+ "monorepo",
10
+ "lint",
11
+ "ci"
12
+ ],
13
+ "homepage": "https://github.com/workerstack/repo",
14
+ "bugs": {
15
+ "url": "https://github.com/workerstack/repo/issues"
16
+ },
17
+ "license": "MIT",
18
+ "author": "workerstack",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/workerstack/repo.git"
22
+ },
23
+ "bin": {
24
+ "repo": "./bin/repo.ts"
25
+ },
26
+ "exports": {
27
+ ".": {
28
+ "types": "./cli/config.ts",
29
+ "default": "./cli/config.ts"
30
+ },
31
+ "./tsconfig/*": "./tsconfig/*.json",
32
+ "./agents/*": "./agents/*",
33
+ "./lint": "./cli/lint/index.ts",
34
+ "./vitest": {
35
+ "types": "./dist/presets/vitest.d.ts",
36
+ "default": "./dist/presets/vitest.js"
37
+ },
38
+ "./package.json": "./package.json"
39
+ },
40
+ "files": [
41
+ "bin/repo.ts",
42
+ "cli",
43
+ "!cli/sync/fixtures/consumer",
44
+ "!cli/sync/fixtures/consumer-stock",
45
+ "!cli/sync/fixtures/golden",
46
+ "references",
47
+ "tsconfig",
48
+ "dist/presets/*.js",
49
+ "dist/presets/*.d.ts",
50
+ "dist/cli/env*.js",
51
+ "dist/cli/env*.d.ts",
52
+ "agents",
53
+ "!cli/scripts/**/*.test.ts",
54
+ "!cli/lint/**/*.test.ts",
55
+ "!cli/scripts/fixtures",
56
+ "README.md",
57
+ "LICENSE",
58
+ "CHANGELOG.md"
59
+ ],
60
+ "type": "module",
61
+ "sideEffects": false,
62
+ "publishConfig": {
63
+ "access": "public"
64
+ },
65
+ "dependencies": {
66
+ "@clack/prompts": "^0.11.0",
67
+ "@oxlint/plugins": "1.92.0",
68
+ "@total-typescript/ts-reset": "^0.6.1",
69
+ "@types/bun": "^1.4.4",
70
+ "cross-spawn": "^7.0.6",
71
+ "jsonc-parser": "^3.3.1",
72
+ "knip": "6.43.0",
73
+ "oxc-parser": "0.157.0",
74
+ "oxfmt": "0.77.0",
75
+ "oxlint": "1.92.0",
76
+ "oxlint-tsgolint": "7.0.2006",
77
+ "smol-toml": "^1.8.0",
78
+ "typescript": "^5.9.3",
79
+ "yaml": "2.9.1",
80
+ "zod": "^4.6.7"
81
+ },
82
+ "peerDependencies": {
83
+ "@cloudflare/vitest-plugin": "^1.6.0",
84
+ "@cloudflare/workers-types": ">=4",
85
+ "@stryker-mutator/core": "10.1.1",
86
+ "@stryker-mutator/vitest-runner": "10.1.1",
87
+ "@vitest/coverage-istanbul": "^5.1.0",
88
+ "vitest": "^5.1.0"
89
+ },
90
+ "peerDependenciesMeta": {
91
+ "@cloudflare/vitest-plugin": {
92
+ "optional": true
93
+ },
94
+ "@cloudflare/workers-types": {
95
+ "optional": true
96
+ },
97
+ "@stryker-mutator/core": {
98
+ "optional": true
99
+ },
100
+ "@stryker-mutator/vitest-runner": {
101
+ "optional": true
102
+ },
103
+ "@vitest/coverage-istanbul": {
104
+ "optional": true
105
+ },
106
+ "vitest": {
107
+ "optional": true
108
+ }
109
+ },
110
+ "scripts": {
111
+ "prepare": "bun ./dev/link-self.ts",
112
+ "build": "bun --bun tsc -p tsconfig.build.json",
113
+ "prepack": "bun run build",
114
+ "doctor": "repo doctor",
115
+ "clean": "repo clean",
116
+ "setup": "repo setup",
117
+ "tasks": "repo tasks",
118
+ "yolo": "repo yolo",
119
+ "yolo:check": "repo yolo --check",
120
+ "purge:global-mcps": "repo purge-mcps",
121
+ "purge:global-mcps:apply": "repo purge-mcps --apply",
122
+ "typecheck": "bun --bun tsc -p .",
123
+ "lint": "bun ./bin/repo.ts lint",
124
+ "fmt": "bun ./bin/repo.ts fmt",
125
+ "test": "bun --bun vitest run",
126
+ "ci": "bun ./bin/repo.ts ci",
127
+ "test:e2e": "bun --bun vitest run -c vitest.e2e.config.ts"
128
+ },
129
+ "devDependencies": {
130
+ "@stryker-mutator/core": "10.1.1",
131
+ "@stryker-mutator/vitest-runner": "10.1.1",
132
+ "@types/cross-spawn": "^6.0.6",
133
+ "@types/node": "^24.13.3",
134
+ "@vitest/coverage-istanbul": "^5.1.0",
135
+ "tar": "^7.5.22",
136
+ "verdaccio": "^6.10.5",
137
+ "vitest": "^5.1.0"
138
+ },
139
+ "engines": {
140
+ "bun": ">=1.4.4"
141
+ },
142
+ "packageManager": "bun@1.4.4"
143
+ }
@@ -0,0 +1,100 @@
1
+ # Law
2
+
3
+ Protocol stays overview; domain fills this.
4
+
5
+ ## Skills naming
6
+
7
+ Do not reuse a repo skill name for a consumer custom skill: a repo-owned skill of the same name in `.repo/skills/` replaces the stock one. Pack names stay reserved when their directory is absent.
8
+
9
+ `bun repo sync` links the stock skills from the installed package into each host tree and writes the rest; it never copies stock references or scripts. doctor/listen/speak call the consumer's root `scripts/lib/env.mjs` `loadEnv` when that file exists.
10
+
11
+ Upgrading is bumping `@workerstack/repo` in `package.json` and running `bun install`: the postinstall sync regenerates every tree from the new package. The first sync in a repo an older `bun repo init` copied moves your own rules, subagents, skills, settings keys, lessons, hooks and references into `.repo/` and `references/`, untracks the generated paths, removes the copied `.rulesync/`, and prints one moved line per move. Commit the result. There is no upgrade command.
12
+
13
+ <!-- repo:skills -->
14
+ | name | origin | description | task | commandPath | refs |
15
+ | --- | --- | --- | --- | --- | --- |
16
+ | ask | repo | Session flag. Finish one step, recap, then ask before the next. | | | |
17
+ | auto | repo | >- | | | |
18
+ | away | repo | Session flag. Nobody is watching: decide instead of asking, log each choice, keep going. | | | |
19
+ | blast-radius | repo | >- | | | |
20
+ | bro | repo | Restate the last message in plain human language, with no jargon. | | | |
21
+ | browser | repo | >- | | | |
22
+ | clasp | repo | >- | | | |
23
+ | commit | repo | Inspect the diff and commit with a Conventional Commits subject line. Use for /commit, "commit this", "commit these cha… | | | |
24
+ | commit-and-push | repo | Alias of commit-push (1-release stub). Use for /commit-and-push, "commit and push", "commit this and push". Must push.… | | | |
25
+ | commit-push | repo | Commit with a Conventional Commits subject, then push. Use for /commit-push, "commit and push", "commit this and push".… | | | |
26
+ | commit-push-deploy | repo | Commit, push, then deploy only if allowlisted infra already exists. Use for /commit-push-deploy, "commit push deploy",… | | | |
27
+ | commit-push-release | repo | Commit, push, and for "release" run `bun repo release` from the main checkout (it bumps, stamps CHANGELOG.md, pushes, w… | | | |
28
+ | correct | repo | >- | | | |
29
+ | do | repo | Do a small task now: no plan, no review. Worktree, nearest test and commit still apply. | | | |
30
+ | explain | repo | Longer human recap this reply only. | | | |
31
+ | google-workspace | repo | >- | | | |
32
+ | handoff | repo | Write a session handoff under .tmp/repo/handoffs/. Continue with /pickup. | | | |
33
+ | implement-plan | repo | Execute remaining leaves in a .tmp/repo/plans checklist. Skip [x]. | | | |
34
+ | implement-roadmap | repo | >- | | | |
35
+ | jev | repo | >- | | | |
36
+ | listen | repo | >- | | | |
37
+ | pickup | repo | Continue a handoff under .tmp/repo/handoffs/. | | | |
38
+ | principle-attack-the-premise | repo | >- | | | |
39
+ | principle-boundary-discipline | repo | >- | | | |
40
+ | principle-build-the-lever | repo | >- | | | |
41
+ | principle-encode-lessons-in-structure | repo | >- | | | |
42
+ | principle-exhaust-the-design-space | repo | >- | | | |
43
+ | principle-experience-first | repo | >- | | | |
44
+ | principle-explain-the-number | repo | >- | | | |
45
+ | principle-fix-root-causes | repo | >- | | | |
46
+ | principle-foundational-thinking | repo | >- | | | |
47
+ | principle-guard-the-context-window | repo | >- | | | |
48
+ | principle-laziness-protocol | repo | >- | | | |
49
+ | principle-make-operations-idempotent | repo | >- | | | |
50
+ | principle-migrate-callers-then-delete-legacy-apis | repo | >- | | | |
51
+ | principle-minimize-reader-load | repo | >- | | | |
52
+ | principle-model-the-domain | repo | >- | | | |
53
+ | principle-never-block-on-the-human | repo | >- | | | |
54
+ | principle-outcome-oriented-execution | repo | >- | | | |
55
+ | principle-prove-it-works | repo | >- | | | |
56
+ | principle-redesign-from-first-principles | repo | >- | | | |
57
+ | principle-separate-before-serializing-shared-state | repo | >- | | | |
58
+ | principle-sequence-verifiable-units | repo | >- | | | |
59
+ | principle-subtract-before-you-add | repo | >- | | | |
60
+ | principle-test-behavior-not-implementation | repo | >- | | | |
61
+ | principle-type-system-discipline | repo | >- | | | |
62
+ | review-plan | repo | Review a plan in a fresh agent before approval. Use for /review-plan. | | | |
63
+ | review-roadmap | repo | Review a roadmap in a fresh agent before lock. Use for /review-roadmap. | | | |
64
+ | show-me | repo | Restate the current proposal as a concrete before and after: commands, output, errors, files. | | | |
65
+ | speak | repo | >- | | | |
66
+ | su | repo | Short status update: done, next, and blockers or on-track ETA. | | | |
67
+ | teach | repo | >- | | | |
68
+ | tmp | repo | Dump a one-off convo artifact under .tmp/repo/. | | | |
69
+ | typescript-best-practices | repo | >- | | | |
70
+ | unslop | repo | Cut AI tells from any writing. Use for /unslop. | | | |
71
+ | write-plan | repo | Write a local checklist under .tmp/repo/plans/. Then /implement-plan {n}. | | | |
72
+ | write-roadmap | repo | >- | | | |
73
+ <!-- /repo:skills -->
74
+
75
+ <!-- repo:refs -->
76
+ | path | title | tags | summary |
77
+ | --- | --- | --- | --- |
78
+ | node_modules/@workerstack/repo/references/browser.md | Browser | browser | Zero-config in-tree session rail. Not MCP. Not env. Not raw Playwright. Lightpanda first; swap to Chromium when blocked. |
79
+ | node_modules/@workerstack/repo/references/cascade.md | Protocol | cascade | The session agent has tools. Fat Read/Grep/Bash dumps are rewritten to `<root>/node_modules/.bin/repo job` (squeez + st… |
80
+ | node_modules/@workerstack/repo/references/clasp.md | Clasp | clasp | Low-level Apps Script CLI. Optional. Doctor reports it. |
81
+ | node_modules/@workerstack/repo/references/cloudflare.md | Cloudflare | cloudflare | Use `cf` for every Cloudflare task. Do not run `wrangler` yourself and do not add it to a project that has none. |
82
+ | node_modules/@workerstack/repo/references/google-workspace.md | google-workspace | google-workspace | Create and edit Google Sheets, Docs, Slides, Calendar events, and Gmail from the session. |
83
+ | node_modules/@workerstack/repo/references/hooks.md | Hooks | hooks | SessionStart carries only the folder map: Claude / Codex run the `session-map` hook, which injects the code-only map `b… |
84
+ | node_modules/@workerstack/repo/references/implementation-format.md | Implementation format (SSOT) | | Local session journal for `/implement-plan`. Not a plan, handoff, or git commit. |
85
+ | node_modules/@workerstack/repo/references/jev.md | Jev | jev | Closed external decision. The source text is already saved. The question is a yes/no or a named choice. One call. Not o… |
86
+ | node_modules/@workerstack/repo/references/lessons.md | Lessons | lessons | Mistakes that outlive one task. One committed file per mistake under `.repo/lessons/`, with a generated index. Not host… |
87
+ | node_modules/@workerstack/repo/references/listen.md | Listen | listen | Speech-to-text from the session. Input only. Not TTS. Not a live voice agent. Not MCP. |
88
+ | node_modules/@workerstack/repo/references/map.md | Map | map | Cheap outline. Not a file dump. |
89
+ | node_modules/@workerstack/repo/references/output.md | Output | output | en-US default. Detail behind the reply rules in `overview.md`, which stays the source for voice and shape. |
90
+ | node_modules/@workerstack/repo/references/plan-format.md | Plan format (SSOT) | | Local session checklist. Not a design doc, PR stack, or DAG. |
91
+ | node_modules/@workerstack/repo/references/review-loop.md | Review loop | review-loop | Read this when the plan's `strategy` is `review-fast` or `review-deep`. You are the reviewer. An implementer agent writ… |
92
+ | node_modules/@workerstack/repo/references/roadmap-format.md | Roadmap format (SSOT) | | Ordered program of child plans. Not a plan, a handoff, or a design doc. |
93
+ | node_modules/@workerstack/repo/references/rtk.md | RTK | rtk | Shell stdout compression. PreToolUse: Bash → `rtk <cmd>`. Not Read/Grep/Glob/prompts/images. |
94
+ | node_modules/@workerstack/repo/references/scope.md | Scope | scope | Plan by default. A straight shot is the exception. The plan caps the result, so its depth scales with the work. This fi… |
95
+ | node_modules/@workerstack/repo/references/setup.md | Setup | setup | Handheld machine setup for optional integrations. Any OS. Secrets stay in `~/.workerstack/` (Windows `%USERPROFILE%\.wo… |
96
+ | node_modules/@workerstack/repo/references/speak.md | Speak | speak | Text-to-speech from the session. Output only. Not STT. Not a mic. Not MCP. Speech-to-text is `/listen`: `node_modules/@… |
97
+ <!-- /repo:refs -->
98
+
99
+ <!-- repo:stack -->
100
+ <!-- /repo:stack -->
@@ -0,0 +1,66 @@
1
+ ---
2
+ tags: [browser]
3
+ ---
4
+
5
+ # Browser
6
+
7
+ Zero-config in-tree session rail. Not MCP. Not env. Not raw Playwright. Lightpanda first; swap to Chromium when blocked.
8
+
9
+ ```
10
+ bun repo browser nav|snap|click|fill|scroll|wait|hover|select|shot|pdf|stop|doctor|ensure
11
+ ```
12
+
13
+ Default engine: **Lightpanda** (`lightpanda` on PATH). Chromium when a rule below requires it. Never report "can't browse" while Chromium is available.
14
+
15
+ ## Verbs
16
+
17
+ | verb | purpose |
18
+ | --- | --- |
19
+ | `nav <url>` | launch or reuse session; go to URL |
20
+ | `snap` | markdown + numbered AX refs (default read) |
21
+ | `click <ref>` | click a ref from last `snap` |
22
+ | `fill <ref> <text>` | fill a ref from last `snap` |
23
+ | `scroll [ref|down|up|N]` | scroll a snap ref into view, or the window |
24
+ | `wait [ms]` | pause (default 1000, cap 15000) |
25
+ | `hover <ref>` | hover a snap ref |
26
+ | `select <ref> <value>` | set a select/option value |
27
+ | `shot` | screenshot (Chromium paint) |
28
+ | `pdf` | PDF (Chromium paint) |
29
+ | `stop` | reap engine pid; clear session; idempotent |
30
+ | `doctor` | unified prereq doctor (`bun repo doctor`); alias `ensure` |
31
+ | `ensure` | alias of `doctor` |
32
+
33
+ Session + profile + artifacts: `.tmp/repo/browser/` only.
34
+
35
+ ## Install
36
+
37
+ Run `bun repo doctor`. Handheld engine hints (no keys): `bun repo setup browser`. Doctor/setup is enough. Do not read a README unless those are missing; then https://github.com/workerstack/repo#prerequisites (not the consumer README).
38
+
39
+ ## Engine
40
+
41
+ Lightpanda first (`lightpanda serve` internally, CDP, `LP.getMarkdown` + AX refs).
42
+
43
+ Chromium immediately when any of:
44
+
45
+ - verb is `shot` | `pdf` | `trace`
46
+ - `process.platform === "win32"`
47
+ - Chromium-first host: figma, Google docs / sheets / slides, mail.google, earth, amazon
48
+ - `lightpanda` missing from PATH and a Chromium binary is present
49
+ - Lightpanda probe fails **once** → one Chromium replay of last URL; no loop
50
+ - `snap` on Lightpanda is empty, a bot/JS wall, or client-rendered junk → one Chromium replay, then snap again
51
+
52
+ The session agent does not invent a "can't" for Amazon or other client-rendered sites. The rail swaps. One swap cap. App e2e stays Playwright (`playwright test`), not this CLI.
53
+
54
+ No user env. Never `REPO_BROWSER*`. Never `LIGHTPANDA_CDP_URL`.
55
+
56
+ ## Non-goals
57
+
58
+ - MCP browser servers
59
+ - user env knobs
60
+ - raw Playwright as the browse tool (Playwright is the app e2e runner)
61
+ - repo `job:browse`
62
+ - teaching thinker / orchestrator to browse
63
+
64
+ ## RTK
65
+
66
+ `playwright` on the RTK command list is the **test-runner family only**. Browser rail is `lightpanda` + `bun repo browser`.
@@ -0,0 +1,15 @@
1
+ ---
2
+ tags: [cascade]
3
+ ---
4
+
5
+ # Protocol
6
+
7
+ The session agent has tools. Fat Read/Grep/Bash dumps are rewritten to `<root>/node_modules/.bin/repo job` (squeez + stash). Isolation facts stay ≤8 lines.
8
+
9
+ Run `bun repo job --job search|exec|slice|fetch|test` first. Spawn scout when the dump needs judgment (browse snap, messy test log) and the return is a short isolation fact; spawn researcher for heavy web or browser research that returns facts with sources. Use a host agent or a fan-out when that split is cheaper for the task, or when the user asks for it.
10
+
11
+ `need:` JSON (search|exec|slice|fetch) may be intercepted in-hook (cap 4). Peek/kill if a child is running: Grok `get_command_or_subagent_output` `timeout_ms=60000`. Other hosts: block on spawn return.
12
+
13
+ Session flags: `/auto` (default) keeps going and asks on blockers instead of monkey-patching. `/ask` finishes one step, recaps, then asks. `/away` decides instead of asking and logs each choice as a `- decision:` entry in the plan. Slash `/ask` or `/away` stamps `.tmp/repo/orchestrator-logs/session-gate-{sid}` with `ask` or `away`; `/auto` unlinks either stamp. A plan or roadmap `mode:` wins over the flag.
14
+
15
+ Scratch: `.tmp/repo/`. Stash: `.tmp/repo/stash/`. Sessions: `.tmp/repo/sessions/{sid}/`. Browser: `.tmp/repo/browser/`.
@@ -0,0 +1,21 @@
1
+ ---
2
+ tags: [clasp]
3
+ ---
4
+
5
+ # Clasp
6
+
7
+ Low-level Apps Script CLI. Optional. Doctor reports it.
8
+
9
+ For create/edit sheet, doc, slide, meeting, or mail, use **google-workspace**: `node_modules/@workerstack/repo/references/google-workspace.md` and `bun repo google-workspace`. Do not start from clasp.
10
+
11
+ ```
12
+ bun add -g @google/clasp
13
+ clasp login
14
+ clasp create --type standalone --title <name>
15
+ clasp pull
16
+ clasp push
17
+ clasp run <function>
18
+ clasp status
19
+ ```
20
+
21
+ Script files live next to `appsscript.json`. Git tracks them. `clasp run` needs the Apps Script API and an API-executable deployment. That path is for custom `.gs`, not day-to-day Workspace.