bemadralphy 0.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/LICENSE +21 -0
- package/README.md +468 -0
- package/dist/beads/adapter.d.ts +5 -0
- package/dist/beads/adapter.js +16 -0
- package/dist/beads/adapter.js.map +1 -0
- package/dist/beads/index.d.ts +3 -0
- package/dist/beads/index.js +4 -0
- package/dist/beads/index.js.map +1 -0
- package/dist/beads/parse-tasks.d.ts +2 -0
- package/dist/beads/parse-tasks.js +12 -0
- package/dist/beads/parse-tasks.js.map +1 -0
- package/dist/beads/tasks-md.d.ts +6 -0
- package/dist/beads/tasks-md.js +8 -0
- package/dist/beads/tasks-md.js.map +1 -0
- package/dist/beads/writer.d.ts +12 -0
- package/dist/beads/writer.js +60 -0
- package/dist/beads/writer.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/cost.d.ts +6 -0
- package/dist/cost.js +18 -0
- package/dist/cost.js.map +1 -0
- package/dist/docs/pr-body.d.ts +8 -0
- package/dist/docs/pr-body.js +11 -0
- package/dist/docs/pr-body.js.map +1 -0
- package/dist/engines/claude.d.ts +1 -0
- package/dist/engines/claude.js +11 -0
- package/dist/engines/claude.js.map +1 -0
- package/dist/engines/cli-adapter.d.ts +12 -0
- package/dist/engines/cli-adapter.js +36 -0
- package/dist/engines/cli-adapter.js.map +1 -0
- package/dist/engines/cli.d.ts +14 -0
- package/dist/engines/cli.js +72 -0
- package/dist/engines/cli.js.map +1 -0
- package/dist/engines/codex.d.ts +1 -0
- package/dist/engines/codex.js +10 -0
- package/dist/engines/codex.js.map +1 -0
- package/dist/engines/copilot.d.ts +1 -0
- package/dist/engines/copilot.js +10 -0
- package/dist/engines/copilot.js.map +1 -0
- package/dist/engines/cursor.d.ts +1 -0
- package/dist/engines/cursor.js +10 -0
- package/dist/engines/cursor.js.map +1 -0
- package/dist/engines/gemini.d.ts +1 -0
- package/dist/engines/gemini.js +10 -0
- package/dist/engines/gemini.js.map +1 -0
- package/dist/engines/index.d.ts +2 -0
- package/dist/engines/index.js +21 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/kimi.d.ts +1 -0
- package/dist/engines/kimi.js +10 -0
- package/dist/engines/kimi.js.map +1 -0
- package/dist/engines/opencode.d.ts +1 -0
- package/dist/engines/opencode.js +10 -0
- package/dist/engines/opencode.js.map +1 -0
- package/dist/engines/prompt-template.d.ts +2 -0
- package/dist/engines/prompt-template.js +96 -0
- package/dist/engines/prompt-template.js.map +1 -0
- package/dist/engines/qwen.d.ts +1 -0
- package/dist/engines/qwen.js +10 -0
- package/dist/engines/qwen.js.map +1 -0
- package/dist/engines/ralphy.d.ts +1 -0
- package/dist/engines/ralphy.js +10 -0
- package/dist/engines/ralphy.js.map +1 -0
- package/dist/engines/stub.d.ts +2 -0
- package/dist/engines/stub.js +17 -0
- package/dist/engines/stub.js.map +1 -0
- package/dist/engines/types.d.ts +21 -0
- package/dist/engines/types.js +2 -0
- package/dist/engines/types.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/git/worktrees.d.ts +11 -0
- package/dist/git/worktrees.js +63 -0
- package/dist/git/worktrees.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/locks.d.ts +10 -0
- package/dist/locks.js +23 -0
- package/dist/locks.js.map +1 -0
- package/dist/orchestrator.d.ts +17 -0
- package/dist/orchestrator.js +99 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/permissions.d.ts +5 -0
- package/dist/permissions.js +19 -0
- package/dist/permissions.js.map +1 -0
- package/dist/phases/execute.d.ts +2 -0
- package/dist/phases/execute.js +78 -0
- package/dist/phases/execute.js.map +1 -0
- package/dist/phases/explore.d.ts +1 -0
- package/dist/phases/explore.js +5 -0
- package/dist/phases/explore.js.map +1 -0
- package/dist/phases/index.d.ts +10 -0
- package/dist/phases/index.js +10 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/phases/intake.d.ts +2 -0
- package/dist/phases/intake.js +67 -0
- package/dist/phases/intake.js.map +1 -0
- package/dist/phases/planning.d.ts +2 -0
- package/dist/phases/planning.js +8 -0
- package/dist/phases/planning.js.map +1 -0
- package/dist/phases/post.d.ts +2 -0
- package/dist/phases/post.js +21 -0
- package/dist/phases/post.js.map +1 -0
- package/dist/phases/scaffold.d.ts +2 -0
- package/dist/phases/scaffold.js +6 -0
- package/dist/phases/scaffold.js.map +1 -0
- package/dist/phases/steering.d.ts +2 -0
- package/dist/phases/steering.js +10 -0
- package/dist/phases/steering.js.map +1 -0
- package/dist/phases/sync.d.ts +2 -0
- package/dist/phases/sync.js +25 -0
- package/dist/phases/sync.js.map +1 -0
- package/dist/phases/types.d.ts +22 -0
- package/dist/phases/types.js +2 -0
- package/dist/phases/types.js.map +1 -0
- package/dist/phases/verify.d.ts +2 -0
- package/dist/phases/verify.js +8 -0
- package/dist/phases/verify.js.map +1 -0
- package/dist/planning/bmad.d.ts +3 -0
- package/dist/planning/bmad.js +20 -0
- package/dist/planning/bmad.js.map +1 -0
- package/dist/planning/index.d.ts +2 -0
- package/dist/planning/index.js +37 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/validate.d.ts +7 -0
- package/dist/planning/validate.js +20 -0
- package/dist/planning/validate.js.map +1 -0
- package/dist/pr/create.d.ts +2 -0
- package/dist/pr/create.js +65 -0
- package/dist/pr/create.js.map +1 -0
- package/dist/quality/gates.d.ts +12 -0
- package/dist/quality/gates.js +54 -0
- package/dist/quality/gates.js.map +1 -0
- package/dist/release.d.ts +3 -0
- package/dist/release.js +88 -0
- package/dist/release.js.map +1 -0
- package/dist/specs/archive.d.ts +1 -0
- package/dist/specs/archive.js +12 -0
- package/dist/specs/archive.js.map +1 -0
- package/dist/specs/changes.d.ts +7 -0
- package/dist/specs/changes.js +20 -0
- package/dist/specs/changes.js.map +1 -0
- package/dist/specs/delta.d.ts +1 -0
- package/dist/specs/delta.js +8 -0
- package/dist/specs/delta.js.map +1 -0
- package/dist/specs/generate.d.ts +1 -0
- package/dist/specs/generate.js +8 -0
- package/dist/specs/generate.js.map +1 -0
- package/dist/specs/index.d.ts +3 -0
- package/dist/specs/index.js +4 -0
- package/dist/specs/index.js.map +1 -0
- package/dist/specs/merge-summary.d.ts +2 -0
- package/dist/specs/merge-summary.js +19 -0
- package/dist/specs/merge-summary.js.map +1 -0
- package/dist/state.d.ts +12 -0
- package/dist/state.js +20 -0
- package/dist/state.js.map +1 -0
- package/dist/steering/index.d.ts +2 -0
- package/dist/steering/index.js +115 -0
- package/dist/steering/index.js.map +1 -0
- package/dist/swarm/claude-teams.d.ts +1 -0
- package/dist/swarm/claude-teams.js +8 -0
- package/dist/swarm/claude-teams.js.map +1 -0
- package/dist/swarm/codex-sdk.d.ts +1 -0
- package/dist/swarm/codex-sdk.js +8 -0
- package/dist/swarm/codex-sdk.js.map +1 -0
- package/dist/swarm/detector.d.ts +3 -0
- package/dist/swarm/detector.js +16 -0
- package/dist/swarm/detector.js.map +1 -0
- package/dist/swarm/index.d.ts +5 -0
- package/dist/swarm/index.js +5 -0
- package/dist/swarm/index.js.map +1 -0
- package/dist/swarm/kimi-parl.d.ts +1 -0
- package/dist/swarm/kimi-parl.js +8 -0
- package/dist/swarm/kimi-parl.js.map +1 -0
- package/dist/swarm/native.d.ts +14 -0
- package/dist/swarm/native.js +112 -0
- package/dist/swarm/native.js.map +1 -0
- package/dist/swarm/parse.d.ts +5 -0
- package/dist/swarm/parse.js +20 -0
- package/dist/swarm/parse.js.map +1 -0
- package/dist/swarm/types.d.ts +5 -0
- package/dist/swarm/types.js +2 -0
- package/dist/swarm/types.js.map +1 -0
- package/dist/tasks/output.d.ts +7 -0
- package/dist/tasks/output.js +15 -0
- package/dist/tasks/output.js.map +1 -0
- package/dist/utils/exec.d.ts +18 -0
- package/dist/utils/exec.js +52 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/failures.d.ts +2 -0
- package/dist/utils/failures.js +22 -0
- package/dist/utils/failures.js.map +1 -0
- package/dist/utils/logging.d.ts +1 -0
- package/dist/utils/logging.js +5 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/resume.d.ts +1 -0
- package/dist/utils/resume.js +14 -0
- package/dist/utils/resume.js.map +1 -0
- package/dist/utils/retry.d.ts +1 -0
- package/dist/utils/retry.js +19 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":""}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class BeMadRalphyError extends Error {
|
|
2
|
+
name: string;
|
|
3
|
+
}
|
|
4
|
+
export declare class PlanningError extends BeMadRalphyError {
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class BeadsError extends BeMadRalphyError {
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class EngineError extends BeMadRalphyError {
|
|
11
|
+
name: string;
|
|
12
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class BeMadRalphyError extends Error {
|
|
2
|
+
name = 'BeMadRalphyError';
|
|
3
|
+
}
|
|
4
|
+
export class PlanningError extends BeMadRalphyError {
|
|
5
|
+
name = 'PlanningError';
|
|
6
|
+
}
|
|
7
|
+
export class BeadsError extends BeMadRalphyError {
|
|
8
|
+
name = 'BeadsError';
|
|
9
|
+
}
|
|
10
|
+
export class EngineError extends BeMadRalphyError {
|
|
11
|
+
name = 'EngineError';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,GAAG,kBAAkB,CAAC;CACpC;AAED,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACxC,IAAI,GAAG,eAAe,CAAC;CACjC;AAED,MAAM,OAAO,UAAW,SAAQ,gBAAgB;IACrC,IAAI,GAAG,YAAY,CAAC;CAC9B;AAED,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IACtC,IAAI,GAAG,aAAa,CAAC;CAC/B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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>;
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/git/worktrees.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/locks.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type FileLock = {
|
|
2
|
+
path: string;
|
|
3
|
+
taskId: string;
|
|
4
|
+
acquiredAt: string;
|
|
5
|
+
};
|
|
6
|
+
export declare class FileLockManager {
|
|
7
|
+
private readonly locks;
|
|
8
|
+
acquire(targetPath: string, taskId: string): Promise<FileLock>;
|
|
9
|
+
release(targetPath: string, taskId: string): Promise<void>;
|
|
10
|
+
}
|
package/dist/locks.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class FileLockManager {
|
|
2
|
+
locks = new Map();
|
|
3
|
+
async acquire(targetPath, taskId) {
|
|
4
|
+
const existing = this.locks.get(targetPath);
|
|
5
|
+
if (existing && existing.taskId !== taskId) {
|
|
6
|
+
throw new Error(`file lock conflict for "${targetPath}": held by ${existing.taskId}`);
|
|
7
|
+
}
|
|
8
|
+
const lock = { path: targetPath, taskId, acquiredAt: new Date().toISOString() };
|
|
9
|
+
this.locks.set(targetPath, lock);
|
|
10
|
+
return lock;
|
|
11
|
+
}
|
|
12
|
+
async release(targetPath, taskId) {
|
|
13
|
+
const existing = this.locks.get(targetPath);
|
|
14
|
+
if (!existing) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (existing.taskId !== taskId) {
|
|
18
|
+
throw new Error(`file lock mismatch for "${targetPath}": expected ${existing.taskId}, got ${taskId}`);
|
|
19
|
+
}
|
|
20
|
+
this.locks.delete(targetPath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=locks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../src/locks.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IACT,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAErD,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,MAAc;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,MAAc;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,eAAe,QAAQ,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type PipelineMode } from './phases/index.js';
|
|
2
|
+
export type RunOptions = {
|
|
3
|
+
mode: PipelineMode;
|
|
4
|
+
engine?: string;
|
|
5
|
+
planningEngine?: string;
|
|
6
|
+
maxParallel: number;
|
|
7
|
+
budget?: number;
|
|
8
|
+
brownfield: boolean;
|
|
9
|
+
swarm?: 'native' | 'process' | 'off';
|
|
10
|
+
createPr: boolean;
|
|
11
|
+
dryRun: boolean;
|
|
12
|
+
projectRoot?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function runInit(projectRoot?: string): Promise<void>;
|
|
15
|
+
export declare function runPipeline(options: RunOptions): Promise<void>;
|
|
16
|
+
export declare function runExplore(query: string): Promise<void>;
|
|
17
|
+
export declare function runStatus(): Promise<void>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { access, mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { CostTracker } from './cost.js';
|
|
4
|
+
import { executePhase, explorePhase, intakePhase, planningPhase, postPhase, scaffoldPhase, steeringPhase, syncPhase, verifyPhase, } from './phases/index.js';
|
|
5
|
+
import { loadState, saveState } from './state.js';
|
|
6
|
+
import { generateSpecs } from './specs/index.js';
|
|
7
|
+
import { assertCommandExists, runCommand } from './utils/exec.js';
|
|
8
|
+
import { logInfo } from './utils/logging.js';
|
|
9
|
+
export async function runInit(projectRoot = process.cwd()) {
|
|
10
|
+
const bemadDir = path.join(projectRoot, '.bemadralphy');
|
|
11
|
+
const openspecDir = path.join(projectRoot, 'openspec');
|
|
12
|
+
const ideaPath = path.join(projectRoot, 'idea.md');
|
|
13
|
+
await mkdir(bemadDir, { recursive: true });
|
|
14
|
+
await mkdir(path.join(openspecDir, 'specs'), { recursive: true });
|
|
15
|
+
await mkdir(path.join(openspecDir, 'changes', 'archive'), { recursive: true });
|
|
16
|
+
await mkdir(path.join(projectRoot, '_bmad-output', 'stories'), { recursive: true });
|
|
17
|
+
try {
|
|
18
|
+
await access(ideaPath);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
await writeFile(ideaPath, [
|
|
22
|
+
'# Project Idea',
|
|
23
|
+
'',
|
|
24
|
+
'Describe the product or change request here.',
|
|
25
|
+
'',
|
|
26
|
+
'## Goals',
|
|
27
|
+
'- Goal 1',
|
|
28
|
+
'',
|
|
29
|
+
'## Constraints',
|
|
30
|
+
'- Constraint 1',
|
|
31
|
+
'',
|
|
32
|
+
].join('\n'), 'utf-8');
|
|
33
|
+
logInfo('init: created starter idea.md');
|
|
34
|
+
}
|
|
35
|
+
await assertCommandExists('bd', 'Install from https://github.com/steveyegge/beads.');
|
|
36
|
+
await assertCommandExists('bmad', 'Install with: npm install -g bmad-method');
|
|
37
|
+
await assertCommandExists('openspec', 'Install with: npm install -g @fission-ai/openspec');
|
|
38
|
+
await runCommand('bd', ['init'], projectRoot);
|
|
39
|
+
logInfo('init: Beads initialized');
|
|
40
|
+
await generateSpecs(projectRoot);
|
|
41
|
+
logInfo('init: completed scaffold of .bemadralphy, openspec/, and _bmad-output/');
|
|
42
|
+
}
|
|
43
|
+
export async function runPipeline(options) {
|
|
44
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
45
|
+
const context = {
|
|
46
|
+
runId: new Date().toISOString(),
|
|
47
|
+
mode: options.mode,
|
|
48
|
+
dryRun: options.dryRun,
|
|
49
|
+
projectRoot,
|
|
50
|
+
engine: options.engine,
|
|
51
|
+
planningEngine: options.planningEngine,
|
|
52
|
+
maxParallel: options.maxParallel,
|
|
53
|
+
budget: options.budget,
|
|
54
|
+
brownfield: options.brownfield,
|
|
55
|
+
swarm: options.swarm,
|
|
56
|
+
createPr: options.createPr,
|
|
57
|
+
};
|
|
58
|
+
logInfo(`run: starting pipeline (mode=${options.mode})`);
|
|
59
|
+
const cost = new CostTracker();
|
|
60
|
+
let ctx = await intakePhase(context);
|
|
61
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'intake'));
|
|
62
|
+
ctx = await planningPhase(ctx);
|
|
63
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'planning'));
|
|
64
|
+
ctx = await steeringPhase(ctx);
|
|
65
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'steering'));
|
|
66
|
+
ctx = await scaffoldPhase(ctx);
|
|
67
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'scaffold'));
|
|
68
|
+
ctx = await syncPhase(ctx);
|
|
69
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'sync'));
|
|
70
|
+
ctx = await executePhase(ctx);
|
|
71
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'execute'));
|
|
72
|
+
ctx = await verifyPhase(ctx);
|
|
73
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'verify'));
|
|
74
|
+
ctx = await postPhase(ctx);
|
|
75
|
+
await saveState(ctx.projectRoot, stateFrom(ctx, 'post'));
|
|
76
|
+
await cost.persist(ctx.projectRoot);
|
|
77
|
+
logInfo(`run: completed pipeline (runId=${ctx.runId})`);
|
|
78
|
+
}
|
|
79
|
+
export async function runExplore(query) {
|
|
80
|
+
await explorePhase(query);
|
|
81
|
+
}
|
|
82
|
+
export async function runStatus() {
|
|
83
|
+
const projectRoot = process.cwd();
|
|
84
|
+
const state = await loadState(projectRoot);
|
|
85
|
+
if (!state) {
|
|
86
|
+
logInfo('status: no state found (.bemadralphy/state.yaml missing)');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
logInfo(`status: phase=${state.phase} mode=${state.mode} engine=${state.engine ?? 'n/a'}`);
|
|
90
|
+
}
|
|
91
|
+
function stateFrom(ctx, phase) {
|
|
92
|
+
return {
|
|
93
|
+
phase,
|
|
94
|
+
mode: ctx.mode,
|
|
95
|
+
engine: ctx.engine,
|
|
96
|
+
startedAt: ctx.runId,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const permissionProfiles = {
|
|
2
|
+
claude: {
|
|
3
|
+
engine: 'claude',
|
|
4
|
+
flags: ['--dangerously-skip-permissions'],
|
|
5
|
+
},
|
|
6
|
+
codex: {
|
|
7
|
+
engine: 'codex',
|
|
8
|
+
flags: [],
|
|
9
|
+
},
|
|
10
|
+
cursor: {
|
|
11
|
+
engine: 'cursor',
|
|
12
|
+
flags: [],
|
|
13
|
+
},
|
|
14
|
+
kimi: {
|
|
15
|
+
engine: 'kimi',
|
|
16
|
+
flags: [],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,kBAAkB,GAAsC;IACnE,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC,gCAAgC,CAAC;KAC1C;IACD,KAAK,EAAE;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,EAAE;KACV;IACD,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,EAAE;KACV;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,EAAE;KACV;CACF,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { engineAdapters } from '../engines/index.js';
|
|
2
|
+
import { runClaudeTeamsBatch } from '../swarm/claude-teams.js';
|
|
3
|
+
import { runCodexAgentsBatch } from '../swarm/codex-sdk.js';
|
|
4
|
+
import { resolveSwarmMode } from '../swarm/detector.js';
|
|
5
|
+
import { runKimiParlBatch } from '../swarm/kimi-parl.js';
|
|
6
|
+
import { BeadsWriter } from '../beads/writer.js';
|
|
7
|
+
import { assertCommandExists, runCommand } from '../utils/exec.js';
|
|
8
|
+
import { logInfo } from '../utils/logging.js';
|
|
9
|
+
export async function executePhase(ctx) {
|
|
10
|
+
logInfo('Phase 6 (execute): swarm-aware task execution');
|
|
11
|
+
if (ctx.dryRun) {
|
|
12
|
+
logInfo('execute: dry-run, skipping');
|
|
13
|
+
return ctx;
|
|
14
|
+
}
|
|
15
|
+
const engineName = ctx.engine ?? 'ralphy';
|
|
16
|
+
const adapter = engineAdapters[engineName];
|
|
17
|
+
if (!adapter) {
|
|
18
|
+
throw new Error(`execute: unknown engine "${engineName}"`);
|
|
19
|
+
}
|
|
20
|
+
const swarmMode = resolveSwarmMode(engineName, ctx.swarm);
|
|
21
|
+
logInfo(`execute: engine=${engineName} swarm=${swarmMode}`);
|
|
22
|
+
if (swarmMode === 'native') {
|
|
23
|
+
if (engineName === 'claude') {
|
|
24
|
+
await runClaudeTeamsBatch(ctx.projectRoot, ctx.maxParallel ?? 3);
|
|
25
|
+
}
|
|
26
|
+
else if (engineName === 'kimi') {
|
|
27
|
+
await runKimiParlBatch(ctx.projectRoot, ctx.maxParallel ?? 3);
|
|
28
|
+
}
|
|
29
|
+
else if (engineName === 'codex') {
|
|
30
|
+
await runCodexAgentsBatch(ctx.projectRoot, ctx.maxParallel ?? 3);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
await runBdReadyLoop(ctx, adapter);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (swarmMode === 'process') {
|
|
37
|
+
await runBdReadyLoop(ctx, adapter);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
await runBdReadyLoop(ctx, adapter);
|
|
41
|
+
}
|
|
42
|
+
return ctx;
|
|
43
|
+
}
|
|
44
|
+
async function runBdReadyLoop(ctx, adapter) {
|
|
45
|
+
const available = await adapter.checkAvailable();
|
|
46
|
+
if (!available) {
|
|
47
|
+
throw new Error(`execute: engine "${adapter.name}" is not available or not configured`);
|
|
48
|
+
}
|
|
49
|
+
await assertCommandExists('bd', 'Install with: npm install -g @beads/bd');
|
|
50
|
+
const writer = new BeadsWriter(ctx.projectRoot);
|
|
51
|
+
if (!(await writer.isAvailable())) {
|
|
52
|
+
throw new Error('execute: Beads CLI (bd) not available');
|
|
53
|
+
}
|
|
54
|
+
const { stdout } = await runCommand('bd', ['ready'], ctx.projectRoot);
|
|
55
|
+
const ids = parseBeadsReady(stdout);
|
|
56
|
+
if (ids.length === 0) {
|
|
57
|
+
logInfo('execute: no ready tasks');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const id of ids) {
|
|
61
|
+
const result = await adapter.execute({ id, title: id }, { cwd: ctx.projectRoot });
|
|
62
|
+
if (result.status === 'success') {
|
|
63
|
+
await writer.close(id);
|
|
64
|
+
}
|
|
65
|
+
else if (result.status === 'failed') {
|
|
66
|
+
await writer.update(id, result.error ?? 'task failed');
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
await writer.update(id, result.output ?? 'task skipped');
|
|
70
|
+
logInfo(`execute: task ${id} skipped`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function parseBeadsReady(output) {
|
|
75
|
+
const matches = output.match(/bd-[a-zA-Z0-9-]+/g);
|
|
76
|
+
return matches ? Array.from(new Set(matches)) : [];
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/phases/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function explorePhase(query: string): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/phases/explore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa;IAC9C,OAAO,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { executePhase } from './execute.js';
|
|
2
|
+
export { explorePhase } from './explore.js';
|
|
3
|
+
export { intakePhase } from './intake.js';
|
|
4
|
+
export { planningPhase } from './planning.js';
|
|
5
|
+
export { postPhase } from './post.js';
|
|
6
|
+
export { scaffoldPhase } from './scaffold.js';
|
|
7
|
+
export { steeringPhase } from './steering.js';
|
|
8
|
+
export { syncPhase } from './sync.js';
|
|
9
|
+
export type { PipelineContext, PipelineMode } from './types.js';
|
|
10
|
+
export { verifyPhase } from './verify.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { executePhase } from './execute.js';
|
|
2
|
+
export { explorePhase } from './explore.js';
|
|
3
|
+
export { intakePhase } from './intake.js';
|
|
4
|
+
export { planningPhase } from './planning.js';
|
|
5
|
+
export { postPhase } from './post.js';
|
|
6
|
+
export { scaffoldPhase } from './scaffold.js';
|
|
7
|
+
export { steeringPhase } from './steering.js';
|
|
8
|
+
export { syncPhase } from './sync.js';
|
|
9
|
+
export { verifyPhase } from './verify.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parse, stringify } from 'yaml';
|
|
4
|
+
import { logInfo } from '../utils/logging.js';
|
|
5
|
+
export async function intakePhase(ctx) {
|
|
6
|
+
logInfo('Phase 1 (intake): read idea.md and generate intake.yaml');
|
|
7
|
+
const projectRoot = ctx.projectRoot;
|
|
8
|
+
const ideaPath = path.join(projectRoot, 'idea.md');
|
|
9
|
+
const planPath = path.join(projectRoot, 'plan.md');
|
|
10
|
+
const sourceFile = await resolveIdeaFile(ideaPath, planPath);
|
|
11
|
+
if (!sourceFile) {
|
|
12
|
+
throw new Error('No idea.md or plan.md found in project root.');
|
|
13
|
+
}
|
|
14
|
+
const fileContents = await readFile(sourceFile, 'utf-8');
|
|
15
|
+
const { frontmatter, body } = parseFrontmatter(fileContents);
|
|
16
|
+
const intakeData = {
|
|
17
|
+
sourceFile: path.basename(sourceFile),
|
|
18
|
+
frontmatter,
|
|
19
|
+
body,
|
|
20
|
+
createdAt: new Date().toISOString(),
|
|
21
|
+
};
|
|
22
|
+
const intakeDir = path.join(projectRoot, '.bemadralphy');
|
|
23
|
+
await mkdir(intakeDir, { recursive: true });
|
|
24
|
+
const intakePath = path.join(intakeDir, 'intake.yaml');
|
|
25
|
+
const intakeYaml = stringify({
|
|
26
|
+
source_file: intakeData.sourceFile,
|
|
27
|
+
created_at: intakeData.createdAt,
|
|
28
|
+
decisions: intakeData.frontmatter,
|
|
29
|
+
idea: intakeData.body.trim(),
|
|
30
|
+
});
|
|
31
|
+
await writeFile(intakePath, intakeYaml, 'utf-8');
|
|
32
|
+
logInfo(`intake written to ${intakePath}`);
|
|
33
|
+
return { ...ctx, intakePath, intake: intakeData };
|
|
34
|
+
}
|
|
35
|
+
async function resolveIdeaFile(ideaPath, planPath) {
|
|
36
|
+
if (await exists(ideaPath)) {
|
|
37
|
+
return ideaPath;
|
|
38
|
+
}
|
|
39
|
+
if (await exists(planPath)) {
|
|
40
|
+
return planPath;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
async function exists(targetPath) {
|
|
45
|
+
try {
|
|
46
|
+
await access(targetPath);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function parseFrontmatter(contents) {
|
|
54
|
+
const lines = contents.split(/\r?\n/);
|
|
55
|
+
if (lines[0] !== '---') {
|
|
56
|
+
return { frontmatter: {}, body: contents };
|
|
57
|
+
}
|
|
58
|
+
const endIndex = lines.findIndex((line, idx) => idx > 0 && line === '---');
|
|
59
|
+
if (endIndex === -1) {
|
|
60
|
+
return { frontmatter: {}, body: contents };
|
|
61
|
+
}
|
|
62
|
+
const rawFrontmatter = lines.slice(1, endIndex).join('\n');
|
|
63
|
+
const body = lines.slice(endIndex + 1).join('\n');
|
|
64
|
+
const parsed = (parse(rawFrontmatter) ?? {});
|
|
65
|
+
return { frontmatter: parsed, body };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=intake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake.js","sourceRoot":"","sources":["../../src/phases/intake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { runPlanning } from '../planning/index.js';
|
|
2
|
+
import { logInfo } from '../utils/logging.js';
|
|
3
|
+
export async function planningPhase(ctx) {
|
|
4
|
+
logInfo('Phase 2 (planning): BMAD workflows and validation');
|
|
5
|
+
await runPlanning(ctx);
|
|
6
|
+
return ctx;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=planning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning.js","sourceRoot":"","sources":["../../src/phases/planning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAoB;IACtD,OAAO,CAAC,mDAAmD,CAAC,CAAC;IAC7D,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { logInfo } from '../utils/logging.js';
|
|
2
|
+
import { commandExists, runCommand } from '../utils/exec.js';
|
|
3
|
+
import { archiveSpecChange } from '../specs/index.js';
|
|
4
|
+
export async function postPhase(ctx) {
|
|
5
|
+
logInfo('Phase 8 (post): docs, release, deployment');
|
|
6
|
+
await archiveSpecChange(ctx.projectRoot);
|
|
7
|
+
if (!ctx.createPr || ctx.dryRun) {
|
|
8
|
+
return ctx;
|
|
9
|
+
}
|
|
10
|
+
const hasGit = await commandExists('git');
|
|
11
|
+
const hasGh = await commandExists('gh');
|
|
12
|
+
if (!hasGit || !hasGh) {
|
|
13
|
+
throw new Error('post: --create-pr requires both git and gh CLIs to be installed');
|
|
14
|
+
}
|
|
15
|
+
const gitStatus = await runCommand('git', ['status', '--short'], ctx.projectRoot);
|
|
16
|
+
logInfo(`post: git status lines=${gitStatus.stdout.trim() ? gitStatus.stdout.trim().split('\n').length : 0}`);
|
|
17
|
+
await runCommand('gh', ['auth', 'status'], ctx.projectRoot);
|
|
18
|
+
logInfo('post: gh authentication check passed');
|
|
19
|
+
return ctx;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/phases/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAoB;IAClD,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACrD,MAAM,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAClF,OAAO,CAAC,0BAA0B,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9G,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5D,OAAO,CAAC,sCAAsC,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/phases/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAoB;IACtD,OAAO,CAAC,qDAAqD,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { generateSteeringFiles } from '../steering/index.js';
|
|
2
|
+
import { logInfo } from '../utils/logging.js';
|
|
3
|
+
export async function steeringPhase(ctx) {
|
|
4
|
+
logInfo('Phase 3 (steering): generate agent steering files');
|
|
5
|
+
if (!ctx.dryRun) {
|
|
6
|
+
await generateSteeringFiles(ctx);
|
|
7
|
+
}
|
|
8
|
+
return ctx;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=steering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/phases/steering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAoB;IACtD,OAAO,CAAC,mDAAmD,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|