forge-workflow 0.0.10 → 0.1.0-beta.2

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 (454) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +3 -0
  5. package/.forge/hooks/forge-native-hook.js +245 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +150 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +171 -0
  11. package/README.md +271 -363
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +461 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/forge/TOOLCHAIN.md +670 -0
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +118 -0
  29. package/docs/guides/SUPPORT.md +185 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +205 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/{TOOLCHAIN.md → reference/TOOLCHAIN.md} +62 -47
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +115 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/adapter-cli.js +307 -0
  67. package/lib/adapters/beads-issue-adapter.js +127 -0
  68. package/lib/adapters/beads-kernel-compat.js +1042 -0
  69. package/lib/adapters/greptile-review-adapter.js +141 -0
  70. package/lib/adapters/kernel-issue-adapter.js +101 -0
  71. package/lib/adapters/pr-state-adapter.js +484 -0
  72. package/lib/adoption-profiles.js +126 -0
  73. package/lib/agents/README.md +2 -6
  74. package/lib/agents/claude.plugin.json +3 -8
  75. package/lib/agents/codex.plugin.json +9 -1
  76. package/lib/agents/cursor.plugin.json +2 -6
  77. package/lib/agents/hermes.plugin.json +22 -0
  78. package/lib/agents-config.js +39 -1236
  79. package/lib/audit-evidence.js +282 -0
  80. package/lib/beads-setup.js +121 -0
  81. package/lib/beads-sync-scaffold.js +25 -101
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +741 -77
  84. package/lib/commands/_manifest.js +91 -0
  85. package/lib/commands/_registry.js +85 -34
  86. package/lib/commands/_resolve-command-opts.js +261 -0
  87. package/lib/commands/_serve-security.js +270 -0
  88. package/lib/commands/adapter.js +12 -0
  89. package/lib/commands/add.js +118 -0
  90. package/lib/commands/audit.js +70 -0
  91. package/lib/commands/blocked.js +5 -0
  92. package/lib/commands/board.js +64 -0
  93. package/lib/commands/claim.js +21 -2
  94. package/lib/commands/claims.js +7 -0
  95. package/lib/commands/clean.js +485 -75
  96. package/lib/commands/close.js +2 -2
  97. package/lib/commands/comment.js +5 -0
  98. package/lib/commands/control.js +148 -0
  99. package/lib/commands/create.js +2 -2
  100. package/lib/commands/dev.js +185 -7
  101. package/lib/commands/doc-gate.js +336 -0
  102. package/lib/commands/doctor.js +156 -0
  103. package/lib/commands/explain.js +15 -0
  104. package/lib/commands/export.js +237 -0
  105. package/lib/commands/gate.js +192 -0
  106. package/lib/commands/hooks.js +242 -0
  107. package/lib/commands/inbox.js +118 -0
  108. package/lib/commands/init.js +598 -0
  109. package/lib/commands/insights.js +79 -0
  110. package/lib/commands/issue.js +12 -1
  111. package/lib/commands/issues.js +17 -0
  112. package/lib/commands/lint.js +5 -0
  113. package/lib/commands/list.js +2 -2
  114. package/lib/commands/merge.js +312 -0
  115. package/lib/commands/migrate.js +523 -0
  116. package/lib/commands/new.js +12 -0
  117. package/lib/commands/options.js +241 -0
  118. package/lib/commands/orient.js +13 -0
  119. package/lib/commands/orphans.js +5 -0
  120. package/lib/commands/patch.js +67 -0
  121. package/lib/commands/plan.js +436 -24
  122. package/lib/commands/preflight.js +211 -0
  123. package/lib/commands/prime.js +13 -0
  124. package/lib/commands/push.js +69 -2
  125. package/lib/commands/ready.js +2 -2
  126. package/lib/commands/recall.js +116 -0
  127. package/lib/commands/recap.js +61 -0
  128. package/lib/commands/recommend.js +0 -1
  129. package/lib/commands/release.js +91 -0
  130. package/lib/commands/remember.js +74 -0
  131. package/lib/commands/role.js +99 -0
  132. package/lib/commands/serve.js +581 -0
  133. package/lib/commands/setup.js +838 -972
  134. package/lib/commands/shepherd.js +436 -0
  135. package/lib/commands/ship.js +23 -1
  136. package/lib/commands/show.js +2 -2
  137. package/lib/commands/stage.js +192 -0
  138. package/lib/commands/stale.js +5 -0
  139. package/lib/commands/status.js +158 -21
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +4 -1
  142. package/lib/commands/test.js +43 -27
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +43 -18
  146. package/lib/commands/worktree.js +307 -100
  147. package/lib/config-writer.js +202 -0
  148. package/lib/control-plane.js +236 -0
  149. package/lib/core/runtime-graph.js +946 -0
  150. package/lib/dep-guard/keyword-ripple.js +2 -2
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +35 -9
  154. package/lib/doc-gate/declaration.js +177 -0
  155. package/lib/doc-gate/detect.js +289 -0
  156. package/lib/doc-gate/gate.js +375 -0
  157. package/lib/doc-gate/okf-config.js +128 -0
  158. package/lib/doc-gate/okf.js +429 -0
  159. package/lib/docs-command.js +1161 -6
  160. package/lib/forge-issues.js +382 -11
  161. package/lib/forge-lock.js +262 -0
  162. package/lib/gate-events.js +193 -0
  163. package/lib/global-flags.js +74 -0
  164. package/lib/greptile-match.js +7 -63
  165. package/lib/harness-capability-matrix.js +380 -0
  166. package/lib/hook-global-installer.js +347 -0
  167. package/lib/hook-renderer.js +451 -0
  168. package/lib/inbox.js +391 -0
  169. package/lib/insights.js +397 -0
  170. package/lib/issue-adapter.js +156 -0
  171. package/lib/issue-backend.js +145 -0
  172. package/lib/issue-render.js +220 -0
  173. package/lib/kernel/backing-issue.js +305 -0
  174. package/lib/kernel/broker.js +1218 -0
  175. package/lib/kernel/cli-broker-factory.js +130 -0
  176. package/lib/kernel/conflict-signal.js +82 -0
  177. package/lib/kernel/evaluators.js +195 -0
  178. package/lib/kernel/fs-class.js +495 -0
  179. package/lib/kernel/issue-command-contract.js +559 -0
  180. package/lib/kernel/issue-id-resolver.js +186 -0
  181. package/lib/kernel/lease-enforcer.js +158 -0
  182. package/lib/kernel/migrations.js +333 -0
  183. package/lib/kernel/planning-buckets-schema.js +109 -0
  184. package/lib/kernel/projection-jsonl-writer.js +450 -0
  185. package/lib/kernel/readiness-model.js +329 -0
  186. package/lib/kernel/schema.js +356 -0
  187. package/lib/kernel/sqlite-driver.js +2504 -0
  188. package/lib/kernel/taxonomy-validator.js +394 -0
  189. package/lib/lefthook-check.js +3 -2
  190. package/lib/lefthook-wiring.js +413 -0
  191. package/lib/mcp-config-renderer.js +288 -0
  192. package/lib/memory/graphiti-mcp.js +106 -0
  193. package/lib/memory/router.js +387 -0
  194. package/lib/memory/typed-api.js +102 -0
  195. package/lib/memory-digest.js +195 -0
  196. package/lib/merge-rules.js +395 -0
  197. package/lib/migrate-dry-run.js +466 -0
  198. package/lib/orientation.js +863 -0
  199. package/lib/package-manager-remediation.js +103 -0
  200. package/lib/package-root.js +381 -0
  201. package/lib/patch-intent.js +890 -0
  202. package/lib/plugin-catalog.js +3 -4
  203. package/lib/plugin-manager.js +0 -5
  204. package/lib/pr-bundle.js +186 -0
  205. package/lib/pr-monitor/differ.js +195 -0
  206. package/lib/pr-monitor/events.js +0 -0
  207. package/lib/pr-monitor/gather.js +124 -0
  208. package/lib/pr-monitor/journal.js +299 -0
  209. package/lib/pr-monitor/monitor.js +146 -0
  210. package/lib/pr-monitor/render-sticky.js +157 -0
  211. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  212. package/lib/pr-monitor/watch.js +247 -0
  213. package/lib/pr-pull.js +1273 -0
  214. package/lib/pr-shepherd.js +494 -0
  215. package/lib/pr-state-validator.js +59 -0
  216. package/lib/preflight/gates.js +237 -0
  217. package/lib/preflight/runner.js +116 -0
  218. package/lib/project-discovery.js +0 -53
  219. package/lib/project-memory.js +99 -497
  220. package/lib/protected-path-manifest.js +281 -0
  221. package/lib/protected-state-surfaces.js +387 -0
  222. package/lib/release-readiness.js +2089 -0
  223. package/lib/reset.js +59 -45
  224. package/lib/review-adapter.js +68 -0
  225. package/lib/rules-sync.js +260 -0
  226. package/lib/runtime-health.js +241 -20
  227. package/lib/safety-config-renderer.js +268 -0
  228. package/lib/setup-action-log.js +1 -7
  229. package/lib/setup.js +27 -65
  230. package/lib/shell-utils.js +76 -6
  231. package/lib/skills-sync.js +330 -0
  232. package/lib/smart-status/scoring.js +17 -3
  233. package/lib/status/beads-snapshot.js +45 -2
  234. package/lib/status/presenter.js +169 -18
  235. package/lib/status/snapshot.js +186 -0
  236. package/lib/sync-backend.js +202 -0
  237. package/lib/untrusted-content.js +52 -0
  238. package/lib/upgrade-safety.js +199 -0
  239. package/lib/workflow/enforce-stage.js +296 -47
  240. package/lib/workflow/stage-transition.js +115 -0
  241. package/lib/workflow/stages.js +30 -6
  242. package/lib/workflow/state-manager.js +11 -22
  243. package/lib/workflow/state.js +23 -1
  244. package/lib/workflow-profiles.js +17 -5
  245. package/package.json +37 -35
  246. package/rules/documentation.md +19 -0
  247. package/rules/kernel-tracking.md +26 -0
  248. package/rules/security.md +22 -0
  249. package/rules/tdd.md +20 -0
  250. package/rules/workflow.md +27 -0
  251. package/scripts/auto-backing-issue.js +47 -0
  252. package/scripts/beads-context.sh +81 -57
  253. package/scripts/beads-upgrade-smoke.sh +24 -3
  254. package/scripts/bootstrap-windows-tools.sh +78 -0
  255. package/scripts/branch-protection.js +2 -3
  256. package/scripts/check-agents.js +34 -137
  257. package/scripts/commitlint.js +3 -1
  258. package/scripts/conflict-detect.sh +3 -0
  259. package/scripts/dep-guard.sh +22 -3
  260. package/scripts/file-index.sh +3 -0
  261. package/scripts/forge-team/lib/claim.sh +34 -18
  262. package/scripts/forge-team/lib/dashboard.sh +61 -86
  263. package/scripts/forge-team/lib/epic.sh +99 -263
  264. package/scripts/forge-team/lib/hooks.sh +26 -28
  265. package/scripts/forge-team/lib/identity.sh +4 -4
  266. package/scripts/forge-team/lib/sync-github.sh +49 -84
  267. package/scripts/forge-team/lib/verify.sh +93 -83
  268. package/scripts/forge-team/lib/workload.sh +41 -65
  269. package/scripts/forge-team/tests/claim.test.sh +25 -19
  270. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  271. package/scripts/forge-team/tests/epic.test.sh +52 -71
  272. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  273. package/scripts/forge-team/tests/identity.test.sh +3 -3
  274. package/scripts/forge-team/tests/integration.test.sh +44 -66
  275. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  276. package/scripts/forge-team/tests/verify.test.sh +37 -46
  277. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  278. package/scripts/forge-team/tests/workload.test.sh +32 -66
  279. package/scripts/gen-command-manifest.js +153 -0
  280. package/scripts/gen-embedded-assets.mjs +129 -0
  281. package/scripts/install.ps1 +139 -0
  282. package/scripts/install.sh +268 -0
  283. package/scripts/lib/release-asset.mjs +84 -0
  284. package/scripts/parity-check.mjs +145 -0
  285. package/scripts/parity-check.test.mjs +58 -0
  286. package/scripts/pin-agentic-workflow-images.js +112 -0
  287. package/scripts/pr-coordinator.sh +3 -0
  288. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  289. package/scripts/preflight.sh +21 -94
  290. package/scripts/protected-state-check.js +104 -0
  291. package/scripts/smart-status.sh +60 -57
  292. package/scripts/spikes/config-race-bench.js +111 -0
  293. package/scripts/spikes/harness-capability-matrix.js +13 -0
  294. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  295. package/scripts/spikes/protected-path-manifest.js +20 -0
  296. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  297. package/scripts/sync-agent-skills.js +62 -0
  298. package/scripts/sync-utils.sh +3 -0
  299. package/scripts/test-ci-shard.js +13 -6
  300. package/scripts/test.js +95 -12
  301. package/skills/claim-safety/SKILL.md +102 -0
  302. package/skills/claim-safety/evals/evals.json +46 -0
  303. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  304. package/skills/dev/evals/evals.json +50 -0
  305. package/skills/hermes-forge/SKILL.md +185 -0
  306. package/skills/hermes-forge/evals/evals.json +46 -0
  307. package/skills/issue-basics/SKILL.md +111 -0
  308. package/skills/issue-basics/evals/evals.json +46 -0
  309. package/skills/kernel/SKILL.md +166 -0
  310. package/skills/kernel/evals/evals.json +50 -0
  311. package/skills/memory/SKILL.md +102 -0
  312. package/skills/parallel-deep-research/SKILL.md +14 -11
  313. package/skills/parallel-deep-research/evals/evals.json +11 -27
  314. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  315. package/skills/plan/evals/evals.json +42 -0
  316. package/skills/research/SKILL.md +195 -0
  317. package/skills/research/evals/evals.json +42 -0
  318. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  319. package/skills/review/evals/evals.json +42 -0
  320. package/skills/rollback/SKILL.md +110 -0
  321. package/skills/rollback/evals/evals.json +46 -0
  322. package/skills/rollback/references/methods.md +204 -0
  323. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  324. package/skills/shepherd/SKILL.md +66 -0
  325. package/skills/shepherd/evals/evals.json +42 -0
  326. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  327. package/skills/ship/evals/evals.json +42 -0
  328. package/skills/smith/SKILL.md +142 -0
  329. package/skills/smith/evals/evals.json +46 -0
  330. package/skills/smith/references/autonomy-and-gates.md +94 -0
  331. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  332. package/skills/sonarcloud/evals/evals.json +46 -0
  333. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  334. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  335. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  336. package/skills/status/evals/evals.json +50 -0
  337. package/skills/triage-ready/SKILL.md +121 -0
  338. package/skills/triage-ready/evals/evals.json +42 -0
  339. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  340. package/skills/validate/evals/evals.json +42 -0
  341. package/skills/verify/SKILL.md +299 -0
  342. package/skills/verify/evals/evals.json +50 -0
  343. package/.claude/commands/dev.md +0 -345
  344. package/.claude/commands/plan.md +0 -566
  345. package/.claude/commands/premerge.md +0 -186
  346. package/.claude/commands/research.md +0 -42
  347. package/.claude/commands/review.md +0 -451
  348. package/.claude/commands/rollback.md +0 -721
  349. package/.claude/commands/ship.md +0 -213
  350. package/.claude/commands/sonarcloud.md +0 -152
  351. package/.claude/commands/status.md +0 -90
  352. package/.claude/commands/validate.md +0 -288
  353. package/.claude/commands/verify.md +0 -269
  354. package/.claude/rules/workflow.md +0 -121
  355. package/.cline/workflows/dev.md +0 -342
  356. package/.cline/workflows/plan.md +0 -563
  357. package/.cline/workflows/premerge.md +0 -183
  358. package/.cline/workflows/research.md +0 -39
  359. package/.cline/workflows/review.md +0 -448
  360. package/.cline/workflows/rollback.md +0 -718
  361. package/.cline/workflows/ship.md +0 -210
  362. package/.cline/workflows/sonarcloud.md +0 -146
  363. package/.cline/workflows/status.md +0 -87
  364. package/.cline/workflows/validate.md +0 -285
  365. package/.cline/workflows/verify.md +0 -266
  366. package/.codex/config.toml +0 -11
  367. package/.codex/skills/dev/SKILL.md +0 -345
  368. package/.codex/skills/plan/SKILL.md +0 -566
  369. package/.codex/skills/premerge/SKILL.md +0 -186
  370. package/.codex/skills/research/SKILL.md +0 -42
  371. package/.codex/skills/review/SKILL.md +0 -451
  372. package/.codex/skills/rollback/SKILL.md +0 -721
  373. package/.codex/skills/ship/SKILL.md +0 -213
  374. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  375. package/.codex/skills/status/SKILL.md +0 -90
  376. package/.codex/skills/validate/SKILL.md +0 -288
  377. package/.codex/skills/verify/SKILL.md +0 -269
  378. package/.cursor/commands/dev.md +0 -342
  379. package/.cursor/commands/plan.md +0 -563
  380. package/.cursor/commands/premerge.md +0 -183
  381. package/.cursor/commands/research.md +0 -39
  382. package/.cursor/commands/review.md +0 -448
  383. package/.cursor/commands/ship.md +0 -210
  384. package/.cursor/commands/sonarcloud.md +0 -146
  385. package/.cursor/commands/status.md +0 -87
  386. package/.cursor/commands/validate.md +0 -285
  387. package/.cursor/commands/verify.md +0 -266
  388. package/.cursorrules +0 -149
  389. package/.github/prompts/premerge.prompt.md +0 -188
  390. package/.github/prompts/research.prompt.md +0 -44
  391. package/.github/prompts/rollback.prompt.md +0 -723
  392. package/.github/prompts/verify.prompt.md +0 -271
  393. package/.github/workflows/beads-to-github.yml +0 -89
  394. package/.github/workflows/github-to-beads.yml +0 -100
  395. package/.kilocode/workflows/dev.md +0 -346
  396. package/.kilocode/workflows/plan.md +0 -567
  397. package/.kilocode/workflows/premerge.md +0 -187
  398. package/.kilocode/workflows/research.md +0 -43
  399. package/.kilocode/workflows/review.md +0 -452
  400. package/.kilocode/workflows/rollback.md +0 -722
  401. package/.kilocode/workflows/ship.md +0 -214
  402. package/.kilocode/workflows/sonarcloud.md +0 -150
  403. package/.kilocode/workflows/status.md +0 -91
  404. package/.kilocode/workflows/validate.md +0 -289
  405. package/.kilocode/workflows/verify.md +0 -270
  406. package/.opencode/commands/dev.md +0 -345
  407. package/.opencode/commands/plan.md +0 -566
  408. package/.opencode/commands/premerge.md +0 -186
  409. package/.opencode/commands/research.md +0 -42
  410. package/.opencode/commands/review.md +0 -451
  411. package/.opencode/commands/rollback.md +0 -721
  412. package/.opencode/commands/ship.md +0 -213
  413. package/.opencode/commands/sonarcloud.md +0 -149
  414. package/.opencode/commands/status.md +0 -90
  415. package/.opencode/commands/validate.md +0 -288
  416. package/.opencode/commands/verify.md +0 -269
  417. package/.roo/commands/dev.md +0 -346
  418. package/.roo/commands/plan.md +0 -567
  419. package/.roo/commands/premerge.md +0 -187
  420. package/.roo/commands/research.md +0 -43
  421. package/.roo/commands/review.md +0 -452
  422. package/.roo/commands/rollback.md +0 -722
  423. package/.roo/commands/ship.md +0 -214
  424. package/.roo/commands/sonarcloud.md +0 -150
  425. package/.roo/commands/status.md +0 -91
  426. package/.roo/commands/validate.md +0 -289
  427. package/.roo/commands/verify.md +0 -270
  428. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  429. package/docs/GREPTILE_SETUP.md +0 -400
  430. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  431. package/docs/SETUP.md +0 -663
  432. package/docs/VALIDATION.md +0 -363
  433. package/lib/agents/cline.plugin.json +0 -29
  434. package/lib/agents/copilot.plugin.json +0 -24
  435. package/lib/agents/kilocode.plugin.json +0 -22
  436. package/lib/agents/opencode.plugin.json +0 -23
  437. package/lib/agents/roo.plugin.json +0 -30
  438. package/lib/beads-bootstrap.js +0 -225
  439. package/lib/beads-health-check.js +0 -188
  440. package/lib/commands/commands-reset.js +0 -147
  441. package/opencode.json +0 -67
  442. package/scripts/beads-context.test.js +0 -584
  443. package/scripts/github-beads-sync/comment.mjs +0 -64
  444. package/scripts/github-beads-sync/config.mjs +0 -148
  445. package/scripts/github-beads-sync/github-api.mjs +0 -131
  446. package/scripts/github-beads-sync/index.mjs +0 -356
  447. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  448. package/scripts/github-beads-sync/mapping.mjs +0 -132
  449. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  450. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  451. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  452. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  453. package/scripts/github-beads-sync.config.json +0 -26
  454. package/scripts/sync-commands.js +0 -600
