forge-cc 1.0.0 → 1.0.1
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/package.json +3 -2
- package/dist/gates/codex-gate.d.ts +0 -51
- package/dist/gates/codex-gate.js +0 -121
- package/dist/gates/codex-gate.js.map +0 -1
- package/dist/gates/prd-gate.d.ts +0 -7
- package/dist/gates/prd-gate.js +0 -193
- package/dist/gates/prd-gate.js.map +0 -1
- package/dist/gates/remediation.d.ts +0 -46
- package/dist/gates/remediation.js +0 -423
- package/dist/gates/remediation.js.map +0 -1
- package/dist/gates/review-gate.d.ts +0 -16
- package/dist/gates/review-gate.js +0 -479
- package/dist/gates/review-gate.js.map +0 -1
- package/dist/gates/runtime-gate.d.ts +0 -5
- package/dist/gates/runtime-gate.js +0 -99
- package/dist/gates/runtime-gate.js.map +0 -1
- package/dist/gates/test-analysis.d.ts +0 -21
- package/dist/gates/test-analysis.js +0 -394
- package/dist/gates/test-analysis.js.map +0 -1
- package/dist/gates/visual-capture.d.ts +0 -24
- package/dist/gates/visual-capture.js +0 -144
- package/dist/gates/visual-capture.js.map +0 -1
- package/dist/gates/visual-gate.d.ts +0 -18
- package/dist/gates/visual-gate.js +0 -234
- package/dist/gates/visual-gate.js.map +0 -1
- package/dist/gates/visual-reviewer.d.ts +0 -11
- package/dist/gates/visual-reviewer.js +0 -211
- package/dist/gates/visual-reviewer.js.map +0 -1
- package/dist/go/auto-chain.d.ts +0 -136
- package/dist/go/auto-chain.js +0 -389
- package/dist/go/auto-chain.js.map +0 -1
- package/dist/go/executor.d.ts +0 -137
- package/dist/go/executor.js +0 -447
- package/dist/go/executor.js.map +0 -1
- package/dist/go/finalize.d.ts +0 -108
- package/dist/go/finalize.js +0 -331
- package/dist/go/finalize.js.map +0 -1
- package/dist/go/linear-sync-cli.d.ts +0 -55
- package/dist/go/linear-sync-cli.js +0 -192
- package/dist/go/linear-sync-cli.js.map +0 -1
- package/dist/go/linear-sync.d.ts +0 -112
- package/dist/go/linear-sync.js +0 -375
- package/dist/go/linear-sync.js.map +0 -1
- package/dist/go/prd-queue.d.ts +0 -43
- package/dist/go/prd-queue.js +0 -67
- package/dist/go/prd-queue.js.map +0 -1
- package/dist/go/prd-selector.d.ts +0 -57
- package/dist/go/prd-selector.js +0 -101
- package/dist/go/prd-selector.js.map +0 -1
- package/dist/go/verify-loop.d.ts +0 -64
- package/dist/go/verify-loop.js +0 -327
- package/dist/go/verify-loop.js.map +0 -1
- package/dist/hooks/pre-commit.d.ts +0 -5
- package/dist/hooks/pre-commit.js +0 -75
- package/dist/hooks/pre-commit.js.map +0 -1
- package/dist/linear/issues.d.ts +0 -22
- package/dist/linear/issues.js +0 -51
- package/dist/linear/issues.js.map +0 -1
- package/dist/linear/milestones.d.ts +0 -11
- package/dist/linear/milestones.js +0 -32
- package/dist/linear/milestones.js.map +0 -1
- package/dist/linear/projects.d.ts +0 -16
- package/dist/linear/projects.js +0 -51
- package/dist/linear/projects.js.map +0 -1
- package/dist/reporter/human.d.ts +0 -7
- package/dist/reporter/human.js +0 -93
- package/dist/reporter/human.js.map +0 -1
- package/dist/reporter/json.d.ts +0 -2
- package/dist/reporter/json.js +0 -4
- package/dist/reporter/json.js.map +0 -1
- package/dist/setup/structural-templates.d.ts +0 -12
- package/dist/setup/structural-templates.js +0 -288
- package/dist/setup/structural-templates.js.map +0 -1
- package/dist/setup/templates.d.ts +0 -17
- package/dist/setup/templates.js +0 -109
- package/dist/setup/templates.js.map +0 -1
- package/dist/setup/test-planner.d.ts +0 -38
- package/dist/setup/test-planner.js +0 -91
- package/dist/setup/test-planner.js.map +0 -1
- package/dist/setup/test-scaffold.d.ts +0 -31
- package/dist/setup/test-scaffold.js +0 -209
- package/dist/setup/test-scaffold.js.map +0 -1
- package/dist/setup/test-templates.d.ts +0 -37
- package/dist/setup/test-templates.js +0 -313
- package/dist/setup/test-templates.js.map +0 -1
- package/dist/spec/generator.d.ts +0 -34
- package/dist/spec/generator.js +0 -227
- package/dist/spec/generator.js.map +0 -1
- package/dist/spec/interview.d.ts +0 -142
- package/dist/spec/interview.js +0 -287
- package/dist/spec/interview.js.map +0 -1
- package/dist/spec/linear-sync.d.ts +0 -48
- package/dist/spec/linear-sync.js +0 -125
- package/dist/spec/linear-sync.js.map +0 -1
- package/dist/spec/scanner.d.ts +0 -79
- package/dist/spec/scanner.js +0 -566
- package/dist/spec/scanner.js.map +0 -1
- package/dist/spec/templates.d.ts +0 -375
- package/dist/spec/templates.js +0 -95
- package/dist/spec/templates.js.map +0 -1
- package/dist/state/prd-status.d.ts +0 -62
- package/dist/state/prd-status.js +0 -122
- package/dist/state/prd-status.js.map +0 -1
- package/dist/state/reader.d.ts +0 -7
- package/dist/state/reader.js +0 -43
- package/dist/state/reader.js.map +0 -1
- package/dist/state/writer.d.ts +0 -21
- package/dist/state/writer.js +0 -106
- package/dist/state/writer.js.map +0 -1
- package/dist/team/consensus.d.ts +0 -28
- package/dist/team/consensus.js +0 -130
- package/dist/team/consensus.js.map +0 -1
- package/dist/team/index.d.ts +0 -4
- package/dist/team/index.js +0 -5
- package/dist/team/index.js.map +0 -1
- package/dist/team/lifecycle.d.ts +0 -37
- package/dist/team/lifecycle.js +0 -92
- package/dist/team/lifecycle.js.map +0 -1
- package/dist/team/reviewer.d.ts +0 -10
- package/dist/team/reviewer.js +0 -345
- package/dist/team/reviewer.js.map +0 -1
- package/dist/team/types.d.ts +0 -269
- package/dist/team/types.js +0 -70
- package/dist/team/types.js.map +0 -1
- package/dist/utils/browser.d.ts +0 -10
- package/dist/utils/browser.js +0 -96
- package/dist/utils/browser.js.map +0 -1
- package/dist/utils/platform.d.ts +0 -29
- package/dist/utils/platform.js +0 -90
- package/dist/utils/platform.js.map +0 -1
- package/dist/worktree/identity.d.ts +0 -9
- package/dist/worktree/identity.js +0 -32
- package/dist/worktree/identity.js.map +0 -1
- package/dist/worktree/parallel.d.ts +0 -87
- package/dist/worktree/parallel.js +0 -328
- package/dist/worktree/parallel.js.map +0 -1
- package/dist/worktree/session.d.ts +0 -67
- package/dist/worktree/session.js +0 -194
- package/dist/worktree/session.js.map +0 -1
- package/dist/worktree/state-merge.d.ts +0 -43
- package/dist/worktree/state-merge.js +0 -162
- package/dist/worktree/state-merge.js.map +0 -1
package/dist/team/types.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
// ---------------------------------------------------------------------------
|
|
3
|
-
// Agent Role
|
|
4
|
-
// ---------------------------------------------------------------------------
|
|
5
|
-
export const AgentRoleSchema = z.enum([
|
|
6
|
-
"executive",
|
|
7
|
-
"builder",
|
|
8
|
-
"reviewer",
|
|
9
|
-
"notetaker",
|
|
10
|
-
]);
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// Team Config
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
export const TeamConfigSchema = z.object({
|
|
15
|
-
teamName: z.string(),
|
|
16
|
-
prdSlug: z.string(),
|
|
17
|
-
milestoneNumber: z.number(),
|
|
18
|
-
roles: z.record(z.string(), AgentRoleSchema),
|
|
19
|
-
});
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// Finding
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
export const FindingSchema = z.object({
|
|
24
|
-
id: z.string(),
|
|
25
|
-
severity: z.enum(["error", "warning"]),
|
|
26
|
-
file: z.string().optional(),
|
|
27
|
-
line: z.number().optional(),
|
|
28
|
-
message: z.string(),
|
|
29
|
-
remediation: z.string(),
|
|
30
|
-
source: z.string(),
|
|
31
|
-
});
|
|
32
|
-
// ---------------------------------------------------------------------------
|
|
33
|
-
// Consensus Round
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
export const ConsensusRoundSchema = z.object({
|
|
36
|
-
findingId: z.string(),
|
|
37
|
-
round: z.number(),
|
|
38
|
-
builderName: z.string(),
|
|
39
|
-
response: z.enum(["agree", "disagree", "alternative"]),
|
|
40
|
-
reason: z.string().optional(),
|
|
41
|
-
alternativeProposal: z.string().optional(),
|
|
42
|
-
});
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Consensus Result
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
export const ConsensusResultSchema = z.object({
|
|
47
|
-
findingId: z.string(),
|
|
48
|
-
resolution: z.enum(["accepted", "rejected", "escalated"]),
|
|
49
|
-
rounds: z.array(ConsensusRoundSchema),
|
|
50
|
-
finalDecision: z.string().optional(),
|
|
51
|
-
});
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
// Team Review Result
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
export const TeamReviewResultSchema = z.object({
|
|
56
|
-
findings: z.array(FindingSchema),
|
|
57
|
-
consensusResults: z.array(ConsensusResultSchema),
|
|
58
|
-
duration_ms: z.number(),
|
|
59
|
-
});
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Codex Comment
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
export const CodexCommentSchema = z.object({
|
|
64
|
-
id: z.number(),
|
|
65
|
-
body: z.string(),
|
|
66
|
-
path: z.string(),
|
|
67
|
-
line: z.number().optional(),
|
|
68
|
-
resolved: z.boolean(),
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=types.js.map
|
package/dist/team/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/team/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/browser.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Browser } from "playwright";
|
|
2
|
-
import { type ChildProcess } from "node:child_process";
|
|
3
|
-
export declare function getBrowser(): Promise<Browser>;
|
|
4
|
-
export declare function closeBrowser(): Promise<void>;
|
|
5
|
-
export declare function startDevServer(projectDir: string, command?: string, port?: number): Promise<{
|
|
6
|
-
port: number;
|
|
7
|
-
process: ChildProcess;
|
|
8
|
-
}>;
|
|
9
|
-
export declare function stopDevServer(): Promise<void>;
|
|
10
|
-
export declare function waitForServer(port: number, timeoutMs?: number): Promise<boolean>;
|
package/dist/utils/browser.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { spawn, execSync } from "node:child_process";
|
|
2
|
-
import { setTimeout } from "node:timers/promises";
|
|
3
|
-
let browserInstance = null;
|
|
4
|
-
let devServerProcess = null;
|
|
5
|
-
export async function getBrowser() {
|
|
6
|
-
if (!browserInstance || !browserInstance.isConnected()) {
|
|
7
|
-
let chromium;
|
|
8
|
-
try {
|
|
9
|
-
const pw = await import("playwright");
|
|
10
|
-
chromium = pw.chromium;
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
throw new Error("Playwright is not installed. Run `npm install playwright` to enable visual gates.");
|
|
14
|
-
}
|
|
15
|
-
try {
|
|
16
|
-
browserInstance = await chromium.launch({ headless: true });
|
|
17
|
-
}
|
|
18
|
-
catch (err) {
|
|
19
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
20
|
-
if (message.includes("Executable doesn't exist") || message.includes("browserType.launch")) {
|
|
21
|
-
throw new Error(`Playwright browsers are not installed. Run "npx playwright install chromium" to fix this. Original error: ${message}`);
|
|
22
|
-
}
|
|
23
|
-
throw err;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return browserInstance;
|
|
27
|
-
}
|
|
28
|
-
export async function closeBrowser() {
|
|
29
|
-
if (browserInstance) {
|
|
30
|
-
await browserInstance.close();
|
|
31
|
-
browserInstance = null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export async function startDevServer(projectDir, command, port) {
|
|
35
|
-
const resolvedCommand = command ?? "npm run dev";
|
|
36
|
-
const resolvedPort = port ?? 3000;
|
|
37
|
-
// Kill any existing dev server before starting a new one
|
|
38
|
-
await stopDevServer();
|
|
39
|
-
devServerProcess = spawn(resolvedCommand, {
|
|
40
|
-
cwd: projectDir,
|
|
41
|
-
shell: true,
|
|
42
|
-
stdio: "pipe",
|
|
43
|
-
});
|
|
44
|
-
// Wait for the server to become reachable
|
|
45
|
-
const ready = await waitForServer(resolvedPort);
|
|
46
|
-
if (!ready) {
|
|
47
|
-
await stopDevServer();
|
|
48
|
-
throw new Error(`Dev server failed to start on port ${resolvedPort} within timeout`);
|
|
49
|
-
}
|
|
50
|
-
return { port: resolvedPort, process: devServerProcess };
|
|
51
|
-
}
|
|
52
|
-
export async function stopDevServer() {
|
|
53
|
-
if (devServerProcess) {
|
|
54
|
-
const proc = devServerProcess;
|
|
55
|
-
devServerProcess = null;
|
|
56
|
-
try {
|
|
57
|
-
if (process.platform === "win32" && proc.pid) {
|
|
58
|
-
// On Windows, proc.kill() doesn't kill the child process tree.
|
|
59
|
-
// Use taskkill with /T (tree) /F (force) to kill the process and its children.
|
|
60
|
-
try {
|
|
61
|
-
execSync(`taskkill /pid ${proc.pid} /T /F`, { stdio: "pipe" });
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// taskkill may fail if the process already exited — fall back to proc.kill()
|
|
65
|
-
try {
|
|
66
|
-
proc.kill();
|
|
67
|
-
}
|
|
68
|
-
catch { /* already exited */ }
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
proc.kill();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// Process may have already exited — ignore
|
|
77
|
-
}
|
|
78
|
-
// Brief wait for cleanup
|
|
79
|
-
await setTimeout(500);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
export async function waitForServer(port, timeoutMs) {
|
|
83
|
-
const deadline = Date.now() + (timeoutMs ?? 30_000);
|
|
84
|
-
while (Date.now() < deadline) {
|
|
85
|
-
try {
|
|
86
|
-
await fetch(`http://localhost:${port}`);
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// Server not ready yet — wait and retry
|
|
91
|
-
await setTimeout(1000);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/utils/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/platform.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Write content to a file atomically using temp+rename.
|
|
3
|
-
* On Windows, rename can fail if another process has the file open --
|
|
4
|
-
* retry with exponential backoff (3 attempts: 50ms, 100ms, 200ms).
|
|
5
|
-
*/
|
|
6
|
-
export declare function atomicWriteFileSync(filePath: string, content: string): void;
|
|
7
|
-
/**
|
|
8
|
-
* Read and parse a JSON file. Returns null if the file doesn't exist.
|
|
9
|
-
* Throws on parse errors.
|
|
10
|
-
*/
|
|
11
|
-
export declare function readJsonFileSync<T>(filePath: string): T | null;
|
|
12
|
-
/**
|
|
13
|
-
* Atomically write a JSON object to a file with pretty printing.
|
|
14
|
-
*/
|
|
15
|
-
export declare function writeJsonFileSync(filePath: string, data: unknown): void;
|
|
16
|
-
/**
|
|
17
|
-
* Generate a short 8-character hex session ID from random bytes.
|
|
18
|
-
*/
|
|
19
|
-
export declare function generateSessionId(): string;
|
|
20
|
-
/**
|
|
21
|
-
* Normalize a path using path.resolve and path.join.
|
|
22
|
-
* Ensures consistent separators on all platforms.
|
|
23
|
-
*/
|
|
24
|
-
export declare function normalizePath(...segments: string[]): string;
|
|
25
|
-
/**
|
|
26
|
-
* Quote a string for safe shell usage.
|
|
27
|
-
* On Windows, uses double quotes. On POSIX, uses single quotes with escaping.
|
|
28
|
-
*/
|
|
29
|
-
export declare function shellQuote(value: string): string;
|
package/dist/utils/platform.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { writeFileSync, readFileSync, renameSync, unlinkSync, mkdirSync, existsSync, } from "node:fs";
|
|
2
|
-
import { join, resolve, dirname } from "node:path";
|
|
3
|
-
import { randomBytes } from "node:crypto";
|
|
4
|
-
/**
|
|
5
|
-
* Write content to a file atomically using temp+rename.
|
|
6
|
-
* On Windows, rename can fail if another process has the file open --
|
|
7
|
-
* retry with exponential backoff (3 attempts: 50ms, 100ms, 200ms).
|
|
8
|
-
*/
|
|
9
|
-
export function atomicWriteFileSync(filePath, content) {
|
|
10
|
-
const resolved = resolve(filePath);
|
|
11
|
-
const dir = dirname(resolved);
|
|
12
|
-
if (!existsSync(dir)) {
|
|
13
|
-
mkdirSync(dir, { recursive: true });
|
|
14
|
-
}
|
|
15
|
-
const tmpFile = resolved + ".tmp." + randomBytes(4).toString("hex");
|
|
16
|
-
writeFileSync(tmpFile, content, "utf-8");
|
|
17
|
-
const delays = [50, 100, 200];
|
|
18
|
-
for (let attempt = 0; attempt < delays.length; attempt++) {
|
|
19
|
-
try {
|
|
20
|
-
renameSync(tmpFile, resolved);
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const isLastAttempt = attempt === delays.length - 1;
|
|
25
|
-
if (isLastAttempt) {
|
|
26
|
-
// Clean up temp file on final failure, then rethrow
|
|
27
|
-
try {
|
|
28
|
-
unlinkSync(tmpFile);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Ignore cleanup errors
|
|
32
|
-
}
|
|
33
|
-
throw err;
|
|
34
|
-
}
|
|
35
|
-
// Synchronous sleep for retry backoff
|
|
36
|
-
const waitUntil = Date.now() + delays[attempt];
|
|
37
|
-
while (Date.now() < waitUntil) {
|
|
38
|
-
// Busy-wait (sync context, no async available)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Read and parse a JSON file. Returns null if the file doesn't exist.
|
|
45
|
-
* Throws on parse errors.
|
|
46
|
-
*/
|
|
47
|
-
export function readJsonFileSync(filePath) {
|
|
48
|
-
const resolved = resolve(filePath);
|
|
49
|
-
if (!existsSync(resolved)) {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
const raw = readFileSync(resolved, "utf-8");
|
|
53
|
-
return JSON.parse(raw);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Atomically write a JSON object to a file with pretty printing.
|
|
57
|
-
*/
|
|
58
|
-
export function writeJsonFileSync(filePath, data) {
|
|
59
|
-
const content = JSON.stringify(data, null, 2) + "\n";
|
|
60
|
-
atomicWriteFileSync(filePath, content);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Generate a short 8-character hex session ID from random bytes.
|
|
64
|
-
*/
|
|
65
|
-
export function generateSessionId() {
|
|
66
|
-
return randomBytes(4).toString("hex");
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Normalize a path using path.resolve and path.join.
|
|
70
|
-
* Ensures consistent separators on all platforms.
|
|
71
|
-
*/
|
|
72
|
-
export function normalizePath(...segments) {
|
|
73
|
-
return resolve(join(...segments));
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Quote a string for safe shell usage.
|
|
77
|
-
* On Windows, uses double quotes. On POSIX, uses single quotes with escaping.
|
|
78
|
-
*/
|
|
79
|
-
export function shellQuote(value) {
|
|
80
|
-
if (process.platform === "win32") {
|
|
81
|
-
// Windows: wrap in double quotes, escape internal double quotes
|
|
82
|
-
const escaped = value.replace(/"/g, '\\"');
|
|
83
|
-
return `"${escaped}"`;
|
|
84
|
-
}
|
|
85
|
-
// POSIX: wrap in single quotes, escape internal single quotes
|
|
86
|
-
// Replace ' with '\'' (end quote, escaped quote, start quote)
|
|
87
|
-
const escaped = value.replace(/'/g, "'\\''");
|
|
88
|
-
return `'${escaped}'`;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=platform.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { userInfo } from "node:os";
|
|
3
|
-
/**
|
|
4
|
-
* Get the current user's identity from git config.
|
|
5
|
-
* Falls back to OS username if git config is not set.
|
|
6
|
-
*/
|
|
7
|
-
export function getCurrentUser(cwd) {
|
|
8
|
-
let name;
|
|
9
|
-
let email;
|
|
10
|
-
try {
|
|
11
|
-
name = execSync("git config user.name", {
|
|
12
|
-
cwd,
|
|
13
|
-
encoding: "utf-8",
|
|
14
|
-
stdio: "pipe",
|
|
15
|
-
}).trim();
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
name = userInfo().username;
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
email = execSync("git config user.email", {
|
|
22
|
-
cwd,
|
|
23
|
-
encoding: "utf-8",
|
|
24
|
-
stdio: "pipe",
|
|
25
|
-
}).trim();
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
email = "unknown";
|
|
29
|
-
}
|
|
30
|
-
return { name, email };
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=identity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/worktree/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,IAAY,CAAC;IACjB,IAAI,KAAa,CAAC;IAElB,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE;YACtC,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC;QACH,KAAK,GAAG,QAAQ,CAAC,uBAAuB,EAAE;YACxC,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parallel Scheduler — Milestone Dependency Analyzer & Execution Planner
|
|
3
|
-
*
|
|
4
|
-
* Parses `dependsOn` from PRD milestones, builds a DAG, determines which
|
|
5
|
-
* milestones can run simultaneously in parallel waves, and provides
|
|
6
|
-
* functions to query ready milestones given completed set.
|
|
7
|
-
*
|
|
8
|
-
* Backward compatible: milestones without `dependsOn` are treated as
|
|
9
|
-
* having no dependencies (roots).
|
|
10
|
-
*/
|
|
11
|
-
export interface MilestoneDep {
|
|
12
|
-
number: number;
|
|
13
|
-
name: string;
|
|
14
|
-
dependsOn: number[];
|
|
15
|
-
}
|
|
16
|
-
export interface DAGNode {
|
|
17
|
-
milestone: MilestoneDep;
|
|
18
|
-
children: number[];
|
|
19
|
-
parents: number[];
|
|
20
|
-
depth: number;
|
|
21
|
-
}
|
|
22
|
-
export interface ExecutionWave {
|
|
23
|
-
waveNumber: number;
|
|
24
|
-
milestones: number[];
|
|
25
|
-
}
|
|
26
|
-
export interface SchedulerResult {
|
|
27
|
-
waves: ExecutionWave[];
|
|
28
|
-
totalMilestones: number;
|
|
29
|
-
maxParallelism: number;
|
|
30
|
-
isSequential: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Build a directed acyclic graph from milestone dependencies.
|
|
34
|
-
*
|
|
35
|
-
* Validates:
|
|
36
|
-
* - All referenced dependencies exist in the milestone set
|
|
37
|
-
* - No cycles exist in the dependency graph
|
|
38
|
-
*
|
|
39
|
-
* Throws descriptive errors on validation failure.
|
|
40
|
-
*/
|
|
41
|
-
export declare function buildDAG(milestones: MilestoneDep[]): Map<number, DAGNode>;
|
|
42
|
-
/**
|
|
43
|
-
* Topological sort milestones into parallel execution waves.
|
|
44
|
-
*
|
|
45
|
-
* - Wave 1: all milestones with no dependencies (roots)
|
|
46
|
-
* - Wave 2: milestones whose dependencies are all in Wave 1
|
|
47
|
-
* - Wave N: milestones whose dependencies are all in waves < N
|
|
48
|
-
*/
|
|
49
|
-
export declare function computeExecutionWaves(dag: Map<number, DAGNode>): SchedulerResult;
|
|
50
|
-
/**
|
|
51
|
-
* Parse a PRD markdown document to extract milestone definitions and
|
|
52
|
-
* their `dependsOn` fields.
|
|
53
|
-
*
|
|
54
|
-
* Looks for milestone headers like:
|
|
55
|
-
* ### Milestone 1: Name Here
|
|
56
|
-
* ### Milestone 2 — Name Here
|
|
57
|
-
*
|
|
58
|
-
* And within each milestone section, looks for:
|
|
59
|
-
* **dependsOn:** 1, 3
|
|
60
|
-
* dependsOn: [1, 3]
|
|
61
|
-
* **dependsOn:** [1]
|
|
62
|
-
*
|
|
63
|
-
* If no `dependsOn` field is found, treats the milestone as having no
|
|
64
|
-
* dependencies (backward compatible).
|
|
65
|
-
*/
|
|
66
|
-
export declare function parseMilestoneDependencies(prdContent: string): MilestoneDep[];
|
|
67
|
-
/**
|
|
68
|
-
* Given execution waves and a set of completed milestone numbers,
|
|
69
|
-
* return which milestones are ready to start.
|
|
70
|
-
*
|
|
71
|
-
* A milestone is ready if:
|
|
72
|
-
* 1. It has not been completed yet
|
|
73
|
-
* 2. All of its dependencies (from the wave schedule) are in the completed set
|
|
74
|
-
*
|
|
75
|
-
* This requires the original DAG to check dependencies, so we accept
|
|
76
|
-
* the waves plus the DAG.
|
|
77
|
-
*/
|
|
78
|
-
export declare function getReadyMilestones(dag: Map<number, DAGNode>, completed: Set<number>): number[];
|
|
79
|
-
/**
|
|
80
|
-
* Parse a PRD file and build the full execution schedule.
|
|
81
|
-
* Combines parseMilestoneDependencies + buildDAG + computeExecutionWaves.
|
|
82
|
-
*
|
|
83
|
-
* If the PRD has no `dependsOn` fields, all milestones will be in wave 1
|
|
84
|
-
* (all roots), which is backward compatible with sequential execution
|
|
85
|
-
* when the caller processes them in milestone-number order.
|
|
86
|
-
*/
|
|
87
|
-
export declare function buildScheduleFromPRD(prdPath: string): Promise<SchedulerResult>;
|