forge-workflow 0.0.10 → 0.1.0-beta.3

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 (468) 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 +82 -5
  5. package/.forge/hooks/forge-native-hook.js +431 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +709 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +175 -0
  11. package/README.md +275 -365
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +532 -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 +121 -0
  29. package/docs/guides/SUPPORT.md +190 -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 +214 -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 +155 -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/activation/ensure-forge-home.js +135 -0
  67. package/lib/adapter-cli.js +307 -0
  68. package/lib/adapters/beads-issue-adapter.js +127 -0
  69. package/lib/adapters/beads-kernel-compat.js +1109 -0
  70. package/lib/adapters/greptile-review-adapter.js +141 -0
  71. package/lib/adapters/kernel-issue-adapter.js +101 -0
  72. package/lib/adapters/pr-state-adapter.js +484 -0
  73. package/lib/adoption-profiles.js +139 -0
  74. package/lib/agents/README.md +2 -6
  75. package/lib/agents/claude.plugin.json +3 -8
  76. package/lib/agents/codex.plugin.json +9 -1
  77. package/lib/agents/cursor.plugin.json +2 -6
  78. package/lib/agents/hermes.plugin.json +22 -0
  79. package/lib/agents-config.js +39 -1236
  80. package/lib/audit-evidence.js +282 -0
  81. package/lib/beads-detect.js +60 -0
  82. package/lib/beads-nudge.js +91 -0
  83. package/lib/beads-setup.js +121 -0
  84. package/lib/beads-sync-scaffold.js +25 -101
  85. package/lib/codex-skills.js +51 -1
  86. package/lib/commands/_aliases.js +248 -0
  87. package/lib/commands/_issue.js +780 -77
  88. package/lib/commands/_manifest.js +93 -0
  89. package/lib/commands/_registry.js +99 -34
  90. package/lib/commands/_resolve-command-opts.js +230 -0
  91. package/lib/commands/_serve-security.js +270 -0
  92. package/lib/commands/adapter.js +12 -0
  93. package/lib/commands/add.js +118 -0
  94. package/lib/commands/audit.js +70 -0
  95. package/lib/commands/blocked.js +5 -0
  96. package/lib/commands/board.js +64 -0
  97. package/lib/commands/claim.js +21 -2
  98. package/lib/commands/claims.js +7 -0
  99. package/lib/commands/clean.js +485 -75
  100. package/lib/commands/close.js +2 -2
  101. package/lib/commands/comment.js +5 -0
  102. package/lib/commands/control.js +148 -0
  103. package/lib/commands/create.js +2 -2
  104. package/lib/commands/dev.js +185 -7
  105. package/lib/commands/doc-gate.js +336 -0
  106. package/lib/commands/doctor.js +156 -0
  107. package/lib/commands/explain.js +15 -0
  108. package/lib/commands/export.js +237 -0
  109. package/lib/commands/gate.js +209 -0
  110. package/lib/commands/hooks.js +377 -0
  111. package/lib/commands/inbox.js +118 -0
  112. package/lib/commands/init.js +604 -0
  113. package/lib/commands/insights.js +79 -0
  114. package/lib/commands/issue.js +12 -1
  115. package/lib/commands/issues.js +17 -0
  116. package/lib/commands/lint.js +5 -0
  117. package/lib/commands/list.js +2 -2
  118. package/lib/commands/memory.js +81 -0
  119. package/lib/commands/merge.js +312 -0
  120. package/lib/commands/migrate.js +362 -0
  121. package/lib/commands/new.js +12 -0
  122. package/lib/commands/options.js +241 -0
  123. package/lib/commands/orient.js +13 -0
  124. package/lib/commands/orphans.js +5 -0
  125. package/lib/commands/patch.js +67 -0
  126. package/lib/commands/plan.js +481 -29
  127. package/lib/commands/pr.js +88 -0
  128. package/lib/commands/preflight.js +211 -0
  129. package/lib/commands/prime.js +13 -0
  130. package/lib/commands/push.js +135 -2
  131. package/lib/commands/ready.js +2 -2
  132. package/lib/commands/recall.js +171 -0
  133. package/lib/commands/recap.js +75 -0
  134. package/lib/commands/recommend.js +0 -1
  135. package/lib/commands/release.js +104 -0
  136. package/lib/commands/remember.js +140 -0
  137. package/lib/commands/role.js +99 -0
  138. package/lib/commands/serve.js +581 -0
  139. package/lib/commands/setup.js +900 -971
  140. package/lib/commands/shepherd.js +501 -0
  141. package/lib/commands/ship.js +59 -1
  142. package/lib/commands/show.js +2 -2
  143. package/lib/commands/stage.js +192 -0
  144. package/lib/commands/stale.js +5 -0
  145. package/lib/commands/status.js +158 -21
  146. package/lib/commands/sync.js +34 -46
  147. package/lib/commands/team.js +4 -1
  148. package/lib/commands/test.js +43 -27
  149. package/lib/commands/update.js +2 -2
  150. package/lib/commands/upgrade.js +47 -0
  151. package/lib/commands/validate.js +43 -18
  152. package/lib/commands/worktree.js +362 -99
  153. package/lib/config-writer.js +202 -0
  154. package/lib/control-plane.js +236 -0
  155. package/lib/core/runtime-graph.js +977 -0
  156. package/lib/dep-guard/keyword-ripple.js +2 -2
  157. package/lib/deprecated-sync-cleanup.js +362 -0
  158. package/lib/detect-agent.js +2 -28
  159. package/lib/detect-worktree.js +35 -9
  160. package/lib/doc-gate/declaration.js +177 -0
  161. package/lib/doc-gate/detect.js +289 -0
  162. package/lib/doc-gate/gate.js +375 -0
  163. package/lib/doc-gate/okf-config.js +128 -0
  164. package/lib/doc-gate/okf.js +429 -0
  165. package/lib/docs-command.js +1161 -6
  166. package/lib/forge-issues.js +382 -11
  167. package/lib/forge-lock.js +262 -0
  168. package/lib/gate-events.js +192 -0
  169. package/lib/global-flags.js +104 -0
  170. package/lib/greptile-match.js +7 -63
  171. package/lib/grounding/context-events.js +230 -0
  172. package/lib/grounding/read-first.js +112 -0
  173. package/lib/harness-capability-matrix.js +380 -0
  174. package/lib/hook-global-installer.js +347 -0
  175. package/lib/hook-renderer.js +541 -0
  176. package/lib/inbox.js +391 -0
  177. package/lib/insights.js +397 -0
  178. package/lib/issue-adapter.js +156 -0
  179. package/lib/issue-backend.js +145 -0
  180. package/lib/issue-render.js +220 -0
  181. package/lib/kernel/backing-issue.js +311 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/owned-kernel.js +43 -0
  192. package/lib/kernel/planning-buckets-schema.js +109 -0
  193. package/lib/kernel/projection-jsonl-writer.js +450 -0
  194. package/lib/kernel/readiness-model.js +329 -0
  195. package/lib/kernel/schema.js +356 -0
  196. package/lib/kernel/sqlite-driver.js +2540 -0
  197. package/lib/kernel/taxonomy-validator.js +394 -0
  198. package/lib/lefthook-check.js +3 -2
  199. package/lib/lefthook-wiring.js +413 -0
  200. package/lib/mcp-config-renderer.js +288 -0
  201. package/lib/memory/graphiti-mcp.js +106 -0
  202. package/lib/memory/router.js +387 -0
  203. package/lib/memory/typed-api.js +102 -0
  204. package/lib/memory-digest.js +195 -0
  205. package/lib/merge-rules.js +395 -0
  206. package/lib/migrate-dry-run.js +466 -0
  207. package/lib/orientation.js +863 -0
  208. package/lib/package-manager-remediation.js +103 -0
  209. package/lib/package-root.js +381 -0
  210. package/lib/patch-intent.js +890 -0
  211. package/lib/plugin-catalog.js +3 -4
  212. package/lib/plugin-manager.js +0 -5
  213. package/lib/pr-bundle.js +186 -0
  214. package/lib/pr-monitor/auto-actions.js +175 -0
  215. package/lib/pr-monitor/differ.js +195 -0
  216. package/lib/pr-monitor/digest.js +206 -0
  217. package/lib/pr-monitor/events.js +0 -0
  218. package/lib/pr-monitor/gather.js +124 -0
  219. package/lib/pr-monitor/journal.js +299 -0
  220. package/lib/pr-monitor/monitor.js +146 -0
  221. package/lib/pr-monitor/render-sticky.js +192 -0
  222. package/lib/pr-monitor/upsert-sticky.js +169 -0
  223. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  224. package/lib/pr-monitor/watch.js +247 -0
  225. package/lib/pr-pull.js +1314 -0
  226. package/lib/pr-shepherd.js +494 -0
  227. package/lib/pr-state-validator.js +59 -0
  228. package/lib/preflight/gates.js +237 -0
  229. package/lib/preflight/runner.js +116 -0
  230. package/lib/project-discovery.js +0 -53
  231. package/lib/project-memory.js +99 -497
  232. package/lib/protected-path-manifest.js +281 -0
  233. package/lib/protected-state-surfaces.js +387 -0
  234. package/lib/release-readiness.js +2105 -0
  235. package/lib/reset.js +59 -45
  236. package/lib/review-adapter.js +68 -0
  237. package/lib/rules-sync.js +260 -0
  238. package/lib/runtime-health.js +241 -20
  239. package/lib/safety-config-renderer.js +268 -0
  240. package/lib/setup-action-log.js +1 -7
  241. package/lib/setup.js +27 -65
  242. package/lib/shell-utils.js +76 -6
  243. package/lib/skills-sync.js +330 -0
  244. package/lib/smart-status/scoring.js +17 -3
  245. package/lib/status/beads-snapshot.js +45 -2
  246. package/lib/status/presenter.js +169 -18
  247. package/lib/status/snapshot.js +186 -0
  248. package/lib/sync-backend.js +202 -0
  249. package/lib/untrusted-content.js +52 -0
  250. package/lib/upgrade-safety.js +251 -0
  251. package/lib/workflow/enforce-stage.js +351 -45
  252. package/lib/workflow/stage-transition.js +115 -0
  253. package/lib/workflow/stages.js +30 -6
  254. package/lib/workflow/state-manager.js +11 -22
  255. package/lib/workflow/state.js +23 -1
  256. package/lib/workflow-profiles.js +17 -5
  257. package/package.json +37 -35
  258. package/rules/documentation.md +19 -0
  259. package/rules/kernel-tracking.md +26 -0
  260. package/rules/security.md +22 -0
  261. package/rules/tdd.md +20 -0
  262. package/rules/workflow.md +27 -0
  263. package/scripts/auto-backing-issue.js +47 -0
  264. package/scripts/beads-context.sh +81 -57
  265. package/scripts/beads-upgrade-smoke.sh +24 -3
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard.sh +22 -3
  272. package/scripts/file-index.sh +3 -0
  273. package/scripts/forge-team/lib/claim.sh +34 -18
  274. package/scripts/forge-team/lib/dashboard.sh +61 -86
  275. package/scripts/forge-team/lib/epic.sh +99 -263
  276. package/scripts/forge-team/lib/hooks.sh +26 -28
  277. package/scripts/forge-team/lib/identity.sh +4 -4
  278. package/scripts/forge-team/lib/sync-github.sh +49 -84
  279. package/scripts/forge-team/lib/verify.sh +93 -83
  280. package/scripts/forge-team/lib/workload.sh +41 -65
  281. package/scripts/forge-team/tests/claim.test.sh +25 -19
  282. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  283. package/scripts/forge-team/tests/epic.test.sh +52 -71
  284. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  285. package/scripts/forge-team/tests/identity.test.sh +3 -3
  286. package/scripts/forge-team/tests/integration.test.sh +44 -66
  287. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  288. package/scripts/forge-team/tests/verify.test.sh +37 -46
  289. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  290. package/scripts/forge-team/tests/workload.test.sh +32 -66
  291. package/scripts/gen-command-manifest.js +153 -0
  292. package/scripts/gen-embedded-assets.mjs +129 -0
  293. package/scripts/install.ps1 +139 -0
  294. package/scripts/install.sh +268 -0
  295. package/scripts/lib/release-asset.mjs +84 -0
  296. package/scripts/parity-check.mjs +145 -0
  297. package/scripts/parity-check.test.mjs +58 -0
  298. package/scripts/pin-agentic-workflow-images.js +112 -0
  299. package/scripts/pr-auto-actions.js +93 -0
  300. package/scripts/pr-coordinator.sh +3 -0
  301. package/scripts/pr-verdict-label.js +50 -0
  302. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  303. package/scripts/preflight.sh +21 -94
  304. package/scripts/protected-state-check.js +104 -0
  305. package/scripts/smart-status.sh +60 -57
  306. package/scripts/spikes/config-race-bench.js +111 -0
  307. package/scripts/spikes/harness-capability-matrix.js +13 -0
  308. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  309. package/scripts/spikes/protected-path-manifest.js +20 -0
  310. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  311. package/scripts/sync-agent-skills.js +62 -0
  312. package/scripts/sync-utils.sh +3 -0
  313. package/scripts/test-ci-shard.js +13 -6
  314. package/scripts/test.js +95 -12
  315. package/skills/claim-safety/SKILL.md +102 -0
  316. package/skills/claim-safety/evals/evals.json +46 -0
  317. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  318. package/skills/dev/evals/evals.json +50 -0
  319. package/skills/hermes-forge/SKILL.md +185 -0
  320. package/skills/hermes-forge/evals/evals.json +46 -0
  321. package/skills/issue-basics/SKILL.md +111 -0
  322. package/skills/issue-basics/evals/evals.json +46 -0
  323. package/skills/kernel/SKILL.md +166 -0
  324. package/skills/kernel/evals/evals.json +50 -0
  325. package/skills/memory/SKILL.md +102 -0
  326. package/skills/parallel-deep-research/SKILL.md +14 -11
  327. package/skills/parallel-deep-research/evals/evals.json +11 -27
  328. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  329. package/skills/plan/evals/evals.json +42 -0
  330. package/skills/research/SKILL.md +195 -0
  331. package/skills/research/evals/evals.json +42 -0
  332. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  333. package/skills/review/evals/evals.json +42 -0
  334. package/skills/rollback/SKILL.md +110 -0
  335. package/skills/rollback/evals/evals.json +46 -0
  336. package/skills/rollback/references/methods.md +204 -0
  337. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  338. package/skills/shepherd/SKILL.md +66 -0
  339. package/skills/shepherd/evals/evals.json +42 -0
  340. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  341. package/skills/ship/evals/evals.json +42 -0
  342. package/skills/smith/SKILL.md +142 -0
  343. package/skills/smith/evals/evals.json +46 -0
  344. package/skills/smith/references/autonomy-and-gates.md +94 -0
  345. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  346. package/skills/sonarcloud/evals/evals.json +46 -0
  347. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  348. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  349. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  350. package/skills/status/evals/evals.json +50 -0
  351. package/skills/triage-ready/SKILL.md +121 -0
  352. package/skills/triage-ready/evals/evals.json +42 -0
  353. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  354. package/skills/validate/evals/evals.json +42 -0
  355. package/skills/verify/SKILL.md +299 -0
  356. package/skills/verify/evals/evals.json +50 -0
  357. package/.claude/commands/dev.md +0 -345
  358. package/.claude/commands/plan.md +0 -566
  359. package/.claude/commands/premerge.md +0 -186
  360. package/.claude/commands/research.md +0 -42
  361. package/.claude/commands/review.md +0 -451
  362. package/.claude/commands/rollback.md +0 -721
  363. package/.claude/commands/ship.md +0 -213
  364. package/.claude/commands/sonarcloud.md +0 -152
  365. package/.claude/commands/status.md +0 -90
  366. package/.claude/commands/validate.md +0 -288
  367. package/.claude/commands/verify.md +0 -269
  368. package/.claude/rules/workflow.md +0 -121
  369. package/.cline/workflows/dev.md +0 -342
  370. package/.cline/workflows/plan.md +0 -563
  371. package/.cline/workflows/premerge.md +0 -183
  372. package/.cline/workflows/research.md +0 -39
  373. package/.cline/workflows/review.md +0 -448
  374. package/.cline/workflows/rollback.md +0 -718
  375. package/.cline/workflows/ship.md +0 -210
  376. package/.cline/workflows/sonarcloud.md +0 -146
  377. package/.cline/workflows/status.md +0 -87
  378. package/.cline/workflows/validate.md +0 -285
  379. package/.cline/workflows/verify.md +0 -266
  380. package/.codex/config.toml +0 -11
  381. package/.codex/skills/dev/SKILL.md +0 -345
  382. package/.codex/skills/plan/SKILL.md +0 -566
  383. package/.codex/skills/premerge/SKILL.md +0 -186
  384. package/.codex/skills/research/SKILL.md +0 -42
  385. package/.codex/skills/review/SKILL.md +0 -451
  386. package/.codex/skills/rollback/SKILL.md +0 -721
  387. package/.codex/skills/ship/SKILL.md +0 -213
  388. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  389. package/.codex/skills/status/SKILL.md +0 -90
  390. package/.codex/skills/validate/SKILL.md +0 -288
  391. package/.codex/skills/verify/SKILL.md +0 -269
  392. package/.cursor/commands/dev.md +0 -342
  393. package/.cursor/commands/plan.md +0 -563
  394. package/.cursor/commands/premerge.md +0 -183
  395. package/.cursor/commands/research.md +0 -39
  396. package/.cursor/commands/review.md +0 -448
  397. package/.cursor/commands/ship.md +0 -210
  398. package/.cursor/commands/sonarcloud.md +0 -146
  399. package/.cursor/commands/status.md +0 -87
  400. package/.cursor/commands/validate.md +0 -285
  401. package/.cursor/commands/verify.md +0 -266
  402. package/.cursorrules +0 -149
  403. package/.github/prompts/premerge.prompt.md +0 -188
  404. package/.github/prompts/research.prompt.md +0 -44
  405. package/.github/prompts/rollback.prompt.md +0 -723
  406. package/.github/prompts/verify.prompt.md +0 -271
  407. package/.github/workflows/beads-to-github.yml +0 -89
  408. package/.github/workflows/github-to-beads.yml +0 -100
  409. package/.kilocode/workflows/dev.md +0 -346
  410. package/.kilocode/workflows/plan.md +0 -567
  411. package/.kilocode/workflows/premerge.md +0 -187
  412. package/.kilocode/workflows/research.md +0 -43
  413. package/.kilocode/workflows/review.md +0 -452
  414. package/.kilocode/workflows/rollback.md +0 -722
  415. package/.kilocode/workflows/ship.md +0 -214
  416. package/.kilocode/workflows/sonarcloud.md +0 -150
  417. package/.kilocode/workflows/status.md +0 -91
  418. package/.kilocode/workflows/validate.md +0 -289
  419. package/.kilocode/workflows/verify.md +0 -270
  420. package/.opencode/commands/dev.md +0 -345
  421. package/.opencode/commands/plan.md +0 -566
  422. package/.opencode/commands/premerge.md +0 -186
  423. package/.opencode/commands/research.md +0 -42
  424. package/.opencode/commands/review.md +0 -451
  425. package/.opencode/commands/rollback.md +0 -721
  426. package/.opencode/commands/ship.md +0 -213
  427. package/.opencode/commands/sonarcloud.md +0 -149
  428. package/.opencode/commands/status.md +0 -90
  429. package/.opencode/commands/validate.md +0 -288
  430. package/.opencode/commands/verify.md +0 -269
  431. package/.roo/commands/dev.md +0 -346
  432. package/.roo/commands/plan.md +0 -567
  433. package/.roo/commands/premerge.md +0 -187
  434. package/.roo/commands/research.md +0 -43
  435. package/.roo/commands/review.md +0 -452
  436. package/.roo/commands/rollback.md +0 -722
  437. package/.roo/commands/ship.md +0 -214
  438. package/.roo/commands/sonarcloud.md +0 -150
  439. package/.roo/commands/status.md +0 -91
  440. package/.roo/commands/validate.md +0 -289
  441. package/.roo/commands/verify.md +0 -270
  442. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  443. package/docs/GREPTILE_SETUP.md +0 -400
  444. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  445. package/docs/SETUP.md +0 -663
  446. package/docs/VALIDATION.md +0 -363
  447. package/lib/agents/cline.plugin.json +0 -29
  448. package/lib/agents/copilot.plugin.json +0 -24
  449. package/lib/agents/kilocode.plugin.json +0 -22
  450. package/lib/agents/opencode.plugin.json +0 -23
  451. package/lib/agents/roo.plugin.json +0 -30
  452. package/lib/beads-bootstrap.js +0 -225
  453. package/lib/beads-health-check.js +0 -188
  454. package/lib/commands/commands-reset.js +0 -147
  455. package/opencode.json +0 -67
  456. package/scripts/beads-context.test.js +0 -584
  457. package/scripts/github-beads-sync/comment.mjs +0 -64
  458. package/scripts/github-beads-sync/config.mjs +0 -148
  459. package/scripts/github-beads-sync/github-api.mjs +0 -131
  460. package/scripts/github-beads-sync/index.mjs +0 -356
  461. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  462. package/scripts/github-beads-sync/mapping.mjs +0 -132
  463. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  464. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  465. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  466. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  467. package/scripts/github-beads-sync.config.json +0 -26
  468. 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
- }