@@ -1,188 +0,0 @@
1
- /**
2
- * Beads health check smoke test.
3
- *
4
- * After Beads init, runs a quick create/close/sync/cleanup cycle to verify
5
- * the installation is functional.
6
- *
7
- * @module beads-health-check
8
- */
9
-
10
- const { execFileSync } = require('node:child_process');
11
- const fs = require('node:fs');
12
- const path = require('node:path');
13
- const { bootstrapBeads, isRecoverableBeadsError } = require('./beads-bootstrap');
14
-
15
- /**
16
- * @typedef {Object} HealthCheckResult
17
- * @property {boolean} healthy - Whether Beads is operational
18
- * @property {string|null} failedStep - Which step failed: 'create'|'close'|'sync'|'cleanup', or null
19
- * @property {string|null} error - Error message if unhealthy, null otherwise
20
- * @property {string} [warning] - Non-fatal warning message (e.g. sync or cleanup issues)
21
- */
22
-
23
- /**
24
- * Parse the issue ID from `bd create` stdout.
25
- *
26
- * Expects output like "Created issue: forge-xxxx".
27
- *
28
- * @param {string} output - stdout from `bd create`
29
- * @returns {string|null} The issue ID, or null if not found
30
- */
31
- function parseIssueId(output) {
32
- const match = /Created\s+issue:\s*([\w-]+)/i.exec(output);
33
- return match ? match[1].trim() : null;
34
- }
35
-
36
- /**
37
- * Remove a test issue from the JSONL file by its ID.
38
- * Silently ignores errors (file missing, locked, malformed lines).
39
- *
40
- * @param {string} jsonlPath - Absolute path to the issues.jsonl file
41
- * @param {string|null} issueId - The issue ID to remove
42
- */
43
- function cleanupTestIssue(jsonlPath, issueId) {
44
- if (!issueId) return;
45
- const raw = fs.readFileSync(jsonlPath, 'utf8');
46
- const lines = raw.split('\n').filter(Boolean);
47
- const filtered = lines.filter((line) => {
48
- try { return JSON.parse(line).id !== issueId; } catch (_e) { /* Expected: malformed JSONL line — keep it as-is */ return true; }
49
- });
50
- fs.writeFileSync(jsonlPath, filtered.length > 0 ? filtered.join('\n') + '\n' : '');
51
- }
52
-
53
- function appendWarning(existingWarning, nextWarning) {
54
- return existingWarning ? `${existingWarning}; ${nextWarning}` : nextWarning;
55
- }
56
-
57
- function createHealthCheckIssue(exec, execOpts) {
58
- return exec('bd', [
59
- 'create',
60
- '--title=Setup verification',
61
- '--type=task',
62
- '--priority=4'
63
- ], execOpts);
64
- }
65
-
66
- function createIssueWithRecovery(projectRoot, exec, execOpts, bootstrap) {
67
- try {
68
- return { output: createHealthCheckIssue(exec, execOpts), warning: null };
69
- } catch (createErr) {
70
- if (!isRecoverableBeadsError(createErr)) {
71
- throw createErr;
72
- }
73
-
74
- const bootstrapResult = bootstrap(projectRoot);
75
- if (!bootstrapResult?.success) {
76
- const extra = bootstrapResult?.warning ? `; ${bootstrapResult.warning}` : '';
77
- return {
78
- error: `${createErr.message}${extra}`
79
- };
80
- }
81
-
82
- const bootstrapWarning = bootstrapResult.warning
83
- ? `bootstrap warning: ${bootstrapResult.warning}`
84
- : `bootstrap warning: recovered via ${bootstrapResult.strategy}`;
85
-
86
- return {
87
- output: createHealthCheckIssue(exec, execOpts),
88
- warning: bootstrapWarning
89
- };
90
- }
91
- }
92
-
93
- /**
94
- * Run a Beads health check smoke test.
95
- *
96
- * Creates a temporary issue, closes it, syncs, then cleans up the JSONL file.
97
- * Uses dependency injection for the exec function to support testing.
98
- *
99
- * @param {string} projectRoot - Absolute path to the project root
100
- * @param {Object} [options={}] - Options
101
- * @param {Function} [options._exec] - Injectable exec function (defaults to execFileSync)
102
- * @returns {HealthCheckResult}
103
- */
104
- function beadsHealthCheck(projectRoot, options = {}) {
105
- const exec = options._exec || execFileSync;
106
- const bootstrap = options._bootstrap || ((root) => bootstrapBeads(root, { _exec: exec }));
107
- const execOpts = { cwd: projectRoot, encoding: 'utf8' };
108
-
109
- /** @type {string|undefined} */
110
- let warning;
111
-
112
- // Step a: Create a test issue
113
- /** @type {string|null} */
114
- let issueId;
115
- try {
116
- const createResult = createIssueWithRecovery(projectRoot, exec, execOpts, bootstrap);
117
- if (createResult.error) {
118
- return {
119
- healthy: false,
120
- failedStep: 'create',
121
- error: createResult.error
122
- };
123
- }
124
-
125
- warning = createResult.warning || warning;
126
-
127
- issueId = parseIssueId(createResult.output);
128
- if (!issueId) {
129
- return {
130
- healthy: false,
131
- failedStep: 'create',
132
- error: 'Could not parse issue ID from bd create output'
133
- };
134
- }
135
- } catch (err) {
136
- return {
137
- healthy: false,
138
- failedStep: 'create',
139
- error: err.message
140
- };
141
- }
142
-
143
- // Step b: Close the test issue
144
- try {
145
- exec('bd', [
146
- 'close',
147
- issueId,
148
- '--reason=Setup smoke test'
149
- ], execOpts);
150
- } catch (err) {
151
- // Best-effort cleanup: remove the test issue from JSONL so it doesn't leak
152
- try {
153
- cleanupTestIssue(path.join(projectRoot, '.beads', 'issues.jsonl'), issueId);
154
- } catch (_cleanupErr) {
155
- // Expected: JSONL cleanup may fail if file is locked or missing — nothing more we can do
156
- }
157
- return {
158
- healthy: false,
159
- failedStep: 'close',
160
- error: err.message
161
- };
162
- }
163
-
164
- // Step c: Sync (may fail without a remote -- that's OK)
165
- try {
166
- exec('bd', ['sync'], execOpts);
167
- } catch (syncErr) {
168
- // Sync failure is non-fatal (no remote configured is common)
169
- warning = appendWarning(warning, `bd sync warning: ${syncErr.message}`);
170
- }
171
-
172
- // Step d: Remove the test issue from JSONL
173
- try {
174
- cleanupTestIssue(path.join(projectRoot, '.beads', 'issues.jsonl'), issueId);
175
- } catch (cleanupErr) {
176
- // Cleanup failure is non-fatal
177
- warning = appendWarning(warning, `cleanup warning: ${cleanupErr.message}`);
178
- }
179
-
180
- return {
181
- healthy: true,
182
- failedStep: null,
183
- error: null,
184
- ...(warning ? { warning } : {})
185
- };
186
- }
187
-
188
- module.exports = { beadsHealthCheck, parseIssueId };
@@ -1,147 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * @module commands-reset
5
- *
6
- * Reset agent command files to match the canonical source (commands/*.md or .claude/commands/*.md).
7
- * Rebuilds adapted files via sync-commands and optionally writes them.
8
- *
9
- * Used by `forge commands reset [--dry-run] [--all] [command-name]`.
10
- */
11
-
12
- const fs = require('node:fs');
13
- const path = require('node:path');
14
- const {
15
- syncCommands,
16
- contentHash,
17
- resolveCanonicalCommandsDir,
18
- writeSyncManifest,
19
- } = require('../../scripts/sync-commands.js');
20
-
21
- function validateCommandName(commandName) {
22
- if (commandName && !/^[a-z0-9-]+$/.test(commandName)) {
23
- return [`Invalid command name: "${commandName}" - only lowercase letters, numbers, and hyphens allowed`];
24
- }
25
-
26
- return [];
27
- }
28
-
29
- function ensureCanonicalCommandExists(repoRoot, canonicalDir, commandName) {
30
- if (!commandName) {
31
- return [];
32
- }
33
-
34
- if (fs.existsSync(path.join(canonicalDir, `${commandName}.md`))) {
35
- return [];
36
- }
37
-
38
- const canonicalLabel = path.relative(repoRoot, canonicalDir).replaceAll('\\', '/');
39
- return [`Command not found: ${canonicalLabel}/${commandName}.md`];
40
- }
41
-
42
- function filterPlannedEntries(entries, commandName, all) {
43
- if (commandName && all !== true) {
44
- return entries.filter(entry =>
45
- entry.filename.replaceAll('.prompt.md', '').replaceAll('.md', '') === commandName ||
46
- entry.dir.includes(`/${commandName}/`)
47
- );
48
- }
49
-
50
- return entries;
51
- }
52
-
53
- function recordEntryResult(entry, reset, skipped, dryRun) {
54
- const relativeFile = path.join(entry.dir, entry.filename);
55
-
56
- if (dryRun) {
57
- if (fs.existsSync(entry.filePath)) {
58
- const existing = fs.readFileSync(entry.filePath, 'utf8');
59
- if (contentHash(existing) === contentHash(entry.content)) {
60
- skipped.push({ agent: entry.agent, file: relativeFile });
61
- } else {
62
- reset.push({ agent: entry.agent, file: relativeFile });
63
- }
64
- } else {
65
- reset.push({ agent: entry.agent, file: relativeFile });
66
- }
67
- return;
68
- }
69
-
70
- const targetDir = path.dirname(entry.filePath);
71
- if (!fs.existsSync(targetDir)) {
72
- fs.mkdirSync(targetDir, { recursive: true });
73
- }
74
-
75
- if (fs.existsSync(entry.filePath)) {
76
- const existing = fs.readFileSync(entry.filePath, 'utf8');
77
- if (contentHash(existing) === contentHash(entry.content)) {
78
- skipped.push({ agent: entry.agent, file: relativeFile });
79
- return;
80
- }
81
- }
82
-
83
- fs.writeFileSync(entry.filePath, entry.content);
84
- reset.push({ agent: entry.agent, file: relativeFile });
85
- }
86
-
87
- function resetCommands({ repoRoot, commandName, all, dryRun }) {
88
- const errors = [];
89
- const reset = [];
90
- const skipped = [];
91
-
92
- errors.push(...validateCommandName(commandName));
93
- if (errors.length > 0) {
94
- return { reset, skipped, errors };
95
- }
96
-
97
- const canonicalDir = resolveCanonicalCommandsDir(repoRoot);
98
- if (!canonicalDir) {
99
- errors.push('Canonical source directory not found: commands/ or .claude/commands/');
100
- return { reset, skipped, errors };
101
- }
102
-
103
- errors.push(...ensureCanonicalCommandExists(repoRoot, canonicalDir, commandName));
104
- if (errors.length > 0) {
105
- return { reset, skipped, errors };
106
- }
107
-
108
- const result = syncCommands({ dryRun: true, check: false, repoRoot, canonicalDir });
109
- if (!result.planned || result.planned.length === 0) {
110
- return { reset, skipped, errors };
111
- }
112
-
113
- const entries = filterPlannedEntries(result.planned, commandName, all);
114
- for (const entry of entries) {
115
- recordEntryResult(entry, reset, skipped, dryRun);
116
- }
117
-
118
- if (!dryRun) {
119
- // Refresh the manifest using the full expected sync set without rewriting
120
- // unrelated command files that were intentionally excluded from this reset.
121
- writeSyncManifest(repoRoot, result.planned);
122
- }
123
-
124
- return { reset, skipped, errors };
125
- }
126
-
127
- module.exports = {
128
- name: 'commands-reset',
129
- description: 'Reset generated agent command files to canonical content',
130
- handler: async (args, flags, repoRoot) => {
131
- const commandName = args.find(arg => !arg.startsWith('-'));
132
- const result = resetCommands({
133
- repoRoot,
134
- commandName,
135
- all: Boolean(flags.all),
136
- dryRun: Boolean(flags.dryRun),
137
- });
138
-
139
- if (result.errors.length > 0) {
140
- return { success: false, error: result.errors.join('; ') };
141
- }
142
-
143
- return { success: true, ...result };
144
- },
145
- resetCommands,
146
- resolveCanonicalCommandsDir,
147
- };
package/opencode.json DELETED
@@ -1,67 +0,0 @@
1
- {
2
- "$schema": "https://opencode.ai/config.json",
3
- "permission": {
4
- "*": "ask",
5
- "bash": {
6
- "*": "ask",
7
- "git status *": "allow",
8
- "git log *": "allow",
9
- "git diff *": "allow",
10
- "git branch *": "allow",
11
- "git show *": "allow",
12
- "git remote *": "allow",
13
- "git stash *": "allow",
14
- "git tag *": "allow",
15
- "git rev-parse *": "allow",
16
- "git describe *": "allow",
17
- "git ls-files *": "allow",
18
- "git blame *": "allow",
19
- "git shortlog *": "allow",
20
- "git add *": "allow",
21
- "git commit *": "allow",
22
- "git push *": "allow",
23
- "git checkout *": "allow",
24
- "git switch *": "allow",
25
- "git merge *": "allow",
26
- "git rebase *": "ask",
27
- "git cherry-pick *": "allow",
28
- "bd *": "allow",
29
- "gh *": "allow",
30
- "ls *": "allow",
31
- "cat *": "allow",
32
- "grep *": "allow",
33
- "find *": "allow",
34
- "pwd *": "allow",
35
- "which *": "allow",
36
- "echo *": "allow",
37
- "head *": "allow",
38
- "tail *": "allow",
39
- "sort *": "allow",
40
- "wc *": "allow",
41
- "awk *": "allow",
42
- "sed *": "allow",
43
- "stat *": "allow",
44
- "du *": "allow",
45
- "df *": "allow",
46
- "file *": "allow",
47
- "mkdir *": "allow",
48
- "touch *": "allow",
49
- "cp *": "allow",
50
- "mv *": "allow",
51
- "bun *": "allow",
52
- "bunx *": "allow",
53
- "npm *": "allow",
54
- "npx *": "allow",
55
- "node *": "allow",
56
-
57
- "git worktree *": "allow",
58
- "git reset --hard *": "ask",
59
- "rm -rf *": "deny",
60
- "git push --force *": "deny",
61
- "git push -f *": "deny"
62
- },
63
- "edit": {
64
- "*": "allow"
65
- }
66
- }
67
- }