bemadralphy 0.1.0 → 0.2.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.
Files changed (74) hide show
  1. package/README.md +23 -0
  2. package/dist/cli.js +2 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/orchestrator.d.ts +3 -1
  5. package/dist/orchestrator.js +21 -0
  6. package/dist/orchestrator.js.map +1 -1
  7. package/dist/phases/execute.js +11 -8
  8. package/dist/phases/execute.js.map +1 -1
  9. package/dist/phases/index.d.ts +1 -1
  10. package/dist/phases/index.js.map +1 -1
  11. package/dist/phases/intake.js +63 -3
  12. package/dist/phases/intake.js.map +1 -1
  13. package/dist/phases/types.d.ts +4 -0
  14. package/dist/state.d.ts +2 -0
  15. package/dist/state.js.map +1 -1
  16. package/dist/swarm/detector.d.ts +5 -1
  17. package/dist/swarm/detector.js +29 -4
  18. package/dist/swarm/detector.js.map +1 -1
  19. package/dist/swarm/types.d.ts +7 -0
  20. package/package.json +1 -1
  21. package/dist/beads/parse-tasks.d.ts +0 -2
  22. package/dist/beads/parse-tasks.js +0 -12
  23. package/dist/beads/parse-tasks.js.map +0 -1
  24. package/dist/docs/pr-body.d.ts +0 -8
  25. package/dist/docs/pr-body.js +0 -11
  26. package/dist/docs/pr-body.js.map +0 -1
  27. package/dist/engines/cli.d.ts +0 -14
  28. package/dist/engines/cli.js +0 -72
  29. package/dist/engines/cli.js.map +0 -1
  30. package/dist/engines/prompt-template.d.ts +0 -2
  31. package/dist/engines/prompt-template.js +0 -96
  32. package/dist/engines/prompt-template.js.map +0 -1
  33. package/dist/engines/stub.d.ts +0 -2
  34. package/dist/engines/stub.js +0 -17
  35. package/dist/engines/stub.js.map +0 -1
  36. package/dist/git/worktrees.d.ts +0 -11
  37. package/dist/git/worktrees.js +0 -63
  38. package/dist/git/worktrees.js.map +0 -1
  39. package/dist/planning/bmad.d.ts +0 -3
  40. package/dist/planning/bmad.js +0 -20
  41. package/dist/planning/bmad.js.map +0 -1
  42. package/dist/pr/create.d.ts +0 -2
  43. package/dist/pr/create.js +0 -65
  44. package/dist/pr/create.js.map +0 -1
  45. package/dist/quality/gates.d.ts +0 -12
  46. package/dist/quality/gates.js +0 -54
  47. package/dist/quality/gates.js.map +0 -1
  48. package/dist/release.d.ts +0 -3
  49. package/dist/release.js +0 -88
  50. package/dist/release.js.map +0 -1
  51. package/dist/specs/changes.d.ts +0 -7
  52. package/dist/specs/changes.js +0 -20
  53. package/dist/specs/changes.js.map +0 -1
  54. package/dist/specs/merge-summary.d.ts +0 -2
  55. package/dist/specs/merge-summary.js +0 -19
  56. package/dist/specs/merge-summary.js.map +0 -1
  57. package/dist/swarm/native.d.ts +0 -14
  58. package/dist/swarm/native.js +0 -112
  59. package/dist/swarm/native.js.map +0 -1
  60. package/dist/swarm/parse.d.ts +0 -5
  61. package/dist/swarm/parse.js +0 -20
  62. package/dist/swarm/parse.js.map +0 -1
  63. package/dist/tasks/output.d.ts +0 -7
  64. package/dist/tasks/output.js +0 -15
  65. package/dist/tasks/output.js.map +0 -1
  66. package/dist/utils/failures.d.ts +0 -2
  67. package/dist/utils/failures.js +0 -22
  68. package/dist/utils/failures.js.map +0 -1
  69. package/dist/utils/resume.d.ts +0 -1
  70. package/dist/utils/resume.js +0 -14
  71. package/dist/utils/resume.js.map +0 -1
  72. package/dist/utils/retry.d.ts +0 -1
  73. package/dist/utils/retry.js +0 -19
  74. package/dist/utils/retry.js.map +0 -1
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/swarm/native.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export type SwarmResult = {
2
- status: 'success' | 'failed' | 'skipped';
3
- error?: string;
4
- };
5
- export declare function parseSwarmOutput(contents: string, taskIds: string[]): Map<string, SwarmResult>;
@@ -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
@@ -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"}
@@ -1,7 +0,0 @@
1
- type TaskOutput = {
2
- status: 'success' | 'failed' | 'skipped';
3
- output?: string;
4
- error?: string;
5
- };
6
- export declare function writeTaskOutput(projectRoot: string, taskId: string, result: TaskOutput): Promise<void>;
7
- export {};
@@ -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
@@ -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"}
@@ -1,2 +0,0 @@
1
- export declare function logFailure(projectRoot: string, phase: string, error: unknown): Promise<void>;
2
- export declare function readLastFailure(projectRoot: string): Promise<string | null>;
@@ -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"}
@@ -1 +0,0 @@
1
- export declare function getResumeStartIndex(phases: string[], savedPhase?: string): number;
@@ -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
@@ -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"}
@@ -1 +0,0 @@
1
- export declare function isRetryableError(message?: string): boolean;
@@ -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
@@ -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"}