bemadralphy 0.3.5 → 0.3.7
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/README.md +1 -0
- package/dist/beads/writer.js +11 -1
- package/dist/beads/writer.js.map +1 -1
- package/dist/cli.js +0 -0
- package/dist/planning/index.js +25 -6
- package/dist/planning/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/beads/parse-tasks.d.ts +0 -2
- package/dist/beads/parse-tasks.js +0 -12
- package/dist/beads/parse-tasks.js.map +0 -1
- package/dist/docs/pr-body.d.ts +0 -8
- package/dist/docs/pr-body.js +0 -11
- package/dist/docs/pr-body.js.map +0 -1
- package/dist/engines/cli.d.ts +0 -14
- package/dist/engines/cli.js +0 -72
- package/dist/engines/cli.js.map +0 -1
- package/dist/engines/prompt-template.d.ts +0 -2
- package/dist/engines/prompt-template.js +0 -96
- package/dist/engines/prompt-template.js.map +0 -1
- package/dist/engines/stub.d.ts +0 -2
- package/dist/engines/stub.js +0 -17
- package/dist/engines/stub.js.map +0 -1
- package/dist/git/worktrees.d.ts +0 -11
- package/dist/git/worktrees.js +0 -63
- package/dist/git/worktrees.js.map +0 -1
- package/dist/planning/bmad.d.ts +0 -3
- package/dist/planning/bmad.js +0 -20
- package/dist/planning/bmad.js.map +0 -1
- package/dist/pr/create.d.ts +0 -2
- package/dist/pr/create.js +0 -65
- package/dist/pr/create.js.map +0 -1
- package/dist/quality/gates.d.ts +0 -12
- package/dist/quality/gates.js +0 -54
- package/dist/quality/gates.js.map +0 -1
- package/dist/release.d.ts +0 -3
- package/dist/release.js +0 -88
- package/dist/release.js.map +0 -1
- package/dist/specs/changes.d.ts +0 -7
- package/dist/specs/changes.js +0 -20
- package/dist/specs/changes.js.map +0 -1
- package/dist/specs/merge-summary.d.ts +0 -2
- package/dist/specs/merge-summary.js +0 -19
- package/dist/specs/merge-summary.js.map +0 -1
- package/dist/swarm/native.d.ts +0 -14
- package/dist/swarm/native.js +0 -112
- package/dist/swarm/native.js.map +0 -1
- package/dist/swarm/parse.d.ts +0 -5
- package/dist/swarm/parse.js +0 -20
- package/dist/swarm/parse.js.map +0 -1
- package/dist/tasks/output.d.ts +0 -7
- package/dist/tasks/output.js +0 -15
- package/dist/tasks/output.js.map +0 -1
- package/dist/utils/failures.d.ts +0 -2
- package/dist/utils/failures.js +0 -22
- package/dist/utils/failures.js.map +0 -1
- package/dist/utils/resume.d.ts +0 -1
- package/dist/utils/resume.js +0 -14
- package/dist/utils/resume.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -1
- package/dist/utils/retry.js +0 -19
- package/dist/utils/retry.js.map +0 -1
package/README.md
CHANGED
|
@@ -512,6 +512,7 @@ node dist/cli.js --help
|
|
|
512
512
|
Planning fallback behavior:
|
|
513
513
|
|
|
514
514
|
- If BMAD install/update enters an interactive prompt and cannot run unattended, BeMadRalphy generates minimal fallback planning artifacts so the pipeline can continue.
|
|
515
|
+
- If BMAD exits successfully but still leaves missing/empty planning artifacts, the same fallback is generated.
|
|
515
516
|
- Fallback files include explicit markers indicating BMAD automation needs to be rerun when non-interactive BMAD workflows are available.
|
|
516
517
|
|
|
517
518
|
Typical recovery flow:
|
package/dist/beads/writer.js
CHANGED
|
@@ -17,7 +17,17 @@ export class BeadsWriter {
|
|
|
17
17
|
logInfo('BeadsWriter: bd not available; skipping init');
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
try {
|
|
21
|
+
await runCommand('bd', ['init'], this.cwd);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const message = error.message.toLowerCase();
|
|
25
|
+
if (message.includes('already initialized') || message.includes('workspace already initialized')) {
|
|
26
|
+
logInfo('BeadsWriter: workspace already initialized; continuing');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
21
31
|
});
|
|
22
32
|
}
|
|
23
33
|
async create(title, body) {
|
package/dist/beads/writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/beads/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,OAAO,WAAW;IACd,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACzC,gBAAgB,CAAmB;IACnC,GAAG,CAAS;IAEpB,YAAY,WAAmB;QAC7B,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,8CAA8C,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/beads/writer.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/planning/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export async function runPlanning(ctx) {
|
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
await assertCommandExists('bmad', 'Install with: npm install -g bmad-method');
|
|
21
|
+
let usedFallback = false;
|
|
21
22
|
try {
|
|
22
23
|
await runCommand('bmad', [
|
|
23
24
|
'install',
|
|
@@ -37,13 +38,27 @@ export async function runPlanning(ctx) {
|
|
|
37
38
|
const message = error.message;
|
|
38
39
|
if (isLikelyInteractiveInstallError(message)) {
|
|
39
40
|
logInfo('planning: BMAD install appears interactive; generating fallback planning artifacts');
|
|
40
|
-
await writeFallbackPlanningOutputs(ctx.projectRoot, outputs);
|
|
41
|
+
await writeFallbackPlanningOutputs(ctx.projectRoot, outputs, 'BMAD install required interactive input.');
|
|
42
|
+
usedFallback = true;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
await validateBmadOutputs(outputs);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const message = error.message;
|
|
53
|
+
if (!usedFallback && isMissingOrEmptyPlanningOutputError(message)) {
|
|
54
|
+
logInfo('planning: BMAD did not produce required outputs; generating fallback planning artifacts');
|
|
55
|
+
await writeFallbackPlanningOutputs(ctx.projectRoot, outputs, 'BMAD command completed without generating required planning artifacts.');
|
|
56
|
+
await validateBmadOutputs(outputs);
|
|
41
57
|
}
|
|
42
58
|
else {
|
|
43
59
|
throw error;
|
|
44
60
|
}
|
|
45
61
|
}
|
|
46
|
-
await validateBmadOutputs(outputs);
|
|
47
62
|
logInfo('planning: BMAD outputs validated');
|
|
48
63
|
}
|
|
49
64
|
function isLikelyInteractiveInstallError(message) {
|
|
@@ -54,15 +69,15 @@ function isLikelyInteractiveInstallError(message) {
|
|
|
54
69
|
lowered.includes('tty') ||
|
|
55
70
|
lowered.includes('interactive'));
|
|
56
71
|
}
|
|
57
|
-
async function writeFallbackPlanningOutputs(projectRoot, outputs) {
|
|
72
|
+
async function writeFallbackPlanningOutputs(projectRoot, outputs, reason) {
|
|
58
73
|
const idea = await readIdea(projectRoot);
|
|
59
74
|
await Promise.all([
|
|
60
|
-
writeFile(outputs.productBriefPath, ['# Product Brief', '',
|
|
61
|
-
writeFile(outputs.prdPath, ['# PRD', '',
|
|
75
|
+
writeFile(outputs.productBriefPath, ['# Product Brief', '', `> Generated fallback: ${reason}`, '', idea].join('\n'), 'utf-8'),
|
|
76
|
+
writeFile(outputs.prdPath, ['# PRD', '', `> Generated fallback: ${reason}`, '', idea].join('\n'), 'utf-8'),
|
|
62
77
|
writeFile(outputs.architecturePath, [
|
|
63
78
|
'# Architecture',
|
|
64
79
|
'',
|
|
65
|
-
|
|
80
|
+
`> Generated fallback: ${reason}`,
|
|
66
81
|
'',
|
|
67
82
|
'## Initial Constraints',
|
|
68
83
|
'- Refine architecture after BMAD becomes available.',
|
|
@@ -80,4 +95,8 @@ async function readIdea(projectRoot) {
|
|
|
80
95
|
return 'No idea.md found.';
|
|
81
96
|
}
|
|
82
97
|
}
|
|
98
|
+
function isMissingOrEmptyPlanningOutputError(message) {
|
|
99
|
+
const lowered = message.toLowerCase();
|
|
100
|
+
return lowered.includes('missing') || lowered.includes('empty');
|
|
101
|
+
}
|
|
83
102
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAoB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG;QACd,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;QAC1D,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;QACvC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACzD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;KAC/C,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,MAAM,UAAU,CACd,MAAM,EACN;YACE,SAAS;YACT,UAAU;YACV,cAAc;YACd,aAAa;YACb,GAAG,CAAC,WAAW;YACf,iBAAiB;YACjB,cAAc;YACd,SAAS;YACT,MAAM;YACN,OAAO;SACR,EACD,GAAG,CAAC,WAAW,CAChB,CAAC;QACF,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAI,KAAe,CAAC,OAAO,CAAC;QACzC,IAAI,+BAA+B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,oFAAoF,CAAC,CAAC;YAC9F,MAAM,4BAA4B,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export function parseTasksMarkdown(contents) {
|
|
2
|
-
const lines = contents.split(/\r?\n/).filter((line) => line.startsWith('|'));
|
|
3
|
-
const rows = lines
|
|
4
|
-
.map((line) => line.split('|').map((part) => part.trim()))
|
|
5
|
-
.filter((parts) => parts.length >= 4 && parts[1] !== 'ID' && parts[1] !== '---');
|
|
6
|
-
return rows.map((parts) => ({
|
|
7
|
-
id: parts[1],
|
|
8
|
-
title: parts[2],
|
|
9
|
-
status: parts[3],
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=parse-tasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-tasks.js","sourceRoot":"","sources":["../../src/beads/parse-tasks.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1B,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACZ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/dist/docs/pr-body.d.ts
DELETED
package/dist/docs/pr-body.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function generatePrBody(input) {
|
|
2
|
-
const lines = [];
|
|
3
|
-
lines.push('## Summary', '', input.summary, '');
|
|
4
|
-
lines.push('## Changes', '', ...input.changes.map((c) => `- ${c}`), '');
|
|
5
|
-
lines.push('## Tests', '', ...input.tests.map((t) => `- ${t}`), '');
|
|
6
|
-
if (input.linkedIssues && input.linkedIssues.length > 0) {
|
|
7
|
-
lines.push('## Linked Issues', '', ...input.linkedIssues.map((i) => `- ${i}`), '');
|
|
8
|
-
}
|
|
9
|
-
return lines.join('\n');
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=pr-body.js.map
|
package/dist/docs/pr-body.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pr-body.js","sourceRoot":"","sources":["../../src/docs/pr-body.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/engines/cli.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { EngineAdapter } from './types.js';
|
|
2
|
-
type CliAdapterConfig = {
|
|
3
|
-
name: string;
|
|
4
|
-
hasNativeSwarm: boolean;
|
|
5
|
-
permissionFlags?: string[];
|
|
6
|
-
defaultCommand: string;
|
|
7
|
-
envCommand: string;
|
|
8
|
-
envArgs: string;
|
|
9
|
-
};
|
|
10
|
-
export declare function createCliAdapter(config: CliAdapterConfig): EngineAdapter;
|
|
11
|
-
export declare function resolveCommand(config: CliAdapterConfig): string;
|
|
12
|
-
export declare function resolveArgs(config: CliAdapterConfig, prompt: string, promptFile: string, taskId: string): string[];
|
|
13
|
-
export declare function parseArgsEnv(raw?: string): string[] | null;
|
|
14
|
-
export {};
|
package/dist/engines/cli.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { commandExists, runCommand } from '../utils/exec.js';
|
|
4
|
-
import { logInfo } from '../utils/logging.js';
|
|
5
|
-
import { renderTaskPrompt } from './prompt-template.js';
|
|
6
|
-
export function createCliAdapter(config) {
|
|
7
|
-
return {
|
|
8
|
-
name: config.name,
|
|
9
|
-
hasNativeSwarm: config.hasNativeSwarm,
|
|
10
|
-
permissionFlags: config.permissionFlags ?? [],
|
|
11
|
-
async checkAvailable() {
|
|
12
|
-
const command = resolveCommand(config);
|
|
13
|
-
return commandExists(command);
|
|
14
|
-
},
|
|
15
|
-
async execute(task, options) {
|
|
16
|
-
const command = resolveCommand(config);
|
|
17
|
-
const cwd = options.cwd ?? process.cwd();
|
|
18
|
-
const prompt = await renderTaskPrompt(cwd, task);
|
|
19
|
-
const promptFile = await writePromptFile(cwd, task.id, prompt);
|
|
20
|
-
const args = resolveArgs(config, prompt, promptFile, task.id);
|
|
21
|
-
try {
|
|
22
|
-
const { stdout, stderr } = await runCommand(command, args, cwd);
|
|
23
|
-
const output = stdout.trim() ? stdout : stderr;
|
|
24
|
-
return { status: 'success', output };
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
28
|
-
logInfo(`engine "${config.name}" failed: ${message}`);
|
|
29
|
-
return { status: 'failed', error: message };
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
export function resolveCommand(config) {
|
|
35
|
-
return process.env[config.envCommand] ?? config.defaultCommand;
|
|
36
|
-
}
|
|
37
|
-
export function resolveArgs(config, prompt, promptFile, taskId) {
|
|
38
|
-
const raw = process.env[config.envArgs];
|
|
39
|
-
const args = parseArgsEnv(raw) ?? ['--prompt-file', '{promptFile}'];
|
|
40
|
-
return args.map((arg) => arg
|
|
41
|
-
.replaceAll('{prompt}', prompt)
|
|
42
|
-
.replaceAll('{promptFile}', promptFile)
|
|
43
|
-
.replaceAll('{taskId}', taskId));
|
|
44
|
-
}
|
|
45
|
-
export function parseArgsEnv(raw) {
|
|
46
|
-
if (!raw || !raw.trim()) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
const trimmed = raw.trim();
|
|
50
|
-
if (trimmed.startsWith('[')) {
|
|
51
|
-
try {
|
|
52
|
-
const parsed = JSON.parse(trimmed);
|
|
53
|
-
if (Array.isArray(parsed)) {
|
|
54
|
-
return parsed.map((item) => String(item));
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return trimmed.split(/\s+/).filter(Boolean);
|
|
63
|
-
}
|
|
64
|
-
async function writePromptFile(projectRoot, taskId, prompt) {
|
|
65
|
-
const dir = path.join(projectRoot, '.bemadralphy', 'prompts');
|
|
66
|
-
await mkdir(dir, { recursive: true });
|
|
67
|
-
const safeId = taskId.replace(/[^a-zA-Z0-9._-]+/g, '_');
|
|
68
|
-
const promptPath = path.join(dir, `${safeId}.md`);
|
|
69
|
-
await writeFile(promptPath, `${prompt}\n`, 'utf-8');
|
|
70
|
-
return promptPath;
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/engines/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/engines/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { access, readFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { parse } from 'yaml';
|
|
4
|
-
const DEFAULT_TEMPLATE = [
|
|
5
|
-
'# Task',
|
|
6
|
-
'ID: {{task.id}}',
|
|
7
|
-
'Title: {{task.title}}',
|
|
8
|
-
'Description: {{task.description}}',
|
|
9
|
-
'',
|
|
10
|
-
'# Project',
|
|
11
|
-
'Root: {{project.root}}',
|
|
12
|
-
'Idea: {{project.idea}}',
|
|
13
|
-
'Decisions:',
|
|
14
|
-
'{{project.decisions}}',
|
|
15
|
-
'',
|
|
16
|
-
'# Instructions',
|
|
17
|
-
'- Work in this repository.',
|
|
18
|
-
'- Update tests if needed.',
|
|
19
|
-
'- Summarize changes and list any risks.',
|
|
20
|
-
'',
|
|
21
|
-
].join('\n');
|
|
22
|
-
export async function renderTaskPrompt(projectRoot, task) {
|
|
23
|
-
const template = await loadTemplate(projectRoot);
|
|
24
|
-
const intake = await loadIntake(projectRoot);
|
|
25
|
-
const decisions = formatDecisions(intake?.decisions ?? {});
|
|
26
|
-
const values = new Map([
|
|
27
|
-
['{{task.id}}', task.id],
|
|
28
|
-
['{{task.title}}', task.title],
|
|
29
|
-
['{{task.description}}', task.description ?? 'n/a'],
|
|
30
|
-
['{{project.root}}', projectRoot],
|
|
31
|
-
['{{project.idea}}', intake?.idea?.trim() || 'n/a'],
|
|
32
|
-
['{{project.decisions}}', decisions],
|
|
33
|
-
]);
|
|
34
|
-
let rendered = template;
|
|
35
|
-
for (const [key, value] of values) {
|
|
36
|
-
rendered = rendered.replaceAll(key, value);
|
|
37
|
-
}
|
|
38
|
-
return rendered;
|
|
39
|
-
}
|
|
40
|
-
async function loadTemplate(projectRoot) {
|
|
41
|
-
const overridePath = process.env.BEMADRALPHY_PROMPT_TEMPLATE;
|
|
42
|
-
const candidates = [
|
|
43
|
-
overridePath,
|
|
44
|
-
path.join(projectRoot, '.bemadralphy', 'prompts', 'task.md'),
|
|
45
|
-
path.join(projectRoot, '.bemadralphy', 'prompt.md'),
|
|
46
|
-
].filter(Boolean);
|
|
47
|
-
for (const candidate of candidates) {
|
|
48
|
-
if (await exists(candidate)) {
|
|
49
|
-
return readFile(candidate, 'utf-8');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return DEFAULT_TEMPLATE;
|
|
53
|
-
}
|
|
54
|
-
async function loadIntake(projectRoot) {
|
|
55
|
-
try {
|
|
56
|
-
const intakePath = path.join(projectRoot, '.bemadralphy', 'intake.yaml');
|
|
57
|
-
const contents = await readFile(intakePath, 'utf-8');
|
|
58
|
-
const parsed = (parse(contents) ?? {});
|
|
59
|
-
return {
|
|
60
|
-
decisions: (parsed.decisions ?? {}),
|
|
61
|
-
idea: typeof parsed.idea === 'string' ? parsed.idea : undefined,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function formatDecisions(decisions) {
|
|
69
|
-
const keys = Object.keys(decisions);
|
|
70
|
-
if (keys.length === 0) {
|
|
71
|
-
return '- None';
|
|
72
|
-
}
|
|
73
|
-
return keys
|
|
74
|
-
.sort()
|
|
75
|
-
.map((key) => `- ${key}: ${formatDecisionValue(decisions[key])}`)
|
|
76
|
-
.join('\n');
|
|
77
|
-
}
|
|
78
|
-
function formatDecisionValue(value) {
|
|
79
|
-
if (value === null || value === undefined) {
|
|
80
|
-
return 'n/a';
|
|
81
|
-
}
|
|
82
|
-
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
83
|
-
return String(value);
|
|
84
|
-
}
|
|
85
|
-
return JSON.stringify(value);
|
|
86
|
-
}
|
|
87
|
-
async function exists(targetPath) {
|
|
88
|
-
try {
|
|
89
|
-
await access(targetPath);
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=prompt-template.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-template.js","sourceRoot":"","sources":["../../src/engines/prompt-template.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/stub.d.ts
DELETED
package/dist/engines/stub.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { commandExists } from '../utils/exec.js';
|
|
2
|
-
import { logInfo } from '../utils/logging.js';
|
|
3
|
-
export function createStubAdapter(name, hasNativeSwarm, permissionFlags = [], commandName = name) {
|
|
4
|
-
return {
|
|
5
|
-
name,
|
|
6
|
-
hasNativeSwarm,
|
|
7
|
-
permissionFlags,
|
|
8
|
-
async checkAvailable() {
|
|
9
|
-
return commandExists(commandName);
|
|
10
|
-
},
|
|
11
|
-
async execute(task, options) {
|
|
12
|
-
logInfo(`engine "${name}" not implemented (task=${task.id}, dryRun=${Boolean(options.dryRun)})`);
|
|
13
|
-
return { status: 'skipped', output: 'engine not implemented' };
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=stub.js.map
|
package/dist/engines/stub.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stub.js","sourceRoot":"","sources":["../../src/engines/stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,cAAuB,EACvB,kBAA4B,EAAE,EAC9B,cAAsB,IAAI;IAE1B,OAAO;QACL,IAAI;QACJ,cAAc;QACd,eAAe;QACf,KAAK,CAAC,cAAc;YAClB,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,OAAuB;YACrD,OAAO,CACL,WAAW,IAAI,2BAA2B,IAAI,CAAC,EAAE,YAAY,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CACxF,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/git/worktrees.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export type Worktree = {
|
|
2
|
-
path: string;
|
|
3
|
-
branch: string;
|
|
4
|
-
};
|
|
5
|
-
export declare function isWorktreeModeEnabled(): Promise<boolean>;
|
|
6
|
-
export declare function isCleanWorkingTree(projectRoot: string): Promise<boolean>;
|
|
7
|
-
export declare function isCleanStatus(status: string): boolean;
|
|
8
|
-
export declare function createWorktree(projectRoot: string, taskId: string): Promise<Worktree>;
|
|
9
|
-
export declare function removeWorktree(projectRoot: string, worktree: Worktree): Promise<void>;
|
|
10
|
-
export declare function commitAndMerge(projectRoot: string, worktree: Worktree, message: string): Promise<void>;
|
|
11
|
-
export declare function abortMerge(projectRoot: string): Promise<void>;
|
package/dist/git/worktrees.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { runCommand } from '../utils/exec.js';
|
|
4
|
-
import { logInfo } from '../utils/logging.js';
|
|
5
|
-
export async function isWorktreeModeEnabled() {
|
|
6
|
-
return process.env.BEMADRALPHY_WORKTREES === '1';
|
|
7
|
-
}
|
|
8
|
-
export async function isCleanWorkingTree(projectRoot) {
|
|
9
|
-
const { stdout } = await runCommand('git', ['status', '--porcelain'], projectRoot);
|
|
10
|
-
return isCleanStatus(stdout);
|
|
11
|
-
}
|
|
12
|
-
export function isCleanStatus(status) {
|
|
13
|
-
return status.trim().length === 0;
|
|
14
|
-
}
|
|
15
|
-
export async function createWorktree(projectRoot, taskId) {
|
|
16
|
-
const worktreesDir = path.join(projectRoot, '.bemadralphy', 'worktrees');
|
|
17
|
-
await mkdir(worktreesDir, { recursive: true });
|
|
18
|
-
const slug = slugify(taskId);
|
|
19
|
-
const worktreePath = path.join(worktreesDir, slug);
|
|
20
|
-
const branch = `bemadralphy/${slug}`;
|
|
21
|
-
await runCommand('git', ['worktree', 'add', '-b', branch, worktreePath], projectRoot);
|
|
22
|
-
logInfo(`worktree: created ${worktreePath} (${branch})`);
|
|
23
|
-
return { path: worktreePath, branch };
|
|
24
|
-
}
|
|
25
|
-
export async function removeWorktree(projectRoot, worktree) {
|
|
26
|
-
await runCommand('git', ['worktree', 'remove', '--force', worktree.path], projectRoot);
|
|
27
|
-
await rm(worktree.path, { recursive: true, force: true });
|
|
28
|
-
logInfo(`worktree: removed ${worktree.path}`);
|
|
29
|
-
}
|
|
30
|
-
export async function commitAndMerge(projectRoot, worktree, message) {
|
|
31
|
-
const { stdout } = await runCommand('git', ['status', '--porcelain'], worktree.path);
|
|
32
|
-
if (stdout.trim().length === 0) {
|
|
33
|
-
logInfo(`worktree: no changes for ${worktree.branch}`);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
await runCommand('git', ['add', '-A'], worktree.path);
|
|
37
|
-
await runCommand('git', ['commit', '-m', message], worktree.path);
|
|
38
|
-
try {
|
|
39
|
-
await runCommand('git', ['merge', '--no-ff', worktree.branch], projectRoot);
|
|
40
|
-
logInfo(`worktree: merged ${worktree.branch}`);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
logInfo(`worktree: merge failed for ${worktree.branch}`);
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export async function abortMerge(projectRoot) {
|
|
48
|
-
try {
|
|
49
|
-
await runCommand('git', ['merge', '--abort'], projectRoot);
|
|
50
|
-
logInfo('worktree: merge aborted');
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
logInfo('worktree: merge abort failed');
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function slugify(input) {
|
|
58
|
-
return input
|
|
59
|
-
.toLowerCase()
|
|
60
|
-
.replace(/[^a-z0-9-]+/g, '-')
|
|
61
|
-
.replace(/^-+|-+$/g, '');
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=worktrees.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/git/worktrees.ts"],"names":[],"mappings":"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"}
|
package/dist/planning/bmad.d.ts
DELETED
package/dist/planning/bmad.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { writeFile } from 'node:fs/promises';
|
|
2
|
-
import { runCommand } from '../utils/exec.js';
|
|
3
|
-
import { logInfo } from '../utils/logging.js';
|
|
4
|
-
const BMAD_MODE = 'BEMADRALPHY_BMAD_MODE';
|
|
5
|
-
export function shouldInvokeBmad() {
|
|
6
|
-
const mode = process.env[BMAD_MODE]?.toLowerCase();
|
|
7
|
-
return mode === 'cli';
|
|
8
|
-
}
|
|
9
|
-
export async function runBmadSteps(outputs) {
|
|
10
|
-
logInfo(`planning: invoking BMAD CLI (set ${BMAD_MODE}=cli to enable; this is experimental).`);
|
|
11
|
-
const brief = await runCommand('bmad', ['product-brief']);
|
|
12
|
-
const prd = await runCommand('bmad', ['create-prd']);
|
|
13
|
-
const architecture = await runCommand('bmad', ['create-architecture']);
|
|
14
|
-
const stories = await runCommand('bmad', ['create-epics-and-stories']);
|
|
15
|
-
await writeFile(outputs.productBriefPath, brief.stdout || brief.stderr, 'utf-8');
|
|
16
|
-
await writeFile(outputs.prdPath, prd.stdout || prd.stderr, 'utf-8');
|
|
17
|
-
await writeFile(outputs.architecturePath, architecture.stdout || architecture.stderr, 'utf-8');
|
|
18
|
-
await writeFile(outputs.storiesPath, stories.stdout || stories.stderr, 'utf-8');
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=bmad.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bmad.js","sourceRoot":"","sources":["../../src/planning/bmad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAE1C,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IACnD,OAAO,IAAI,KAAK,KAAK,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAoB;IACrD,OAAO,CACL,oCAAoC,SAAS,wCAAwC,CACtF,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEvE,MAAM,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjF,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/F,MAAM,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC"}
|
package/dist/pr/create.d.ts
DELETED
package/dist/pr/create.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { access } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { commandExists, runCommand } from '../utils/exec.js';
|
|
4
|
-
import { logInfo } from '../utils/logging.js';
|
|
5
|
-
const PR_MODE_ENV = 'BEMADRALPHY_PR_MODE';
|
|
6
|
-
export async function maybeCreatePr(projectRoot, enabled) {
|
|
7
|
-
if (!enabled) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
if (process.env[PR_MODE_ENV] !== 'gh') {
|
|
11
|
-
logInfo(`pr: set ${PR_MODE_ENV}=gh to enable gh pr create`);
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
if (!(await commandExists('gh'))) {
|
|
15
|
-
logInfo('pr: gh not available; skipping PR creation');
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const prBodyPath = path.join(projectRoot, '.bemadralphy', 'pr-body.md');
|
|
19
|
-
if (!(await exists(prBodyPath))) {
|
|
20
|
-
logInfo('pr: pr-body.md not found; skipping PR creation');
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const args = buildGhArgs(prBodyPath);
|
|
24
|
-
await runCommand('gh', ['pr', 'create', ...args], projectRoot);
|
|
25
|
-
logInfo('pr: gh pr create submitted');
|
|
26
|
-
}
|
|
27
|
-
export function buildGhArgs(prBodyPath) {
|
|
28
|
-
const title = process.env.BEMADRALPHY_PR_TITLE ?? 'Automated changes';
|
|
29
|
-
const base = process.env.BEMADRALPHY_PR_BASE ?? 'main';
|
|
30
|
-
const head = process.env.BEMADRALPHY_PR_HEAD;
|
|
31
|
-
const isDraft = process.env.BEMADRALPHY_PR_DRAFT === '1';
|
|
32
|
-
const labels = parseLabelsEnv(process.env.BEMADRALPHY_PR_LABELS);
|
|
33
|
-
const args = ['--title', title, '--body-file', prBodyPath, '--base', base];
|
|
34
|
-
if (head) {
|
|
35
|
-
args.push('--head', head);
|
|
36
|
-
}
|
|
37
|
-
if (isDraft) {
|
|
38
|
-
args.push('--draft');
|
|
39
|
-
}
|
|
40
|
-
if (labels.length > 0) {
|
|
41
|
-
for (const label of labels) {
|
|
42
|
-
args.push('--label', label);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return args;
|
|
46
|
-
}
|
|
47
|
-
function parseLabelsEnv(raw) {
|
|
48
|
-
if (!raw) {
|
|
49
|
-
return [];
|
|
50
|
-
}
|
|
51
|
-
return raw
|
|
52
|
-
.split(',')
|
|
53
|
-
.map((label) => label.trim())
|
|
54
|
-
.filter(Boolean);
|
|
55
|
-
}
|
|
56
|
-
async function exists(targetPath) {
|
|
57
|
-
try {
|
|
58
|
-
await access(targetPath);
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=create.js.map
|
package/dist/pr/create.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/pr/create.ts"],"names":[],"mappings":"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"}
|
package/dist/quality/gates.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export type QualityGate = {
|
|
2
|
-
name: 'tests' | 'lint';
|
|
3
|
-
command: string;
|
|
4
|
-
args: string[];
|
|
5
|
-
};
|
|
6
|
-
export type GateResult = {
|
|
7
|
-
ok: boolean;
|
|
8
|
-
failedGate?: string;
|
|
9
|
-
error?: string;
|
|
10
|
-
};
|
|
11
|
-
export declare function getQualityGates(): QualityGate[];
|
|
12
|
-
export declare function runQualityGates(cwd: string): Promise<GateResult>;
|
package/dist/quality/gates.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '../utils/exec.js';
|
|
2
|
-
export function getQualityGates() {
|
|
3
|
-
const gates = [];
|
|
4
|
-
const testGate = buildGate('tests', 'BEMADRALPHY_TEST_CMD', 'BEMADRALPHY_TEST_ARGS');
|
|
5
|
-
const lintGate = buildGate('lint', 'BEMADRALPHY_LINT_CMD', 'BEMADRALPHY_LINT_ARGS');
|
|
6
|
-
if (testGate) {
|
|
7
|
-
gates.push(testGate);
|
|
8
|
-
}
|
|
9
|
-
if (lintGate) {
|
|
10
|
-
gates.push(lintGate);
|
|
11
|
-
}
|
|
12
|
-
return gates;
|
|
13
|
-
}
|
|
14
|
-
export async function runQualityGates(cwd) {
|
|
15
|
-
const gates = getQualityGates();
|
|
16
|
-
for (const gate of gates) {
|
|
17
|
-
try {
|
|
18
|
-
await runCommand(gate.command, gate.args, cwd);
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
22
|
-
return { ok: false, failedGate: gate.name, error: message };
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return { ok: true };
|
|
26
|
-
}
|
|
27
|
-
function buildGate(name, cmdEnv, argsEnv) {
|
|
28
|
-
const command = process.env[cmdEnv];
|
|
29
|
-
if (!command) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
const args = parseArgsEnv(process.env[argsEnv]) ?? [];
|
|
33
|
-
return { name, command, args };
|
|
34
|
-
}
|
|
35
|
-
function parseArgsEnv(raw) {
|
|
36
|
-
if (!raw || !raw.trim()) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const trimmed = raw.trim();
|
|
40
|
-
if (trimmed.startsWith('[')) {
|
|
41
|
-
try {
|
|
42
|
-
const parsed = JSON.parse(trimmed);
|
|
43
|
-
if (Array.isArray(parsed)) {
|
|
44
|
-
return parsed.map((item) => String(item));
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return trimmed.split(/\s+/).filter(Boolean);
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=gates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gates.js","sourceRoot":"","sources":["../../src/quality/gates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAc9C,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;IACpF,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CAChB,IAAyB,EACzB,MAAc,EACd,OAAe;IAEf,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/release.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export declare function maybeTagRelease(projectRoot: string, dryRun: boolean): Promise<void>;
|
|
2
|
-
export declare function maybeCreateGhRelease(projectRoot: string, dryRun: boolean): Promise<void>;
|
|
3
|
-
export declare function buildGhReleaseArgs(tag: string, notesPath: string): string[];
|
package/dist/release.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { access, readFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { commandExists, runCommand } from './utils/exec.js';
|
|
4
|
-
import { logInfo } from './utils/logging.js';
|
|
5
|
-
const RELEASE_TAG_MODE = 'BEMADRALPHY_RELEASE_TAG';
|
|
6
|
-
const RELEASE_MODE = 'BEMADRALPHY_RELEASE_MODE';
|
|
7
|
-
export async function maybeTagRelease(projectRoot, dryRun) {
|
|
8
|
-
const version = await readPackageVersion(projectRoot);
|
|
9
|
-
if (!version) {
|
|
10
|
-
logInfo('release: no package.json found; skipping tag');
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
if (dryRun) {
|
|
14
|
-
logInfo(`release: dry-run, skipping tag v${version}`);
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
if (process.env[RELEASE_TAG_MODE] !== '1') {
|
|
18
|
-
logInfo(`release: tagging disabled; set ${RELEASE_TAG_MODE}=1 to enable`);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
await runCommand('git', ['tag', `v${version}`], projectRoot);
|
|
22
|
-
logInfo(`release: created git tag v${version}`);
|
|
23
|
-
}
|
|
24
|
-
export async function maybeCreateGhRelease(projectRoot, dryRun) {
|
|
25
|
-
const version = await readPackageVersion(projectRoot);
|
|
26
|
-
if (!version) {
|
|
27
|
-
logInfo('release: no package.json found; skipping gh release');
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
if (dryRun) {
|
|
31
|
-
logInfo(`release: dry-run, skipping gh release v${version}`);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (process.env[RELEASE_MODE] !== 'gh') {
|
|
35
|
-
logInfo(`release: set ${RELEASE_MODE}=gh to enable gh release`);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (process.env[RELEASE_TAG_MODE] !== '1') {
|
|
39
|
-
logInfo(`release: tagging disabled; set ${RELEASE_TAG_MODE}=1 before gh release`);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (!(await commandExists('gh'))) {
|
|
43
|
-
logInfo('release: gh not available; skipping release creation');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const notesPath = path.join(projectRoot, 'RELEASE_NOTES.md');
|
|
47
|
-
if (!(await exists(notesPath))) {
|
|
48
|
-
logInfo('release: RELEASE_NOTES.md not found; skipping release creation');
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const args = buildGhReleaseArgs(`v${version}`, notesPath);
|
|
52
|
-
await runCommand('gh', ['release', 'create', ...args], projectRoot);
|
|
53
|
-
logInfo(`release: gh release created v${version}`);
|
|
54
|
-
}
|
|
55
|
-
export function buildGhReleaseArgs(tag, notesPath) {
|
|
56
|
-
const title = process.env.BEMADRALPHY_RELEASE_TITLE ?? tag;
|
|
57
|
-
const isDraft = process.env.BEMADRALPHY_RELEASE_DRAFT === '1';
|
|
58
|
-
const isPrerelease = process.env.BEMADRALPHY_RELEASE_PRERELEASE === '1';
|
|
59
|
-
const args = ['--title', title, '--notes-file', notesPath, tag];
|
|
60
|
-
if (isDraft) {
|
|
61
|
-
args.push('--draft');
|
|
62
|
-
}
|
|
63
|
-
if (isPrerelease) {
|
|
64
|
-
args.push('--prerelease');
|
|
65
|
-
}
|
|
66
|
-
return args;
|
|
67
|
-
}
|
|
68
|
-
async function readPackageVersion(projectRoot) {
|
|
69
|
-
try {
|
|
70
|
-
const pkgPath = path.join(projectRoot, 'package.json');
|
|
71
|
-
const raw = await readFile(pkgPath, 'utf-8');
|
|
72
|
-
const parsed = JSON.parse(raw);
|
|
73
|
-
return parsed.version ?? null;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async function exists(targetPath) {
|
|
80
|
-
try {
|
|
81
|
-
await access(targetPath);
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=release.js.map
|
package/dist/release.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"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"}
|
package/dist/specs/changes.d.ts
DELETED
package/dist/specs/changes.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
export async function writeSpecChanges(projectRoot, results) {
|
|
4
|
-
if (results.length === 0) {
|
|
5
|
-
return;
|
|
6
|
-
}
|
|
7
|
-
const changesDir = path.join(projectRoot, 'openspec', 'changes');
|
|
8
|
-
await mkdir(changesDir, { recursive: true });
|
|
9
|
-
const changePath = path.join(changesDir, 'current.md');
|
|
10
|
-
const lines = ['# Spec Changes', ''];
|
|
11
|
-
lines.push(`Generated: ${new Date().toISOString()}`, '');
|
|
12
|
-
lines.push('## Tasks', '');
|
|
13
|
-
for (const result of results) {
|
|
14
|
-
const title = result.title ? `: ${result.title}` : '';
|
|
15
|
-
const error = result.error ? ` (${result.error})` : '';
|
|
16
|
-
lines.push(`- ${result.id}${title} [${result.status}]${error}`);
|
|
17
|
-
}
|
|
18
|
-
await writeFile(changePath, `${lines.join('\n')}\n`, 'utf-8');
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=changes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/specs/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,OAA2B;IAE3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,GAAG,KAAK,KAAK,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
export async function writeSpecMergeSummary(projectRoot, summary) {
|
|
4
|
-
const dir = path.join(projectRoot, '.bemadralphy');
|
|
5
|
-
await mkdir(dir, { recursive: true });
|
|
6
|
-
const lines = [
|
|
7
|
-
'# OpenSpec Merge Summary',
|
|
8
|
-
'',
|
|
9
|
-
`- Merged at: ${summary.mergedAt}`,
|
|
10
|
-
`- Archived path: ${summary.archivedPath}`,
|
|
11
|
-
'',
|
|
12
|
-
'## Preview',
|
|
13
|
-
'',
|
|
14
|
-
summary.preview,
|
|
15
|
-
'',
|
|
16
|
-
];
|
|
17
|
-
await writeFile(path.join(dir, 'spec-merge.md'), `${lines.join('\n')}\n`, 'utf-8');
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=merge-summary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-summary.js","sourceRoot":"","sources":["../../src/specs/merge-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,OAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG;QACZ,0BAA0B;QAC1B,EAAE;QACF,gBAAgB,OAAO,CAAC,QAAQ,EAAE;QAClC,oBAAoB,OAAO,CAAC,YAAY,EAAE;QAC1C,EAAE;QACF,YAAY;QACZ,EAAE;QACF,OAAO,CAAC,OAAO;QACf,EAAE;KACH,CAAC;IACF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrF,CAAC"}
|
package/dist/swarm/native.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type SwarmTask = {
|
|
2
|
-
id: string;
|
|
3
|
-
title: string;
|
|
4
|
-
};
|
|
5
|
-
export declare function runNativeSwarm(projectRoot: string, engineName: string, tasks: SwarmTask[]): Promise<{
|
|
6
|
-
ok: boolean;
|
|
7
|
-
error?: string;
|
|
8
|
-
} | null>;
|
|
9
|
-
export declare function resolveSwarmArgs(argsEnv: string, tasksPath: string): string[];
|
|
10
|
-
export declare function buildSwarmPayload(engineName: string, tasks: SwarmTask[]): {
|
|
11
|
-
engine: string;
|
|
12
|
-
tasks: SwarmTask[];
|
|
13
|
-
};
|
|
14
|
-
export declare function buildSwarmHeaders(token?: string): Record<string, string>;
|
package/dist/swarm/native.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { commandExists, runCommand } from '../utils/exec.js';
|
|
4
|
-
import { logInfo } from '../utils/logging.js';
|
|
5
|
-
const SWARM_CONFIGS = {
|
|
6
|
-
claude: {
|
|
7
|
-
cmdEnv: 'BEMADRALPHY_CLAUDE_SWARM_CMD',
|
|
8
|
-
argsEnv: 'BEMADRALPHY_CLAUDE_SWARM_ARGS',
|
|
9
|
-
urlEnv: 'BEMADRALPHY_CLAUDE_SWARM_URL',
|
|
10
|
-
tokenEnv: 'BEMADRALPHY_CLAUDE_SWARM_TOKEN',
|
|
11
|
-
},
|
|
12
|
-
kimi: {
|
|
13
|
-
cmdEnv: 'BEMADRALPHY_KIMI_SWARM_CMD',
|
|
14
|
-
argsEnv: 'BEMADRALPHY_KIMI_SWARM_ARGS',
|
|
15
|
-
urlEnv: 'BEMADRALPHY_KIMI_SWARM_URL',
|
|
16
|
-
tokenEnv: 'BEMADRALPHY_KIMI_SWARM_TOKEN',
|
|
17
|
-
},
|
|
18
|
-
codex: {
|
|
19
|
-
cmdEnv: 'BEMADRALPHY_CODEX_SWARM_CMD',
|
|
20
|
-
argsEnv: 'BEMADRALPHY_CODEX_SWARM_ARGS',
|
|
21
|
-
urlEnv: 'BEMADRALPHY_CODEX_SWARM_URL',
|
|
22
|
-
tokenEnv: 'BEMADRALPHY_CODEX_SWARM_TOKEN',
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
export async function runNativeSwarm(projectRoot, engineName, tasks) {
|
|
26
|
-
const config = SWARM_CONFIGS[engineName];
|
|
27
|
-
if (!config) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
const command = process.env[config.cmdEnv];
|
|
31
|
-
if (!command) {
|
|
32
|
-
const url = process.env[config.urlEnv];
|
|
33
|
-
if (!url) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return runSwarmHttp(engineName, tasks, url, process.env[config.tokenEnv]);
|
|
37
|
-
}
|
|
38
|
-
if (!(await commandExists(command))) {
|
|
39
|
-
logInfo(`swarm: command "${command}" not available`);
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
const swarmDir = path.join(projectRoot, '.bemadralphy', 'swarm');
|
|
43
|
-
await mkdir(swarmDir, { recursive: true });
|
|
44
|
-
const tasksPath = path.join(swarmDir, `${engineName}-tasks.json`);
|
|
45
|
-
const outputPath = path.join(swarmDir, `${engineName}-output.log`);
|
|
46
|
-
await writeFile(tasksPath, JSON.stringify({ tasks }, null, 2), 'utf-8');
|
|
47
|
-
const args = resolveSwarmArgs(config.argsEnv, tasksPath);
|
|
48
|
-
try {
|
|
49
|
-
const { stdout, stderr } = await runCommand(command, args, projectRoot);
|
|
50
|
-
await writeFile(outputPath, stdout.trim() ? stdout : stderr, 'utf-8');
|
|
51
|
-
return { ok: true };
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
55
|
-
logInfo(`swarm: native command failed (${message}); falling back`);
|
|
56
|
-
return { ok: false, error: message };
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export function resolveSwarmArgs(argsEnv, tasksPath) {
|
|
60
|
-
const raw = process.env[argsEnv];
|
|
61
|
-
const args = parseArgsEnv(raw) ?? ['--tasks-file', '{tasksFile}'];
|
|
62
|
-
return args.map((arg) => arg.replaceAll('{tasksFile}', tasksPath));
|
|
63
|
-
}
|
|
64
|
-
export function buildSwarmPayload(engineName, tasks) {
|
|
65
|
-
return { engine: engineName, tasks };
|
|
66
|
-
}
|
|
67
|
-
export function buildSwarmHeaders(token) {
|
|
68
|
-
const headers = {
|
|
69
|
-
'content-type': 'application/json',
|
|
70
|
-
};
|
|
71
|
-
if (token) {
|
|
72
|
-
headers.authorization = `Bearer ${token}`;
|
|
73
|
-
}
|
|
74
|
-
return headers;
|
|
75
|
-
}
|
|
76
|
-
function parseArgsEnv(raw) {
|
|
77
|
-
if (!raw || !raw.trim()) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const trimmed = raw.trim();
|
|
81
|
-
if (trimmed.startsWith('[')) {
|
|
82
|
-
try {
|
|
83
|
-
const parsed = JSON.parse(trimmed);
|
|
84
|
-
if (Array.isArray(parsed)) {
|
|
85
|
-
return parsed.map((item) => String(item));
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return trimmed.split(/\s+/).filter(Boolean);
|
|
94
|
-
}
|
|
95
|
-
async function runSwarmHttp(engineName, tasks, url, token) {
|
|
96
|
-
try {
|
|
97
|
-
const response = await fetch(url, {
|
|
98
|
-
method: 'POST',
|
|
99
|
-
headers: buildSwarmHeaders(token),
|
|
100
|
-
body: JSON.stringify(buildSwarmPayload(engineName, tasks)),
|
|
101
|
-
});
|
|
102
|
-
if (!response.ok) {
|
|
103
|
-
return { ok: false, error: `HTTP ${response.status}` };
|
|
104
|
-
}
|
|
105
|
-
return { ok: true };
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
109
|
-
return { ok: false, error: message };
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=native.js.map
|
package/dist/swarm/native.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/swarm/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAc9C,MAAM,aAAa,GAAgC;IACjD,MAAM,EAAE;QACN,MAAM,EAAE,8BAA8B;QACtC,OAAO,EAAE,+BAA+B;QACxC,MAAM,EAAE,8BAA8B;QACtC,QAAQ,EAAE,gCAAgC;KAC3C;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,4BAA4B;QACpC,OAAO,EAAE,6BAA6B;QACtC,MAAM,EAAE,4BAA4B;QACpC,QAAQ,EAAE,8BAA8B;KACzC;IACD,KAAK,EAAE;QACL,MAAM,EAAE,6BAA6B;QACrC,OAAO,EAAE,8BAA8B;QACvC,MAAM,EAAE,6BAA6B;QACrC,QAAQ,EAAE,+BAA+B;KAC1C;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,UAAkB,EAClB,KAAkB;IAElB,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,mBAAmB,OAAO,iBAAiB,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,aAAa,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,aAAa,CAAC,CAAC;IACnE,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAExE,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,iCAAiC,OAAO,iBAAiB,CAAC,CAAC;QACnE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,SAAiB;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,KAAkB;IACtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,UAAkB,EAClB,KAAkB,EAClB,GAAW,EACX,KAAc;IAEd,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;AACH,CAAC"}
|
package/dist/swarm/parse.d.ts
DELETED
package/dist/swarm/parse.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export function parseSwarmOutput(contents, taskIds) {
|
|
2
|
-
const results = new Map();
|
|
3
|
-
const lines = contents.split(/\r?\n/);
|
|
4
|
-
const ids = Array.from(new Set(taskIds));
|
|
5
|
-
for (const line of lines) {
|
|
6
|
-
const statusMatch = line.match(/\b(success|failed|skipped)\b(?:\s*:\s*(.+))?/i);
|
|
7
|
-
if (!statusMatch) {
|
|
8
|
-
continue;
|
|
9
|
-
}
|
|
10
|
-
const id = ids.find((candidate) => line.includes(candidate));
|
|
11
|
-
if (!id) {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
const status = statusMatch[1].toLowerCase();
|
|
15
|
-
const error = statusMatch[2];
|
|
16
|
-
results.set(id, { status, error });
|
|
17
|
-
}
|
|
18
|
-
return results;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=parse.js.map
|
package/dist/swarm/parse.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/swarm/parse.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,OAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAA2B,CAAC;QACrE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/tasks/output.d.ts
DELETED
package/dist/tasks/output.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
export async function writeTaskOutput(projectRoot, taskId, result) {
|
|
4
|
-
const dir = path.join(projectRoot, '.bemadralphy', 'tasks');
|
|
5
|
-
await mkdir(dir, { recursive: true });
|
|
6
|
-
const safeId = taskId.replace(/[^a-zA-Z0-9._-]+/g, '_');
|
|
7
|
-
const filePath = path.join(dir, `${safeId}.log`);
|
|
8
|
-
const lines = [
|
|
9
|
-
`status=${result.status}`,
|
|
10
|
-
result.output ? `output=${result.output}` : '',
|
|
11
|
-
result.error ? `error=${result.error}` : '',
|
|
12
|
-
].filter(Boolean);
|
|
13
|
-
await writeFile(filePath, `${lines.join('\n')}\n`, 'utf-8');
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=output.js.map
|
package/dist/tasks/output.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/tasks/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,MAAc,EACd,MAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG;QACZ,UAAU,MAAM,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/utils/failures.d.ts
DELETED
package/dist/utils/failures.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { appendFile, mkdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
export async function logFailure(projectRoot, phase, error) {
|
|
4
|
-
const dir = path.join(projectRoot, '.bemadralphy');
|
|
5
|
-
await mkdir(dir, { recursive: true });
|
|
6
|
-
const logPath = path.join(dir, 'failures.log');
|
|
7
|
-
const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
|
|
8
|
-
const line = `[${new Date().toISOString()}] phase=${phase} error=${message}\n`;
|
|
9
|
-
await appendFile(logPath, line, 'utf-8');
|
|
10
|
-
}
|
|
11
|
-
export async function readLastFailure(projectRoot) {
|
|
12
|
-
try {
|
|
13
|
-
const logPath = path.join(projectRoot, '.bemadralphy', 'failures.log');
|
|
14
|
-
const contents = await readFile(logPath, 'utf-8');
|
|
15
|
-
const lines = contents.trim().split('\n');
|
|
16
|
-
return lines.length > 0 ? lines[lines.length - 1] : null;
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=failures.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"failures.js","sourceRoot":"","sources":["../../src/utils/failures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,KAAa,EACb,KAAc;IAEd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,UAAU,OAAO,IAAI,CAAC;IAC/E,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/utils/resume.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function getResumeStartIndex(phases: string[], savedPhase?: string): number;
|
package/dist/utils/resume.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export function getResumeStartIndex(phases, savedPhase) {
|
|
2
|
-
if (!savedPhase) {
|
|
3
|
-
return 0;
|
|
4
|
-
}
|
|
5
|
-
const lastIndex = phases.indexOf(savedPhase);
|
|
6
|
-
if (lastIndex === -1) {
|
|
7
|
-
return 0;
|
|
8
|
-
}
|
|
9
|
-
if (lastIndex >= phases.length - 1) {
|
|
10
|
-
return phases.length;
|
|
11
|
-
}
|
|
12
|
-
return lastIndex + 1;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=resume.js.map
|
package/dist/utils/resume.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/utils/resume.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,UAAmB;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/utils/retry.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function isRetryableError(message?: string): boolean;
|
package/dist/utils/retry.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export function isRetryableError(message) {
|
|
2
|
-
if (!message) {
|
|
3
|
-
return false;
|
|
4
|
-
}
|
|
5
|
-
const normalized = message.toLowerCase();
|
|
6
|
-
const patterns = [
|
|
7
|
-
'rate limit',
|
|
8
|
-
'too many requests',
|
|
9
|
-
'timeout',
|
|
10
|
-
'timed out',
|
|
11
|
-
'econnreset',
|
|
12
|
-
'econnrefused',
|
|
13
|
-
'socket hang up',
|
|
14
|
-
'http 429',
|
|
15
|
-
'http 503',
|
|
16
|
-
];
|
|
17
|
-
return patterns.some((pattern) => normalized.includes(pattern));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=retry.js.map
|
package/dist/utils/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG;QACf,YAAY;QACZ,mBAAmB;QACnB,SAAS;QACT,WAAW;QACX,YAAY;QACZ,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,UAAU;KACX,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC"}
|