pi-loop 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/agents/code-reviewer.md +82 -0
- package/agents/coder.md +82 -0
- package/agents/decomposer.md +55 -0
- package/agents/judge.md +90 -0
- package/agents/review-optimizer.md +44 -0
- package/dist/agents/adapter.d.ts +9 -0
- package/dist/agents/adapter.d.ts.map +1 -0
- package/dist/agents/adapter.js +41 -0
- package/dist/agents/adapter.js.map +1 -0
- package/dist/agents/factory.d.ts +7 -0
- package/dist/agents/factory.d.ts.map +1 -0
- package/dist/agents/factory.js +49 -0
- package/dist/agents/factory.js.map +1 -0
- package/dist/agents/registry.d.ts +4 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +98 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +21 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +39 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/args.d.ts +38 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +160 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands.d.ts +29 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +362 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/output.d.ts +33 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +99 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +31 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +70 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +41 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/checkpoint.d.ts +18 -0
- package/dist/core/checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint.js +32 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/judge.d.ts +11 -0
- package/dist/core/judge.d.ts.map +1 -0
- package/dist/core/judge.js +91 -0
- package/dist/core/judge.js.map +1 -0
- package/dist/core/learnings.d.ts +4 -0
- package/dist/core/learnings.d.ts.map +1 -0
- package/dist/core/learnings.js +33 -0
- package/dist/core/learnings.js.map +1 -0
- package/dist/core/orchestrator.d.ts +64 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +499 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/plan.d.ts +7 -0
- package/dist/core/plan.d.ts.map +1 -0
- package/dist/core/plan.js +15 -0
- package/dist/core/plan.js.map +1 -0
- package/dist/core/readiness-policy.d.ts +11 -0
- package/dist/core/readiness-policy.d.ts.map +1 -0
- package/dist/core/readiness-policy.js +24 -0
- package/dist/core/readiness-policy.js.map +1 -0
- package/dist/core/scheduling-policy.d.ts +9 -0
- package/dist/core/scheduling-policy.d.ts.map +1 -0
- package/dist/core/scheduling-policy.js +56 -0
- package/dist/core/scheduling-policy.js.map +1 -0
- package/dist/core/task-backend.d.ts +55 -0
- package/dist/core/task-backend.d.ts.map +1 -0
- package/dist/core/task-backend.js +76 -0
- package/dist/core/task-backend.js.map +1 -0
- package/dist/core/task-state.d.ts +26 -0
- package/dist/core/task-state.d.ts.map +1 -0
- package/dist/core/task-state.js +182 -0
- package/dist/core/task-state.js.map +1 -0
- package/dist/core/wiring.d.ts +12 -0
- package/dist/core/wiring.d.ts.map +1 -0
- package/dist/core/wiring.js +131 -0
- package/dist/core/wiring.js.map +1 -0
- package/dist/git/conflict.d.ts +6 -0
- package/dist/git/conflict.d.ts.map +1 -0
- package/dist/git/conflict.js +25 -0
- package/dist/git/conflict.js.map +1 -0
- package/dist/git/repo.d.ts +13 -0
- package/dist/git/repo.d.ts.map +1 -0
- package/dist/git/repo.js +74 -0
- package/dist/git/repo.js.map +1 -0
- package/dist/git/same-branch.d.ts +9 -0
- package/dist/git/same-branch.d.ts.map +1 -0
- package/dist/git/same-branch.js +55 -0
- package/dist/git/same-branch.js.map +1 -0
- package/dist/git/worktree.d.ts +14 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +78 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/linear/backend.d.ts +38 -0
- package/dist/integrations/linear/backend.d.ts.map +1 -0
- package/dist/integrations/linear/backend.js +374 -0
- package/dist/integrations/linear/backend.js.map +1 -0
- package/dist/integrations/linear/client.d.ts +19 -0
- package/dist/integrations/linear/client.d.ts.map +1 -0
- package/dist/integrations/linear/client.js +86 -0
- package/dist/integrations/linear/client.js.map +1 -0
- package/dist/integrations/linear/comment-templates.d.ts +14 -0
- package/dist/integrations/linear/comment-templates.d.ts.map +1 -0
- package/dist/integrations/linear/comment-templates.js +50 -0
- package/dist/integrations/linear/comment-templates.js.map +1 -0
- package/dist/integrations/linear/contract.d.ts +15 -0
- package/dist/integrations/linear/contract.d.ts.map +1 -0
- package/dist/integrations/linear/contract.js +86 -0
- package/dist/integrations/linear/contract.js.map +1 -0
- package/dist/integrations/linear/types.d.ts +39 -0
- package/dist/integrations/linear/types.d.ts.map +1 -0
- package/dist/integrations/linear/types.js +2 -0
- package/dist/integrations/linear/types.js.map +1 -0
- package/dist/swarm/pool.d.ts +33 -0
- package/dist/swarm/pool.d.ts.map +1 -0
- package/dist/swarm/pool.js +182 -0
- package/dist/swarm/pool.js.map +1 -0
- package/dist/swarm/scheduler.d.ts +38 -0
- package/dist/swarm/scheduler.d.ts.map +1 -0
- package/dist/swarm/scheduler.js +191 -0
- package/dist/swarm/scheduler.js.map +1 -0
- package/dist/swarm/worker.d.ts +49 -0
- package/dist/swarm/worker.d.ts.map +1 -0
- package/dist/swarm/worker.js +180 -0
- package/dist/swarm/worker.js.map +1 -0
- package/dist/tools/bash-tool.d.ts +24 -0
- package/dist/tools/bash-tool.d.ts.map +1 -0
- package/dist/tools/bash-tool.js +177 -0
- package/dist/tools/bash-tool.js.map +1 -0
- package/dist/tools/file-tools.d.ts +3 -0
- package/dist/tools/file-tools.d.ts.map +1 -0
- package/dist/tools/file-tools.js +68 -0
- package/dist/tools/file-tools.js.map +1 -0
- package/dist/tools/git-tools.d.ts +3 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +44 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/learnings-tool.d.ts +3 -0
- package/dist/tools/learnings-tool.d.ts.map +1 -0
- package/dist/tools/learnings-tool.js +48 -0
- package/dist/tools/learnings-tool.js.map +1 -0
- package/dist/tools/plan-tool.d.ts +3 -0
- package/dist/tools/plan-tool.d.ts.map +1 -0
- package/dist/tools/plan-tool.js +24 -0
- package/dist/tools/plan-tool.js.map +1 -0
- package/dist/tools/task-tools.d.ts +3 -0
- package/dist/tools/task-tools.d.ts.map +1 -0
- package/dist/tools/task-tools.js +108 -0
- package/dist/tools/task-tools.js.map +1 -0
- package/dist/tools/test-tool.d.ts +3 -0
- package/dist/tools/test-tool.d.ts.map +1 -0
- package/dist/tools/test-tool.js +43 -0
- package/dist/tools/test-tool.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function gitExec(args: string[], cwd: string): Promise<string>;
|
|
2
|
+
export declare function ensureRepo(cwd: string, autoInit: boolean): Promise<void>;
|
|
3
|
+
export declare function getRepoRoot(cwd: string): Promise<string>;
|
|
4
|
+
export declare function getCurrentBranch(cwd: string): Promise<string>;
|
|
5
|
+
export declare function getStatus(cwd: string): Promise<string>;
|
|
6
|
+
export declare function createBranch(cwd: string, name: string, base?: string): Promise<void>;
|
|
7
|
+
export declare function checkoutBranch(cwd: string, name: string): Promise<void>;
|
|
8
|
+
export declare function gitLog(cwd: string, count?: number): Promise<string>;
|
|
9
|
+
export declare function stageAll(cwd: string): Promise<void>;
|
|
10
|
+
export declare function commit(cwd: string, message: string): Promise<string>;
|
|
11
|
+
export declare function resetHard(cwd: string): Promise<void>;
|
|
12
|
+
export declare function diff(cwd: string, ref?: string): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/git/repo.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9E;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1F;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG1E;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIrE"}
|
package/dist/git/repo.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
export async function gitExec(args, cwd) {
|
|
5
|
+
try {
|
|
6
|
+
const { stdout } = await execFileAsync("git", args, { cwd });
|
|
7
|
+
return stdout.trim();
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
const err = error;
|
|
11
|
+
const stderr = err.stderr?.trim() ?? err.message ?? "Unknown git error";
|
|
12
|
+
throw new Error(`git ${args.join(" ")} failed: ${stderr}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function ensureRepo(cwd, autoInit) {
|
|
16
|
+
try {
|
|
17
|
+
await gitExec(["rev-parse", "--is-inside-work-tree"], cwd);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
if (autoInit) {
|
|
21
|
+
await gitExec(["init"], cwd);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error(`Not a git repository: ${cwd}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Ensure at least one commit exists (required for worktree/branch operations)
|
|
28
|
+
try {
|
|
29
|
+
await gitExec(["rev-parse", "HEAD"], cwd);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// No commits yet — create an initial commit with whatever is in the directory
|
|
33
|
+
await gitExec(["add", "-A"], cwd);
|
|
34
|
+
await gitExec(["commit", "--allow-empty", "-m", "[pi-loop] initial commit"], cwd);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function getRepoRoot(cwd) {
|
|
38
|
+
return gitExec(["rev-parse", "--show-toplevel"], cwd);
|
|
39
|
+
}
|
|
40
|
+
export async function getCurrentBranch(cwd) {
|
|
41
|
+
return gitExec(["rev-parse", "--abbrev-ref", "HEAD"], cwd);
|
|
42
|
+
}
|
|
43
|
+
export async function getStatus(cwd) {
|
|
44
|
+
return gitExec(["status", "--porcelain"], cwd);
|
|
45
|
+
}
|
|
46
|
+
export async function createBranch(cwd, name, base) {
|
|
47
|
+
const args = ["branch", name];
|
|
48
|
+
if (base) {
|
|
49
|
+
args.push(base);
|
|
50
|
+
}
|
|
51
|
+
await gitExec(args, cwd);
|
|
52
|
+
}
|
|
53
|
+
export async function checkoutBranch(cwd, name) {
|
|
54
|
+
await gitExec(["checkout", name], cwd);
|
|
55
|
+
}
|
|
56
|
+
export async function gitLog(cwd, count = 20) {
|
|
57
|
+
return gitExec(["log", "--oneline", "-n", String(count)], cwd);
|
|
58
|
+
}
|
|
59
|
+
export async function stageAll(cwd) {
|
|
60
|
+
await gitExec(["add", "-A"], cwd);
|
|
61
|
+
}
|
|
62
|
+
export async function commit(cwd, message) {
|
|
63
|
+
await gitExec(["commit", "-m", message], cwd);
|
|
64
|
+
return gitExec(["rev-parse", "HEAD"], cwd);
|
|
65
|
+
}
|
|
66
|
+
export async function resetHard(cwd) {
|
|
67
|
+
await gitExec(["reset", "--hard", "HEAD"], cwd);
|
|
68
|
+
}
|
|
69
|
+
export async function diff(cwd, ref) {
|
|
70
|
+
const args = ["diff"];
|
|
71
|
+
args.push(ref ?? "HEAD");
|
|
72
|
+
return gitExec(args, cwd);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/git/repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PushResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
needsRebase: boolean;
|
|
4
|
+
commitHash?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function pullLatest(cwd: string): Promise<void>;
|
|
7
|
+
export declare function commitAndPush(cwd: string, message: string, prefix: string): Promise<PushResult>;
|
|
8
|
+
export declare function rebaseAndRetry(cwd: string, maxRetries: number): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=same-branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"same-branch.d.ts","sourceRoot":"","sources":["../../src/git/same-branch.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe3D;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBrG;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAetF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { gitExec } from "./repo.js";
|
|
2
|
+
export async function pullLatest(cwd) {
|
|
3
|
+
try {
|
|
4
|
+
await gitExec(["pull", "--rebase"], cwd);
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
7
|
+
const msg = error.message ?? "";
|
|
8
|
+
// Silently succeed if no remote configured
|
|
9
|
+
if (msg.includes("no tracking information") ||
|
|
10
|
+
msg.includes("No remote configured") ||
|
|
11
|
+
msg.includes("no such remote")) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function commitAndPush(cwd, message, prefix) {
|
|
18
|
+
const prefixedMessage = prefix ? `${prefix} ${message}` : message;
|
|
19
|
+
await gitExec(["add", "-A"], cwd);
|
|
20
|
+
await gitExec(["commit", "-m", prefixedMessage], cwd);
|
|
21
|
+
const commitHash = (await gitExec(["rev-parse", "HEAD"], cwd)).trim();
|
|
22
|
+
try {
|
|
23
|
+
await gitExec(["push"], cwd);
|
|
24
|
+
return { success: true, needsRebase: false, commitHash };
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
const msg = error.message ?? "";
|
|
28
|
+
if (msg.includes("rejected") || msg.includes("non-fast-forward")) {
|
|
29
|
+
return { success: false, needsRebase: true, commitHash };
|
|
30
|
+
}
|
|
31
|
+
// No remote configured — commit succeeded locally
|
|
32
|
+
if (msg.includes("no configured push destination") || msg.includes("No configured push destination")) {
|
|
33
|
+
return { success: true, needsRebase: false, commitHash };
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function rebaseAndRetry(cwd, maxRetries) {
|
|
39
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
40
|
+
try {
|
|
41
|
+
await gitExec(["pull", "--rebase"], cwd);
|
|
42
|
+
await gitExec(["push"], cwd);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const msg = error.message ?? "";
|
|
47
|
+
if (msg.includes("rejected") || msg.includes("non-fast-forward")) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=same-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"same-branch.js","sourceRoot":"","sources":["../../src/git/same-branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface WorktreeInfo {
|
|
2
|
+
path: string;
|
|
3
|
+
branch: string;
|
|
4
|
+
head: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MergeResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
conflictFiles?: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function createWorktree(repoRoot: string, taskId: string, baseBranch: string, baseDir: string, branchNameOverride?: string): Promise<string>;
|
|
11
|
+
export declare function removeWorktree(repoRoot: string, worktreePath: string, branchName?: string): Promise<void>;
|
|
12
|
+
export declare function listWorktrees(repoRoot: string): Promise<WorktreeInfo[]>;
|
|
13
|
+
export declare function mergeWorktree(repoRoot: string, taskBranch: string, targetBranch: string): Promise<MergeResult>;
|
|
14
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAsB,cAAc,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW/G;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA+B7E;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBpH"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { gitExec } from "./repo.js";
|
|
4
|
+
export async function createWorktree(repoRoot, taskId, baseBranch, baseDir, branchNameOverride) {
|
|
5
|
+
const worktreePath = join(baseDir, taskId);
|
|
6
|
+
const branchName = branchNameOverride ?? `pi-loop/${taskId}`;
|
|
7
|
+
await mkdir(baseDir, { recursive: true });
|
|
8
|
+
// Check if worktree already exists at this path
|
|
9
|
+
const existing = await listWorktrees(repoRoot);
|
|
10
|
+
const found = existing.find((w) => w.path === worktreePath);
|
|
11
|
+
if (found) {
|
|
12
|
+
return worktreePath;
|
|
13
|
+
}
|
|
14
|
+
// Use -B to force-create the branch (it may already exist from a previous cycle)
|
|
15
|
+
await gitExec(["worktree", "add", "-B", branchName, worktreePath, baseBranch], repoRoot);
|
|
16
|
+
return worktreePath;
|
|
17
|
+
}
|
|
18
|
+
export async function removeWorktree(repoRoot, worktreePath, branchName) {
|
|
19
|
+
await gitExec(["worktree", "remove", "--force", worktreePath], repoRoot);
|
|
20
|
+
await gitExec(["worktree", "prune"], repoRoot);
|
|
21
|
+
// Clean up the branch so it doesn't collide on the next cycle
|
|
22
|
+
if (branchName) {
|
|
23
|
+
try {
|
|
24
|
+
await gitExec(["branch", "-D", branchName], repoRoot);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Branch may already be deleted or merged — ignore
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function listWorktrees(repoRoot) {
|
|
32
|
+
const output = await gitExec(["worktree", "list", "--porcelain"], repoRoot);
|
|
33
|
+
if (!output) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
const worktrees = [];
|
|
37
|
+
let current = {};
|
|
38
|
+
for (const line of output.split("\n")) {
|
|
39
|
+
if (line.startsWith("worktree ")) {
|
|
40
|
+
current.path = line.slice("worktree ".length);
|
|
41
|
+
}
|
|
42
|
+
else if (line.startsWith("HEAD ")) {
|
|
43
|
+
current.head = line.slice("HEAD ".length);
|
|
44
|
+
}
|
|
45
|
+
else if (line.startsWith("branch ")) {
|
|
46
|
+
// branch refs/heads/main -> main
|
|
47
|
+
current.branch = line.slice("branch refs/heads/".length);
|
|
48
|
+
}
|
|
49
|
+
else if (line === "" || line === "bare") {
|
|
50
|
+
if (current.path && current.head && current.branch) {
|
|
51
|
+
worktrees.push(current);
|
|
52
|
+
}
|
|
53
|
+
current = {};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Handle last entry if output doesn't end with blank line
|
|
57
|
+
if (current.path && current.head && current.branch) {
|
|
58
|
+
worktrees.push(current);
|
|
59
|
+
}
|
|
60
|
+
return worktrees;
|
|
61
|
+
}
|
|
62
|
+
export async function mergeWorktree(repoRoot, taskBranch, targetBranch) {
|
|
63
|
+
await gitExec(["checkout", targetBranch], repoRoot);
|
|
64
|
+
try {
|
|
65
|
+
await gitExec(["merge", taskBranch], repoRoot);
|
|
66
|
+
return { success: true };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Merge failed — detect conflict files from status
|
|
70
|
+
const status = await gitExec(["status", "--porcelain"], repoRoot);
|
|
71
|
+
const conflictFiles = status
|
|
72
|
+
.split("\n")
|
|
73
|
+
.filter((line) => line.startsWith("UU ") || line.startsWith("AA ") || line.startsWith("DU ") || line.startsWith("UD "))
|
|
74
|
+
.map((line) => line.slice(3));
|
|
75
|
+
return { success: false, conflictFiles };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,QAAgB,EAChB,MAAc,EACd,UAAkB,EAClB,OAAe,EACf,kBAA2B;IAE3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,kBAAkB,IAAI,WAAW,MAAM,EAAE,CAAC;IAE7D,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,gDAAgD;IAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC5D,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,iFAAiF;IACjF,MAAM,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzF,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,YAAoB,EAAE,UAAmB;IAC/F,MAAM,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,OAAO,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/C,8DAA8D;IAC9D,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACR,mDAAmD;QACpD,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,IAAI,OAAO,GAA0B,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,iCAAiC;YACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpD,SAAS,CAAC,IAAI,CAAC,OAAuB,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,OAAuB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,UAAkB,EAAE,YAAoB;IAC7F,MAAM,OAAO,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC;QACJ,MAAM,OAAO,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,mDAAmD;QACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,MAAM;aAC1B,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CACN,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAC9G;aACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;AACF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for pi-loop.
|
|
4
|
+
*/
|
|
5
|
+
import { parseArgs } from "./cli/args.js";
|
|
6
|
+
import { cleanCommand, helpCommand, resumeCommand, runCommand, statusCommand, validateCommand, } from "./cli/commands.js";
|
|
7
|
+
import { logError } from "./cli/output.js";
|
|
8
|
+
async function main() {
|
|
9
|
+
const parsed = parseArgs(process.argv);
|
|
10
|
+
switch (parsed.command) {
|
|
11
|
+
case "run": {
|
|
12
|
+
if (!parsed.planPath) {
|
|
13
|
+
logError("Missing plan path. Usage: pi-loop run <plan.md>");
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
await runCommand(parsed.planPath, parsed.options);
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case "resume":
|
|
21
|
+
await resumeCommand(parsed.options);
|
|
22
|
+
break;
|
|
23
|
+
case "status":
|
|
24
|
+
await statusCommand();
|
|
25
|
+
break;
|
|
26
|
+
case "validate": {
|
|
27
|
+
if (!parsed.planPath) {
|
|
28
|
+
logError("Missing plan path. Usage: pi-loop validate <plan.md>");
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
await validateCommand(parsed.planPath, parsed.options);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case "clean":
|
|
36
|
+
await cleanCommand();
|
|
37
|
+
break;
|
|
38
|
+
case "help":
|
|
39
|
+
helpCommand();
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
main().catch((err) => {
|
|
44
|
+
logError(err instanceof Error ? err.message : String(err));
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACN,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,eAAe,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,KAAK,UAAU,IAAI;IAClB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtB,QAAQ,CAAC,iDAAiD,CAAC,CAAC;gBAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM;QACP,CAAC;QACD,KAAK,QAAQ;YACZ,MAAM,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM;QACP,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtB,QAAQ,CAAC,sDAAsD,CAAC,CAAC;gBACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM;QACP,CAAC;QACD,KAAK,OAAO;YACX,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QACP,KAAK,MAAM;YACV,WAAW,EAAE,CAAC;YACd,MAAM;IACR,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC7B,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AgentRole } from "../../agents/types.js";
|
|
2
|
+
import type { LinearConfig } from "../../config/types.js";
|
|
3
|
+
import type { BackendCheckpointContext, BackendTask, ReadinessValidation, TaskBackend } from "../../core/task-backend.js";
|
|
4
|
+
import { LinearClient } from "./client.js";
|
|
5
|
+
export declare class LinearTaskBackend implements TaskBackend {
|
|
6
|
+
private readonly client;
|
|
7
|
+
private readonly config;
|
|
8
|
+
readonly mode: "linear";
|
|
9
|
+
private activeCycle;
|
|
10
|
+
private currentTaskId;
|
|
11
|
+
private lastSyncedAt;
|
|
12
|
+
private reconciliationSummary;
|
|
13
|
+
private readonly issueIdByIdentifier;
|
|
14
|
+
private readonly stateIdByName;
|
|
15
|
+
private readonly labelIdByName;
|
|
16
|
+
constructor(client: LinearClient, config: LinearConfig);
|
|
17
|
+
initializeCycle(cycle: number): Promise<void>;
|
|
18
|
+
getReadyTasks(_role: AgentRole): Promise<BackendTask[]>;
|
|
19
|
+
reconcileState(): Promise<string>;
|
|
20
|
+
validateDefinitionOfReady(task: BackendTask): Promise<ReadinessValidation>;
|
|
21
|
+
markInProgress(taskId: string): Promise<void>;
|
|
22
|
+
markInReview(taskId: string, worklog: string): Promise<void>;
|
|
23
|
+
markDone(taskId: string, verificationLog: string): Promise<void>;
|
|
24
|
+
markFailed(taskId: string, reason: string): Promise<void>;
|
|
25
|
+
markNeedsDecision(taskId: string, optionsComment: string): Promise<void>;
|
|
26
|
+
snapshotForJudge(): Promise<string>;
|
|
27
|
+
getCheckpointContext(): Promise<BackendCheckpointContext>;
|
|
28
|
+
applyCheckpointContext(context?: BackendCheckpointContext): Promise<void>;
|
|
29
|
+
private listIssues;
|
|
30
|
+
private transitionIssue;
|
|
31
|
+
private commentOnIssue;
|
|
32
|
+
private ensureLabel;
|
|
33
|
+
private resolveIssueId;
|
|
34
|
+
private resolveStateId;
|
|
35
|
+
private resolveLabelId;
|
|
36
|
+
}
|
|
37
|
+
export declare function createLinearTaskBackend(config: LinearConfig): TaskBackend;
|
|
38
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EACX,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyK3C,qBAAa,iBAAkB,YAAW,WAAW;IAYnD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZxB,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;gBAGzC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY;IAGhC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgCvD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BjC,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ1E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBnC,oBAAoB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAQzD,sBAAsB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;YAMjE,UAAU;YAmCV,eAAe;YASf,cAAc;YAQd,WAAW;YAoBX,cAAc;YAgBd,cAAc;YAed,cAAc;CAY5B;AAaD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAGzE"}
|