beth-copilot 1.0.18 → 2.0.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.
- package/CHANGELOG.md +79 -28
- package/README.md +127 -298
- package/assets/beth-questioning.png +0 -0
- package/assets/yellowstone-beth.png +0 -0
- package/bin/cli.js +124 -715
- package/dist/__tests__/inject-skills.test.d.ts +9 -0
- package/dist/__tests__/inject-skills.test.d.ts.map +1 -0
- package/dist/__tests__/inject-skills.test.js +143 -0
- package/dist/__tests__/inject-skills.test.js.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts +10 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.js +192 -0
- package/dist/__tests__/skills/disambiguation.test.js.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts +11 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.js +173 -0
- package/dist/__tests__/skills/hook-injection.test.js.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts +17 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.js +281 -0
- package/dist/__tests__/skills/mapping-completeness.test.js.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts +18 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.js +234 -0
- package/dist/__tests__/skills/pipeline-integration.test.js.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts +15 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.js +723 -0
- package/dist/__tests__/skills/skill-routing.test.js.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts +24 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.js +746 -0
- package/dist/__tests__/skills/trigger-coverage.test.js.map +1 -0
- package/dist/__tests__/smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +62 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/__tests__/verify-skills.test.d.ts +9 -0
- package/dist/__tests__/verify-skills.test.d.ts.map +1 -0
- package/dist/__tests__/verify-skills.test.js +78 -0
- package/dist/__tests__/verify-skills.test.js.map +1 -0
- package/dist/cli/commands/beads.e2e.test.d.ts +15 -0
- package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/beads.e2e.test.js +585 -0
- package/dist/cli/commands/beads.e2e.test.js.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.d.ts +54 -0
- package/dist/cli/commands/close.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.d.ts +11 -0
- package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.js +71 -0
- package/dist/cli/commands/close.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.js +95 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/close.test.d.ts +13 -0
- package/dist/cli/commands/close.test.d.ts.map +1 -0
- package/dist/cli/commands/close.test.js +254 -0
- package/dist/cli/commands/close.test.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +7 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.e2e.test.js +3 -59
- package/dist/cli/commands/doctor.e2e.test.js.map +1 -1
- package/dist/cli/commands/doctor.js +38 -18
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/doctor.test.js +32 -25
- package/dist/cli/commands/doctor.test.js.map +1 -1
- package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
- package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
- package/dist/cli/commands/framework-isolation.test.js +118 -0
- package/dist/cli/commands/framework-isolation.test.js.map +1 -0
- package/dist/cli/commands/help.e2e.test.js +5 -9
- package/dist/cli/commands/help.e2e.test.js.map +1 -1
- package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
- package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/init-logic.e2e.test.js +315 -0
- package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
- package/dist/cli/commands/init.test.js +4 -21
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/land.d.ts +130 -0
- package/dist/cli/commands/land.d.ts.map +1 -0
- package/dist/cli/commands/land.js +592 -0
- package/dist/cli/commands/land.js.map +1 -0
- package/dist/cli/commands/land.test.d.ts +19 -0
- package/dist/cli/commands/land.test.d.ts.map +1 -0
- package/dist/cli/commands/land.test.js +567 -0
- package/dist/cli/commands/land.test.js.map +1 -0
- package/dist/cli/commands/mcp.e2e.test.js +24 -31
- package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
- package/dist/cli/commands/pipeline.e2e.test.js +28 -31
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.d.ts +74 -0
- package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.js +212 -0
- package/dist/cli/commands/pre-push-guard.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts +14 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.js +314 -0
- package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js +152 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts +0 -1
- package/dist/cli/commands/quickstart.d.ts.map +1 -1
- package/dist/cli/commands/quickstart.js +9 -83
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/quickstart.test.js +8 -129
- package/dist/cli/commands/quickstart.test.js.map +1 -1
- package/dist/cli/commands/update.d.ts +35 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.d.ts +24 -0
- package/dist/cli/commands/update.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.js +240 -0
- package/dist/cli/commands/update.e2e.test.js.map +1 -0
- package/dist/cli/commands/update.js +255 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/core/agents/frontmatter.test.js +1 -1
- package/dist/core/agents/frontmatter.test.js.map +1 -1
- package/dist/core/agents/handoffs.test.js +1 -1
- package/dist/core/agents/handoffs.test.js.map +1 -1
- package/dist/core/agents/loader.d.ts +4 -2
- package/dist/core/agents/loader.d.ts.map +1 -1
- package/dist/core/agents/loader.js +5 -3
- package/dist/core/agents/loader.js.map +1 -1
- package/dist/core/agents/loader.test.js +42 -4
- package/dist/core/agents/loader.test.js.map +1 -1
- package/dist/core/agents/suite.test.js +12 -9
- package/dist/core/agents/suite.test.js.map +1 -1
- package/dist/core/agents/tools.test.js +15 -9
- package/dist/core/agents/tools.test.js.map +1 -1
- package/dist/core/agents/types.test.js +1 -1
- package/dist/core/agents/types.test.js.map +1 -1
- package/dist/core/skills/loader.test.js +1 -1
- package/dist/core/skills/loader.test.js.map +1 -1
- package/dist/index.d.ts +3 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/pathValidation.d.ts +0 -5
- package/dist/lib/pathValidation.d.ts.map +1 -1
- package/dist/lib/pathValidation.js +0 -11
- package/dist/lib/pathValidation.js.map +1 -1
- package/dist/lib/pathValidation.test.js +2 -14
- package/dist/lib/pathValidation.test.js.map +1 -1
- package/package.json +13 -10
- package/sbom.json +1927 -847
- package/templates/.github/agents/beth.agent.md +331 -105
- package/templates/.github/agents/developer.agent.md +73 -102
- package/templates/.github/agents/product-manager.agent.md +24 -68
- package/templates/.github/agents/researcher.agent.md +21 -69
- package/templates/.github/agents/security-reviewer.agent.md +39 -82
- package/templates/.github/agents/tester.agent.md +44 -65
- package/templates/.github/agents/ux-designer.agent.md +25 -76
- package/templates/.github/copilot-instructions.md +246 -225
- package/templates/.github/copilot-mcp-config.json +12 -0
- package/templates/.github/dependabot.yml +68 -0
- package/templates/.github/hooks/scripts/inject-skills.mjs +139 -0
- package/templates/.github/hooks/scripts/verify-skills.mjs +47 -0
- package/templates/.github/hooks/skill-enforcement.json +18 -0
- package/templates/.github/pull_request_template.md +48 -0
- package/templates/.github/skills/framer-components/SKILL.md +0 -0
- package/templates/.github/skills/prd/SKILL.md +0 -0
- package/templates/.github/skills/security-analysis/SKILL.md +798 -798
- package/templates/.github/skills/shadcn-ui/SKILL.md +561 -561
- package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
- package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
- package/templates/.vscode/settings.json +16 -16
- package/templates/AGENTS.md +103 -54
- package/templates/Backlog.md +80 -80
- package/templates/mcp.json.example +0 -3
- package/assets/beth-portrait-small.txt +0 -13
- package/assets/beth-portrait.txt +0 -60
- package/bin/beth-animation.sh +0 -155
- package/bin/lib/animation.js +0 -189
- package/bin/lib/pathValidation.js +0 -233
- package/bin/lib/pathValidation.test.js +0 -280
- package/dist/cli/commands/client-config.d.ts +0 -31
- package/dist/cli/commands/client-config.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
- package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.js +0 -556
- package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
- package/dist/cli/commands/client-config.js +0 -73
- package/dist/cli/commands/client-config.js.map +0 -1
- package/dist/cli/commands/client-config.test.d.ts +0 -6
- package/dist/cli/commands/client-config.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.test.js +0 -133
- package/dist/cli/commands/client-config.test.js.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
- package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
- package/dist/core/context.d.ts +0 -171
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -353
- package/dist/core/context.js.map +0 -1
- package/dist/core/context.test.d.ts +0 -8
- package/dist/core/context.test.d.ts.map +0 -1
- package/dist/core/context.test.js +0 -253
- package/dist/core/context.test.js.map +0 -1
- package/dist/core/handoffs.d.ts +0 -151
- package/dist/core/handoffs.d.ts.map +0 -1
- package/dist/core/handoffs.js +0 -220
- package/dist/core/handoffs.js.map +0 -1
- package/dist/core/handoffs.test.d.ts +0 -8
- package/dist/core/handoffs.test.d.ts.map +0 -1
- package/dist/core/handoffs.test.js +0 -231
- package/dist/core/handoffs.test.js.map +0 -1
- package/dist/core/orchestrator.d.ts +0 -246
- package/dist/core/orchestrator.d.ts.map +0 -1
- package/dist/core/orchestrator.js +0 -514
- package/dist/core/orchestrator.js.map +0 -1
- package/dist/core/orchestrator.test.d.ts +0 -8
- package/dist/core/orchestrator.test.d.ts.map +0 -1
- package/dist/core/orchestrator.test.js +0 -517
- package/dist/core/orchestrator.test.js.map +0 -1
- package/dist/core/router.d.ts +0 -102
- package/dist/core/router.d.ts.map +0 -1
- package/dist/core/router.js +0 -178
- package/dist/core/router.js.map +0 -1
- package/dist/core/router.test.d.ts +0 -8
- package/dist/core/router.test.d.ts.map +0 -1
- package/dist/core/router.test.js +0 -215
- package/dist/core/router.test.js.map +0 -1
- package/dist/init.test.js +0 -288
- package/dist/providers/azure.d.ts +0 -147
- package/dist/providers/azure.d.ts.map +0 -1
- package/dist/providers/azure.js +0 -491
- package/dist/providers/azure.js.map +0 -1
- package/dist/providers/azure.test.d.ts +0 -11
- package/dist/providers/azure.test.d.ts.map +0 -1
- package/dist/providers/azure.test.js +0 -330
- package/dist/providers/azure.test.js.map +0 -1
- package/dist/providers/config.d.ts +0 -87
- package/dist/providers/config.d.ts.map +0 -1
- package/dist/providers/config.js +0 -193
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/config.test.d.ts +0 -7
- package/dist/providers/config.test.d.ts.map +0 -1
- package/dist/providers/config.test.js +0 -370
- package/dist/providers/config.test.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -14
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/interface.d.ts +0 -191
- package/dist/providers/interface.d.ts.map +0 -1
- package/dist/providers/interface.js +0 -94
- package/dist/providers/interface.js.map +0 -1
- package/dist/providers/retry.d.ts +0 -128
- package/dist/providers/retry.d.ts.map +0 -1
- package/dist/providers/retry.js +0 -205
- package/dist/providers/retry.js.map +0 -1
- package/dist/providers/retry.test.d.ts +0 -7
- package/dist/providers/retry.test.d.ts.map +0 -1
- package/dist/providers/retry.test.js +0 -439
- package/dist/providers/retry.test.js.map +0 -1
- package/dist/providers/streaming.d.ts +0 -157
- package/dist/providers/streaming.d.ts.map +0 -1
- package/dist/providers/streaming.js +0 -233
- package/dist/providers/streaming.js.map +0 -1
- package/dist/providers/streaming.test.d.ts +0 -7
- package/dist/providers/streaming.test.d.ts.map +0 -1
- package/dist/providers/streaming.test.js +0 -372
- package/dist/providers/streaming.test.js.map +0 -1
- package/dist/providers/types.d.ts +0 -209
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -53
- package/dist/providers/types.js.map +0 -1
- package/dist/providers/types.test.d.ts +0 -7
- package/dist/providers/types.test.d.ts.map +0 -1
- package/dist/providers/types.test.js +0 -141
- package/dist/providers/types.test.js.map +0 -1
- package/dist/tools/cli/beads.d.ts +0 -27
- package/dist/tools/cli/beads.d.ts.map +0 -1
- package/dist/tools/cli/beads.js +0 -172
- package/dist/tools/cli/beads.js.map +0 -1
- package/dist/tools/cli/beads.test.d.ts +0 -8
- package/dist/tools/cli/beads.test.d.ts.map +0 -1
- package/dist/tools/cli/beads.test.js +0 -264
- package/dist/tools/cli/beads.test.js.map +0 -1
- package/dist/tools/cli/editFile.d.ts +0 -17
- package/dist/tools/cli/editFile.d.ts.map +0 -1
- package/dist/tools/cli/editFile.js +0 -125
- package/dist/tools/cli/editFile.js.map +0 -1
- package/dist/tools/cli/editFile.test.d.ts +0 -8
- package/dist/tools/cli/editFile.test.d.ts.map +0 -1
- package/dist/tools/cli/editFile.test.js +0 -177
- package/dist/tools/cli/editFile.test.js.map +0 -1
- package/dist/tools/cli/readFile.d.ts +0 -25
- package/dist/tools/cli/readFile.d.ts.map +0 -1
- package/dist/tools/cli/readFile.js +0 -118
- package/dist/tools/cli/readFile.js.map +0 -1
- package/dist/tools/cli/readFile.test.d.ts +0 -8
- package/dist/tools/cli/readFile.test.d.ts.map +0 -1
- package/dist/tools/cli/readFile.test.js +0 -194
- package/dist/tools/cli/readFile.test.js.map +0 -1
- package/dist/tools/cli/search.d.ts +0 -16
- package/dist/tools/cli/search.d.ts.map +0 -1
- package/dist/tools/cli/search.js +0 -261
- package/dist/tools/cli/search.js.map +0 -1
- package/dist/tools/cli/search.test.d.ts +0 -8
- package/dist/tools/cli/search.test.d.ts.map +0 -1
- package/dist/tools/cli/search.test.js +0 -172
- package/dist/tools/cli/search.test.js.map +0 -1
- package/dist/tools/cli/subagent.d.ts +0 -43
- package/dist/tools/cli/subagent.d.ts.map +0 -1
- package/dist/tools/cli/subagent.js +0 -99
- package/dist/tools/cli/subagent.js.map +0 -1
- package/dist/tools/cli/subagent.test.d.ts +0 -8
- package/dist/tools/cli/subagent.test.d.ts.map +0 -1
- package/dist/tools/cli/subagent.test.js +0 -190
- package/dist/tools/cli/subagent.test.js.map +0 -1
- package/dist/tools/cli/terminal.d.ts +0 -19
- package/dist/tools/cli/terminal.d.ts.map +0 -1
- package/dist/tools/cli/terminal.js +0 -164
- package/dist/tools/cli/terminal.js.map +0 -1
- package/dist/tools/cli/terminal.test.d.ts +0 -8
- package/dist/tools/cli/terminal.test.d.ts.map +0 -1
- package/dist/tools/cli/terminal.test.js +0 -161
- package/dist/tools/cli/terminal.test.js.map +0 -1
- package/dist/tools/index.d.ts +0 -25
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -41
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interface.d.ts +0 -64
- package/dist/tools/interface.d.ts.map +0 -1
- package/dist/tools/interface.js +0 -37
- package/dist/tools/interface.js.map +0 -1
- package/dist/tools/interface.test.d.ts +0 -7
- package/dist/tools/interface.test.d.ts.map +0 -1
- package/dist/tools/interface.test.js +0 -179
- package/dist/tools/interface.test.js.map +0 -1
- package/dist/tools/mcp/bridge.d.ts +0 -48
- package/dist/tools/mcp/bridge.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.js +0 -128
- package/dist/tools/mcp/bridge.js.map +0 -1
- package/dist/tools/mcp/bridge.test.d.ts +0 -8
- package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.test.js +0 -300
- package/dist/tools/mcp/bridge.test.js.map +0 -1
- package/dist/tools/mcp/client.d.ts +0 -135
- package/dist/tools/mcp/client.d.ts.map +0 -1
- package/dist/tools/mcp/client.js +0 -263
- package/dist/tools/mcp/client.js.map +0 -1
- package/dist/tools/mcp/client.test.d.ts +0 -8
- package/dist/tools/mcp/client.test.d.ts.map +0 -1
- package/dist/tools/mcp/client.test.js +0 -390
- package/dist/tools/mcp/client.test.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -82
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -99
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/registry.test.d.ts +0 -7
- package/dist/tools/registry.test.d.ts.map +0 -1
- package/dist/tools/registry.test.js +0 -199
- package/dist/tools/registry.test.js.map +0 -1
- package/dist/tools/suite.test.d.ts +0 -11
- package/dist/tools/suite.test.d.ts.map +0 -1
- package/dist/tools/suite.test.js +0 -119
- package/dist/tools/suite.test.js.map +0 -1
- package/dist/tools/types.d.ts +0 -75
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -30
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/types.test.d.ts +0 -7
- package/dist/tools/types.test.d.ts.map +0 -1
- package/dist/tools/types.test.js +0 -178
- package/dist/tools/types.test.js.map +0 -1
- package/templates/.vscode/mcp.json +0 -20
- package/templates/CLAUDE.md +0 -129
package/README.md
CHANGED
|
@@ -12,64 +12,33 @@ They broke her wings once. They forgot she had claws.
|
|
|
12
12
|
|
|
13
13
|
## What Is This?
|
|
14
14
|
|
|
15
|
-
Beth is a **multi-agent AI orchestrator** with a TypeScript runtime, CLI toolchain, MCP integrations, and
|
|
15
|
+
Beth is a **multi-agent AI orchestrator** with a TypeScript runtime, CLI toolchain, MCP integrations, and subagent delegation—all driven by a ruthless coordinator who runs your development team the way Beth Dutton runs Schwartz & Meyer.
|
|
16
16
|
|
|
17
|
-
She commands seven specialized agents, each with their own expertise, tools, and handoff chains. On top of the GitHub Copilot agent layer, Beth ships a **TypeScript core engine** with a full agentic loop: agent routing, conversation context management, tool calling, subagent spawning, and agent
|
|
17
|
+
She commands seven specialized agents, each with their own expertise, tools, and handoff chains. On top of the GitHub Copilot agent layer, Beth ships a **TypeScript core engine** with a full agentic loop: agent routing, conversation context management, tool calling, subagent spawning, and agent handoffs—all backed by an Azure OpenAI LLM provider with streaming and retry.
|
|
18
18
|
|
|
19
19
|
**The system has four execution layers:**
|
|
20
20
|
|
|
21
21
|
| Layer | What It Does | Status |
|
|
22
22
|
|-------|-------------|--------|
|
|
23
23
|
| **Copilot Agents** | `.agent.md` definitions running in VS Code Agent Mode | Live |
|
|
24
|
-
| **CLI Toolchain** | `beth init`, `beth doctor`, `beth
|
|
24
|
+
| **CLI Toolchain** | `beth init`, `beth doctor`, `beth close`, `beth land` — TypeScript commands | Live |
|
|
25
25
|
| **Orchestration Engine** | Fan-out routing, tool calling loop, subagent spawning, handoffs | Live |
|
|
26
26
|
| **Tool Abstraction** | 6 CLI tools + MCP bridge — uniform interface for all agent capabilities | Live |
|
|
27
27
|
| **LLM Provider** | Azure OpenAI with Entra ID auth, streaming, retry, tool calling | Live |
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
**478 tests.** 477 pass, 1 skip, 0 fail.
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
33
33
|
## Architecture
|
|
34
34
|
|
|
35
35
|
```mermaid
|
|
36
|
-
flowchart
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
subgraph Engine["Orchestration Engine"]
|
|
43
|
-
Orch["Orchestrator<br/><i>Route → LLM → Tools → Response</i>"]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
subgraph Agents["Specialist Agents"]
|
|
47
|
-
Beth["@Beth"]
|
|
48
|
-
PM["@product-manager"]
|
|
49
|
-
UX["@ux-designer"]
|
|
50
|
-
Dev["@developer"]
|
|
51
|
-
Sec["@security-reviewer"]
|
|
52
|
-
Test["@tester"]
|
|
53
|
-
Res["@researcher"]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
subgraph Capabilities["Capabilities"]
|
|
57
|
-
Tools["Tools<br/><i>files · terminal · search · beads</i>"]
|
|
58
|
-
Skills["Skills<br/><i>PRD · React · shadcn · security</i>"]
|
|
59
|
-
MCPs["MCP Servers<br/><i>shadcn · Playwright · Azure</i>"]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
LLM["Azure OpenAI<br/><i>Entra ID · Streaming</i>"]
|
|
63
|
-
|
|
64
|
-
Copilot & CLI --> Orch
|
|
65
|
-
Orch --> Beth
|
|
66
|
-
Beth -->|"delegates"| PM & UX & Dev & Sec & Test & Res
|
|
67
|
-
Orch <-->|"chat"| LLM
|
|
68
|
-
Orch --> Tools & Skills & MCPs
|
|
36
|
+
flowchart LR
|
|
37
|
+
Input["Copilot Chat / CLI"] --> Beth["@Beth"]
|
|
38
|
+
Beth --> Agents["PM · UX · Dev · Sec · Test · Research"]
|
|
39
|
+
Beth --> Skills["Skills · MCP"]
|
|
69
40
|
|
|
70
41
|
style Beth fill:#1e3a5f,color:#fff
|
|
71
|
-
style Engine fill:#fff3e0
|
|
72
|
-
style Capabilities fill:#e3f2fd
|
|
73
42
|
```
|
|
74
43
|
|
|
75
44
|
---
|
|
@@ -86,11 +55,11 @@ flowchart TB
|
|
|
86
55
|
| **LLM Provider** | Azure OpenAI via `openai` SDK | Entra ID auth (no API keys), streaming + tool calling |
|
|
87
56
|
| **Auth** | `@azure/identity` DefaultAzureCredential | az login, managed identity, VS Code creds |
|
|
88
57
|
| **Frontmatter** | `gray-matter` | Parses `.agent.md` and `SKILL.md` YAML |
|
|
89
|
-
| **Testing** | Node.js
|
|
90
|
-
| **Task Tracking** |
|
|
91
|
-
| **Package Manager** |
|
|
58
|
+
| **Testing** | vitest + Node.js test runner | 478 tests — unit, integration, E2E |
|
|
59
|
+
| **Task Tracking** | Backlog.md (`backlog` CLI) | Markdown-based task tracking for agents and humans |
|
|
60
|
+
| **Package Manager** | npm | Lockfile committed |
|
|
92
61
|
|
|
93
|
-
**Production dependencies:** 1 (`gray-matter`).
|
|
62
|
+
**Production dependencies:** 1 (`gray-matter`). Minimal attack surface by design.
|
|
94
63
|
|
|
95
64
|
---
|
|
96
65
|
|
|
@@ -111,8 +80,8 @@ Then open VS Code, switch Copilot Chat to **Agent mode**, and type `@Beth`.
|
|
|
111
80
|
|
|
112
81
|
**Verify everything works:**
|
|
113
82
|
```bash
|
|
114
|
-
beth doctor # Health check: Node.js,
|
|
115
|
-
beth quickstart # Init + doctor
|
|
83
|
+
beth doctor # Health check: Node.js, agents, skills
|
|
84
|
+
beth quickstart # Init + doctor in one shot
|
|
116
85
|
```
|
|
117
86
|
|
|
118
87
|
For detailed setup (prerequisites, task tracking, MCP servers): [docs/INSTALLATION.md](docs/INSTALLATION.md)
|
|
@@ -123,19 +92,20 @@ For detailed setup (prerequisites, task tracking, MCP servers): [docs/INSTALLATI
|
|
|
123
92
|
|
|
124
93
|
| Command | What It Does |
|
|
125
94
|
|---------|-------------|
|
|
126
|
-
| `beth init` | Install agents, skills, VS Code settings,
|
|
95
|
+
| `beth init` | Install agents, skills, VS Code settings, Backlog.md tracking, pre-push hook |
|
|
127
96
|
| `beth init --force` | Overwrite existing files |
|
|
128
|
-
| `beth doctor` | Validate Node.js ≥18,
|
|
129
|
-
| `beth quickstart` | Run init + doctor
|
|
97
|
+
| `beth doctor` | Validate Node.js ≥18, agents frontmatter, skills |
|
|
98
|
+
| `beth quickstart` | Run init + doctor in one shot |
|
|
99
|
+
| `beth land` | Automate session completion: tests, commit, push, verify sync |
|
|
130
100
|
| `beth help` | Show all commands and options |
|
|
131
101
|
|
|
132
|
-
**Flags:** `--force`, `--skip-backlog`, `--skip-mcp`, `--skip-
|
|
102
|
+
**Flags:** `--force`, `--skip-backlog`, `--skip-mcp`, `--verbose`, `--skip-tests`, `--message/-m`, `--dry-run`
|
|
133
103
|
|
|
134
104
|
---
|
|
135
105
|
|
|
136
|
-
## Agent
|
|
106
|
+
## Agent Orchestration
|
|
137
107
|
|
|
138
|
-
Beth doesn't micromanage. She delegates to specialists over **subagent** and **handoff** channels, tracks
|
|
108
|
+
Beth doesn't micromanage. She delegates to specialists over **subagent** and **handoff** channels, tracks work in Backlog.md, and holds every agent accountable.
|
|
139
109
|
|
|
140
110
|
### The Family
|
|
141
111
|
|
|
@@ -149,40 +119,23 @@ Beth doesn't micromanage. She delegates to specialists over **subagent** and **h
|
|
|
149
119
|
| **@tester** | The Enforcer | Quality assurance, accessibility, performance |
|
|
150
120
|
| **@security-reviewer** | The Bodyguard | OWASP, compliance, threat modeling |
|
|
151
121
|
|
|
152
|
-
###
|
|
122
|
+
### Delegation Model (Hub-and-Spoke)
|
|
153
123
|
|
|
154
124
|
```mermaid
|
|
155
|
-
flowchart
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
UX["@ux-designer<br/>Component specs · Design tokens"]
|
|
164
|
-
D["@developer<br/>React/TS/Next.js · Implementation"]
|
|
165
|
-
S["@security-reviewer<br/>Threat modeling · Vulnerabilities"]
|
|
166
|
-
T["@tester<br/>QA · a11y · Performance"]
|
|
167
|
-
end
|
|
125
|
+
flowchart LR
|
|
126
|
+
Beth["@Beth"] -->|subagent| PM["PM"] & UX["UX"] & Dev["Dev"] & Sec["Sec"] & Test["Test"] & Res["Research"]
|
|
127
|
+
PM -.->|escalate| Beth
|
|
128
|
+
UX -.->|escalate| Beth
|
|
129
|
+
Dev -.->|escalate| Beth
|
|
130
|
+
Sec -.->|escalate| Beth
|
|
131
|
+
Test -.->|escalate| Beth
|
|
132
|
+
Res -.->|escalate| Beth
|
|
168
133
|
|
|
169
|
-
|
|
170
|
-
BethCore -->|"User Research"| R
|
|
171
|
-
BethCore -->|"UX Design"| UX
|
|
172
|
-
BethCore -->|"Development"| D
|
|
173
|
-
BethCore -->|"Security Review"| S
|
|
174
|
-
BethCore -->|"Quality Assurance"| T
|
|
175
|
-
|
|
176
|
-
PM -.->|"subagent"| R
|
|
177
|
-
PM -.->|"subagent"| UX
|
|
178
|
-
UX -.->|"subagent"| D
|
|
179
|
-
D -.->|"subagent"| T
|
|
180
|
-
S -.->|"subagent"| D
|
|
181
|
-
T -.->|"subagent"| D
|
|
182
|
-
|
|
183
|
-
style BethCore fill:#1e3a5f,color:#fff
|
|
134
|
+
style Beth fill:#1e3a5f,color:#fff
|
|
184
135
|
```
|
|
185
136
|
|
|
137
|
+
All agents escalate exclusively to Beth — no lateral handoffs. Beth routes, agents execute.
|
|
138
|
+
|
|
186
139
|
### Subagent vs Handoff
|
|
187
140
|
|
|
188
141
|
| Mechanism | Control | Use When |
|
|
@@ -205,33 +158,27 @@ runSubagent({
|
|
|
205
158
|
sequenceDiagram
|
|
206
159
|
participant U as User
|
|
207
160
|
participant B as Beth
|
|
208
|
-
participant PM as
|
|
209
|
-
participant UX as UX
|
|
210
|
-
participant D as
|
|
211
|
-
participant S as
|
|
212
|
-
participant T as
|
|
213
|
-
|
|
214
|
-
U->>B:
|
|
215
|
-
B->>
|
|
216
|
-
|
|
217
|
-
B->>
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
B
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
D-->>B: Implementation complete
|
|
225
|
-
|
|
226
|
-
par Parallel quality gates
|
|
227
|
-
B->>S: Security review
|
|
228
|
-
S-->>B: OWASP approved
|
|
161
|
+
participant PM as PM
|
|
162
|
+
participant UX as UX
|
|
163
|
+
participant D as Dev
|
|
164
|
+
participant S as Sec
|
|
165
|
+
participant T as Test
|
|
166
|
+
|
|
167
|
+
U->>B: Request
|
|
168
|
+
B->>PM: Requirements
|
|
169
|
+
PM-->>B: PRD
|
|
170
|
+
B->>UX: Design
|
|
171
|
+
UX-->>B: Specs
|
|
172
|
+
B->>D: Build
|
|
173
|
+
D-->>B: Done
|
|
174
|
+
par Quality gates
|
|
175
|
+
B->>S: Security
|
|
176
|
+
S-->>B: Approved
|
|
229
177
|
and
|
|
230
|
-
B->>T:
|
|
231
|
-
T-->>B:
|
|
178
|
+
B->>T: Verify
|
|
179
|
+
T-->>B: Pass
|
|
232
180
|
end
|
|
233
|
-
|
|
234
|
-
B->>U: Feature complete ✅
|
|
181
|
+
B->>U: Ship ✅
|
|
235
182
|
```
|
|
236
183
|
|
|
237
184
|
**Bug Hunt?** Tester → Developer → Security → Tester
|
|
@@ -276,83 +223,73 @@ Full details: [docs/MCP-SETUP.md](docs/MCP-SETUP.md)
|
|
|
276
223
|
|
|
277
224
|
## Skills (On-Demand Knowledge)
|
|
278
225
|
|
|
279
|
-
Skills are domain-knowledge modules that agents load automatically when trigger phrases match. Each skill lives in `.github/skills/<name>/SKILL.md`.
|
|
226
|
+
Skills are domain-knowledge modules that agents load automatically when trigger phrases match. Each skill lives in `.github/skills/<name>/SKILL.md` or `.github/prompts/<name>/PROMPT.md`.
|
|
280
227
|
|
|
281
228
|
| Skill | Triggers On | Used By |
|
|
282
229
|
|-------|------------|---------|
|
|
283
230
|
| **PRD Generation** | "create a prd", "product requirements" | Product Manager |
|
|
284
|
-
| **
|
|
231
|
+
| **UI UX Pro Max** | "design system", "color palette", "style guide" | UX Designer, Developer |
|
|
232
|
+
| **Web Design Guidelines** | "review my UI", "check accessibility" | UX Designer, Tester |
|
|
233
|
+
| **Framer Components** | "framer component", "property controls" | UX Designer, Developer |
|
|
285
234
|
| **React/Next.js Best Practices** | React performance, Next.js patterns | Developer |
|
|
286
|
-
| **Web Design Guidelines** | "review my UI", "check accessibility" | UX Designer |
|
|
287
235
|
| **shadcn/ui** | "shadcn", "ui component" | Developer |
|
|
288
236
|
| **Security Analysis** | "security review", "OWASP", "threat model" | Security Reviewer |
|
|
289
237
|
| **Azure Operations** | Azure resource management | Developer |
|
|
290
238
|
| **Web Search** | Internet research via Brave | Researcher |
|
|
291
239
|
|
|
240
|
+
### Design & UI Skills
|
|
241
|
+
|
|
242
|
+
Three complementary skills cover the full design-to-code pipeline. They don't overlap — each solves a different problem.
|
|
243
|
+
|
|
244
|
+
| Skill | What It Does | When You Need It |
|
|
245
|
+
|-------|-------------|------------------|
|
|
246
|
+
| **[UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)** | Design system generator — picks styles, colors, typography, and layout patterns from a searchable database of 67 styles, 161 color palettes, 57 font pairings, and 161 industry-specific reasoning rules. | Starting a new project or page. "What should this look like?" |
|
|
247
|
+
| **Web Design Guidelines** | Code auditor — fetches live [Vercel Web Interface Guidelines](https://github.com/vercel-labs/web-interface-guidelines) and checks your actual files for accessibility, focus, form, and performance violations with `file:line` output. | Reviewing implemented code. "Is this built correctly?" |
|
|
248
|
+
| **Framer Components** | Framer platform SDK reference — `addPropertyControls`, `ControlType`, code overrides, `RenderTarget`, auto-sizing, and Framer Motion integration. | Building custom components inside Framer. "How do I make this work in Framer?" |
|
|
249
|
+
|
|
250
|
+
**Typical flow:** UI UX Pro Max generates the design system → Developer builds it → Web Design Guidelines audits the result. Framer Components is loaded only when targeting the Framer platform.
|
|
251
|
+
|
|
292
252
|
---
|
|
293
253
|
|
|
294
|
-
##
|
|
254
|
+
## How It Works
|
|
295
255
|
|
|
296
|
-
|
|
256
|
+
Beth runs inside VS Code Copilot Agent Mode. The `@Beth` agent parses requests, delegates to specialist agents via subagent spawning, and tracks work through Backlog.md.
|
|
297
257
|
|
|
298
258
|
```mermaid
|
|
299
|
-
flowchart
|
|
300
|
-
|
|
301
|
-
Route
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
Decision -->|text| Done["Return response"]
|
|
308
|
-
Decision -->|tool calls| ToolExec["Execute tools\nvia ToolRegistry"]
|
|
309
|
-
ToolExec --> SubCheck{"Subagent request?"}
|
|
310
|
-
SubCheck -->|yes| SubAgent["Spawn child loop\ndepth-limited"]
|
|
311
|
-
SubCheck -->|no| ToolResult["Return tool result"]
|
|
312
|
-
SubAgent --> ToolResult
|
|
313
|
-
ToolResult --> LLM
|
|
314
|
-
Decision -->|handoff| Handoff["HandoffManager\nContext transfer"]
|
|
315
|
-
Handoff --> Route
|
|
316
|
-
|
|
317
|
-
style User fill:#1e3a5f,color:#fff
|
|
318
|
-
style LLM fill:#e8f5e9
|
|
319
|
-
style ToolExec fill:#e3f2fd
|
|
320
|
-
style SubAgent fill:#fff3e0
|
|
259
|
+
flowchart LR
|
|
260
|
+
Msg["@Beth message"] --> Route["Agent Router"]
|
|
261
|
+
Route -->|subagent| Agent["Specialist"]
|
|
262
|
+
Agent -->|tools| Work["Code · Test · Review"]
|
|
263
|
+
Agent -->|done| Route
|
|
264
|
+
Route --> Done["Response"]
|
|
265
|
+
|
|
266
|
+
style Route fill:#1e3a5f,color:#fff
|
|
321
267
|
```
|
|
322
268
|
|
|
323
269
|
**Key capabilities:**
|
|
324
|
-
- **Agent routing** — `@mention` parsing,
|
|
325
|
-
- **
|
|
326
|
-
- **
|
|
327
|
-
- **
|
|
328
|
-
- **Context window management** — Token-estimated truncation with tool call/result consistency repair
|
|
329
|
-
- **Observer callbacks** — Hook into routing decisions, LLM calls, tool executions, handoffs for logging/UI
|
|
270
|
+
- **Agent routing** — `@mention` parsing, subagent spawning, handoff chains
|
|
271
|
+
- **Skill injection** — Domain knowledge loaded on trigger phrases
|
|
272
|
+
- **Task tracking** — Backlog.md (`backlog`) for tasks, milestones, and progress
|
|
273
|
+
- **MCP integration** — Optional external tool servers (shadcn, Playwright, Azure)
|
|
330
274
|
|
|
331
|
-
```typescript
|
|
332
|
-
// Full orchestrator usage
|
|
333
|
-
import { Orchestrator, createDefaultRegistry } from 'beth-copilot';
|
|
334
|
-
|
|
335
|
-
const orchestrator = new Orchestrator({
|
|
336
|
-
agents: loadAgents('.github/agents'),
|
|
337
|
-
skills: loadSkills('.github/skills'),
|
|
338
|
-
provider: new AzureOpenAIProvider(config),
|
|
339
|
-
toolRegistry: createDefaultRegistry(),
|
|
340
|
-
toolContext: { workingDir: process.cwd(), permissions: { ... } },
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const result = await orchestrator.processMessage('Implement the login page');
|
|
344
|
-
// result.response — final text
|
|
345
|
-
// result.agentId — who handled it
|
|
346
|
-
// result.toolCallsExecuted — what tools ran
|
|
347
|
-
// result.subagentResults — any nested agent work
|
|
348
|
-
// result.injectedSkills — skills loaded for this turn
|
|
349
275
|
```
|
|
276
|
+
@Beth implement the login page
|
|
277
|
+
→ Beth routes to @developer, tracks work in Backlog.md
|
|
278
|
+
|
|
279
|
+
@Beth review this PR for security vulnerabilities
|
|
280
|
+
→ Beth routes to @security-reviewer, injects security-analysis skill
|
|
281
|
+
|
|
282
|
+
@Beth plan the dashboard feature
|
|
283
|
+
→ Beth routes to @product-manager for requirements, then @ux-designer for specs
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
> Invoke Beth by selecting `@Beth` in VS Code Copilot Chat (Agent Mode).
|
|
350
287
|
|
|
351
288
|
---
|
|
352
289
|
|
|
353
290
|
## Tool Abstraction Layer
|
|
354
291
|
|
|
355
|
-
A uniform interface for all agent capabilities — file I/O, terminal, search,
|
|
292
|
+
A uniform interface for all agent capabilities — file I/O, terminal, search, task tracking, subagent spawning, and MCP server tools. Tools expose OpenAI-compatible function calling schemas so the LLM can invoke them directly.
|
|
356
293
|
|
|
357
294
|
| Tool | What It Does | Key Features |
|
|
358
295
|
|------|-------------|-------------- |
|
|
@@ -360,77 +297,47 @@ A uniform interface for all agent capabilities — file I/O, terminal, search, b
|
|
|
360
297
|
| **editFile** | Atomic string replacement | Single-match enforcement, whitespace-safe |
|
|
361
298
|
| **search** | Ripgrep search | Node.js fallback, regex support, file filtering |
|
|
362
299
|
| **terminal** | Execute shell commands | `execFile('/bin/sh')` — no shell injection, timeouts |
|
|
363
|
-
| **
|
|
300
|
+
| **backlog** | Task tracking | `backlog task create`, `backlog board`, `backlog task edit` via CLI |
|
|
364
301
|
| **subagent** | Spawn nested agents | Returns structured result for orchestrator to process |
|
|
365
302
|
| **MCP Bridge** | External tool servers | JSON-RPC 2.0 over stdio, JSONC config, namespaced tools |
|
|
366
303
|
|
|
367
304
|
```typescript
|
|
368
|
-
import {
|
|
305
|
+
import { loadAgents, loadSkills, getInferableAgents, buildTriggerMap } from 'beth-copilot';
|
|
369
306
|
|
|
370
|
-
//
|
|
371
|
-
const
|
|
372
|
-
// →
|
|
307
|
+
// Inspect loaded agent definitions
|
|
308
|
+
const { agents, errors: agentErrors } = loadAgents('.github/agents');
|
|
309
|
+
// → each AgentDefinition has: id, frontmatter (name, tools, handoffs), body
|
|
373
310
|
|
|
374
|
-
//
|
|
375
|
-
const {
|
|
376
|
-
|
|
377
|
-
registry.register(tool); // e.g., mcp_shadcn_listComponents
|
|
378
|
-
}
|
|
311
|
+
// Find agents available for subagent spawning
|
|
312
|
+
const subagents = getInferableAgents({ agents, errors: agentErrors });
|
|
313
|
+
// → agents with infer: true in frontmatter
|
|
379
314
|
|
|
380
|
-
//
|
|
381
|
-
const
|
|
382
|
-
|
|
315
|
+
// Inspect loaded skill modules and their trigger phrases
|
|
316
|
+
const { skills, errors: skillErrors } = loadSkills('.github/skills');
|
|
317
|
+
const triggerMap = buildTriggerMap({ skills, errors: skillErrors });
|
|
318
|
+
// → Map of trigger phrase → SkillDefinition for runtime injection
|
|
383
319
|
```
|
|
384
320
|
|
|
385
321
|
---
|
|
386
322
|
|
|
387
|
-
##
|
|
323
|
+
## CLI Toolchain
|
|
388
324
|
|
|
389
|
-
The
|
|
325
|
+
The CLI handles scaffolding and health checks — distributing agent and skill files to target projects.
|
|
390
326
|
|
|
391
327
|
```mermaid
|
|
392
328
|
flowchart LR
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
Entra["Entra ID<br/><i>DefaultAzureCredential</i>"]
|
|
400
|
-
end
|
|
401
|
-
|
|
402
|
-
subgraph Provider["Provider"]
|
|
403
|
-
Base["LLMProviderBase<br/><i>Abstract interface</i>"]
|
|
404
|
-
AzureOAI["AzureOpenAIProvider<br/><i>chat · chatStream · countTokens</i>"]
|
|
405
|
-
end
|
|
406
|
-
|
|
407
|
-
subgraph Resilience["Resilience"]
|
|
408
|
-
RetryMod["Exponential Backoff<br/><i>Jitter · 3 retries</i>"]
|
|
409
|
-
Errors["LLMError<br/><i>Typed error codes</i>"]
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
subgraph Streaming["Streaming"]
|
|
413
|
-
Accum["StreamAccumulator<br/><i>Content + tool call assembly</i>"]
|
|
414
|
-
Collect["collectStream<br/><i>Full response</i>"]
|
|
415
|
-
Map["mapStream<br/><i>Transform chunks</i>"]
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
Env --> AzureOAI
|
|
419
|
-
DotEnv --> AzureOAI
|
|
420
|
-
Entra --> AzureOAI
|
|
421
|
-
Base --> AzureOAI
|
|
422
|
-
RetryMod --> AzureOAI
|
|
423
|
-
AzureOAI --> Accum
|
|
424
|
-
AzureOAI --> Collect
|
|
425
|
-
Errors --> RetryMod
|
|
329
|
+
CLI["beth"] --> Init["init"]
|
|
330
|
+
CLI --> Doctor["doctor"]
|
|
331
|
+
CLI --> QS["quickstart"]
|
|
332
|
+
Init --> Templates[".agent.md · SKILL.md · settings"]
|
|
333
|
+
Doctor --> Checks["Node ≥18 · agents · skills"]
|
|
334
|
+
QS --> Init & Doctor
|
|
426
335
|
```
|
|
427
336
|
|
|
428
|
-
**
|
|
429
|
-
-
|
|
430
|
-
-
|
|
431
|
-
-
|
|
432
|
-
- **Config** — `process.env` → `~/.beth/.env` precedence chain
|
|
433
|
-
- **193 provider tests** covering types, retry, config, streaming, and Azure client
|
|
337
|
+
**Commands:**
|
|
338
|
+
- `beth init` — Scaffold agents, skills, VS Code settings, Backlog.md tracking
|
|
339
|
+
- `beth doctor` — Validate Node.js, agent frontmatter, skill directories
|
|
340
|
+
- `beth quickstart` — Run init + doctor in one shot
|
|
434
341
|
|
|
435
342
|
---
|
|
436
343
|
|
|
@@ -453,7 +360,7 @@ beth/
|
|
|
453
360
|
│ │ ├── orchestrator.ts # Agentic loop: route → LLM → tools → response
|
|
454
361
|
│ │ ├── router.ts # @mention routing, skill matching, agent lookup
|
|
455
362
|
│ │ ├── context.ts # Conversation state, token truncation, skill injection
|
|
456
|
-
│ │ ├── handoffs.ts # Agent
|
|
363
|
+
│ │ ├── handoffs.ts # Agent handoff transfers, loop detection
|
|
457
364
|
│ │ ├── agents/
|
|
458
365
|
│ │ │ ├── types.ts # AgentDefinition, AgentFrontmatter, AgentHandoff
|
|
459
366
|
│ │ │ └── loader.ts # Parse .agent.md → typed definitions
|
|
@@ -471,7 +378,7 @@ beth/
|
|
|
471
378
|
│ │ │ ├── editFile.ts # Atomic string replacement
|
|
472
379
|
│ │ │ ├── search.ts # Ripgrep with Node.js fallback
|
|
473
380
|
│ │ │ ├── terminal.ts # Secure command execution
|
|
474
|
-
│ │ │ ├──
|
|
381
|
+
│ │ │ ├── backlog.ts # Task tracking via backlog CLI
|
|
475
382
|
│ │ │ └── subagent.ts # Agent spawning interface
|
|
476
383
|
│ │ └── mcp/
|
|
477
384
|
│ │ ├── client.ts # JSON-RPC 2.0 over stdio
|
|
@@ -512,7 +419,7 @@ beth/
|
|
|
512
419
|
| editFile | 30+ | String replacement, single-match enforcement |
|
|
513
420
|
| search | 30+ | Ripgrep, Node.js fallback, regex, file filtering |
|
|
514
421
|
| terminal | 30+ | Command execution, timeouts, output capture |
|
|
515
|
-
|
|
|
422
|
+
| backlog | 30+ | Backlog.md CLI wrapper, task tracking |
|
|
516
423
|
| subagent | 30+ | Spawn interface, result marking, agent validation |
|
|
517
424
|
| MCP client | 30+ | JSON-RPC 2.0, protocol handshake, tool listing |
|
|
518
425
|
| MCP bridge | 30+ | JSONC parsing, tool namespacing, error handling |
|
|
@@ -537,29 +444,8 @@ Beth follows human-centered design methodology across agent workflows:
|
|
|
537
444
|
|
|
538
445
|
```mermaid
|
|
539
446
|
flowchart LR
|
|
540
|
-
|
|
541
|
-
E["@researcher<br/>User interviews<br/>Pain points"]
|
|
542
|
-
end
|
|
543
|
-
|
|
544
|
-
subgraph Define["2. Define"]
|
|
545
|
-
D["@product-manager<br/>Problem framing<br/>Requirements"]
|
|
546
|
-
end
|
|
547
|
-
|
|
548
|
-
subgraph Ideate["3. Ideate"]
|
|
549
|
-
I["@ux-designer<br/>Component specs<br/>Patterns"]
|
|
550
|
-
end
|
|
551
|
-
|
|
552
|
-
subgraph Prototype["4. Prototype"]
|
|
553
|
-
P["@developer<br/>Build to learn<br/>Feature spikes"]
|
|
554
|
-
end
|
|
555
|
-
|
|
556
|
-
subgraph Test["5. Test"]
|
|
557
|
-
T["@tester<br/>Validate<br/>Accessibility"]
|
|
558
|
-
end
|
|
559
|
-
|
|
560
|
-
E --> D --> I --> P --> T
|
|
447
|
+
E["1. Empathize<br/>@researcher"] --> D["2. Define<br/>@product-manager"] --> I["3. Ideate<br/>@ux-designer"] --> P["4. Prototype<br/>@developer"] --> T["5. Test<br/>@tester"]
|
|
561
448
|
T -.->|iterate| E
|
|
562
|
-
T -.->|iterate| I
|
|
563
449
|
```
|
|
564
450
|
|
|
565
451
|
---
|
|
@@ -577,36 +463,10 @@ Beth doesn't ship garbage:
|
|
|
577
463
|
| **Test Coverage** | Unit + Integration + E2E | Tester |
|
|
578
464
|
|
|
579
465
|
```mermaid
|
|
580
|
-
flowchart
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
Sec["OWASP Compliant"]
|
|
585
|
-
Type["Full TypeScript"]
|
|
586
|
-
Coverage["Test Coverage"]
|
|
587
|
-
end
|
|
588
|
-
|
|
589
|
-
subgraph Gates["Enforcement"]
|
|
590
|
-
Designer["UX Designer"]
|
|
591
|
-
Developer["Developer"]
|
|
592
|
-
Security["Security Reviewer"]
|
|
593
|
-
Tester["Tester"]
|
|
594
|
-
end
|
|
595
|
-
|
|
596
|
-
A11y --> Designer
|
|
597
|
-
Perf --> Developer
|
|
598
|
-
Sec --> Security
|
|
599
|
-
Type --> Developer
|
|
600
|
-
Coverage --> Tester
|
|
601
|
-
|
|
602
|
-
Designer --> Ship{Ship?}
|
|
603
|
-
Developer --> Ship
|
|
604
|
-
Security --> Ship
|
|
605
|
-
Tester --> Ship
|
|
606
|
-
|
|
607
|
-
Ship -->|All Pass| Deploy["🚀 Deploy"]
|
|
608
|
-
Ship -->|Fail| Fix["🔧 Fix & Retry"]
|
|
609
|
-
Fix --> Gates
|
|
466
|
+
flowchart LR
|
|
467
|
+
Code["Code"] --> Gates["a11y · Perf · OWASP · Types · Tests"]
|
|
468
|
+
Gates -->|Pass| Ship["🚀 Ship"]
|
|
469
|
+
Gates -->|Fail| Fix["🔧 Fix"] --> Code
|
|
610
470
|
```
|
|
611
471
|
|
|
612
472
|
---
|
|
@@ -660,37 +520,6 @@ Is it magic? No. It's just competence with very good hair.
|
|
|
660
520
|
- **Node.js** ≥ 18
|
|
661
521
|
- **VS Code** with GitHub Copilot extension
|
|
662
522
|
- **GitHub Copilot Chat** in Agent mode
|
|
663
|
-
- [**beads**](https://github.com/steveyegge/beads) for task tracking (`bd` CLI)
|
|
664
|
-
|
|
665
|
-
### Installing Beads
|
|
666
|
-
|
|
667
|
-
```bash
|
|
668
|
-
curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
669
|
-
```
|
|
670
|
-
|
|
671
|
-
**CGO Troubleshooting (Linux/WSL):** Beads uses Dolt (a Git-for-data database) which requires CGO. If `bd init` or `bd doctor` fails with CGO-related errors:
|
|
672
|
-
|
|
673
|
-
```bash
|
|
674
|
-
# Install C compiler toolchain (required for CGO)
|
|
675
|
-
sudo apt-get update && sudo apt-get install -y build-essential gcc
|
|
676
|
-
|
|
677
|
-
# Verify CGO is available
|
|
678
|
-
export CGO_ENABLED=1
|
|
679
|
-
go env CGO_ENABLED # should print 1
|
|
680
|
-
|
|
681
|
-
# Re-install beads
|
|
682
|
-
curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
683
|
-
```
|
|
684
|
-
|
|
685
|
-
**Common beads issues:**
|
|
686
|
-
- `bd: command not found` — Add `~/.local/bin` to your PATH: `export PATH="$HOME/.local/bin:$PATH"`
|
|
687
|
-
- `bd doctor` warnings about metadata — Run `bd doctor --fix` to auto-repair
|
|
688
|
-
- Dolt migration errors — Delete `.beads/` and re-initialize with `bd init`
|
|
689
|
-
|
|
690
|
-
```bash
|
|
691
|
-
# Verify beads is working
|
|
692
|
-
bd doctor
|
|
693
|
-
```
|
|
694
523
|
|
|
695
524
|
### Optional: MCP Servers
|
|
696
525
|
|
|
@@ -702,7 +531,7 @@ See [MCP Integrations](#mcp-integrations) above or [docs/MCP-SETUP.md](docs/MCP-
|
|
|
702
531
|
|
|
703
532
|
| Doc | Purpose |
|
|
704
533
|
|-----|---------|
|
|
705
|
-
| [Installation Guide](docs/INSTALLATION.md) | Full setup: prerequisites, VS Code config,
|
|
534
|
+
| [Installation Guide](docs/INSTALLATION.md) | Full setup: prerequisites, VS Code config, Backlog.md |
|
|
706
535
|
| [MCP Setup](docs/MCP-SETUP.md) | Optional server integrations |
|
|
707
536
|
| [CLI Architecture](docs/CLI-ARCHITECTURE.md) | Dual-interface design, implementation phases |
|
|
708
537
|
| [System Flow](docs/SYSTEM-FLOW.md) | Agent orchestration diagrams |
|
|
File without changes
|
|
File without changes
|