beth-copilot 1.0.17 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -28
- package/README.md +87 -247
- package/bin/cli.js +115 -7
- 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 +49 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/cli/commands/beads.e2e.test.d.ts +13 -0
- package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/beads.e2e.test.js +526 -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 +89 -0
- package/dist/cli/commands/close.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.d.ts +27 -0
- package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.js +252 -0
- package/dist/cli/commands/close.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.js +309 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/close.test.d.ts +15 -0
- package/dist/cli/commands/close.test.d.ts.map +1 -0
- package/dist/cli/commands/close.test.js +634 -0
- package/dist/cli/commands/close.test.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +23 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +93 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/doctor.test.js +209 -0
- 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 +119 -0
- package/dist/cli/commands/framework-isolation.test.js.map +1 -0
- 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 +305 -0
- package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
- package/dist/cli/commands/land.d.ts +142 -0
- package/dist/cli/commands/land.d.ts.map +1 -0
- package/dist/cli/commands/land.js +647 -0
- package/dist/cli/commands/land.js.map +1 -0
- package/dist/cli/commands/land.test.d.ts +20 -0
- package/dist/cli/commands/land.test.d.ts.map +1 -0
- package/dist/cli/commands/land.test.js +622 -0
- package/dist/cli/commands/land.test.js.map +1 -0
- package/dist/cli/commands/pipeline.e2e.test.js +1 -1
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.d.ts +84 -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 +257 -0
- package/dist/cli/commands/pre-push-guard.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts +15 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.js +397 -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 +179 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
- package/dist/cli/commands/quickstart.test.js +40 -2
- package/dist/cli/commands/quickstart.test.js.map +1 -1
- package/dist/core/agents/suite.test.js +4 -2
- package/dist/core/agents/suite.test.js.map +1 -1
- package/dist/core/agents/tools.test.js +5 -1
- package/dist/core/agents/tools.test.js.map +1 -1
- package/dist/index.d.ts +3 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -10
- package/dist/index.js.map +1 -1
- package/package.json +15 -9
- package/sbom.json +2011 -819
- package/templates/.github/agents/beth.agent.md +222 -45
- package/templates/.github/agents/developer.agent.md +37 -67
- package/templates/.github/agents/product-manager.agent.md +15 -57
- package/templates/.github/agents/researcher.agent.md +20 -60
- package/templates/.github/agents/security-reviewer.agent.md +29 -70
- package/templates/.github/agents/tester.agent.md +40 -58
- package/templates/.github/agents/ux-designer.agent.md +20 -63
- package/templates/.github/copilot-instructions.md +217 -204
- package/templates/AGENTS.md +108 -20
- 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/bin/cli.js
CHANGED
|
@@ -775,6 +775,77 @@ async function runBeadsDoctor() {
|
|
|
775
775
|
});
|
|
776
776
|
}
|
|
777
777
|
|
|
778
|
+
const BETH_GUARD_BEGIN = '# --- BEGIN BETH GUARD ---';
|
|
779
|
+
const BETH_GUARD_END = '# --- END BETH GUARD ---';
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Generate the shell script to append to the pre-push hook.
|
|
783
|
+
* Pure shell — no Node dependency at hook time for speed.
|
|
784
|
+
*/
|
|
785
|
+
function generateGuardScript() {
|
|
786
|
+
return `
|
|
787
|
+
${BETH_GUARD_BEGIN}
|
|
788
|
+
# Branch discipline enforcement — installed by beth-copilot
|
|
789
|
+
# Bypass: BETH_SKIP_PUSH_GUARD=1 git push
|
|
790
|
+
if [ "\$BETH_SKIP_PUSH_GUARD" = "1" ]; then
|
|
791
|
+
echo "⚠ Pre-push guard bypassed (BETH_SKIP_PUSH_GUARD=1)" >&2
|
|
792
|
+
else
|
|
793
|
+
_beth_branch=\$(git branch --show-current 2>/dev/null)
|
|
794
|
+
|
|
795
|
+
# Block pushes from protected branches
|
|
796
|
+
case "\$_beth_branch" in
|
|
797
|
+
main|master)
|
|
798
|
+
echo "✗ Pushing from '\$_beth_branch' is blocked. Work on an epic branch." >&2
|
|
799
|
+
echo " Set BETH_SKIP_PUSH_GUARD=1 to bypass." >&2
|
|
800
|
+
exit 1
|
|
801
|
+
;;
|
|
802
|
+
esac
|
|
803
|
+
|
|
804
|
+
# Warn if not on an epic or release branch
|
|
805
|
+
case "\$_beth_branch" in
|
|
806
|
+
epic/*) ;;
|
|
807
|
+
release/*) ;;
|
|
808
|
+
"")
|
|
809
|
+
echo "⚠ Detached HEAD — no branch name. Proceeding anyway." >&2
|
|
810
|
+
;;
|
|
811
|
+
*)
|
|
812
|
+
echo "⚠ Branch '\$_beth_branch' doesn't follow the epic/<id> convention." >&2
|
|
813
|
+
;;
|
|
814
|
+
esac
|
|
815
|
+
fi
|
|
816
|
+
${BETH_GUARD_END}
|
|
817
|
+
`;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Install the pre-push guard into .beads/hooks/pre-push.
|
|
822
|
+
* Appends the guard section after the beads integration section.
|
|
823
|
+
* Idempotent — skips if guard is already installed.
|
|
824
|
+
*
|
|
825
|
+
* @param {string} cwd - Project root directory
|
|
826
|
+
*/
|
|
827
|
+
function installPrePushGuard(cwd) {
|
|
828
|
+
const hookPath = join(cwd, '.beads', 'hooks', 'pre-push');
|
|
829
|
+
|
|
830
|
+
if (!existsSync(hookPath)) {
|
|
831
|
+
logWarning('Pre-push hook not found (.beads/hooks/pre-push). Skipping guard installation.');
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
const content = readFileSync(hookPath, 'utf-8');
|
|
836
|
+
|
|
837
|
+
// Already installed?
|
|
838
|
+
if (content.includes(BETH_GUARD_BEGIN)) {
|
|
839
|
+
logSuccess('Pre-push branch guard already installed');
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
// Append guard after existing content
|
|
844
|
+
const guardScript = generateGuardScript();
|
|
845
|
+
writeFileSync(hookPath, content.trimEnd() + '\n' + guardScript, 'utf-8');
|
|
846
|
+
logSuccess('Installed pre-push branch guard (blocks direct pushes to main)');
|
|
847
|
+
}
|
|
848
|
+
|
|
778
849
|
function showHelp() {
|
|
779
850
|
showBethBannerStatic({ showQuickHelp: false });
|
|
780
851
|
console.log(`${COLORS.bright}Beth${COLORS.reset} - AI Orchestrator for GitHub Copilot
|
|
@@ -782,6 +853,9 @@ function showHelp() {
|
|
|
782
853
|
${COLORS.bright}Usage:${COLORS.reset}
|
|
783
854
|
npx beth-copilot init [options] Initialize Beth in current directory
|
|
784
855
|
npx beth-copilot doctor Check system health and dependencies
|
|
856
|
+
npx beth-copilot close <id> [opts] Close issue with dependency enforcement
|
|
857
|
+
npx beth-copilot land [opts] Automated session completion (test, commit, push)
|
|
858
|
+
npx beth-copilot pre-push-guard Run branch discipline checks (used by git hook)
|
|
785
859
|
npx beth-copilot quickstart Run init + doctor + beads setup
|
|
786
860
|
npx beth-copilot help Show this help message
|
|
787
861
|
|
|
@@ -1095,6 +1169,11 @@ ${COLORS.yellow}╔════════════════════
|
|
|
1095
1169
|
await runBeadsDoctor();
|
|
1096
1170
|
}
|
|
1097
1171
|
|
|
1172
|
+
// Install pre-push guard hook
|
|
1173
|
+
if (!skipBeads && isBeadsInitialized(cwd)) {
|
|
1174
|
+
installPrePushGuard(cwd);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1098
1177
|
// Final verification
|
|
1099
1178
|
console.log('');
|
|
1100
1179
|
log('Verifying installation...', COLORS.cyan);
|
|
@@ -1128,12 +1207,16 @@ ${COLORS.cyan}"They broke my wings and forgot I had claws."${COLORS.reset}
|
|
|
1128
1207
|
}
|
|
1129
1208
|
|
|
1130
1209
|
// Input validation constants
|
|
1131
|
-
const ALLOWED_COMMANDS = ['init', 'help', '--help', '-h', 'doctor', 'quickstart'];
|
|
1132
|
-
const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp', '--skip-beads', '--verbose'];
|
|
1210
|
+
const ALLOWED_COMMANDS = ['init', 'help', '--help', '-h', 'doctor', 'quickstart', 'close', 'pre-push-guard'];
|
|
1211
|
+
const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp', '--skip-beads', '--verbose', '--reason', '-r', '-f', '--skip-tests', '--skip-backup', '--message', '-m', '--dry-run'];
|
|
1133
1212
|
const MAX_ARG_LENGTH = 50;
|
|
1134
1213
|
|
|
1135
1214
|
// Validate and sanitize input
|
|
1136
1215
|
function validateArgs(args) {
|
|
1216
|
+
// The 'close' and 'land' commands handle their own arg validation
|
|
1217
|
+
const command = args[0]?.toLowerCase();
|
|
1218
|
+
if (command === 'close' || command === 'land') return;
|
|
1219
|
+
|
|
1137
1220
|
for (const arg of args) {
|
|
1138
1221
|
// Prevent excessively long arguments (log injection, DoS)
|
|
1139
1222
|
if (arg.length > MAX_ARG_LENGTH) {
|
|
@@ -1166,11 +1249,14 @@ const options = {
|
|
|
1166
1249
|
globalThis.VERBOSE = options.verbose;
|
|
1167
1250
|
|
|
1168
1251
|
// Validate unknown flags (exclude --help which is handled as a command)
|
|
1169
|
-
|
|
1170
|
-
if (
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1252
|
+
// Skip for 'close' and 'land' commands which handle their own arg parsing
|
|
1253
|
+
if (command !== 'close' && command !== 'land') {
|
|
1254
|
+
const unknownFlags = args.filter(arg => arg.startsWith('--') && !ALLOWED_FLAGS.includes(arg) && arg !== '--help');
|
|
1255
|
+
if (unknownFlags.length > 0) {
|
|
1256
|
+
logError(`Unknown flag: ${unknownFlags[0].slice(0, MAX_ARG_LENGTH)}`);
|
|
1257
|
+
console.log('Run "npx beth-copilot help" for usage information.');
|
|
1258
|
+
process.exit(1);
|
|
1259
|
+
}
|
|
1174
1260
|
}
|
|
1175
1261
|
|
|
1176
1262
|
switch (command) {
|
|
@@ -1197,6 +1283,28 @@ switch (command) {
|
|
|
1197
1283
|
await quickstart(options);
|
|
1198
1284
|
}
|
|
1199
1285
|
break;
|
|
1286
|
+
case 'close':
|
|
1287
|
+
{
|
|
1288
|
+
const { close } = await loadTsCommand('close');
|
|
1289
|
+
// Pass raw args after 'close' — the command handles its own parsing
|
|
1290
|
+
const closeArgs = process.argv.slice(3);
|
|
1291
|
+
await close(closeArgs);
|
|
1292
|
+
}
|
|
1293
|
+
break;
|
|
1294
|
+
case 'land':
|
|
1295
|
+
{
|
|
1296
|
+
const { land } = await loadTsCommand('land');
|
|
1297
|
+
// Pass raw args after 'land' — the command handles its own parsing
|
|
1298
|
+
const landArgs = process.argv.slice(3);
|
|
1299
|
+
await land(landArgs);
|
|
1300
|
+
}
|
|
1301
|
+
break;
|
|
1302
|
+
case 'pre-push-guard':
|
|
1303
|
+
{
|
|
1304
|
+
const { prePushGuard } = await loadTsCommand('pre-push-guard');
|
|
1305
|
+
await prePushGuard();
|
|
1306
|
+
}
|
|
1307
|
+
break;
|
|
1200
1308
|
case 'help':
|
|
1201
1309
|
case '--help':
|
|
1202
1310
|
case '-h':
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smoke Test — Vitest Infrastructure Verification
|
|
3
|
+
*
|
|
4
|
+
* Proves the new Vitest test infrastructure works correctly
|
|
5
|
+
* alongside the existing node:test-based tests.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from 'vitest';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { loadAgents } from '../core/agents/loader.js';
|
|
10
|
+
import { loadSkills } from '../core/skills/loader.js';
|
|
11
|
+
const TEMPLATES_AGENTS_DIR = join(process.cwd(), 'templates', '.github', 'agents');
|
|
12
|
+
const TEMPLATES_SKILLS_DIR = join(process.cwd(), 'templates', '.github', 'skills');
|
|
13
|
+
describe('Smoke Test: Agent Loader', () => {
|
|
14
|
+
it('should load agents from templates directory', () => {
|
|
15
|
+
const result = loadAgents(TEMPLATES_AGENTS_DIR);
|
|
16
|
+
expect(result.errors).toHaveLength(0);
|
|
17
|
+
expect(result.agents.length).toBeGreaterThanOrEqual(6);
|
|
18
|
+
const agentIds = result.agents.map((a) => a.id);
|
|
19
|
+
expect(agentIds).toContain('beth');
|
|
20
|
+
expect(agentIds).toContain('developer');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('Smoke Test: Skill Loader', () => {
|
|
24
|
+
it('should load skills from templates directory', () => {
|
|
25
|
+
const result = loadSkills(TEMPLATES_SKILLS_DIR);
|
|
26
|
+
expect(result.errors).toHaveLength(0);
|
|
27
|
+
expect(result.skills.length).toBeGreaterThanOrEqual(5);
|
|
28
|
+
const skillIds = result.skills.map((s) => s.id);
|
|
29
|
+
expect(skillIds).toContain('prd');
|
|
30
|
+
expect(skillIds).toContain('shadcn-ui');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('Smoke Test: Barrel Exports', () => {
|
|
34
|
+
it('should export agent loader functions', async () => {
|
|
35
|
+
const mod = await import('../index.js');
|
|
36
|
+
expect(mod.loadAgents).toBeDefined();
|
|
37
|
+
expect(typeof mod.loadAgents).toBe('function');
|
|
38
|
+
expect(mod.loadAgent).toBeDefined();
|
|
39
|
+
expect(typeof mod.loadAgent).toBe('function');
|
|
40
|
+
});
|
|
41
|
+
it('should export skill loader functions', async () => {
|
|
42
|
+
const mod = await import('../index.js');
|
|
43
|
+
expect(mod.loadSkills).toBeDefined();
|
|
44
|
+
expect(typeof mod.loadSkills).toBe('function');
|
|
45
|
+
expect(mod.loadSkill).toBeDefined();
|
|
46
|
+
expect(typeof mod.loadSkill).toBe('function');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../src/__tests__/smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2E tests for beads (bd) CLI commands that Beth depends on.
|
|
3
|
+
*
|
|
4
|
+
* Tests the full lifecycle of bd commands: create, show, list, update,
|
|
5
|
+
* close, ready, dep, children, and epic workflows.
|
|
6
|
+
*
|
|
7
|
+
* These tests run against the REAL beads database. All test issues are
|
|
8
|
+
* cleaned up in afterAll. Uses --json for deterministic assertions.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npx vitest run src/cli/commands/beads.e2e.test.ts
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=beads.e2e.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beads.e2e.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/beads.e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|