sweteam 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 +587 -0
- package/dist/adapters/adapter.d.ts +19 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +20 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +13 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +150 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +13 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +100 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/custom.d.ts +16 -0
- package/dist/adapters/custom.d.ts.map +1 -0
- package/dist/adapters/custom.js +167 -0
- package/dist/adapters/custom.js.map +1 -0
- package/dist/adapters/opencode.d.ts +13 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +100 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/prompt-detection.d.ts +14 -0
- package/dist/adapters/prompt-detection.d.ts.map +1 -0
- package/dist/adapters/prompt-detection.js +74 -0
- package/dist/adapters/prompt-detection.js.map +1 -0
- package/dist/commands/create.d.ts +8 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +38 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +22 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/enter.d.ts +19 -0
- package/dist/commands/enter.d.ts.map +1 -0
- package/dist/commands/enter.js +73 -0
- package/dist/commands/enter.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +52 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +98 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/show.d.ts +33 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +142 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +10 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config/discovery.d.ts +12 -0
- package/dist/config/discovery.d.ts.map +1 -0
- package/dist/config/discovery.js +62 -0
- package/dist/config/discovery.js.map +1 -0
- package/dist/config/gh-auth.d.ts +5 -0
- package/dist/config/gh-auth.d.ts.map +1 -0
- package/dist/config/gh-auth.js +18 -0
- package/dist/config/gh-auth.js.map +1 -0
- package/dist/config/loader.d.ts +38 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +72 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/db/client.d.ts +10 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +84 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +805 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +66 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/git/git.d.ts +29 -0
- package/dist/git/git.d.ts.map +1 -0
- package/dist/git/git.js +200 -0
- package/dist/git/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +5 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +63 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/orchestrator/build-handler.d.ts +20 -0
- package/dist/orchestrator/build-handler.d.ts.map +1 -0
- package/dist/orchestrator/build-handler.js +212 -0
- package/dist/orchestrator/build-handler.js.map +1 -0
- package/dist/orchestrator/dag.d.ts +10 -0
- package/dist/orchestrator/dag.d.ts.map +1 -0
- package/dist/orchestrator/dag.js +70 -0
- package/dist/orchestrator/dag.js.map +1 -0
- package/dist/orchestrator/error-handling.d.ts +21 -0
- package/dist/orchestrator/error-handling.d.ts.map +1 -0
- package/dist/orchestrator/error-handling.js +124 -0
- package/dist/orchestrator/error-handling.js.map +1 -0
- package/dist/orchestrator/feedback-handler.d.ts +36 -0
- package/dist/orchestrator/feedback-handler.d.ts.map +1 -0
- package/dist/orchestrator/feedback-handler.js +316 -0
- package/dist/orchestrator/feedback-handler.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +21 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +188 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/parallel-runner.d.ts +3 -0
- package/dist/orchestrator/parallel-runner.d.ts.map +1 -0
- package/dist/orchestrator/parallel-runner.js +111 -0
- package/dist/orchestrator/parallel-runner.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +20 -0
- package/dist/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/orchestrator/reviewer.js +175 -0
- package/dist/orchestrator/reviewer.js.map +1 -0
- package/dist/orchestrator/task-runner.d.ts +20 -0
- package/dist/orchestrator/task-runner.d.ts.map +1 -0
- package/dist/orchestrator/task-runner.js +122 -0
- package/dist/orchestrator/task-runner.js.map +1 -0
- package/dist/orchestrator/test-runner.d.ts +8 -0
- package/dist/orchestrator/test-runner.d.ts.map +1 -0
- package/dist/orchestrator/test-runner.js +81 -0
- package/dist/orchestrator/test-runner.js.map +1 -0
- package/dist/planner/plan-parser.d.ts +14 -0
- package/dist/planner/plan-parser.d.ts.map +1 -0
- package/dist/planner/plan-parser.js +182 -0
- package/dist/planner/plan-parser.js.map +1 -0
- package/dist/planner/planner.d.ts +9 -0
- package/dist/planner/planner.d.ts.map +1 -0
- package/dist/planner/planner.js +151 -0
- package/dist/planner/planner.js.map +1 -0
- package/dist/repl/repl.d.ts +19 -0
- package/dist/repl/repl.d.ts.map +1 -0
- package/dist/repl/repl.js +505 -0
- package/dist/repl/repl.js.map +1 -0
- package/dist/session/agent-log.d.ts +35 -0
- package/dist/session/agent-log.d.ts.map +1 -0
- package/dist/session/agent-log.js +120 -0
- package/dist/session/agent-log.js.map +1 -0
- package/dist/session/chat.d.ts +38 -0
- package/dist/session/chat.d.ts.map +1 -0
- package/dist/session/chat.js +106 -0
- package/dist/session/chat.js.map +1 -0
- package/dist/session/cost-tracker.d.ts +14 -0
- package/dist/session/cost-tracker.d.ts.map +1 -0
- package/dist/session/cost-tracker.js +61 -0
- package/dist/session/cost-tracker.js.map +1 -0
- package/dist/session/export.d.ts +2 -0
- package/dist/session/export.d.ts.map +1 -0
- package/dist/session/export.js +105 -0
- package/dist/session/export.js.map +1 -0
- package/dist/session/in-session-commands.d.ts +7 -0
- package/dist/session/in-session-commands.d.ts.map +1 -0
- package/dist/session/in-session-commands.js +227 -0
- package/dist/session/in-session-commands.js.map +1 -0
- package/dist/session/interactive.d.ts +37 -0
- package/dist/session/interactive.d.ts.map +1 -0
- package/dist/session/interactive.js +226 -0
- package/dist/session/interactive.js.map +1 -0
- package/dist/session/manager.d.ts +63 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +229 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/resume.d.ts +7 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +53 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/state-machine.d.ts +4 -0
- package/dist/session/state-machine.d.ts.map +1 -0
- package/dist/session/state-machine.js +47 -0
- package/dist/session/state-machine.js.map +1 -0
- package/dist/tui/chat-ui.d.ts +16 -0
- package/dist/tui/chat-ui.d.ts.map +1 -0
- package/dist/tui/chat-ui.js +19 -0
- package/dist/tui/chat-ui.js.map +1 -0
- package/dist/tui/dashboard.d.ts +17 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +57 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/session-list.d.ts +18 -0
- package/dist/tui/session-list.d.ts.map +1 -0
- package/dist/tui/session-list.js +26 -0
- package/dist/tui/session-list.js.map +1 -0
- package/dist/ui/agent-panel.d.ts +9 -0
- package/dist/ui/agent-panel.d.ts.map +1 -0
- package/dist/ui/agent-panel.js +100 -0
- package/dist/ui/agent-panel.js.map +1 -0
- package/dist/ui/banner.d.ts +10 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +100 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/markdown.d.ts +19 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +174 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/prompt.d.ts +24 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +226 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/utils/time.d.ts +3 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +29 -0
- package/dist/utils/time.js.map +1 -0
- package/drizzle/migrations/0000_naive_human_fly.sql +56 -0
- package/drizzle/migrations/meta/0000_snapshot.json +395 -0
- package/drizzle/migrations/meta/_journal.json +13 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAKH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnB,CAAC;AAIH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBhB,CAAC;AAIH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUrB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
2
|
+
// ─── Sessions ───────────────────────────────────────────
|
|
3
|
+
export const sessions = sqliteTable("sessions", {
|
|
4
|
+
id: text("id").primaryKey(), // nanoid, e.g. "s_a1b2c3d4"
|
|
5
|
+
repo: text("repo").notNull(), // fully qualified: "SiluPanda/weav"
|
|
6
|
+
repoLocalPath: text("repo_local_path"), // local clone path
|
|
7
|
+
goal: text("goal").notNull(), // original user goal
|
|
8
|
+
status: text("status").notNull(), // planning | building | awaiting_feedback | iterating | stopped
|
|
9
|
+
planJson: text("plan_json"), // the finalized plan (JSON string)
|
|
10
|
+
prUrl: text("pr_url"), // github PR link once created
|
|
11
|
+
prNumber: integer("pr_number"), // PR number
|
|
12
|
+
workingBranch: text("working_branch"), // e.g. "sw/s_a1b2c3d4-dark-theme"
|
|
13
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
|
|
14
|
+
updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
|
|
15
|
+
stoppedAt: integer("stopped_at", { mode: "timestamp" }),
|
|
16
|
+
});
|
|
17
|
+
// ─── Chat Messages ──────────────────────────────────────
|
|
18
|
+
// Full conversation history: user messages, agent responses,
|
|
19
|
+
// system events, and feedback — all in one ordered stream.
|
|
20
|
+
export const messages = sqliteTable("messages", {
|
|
21
|
+
id: text("id").primaryKey(), // nanoid
|
|
22
|
+
sessionId: text("session_id")
|
|
23
|
+
.notNull()
|
|
24
|
+
.references(() => sessions.id, { onDelete: "cascade" }),
|
|
25
|
+
role: text("role").notNull(), // user | agent | system
|
|
26
|
+
content: text("content").notNull(), // message text
|
|
27
|
+
metadata: text("metadata"), // JSON: { agent: "claude-code", phase: "planning" } etc.
|
|
28
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
|
|
29
|
+
});
|
|
30
|
+
// ─── Tasks ──────────────────────────────────────────────
|
|
31
|
+
// Individual coding tasks decomposed from the plan.
|
|
32
|
+
export const tasks = sqliteTable("tasks", {
|
|
33
|
+
id: text("id").primaryKey(), // e.g. "task-001"
|
|
34
|
+
sessionId: text("session_id")
|
|
35
|
+
.notNull()
|
|
36
|
+
.references(() => sessions.id, { onDelete: "cascade" }),
|
|
37
|
+
title: text("title").notNull(),
|
|
38
|
+
description: text("description").notNull(),
|
|
39
|
+
status: text("status").notNull(), // queued | running | reviewing | fixing | done | failed | blocked
|
|
40
|
+
dependsOn: text("depends_on"), // JSON array of task IDs
|
|
41
|
+
filesLikelyTouched: text("files_likely_touched"), // JSON array
|
|
42
|
+
acceptanceCriteria: text("acceptance_criteria"), // JSON array
|
|
43
|
+
branchName: text("branch_name"), // e.g. "sw/task-001-oauth-config"
|
|
44
|
+
reviewVerdict: text("review_verdict"), // approve | request_changes
|
|
45
|
+
reviewIssues: text("review_issues"), // JSON array of review issues
|
|
46
|
+
reviewCycles: integer("review_cycles").default(0),
|
|
47
|
+
diffPatch: text("diff_patch"), // stored diff after completion
|
|
48
|
+
agentOutput: text("agent_output"), // full agent response
|
|
49
|
+
order: integer("order").notNull(), // execution order
|
|
50
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
|
|
51
|
+
updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
|
|
52
|
+
});
|
|
53
|
+
// ─── Feedback Iterations ────────────────────────────────
|
|
54
|
+
// When user gives feedback after a build, each round is tracked.
|
|
55
|
+
export const iterations = sqliteTable("iterations", {
|
|
56
|
+
id: text("id").primaryKey(), // nanoid
|
|
57
|
+
sessionId: text("session_id")
|
|
58
|
+
.notNull()
|
|
59
|
+
.references(() => sessions.id, { onDelete: "cascade" }),
|
|
60
|
+
iterationNumber: integer("iteration_number").notNull(),
|
|
61
|
+
feedback: text("feedback").notNull(), // user's feedback text
|
|
62
|
+
planDelta: text("plan_delta"), // what changed in the plan (JSON)
|
|
63
|
+
status: text("status").notNull(), // planning | building | done | failed
|
|
64
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run a git command with array-based arguments (no shell interpolation).
|
|
3
|
+
* This prevents command injection via commit messages, branch names, etc.
|
|
4
|
+
*/
|
|
5
|
+
export declare function git(args: string[], cwd: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Run a gh CLI command with array-based arguments (no shell interpolation).
|
|
8
|
+
*/
|
|
9
|
+
export declare function gh(args: string[], cwd: string): string;
|
|
10
|
+
export declare function resolveRepo(input: string): string;
|
|
11
|
+
/** Detect the default branch name for the repo (main, master, etc.). */
|
|
12
|
+
export declare function getDefaultBranch(cwd: string): string;
|
|
13
|
+
export declare function createBranch(name: string, base: string, cwd: string): void;
|
|
14
|
+
export declare function squashMerge(source: string, target: string, message: string, cwd: string): void;
|
|
15
|
+
export declare function getDiff(cwd: string): string;
|
|
16
|
+
export declare function getStagedDiff(cwd: string): string;
|
|
17
|
+
export declare function commitAll(message: string, cwd: string): void;
|
|
18
|
+
export declare function pushBranch(branch: string, cwd: string): void;
|
|
19
|
+
export declare function createPR(title: string, body: string, base: string, head: string, cwd: string): string;
|
|
20
|
+
/** Check whether `dir` is inside a git working tree. */
|
|
21
|
+
export declare function isGitRepo(dir: string): boolean;
|
|
22
|
+
/** Return the git working-tree root for `dir`. */
|
|
23
|
+
export declare function getRepoRoot(dir: string): string;
|
|
24
|
+
/** Derive an owner/repo slug from the origin remote URL. */
|
|
25
|
+
export declare function repoFromRemote(dir: string): string | null;
|
|
26
|
+
/** Delete branches matching a pattern (for cleanup). */
|
|
27
|
+
export declare function deleteBranches(pattern: string, cwd: string): void;
|
|
28
|
+
export declare function cloneOrLocateRepo(repo: string, defaultBranch?: string): string;
|
|
29
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;GAEG;AACH,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBpD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CAuBN;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,IAAI,CAYN;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CAKR;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazD;AAED,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAgBjE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB9E"}
|
package/dist/git/git.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { execFileSync } from "child_process";
|
|
2
|
+
import { existsSync, mkdirSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
/**
|
|
6
|
+
* Run a git command with array-based arguments (no shell interpolation).
|
|
7
|
+
* This prevents command injection via commit messages, branch names, etc.
|
|
8
|
+
*/
|
|
9
|
+
export function git(args, cwd) {
|
|
10
|
+
return execFileSync("git", args, {
|
|
11
|
+
cwd,
|
|
12
|
+
encoding: "utf-8",
|
|
13
|
+
timeout: 30000,
|
|
14
|
+
}).trim();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run a gh CLI command with array-based arguments (no shell interpolation).
|
|
18
|
+
*/
|
|
19
|
+
export function gh(args, cwd) {
|
|
20
|
+
return execFileSync("gh", args, {
|
|
21
|
+
cwd,
|
|
22
|
+
encoding: "utf-8",
|
|
23
|
+
timeout: 30000,
|
|
24
|
+
}).trim();
|
|
25
|
+
}
|
|
26
|
+
export function resolveRepo(input) {
|
|
27
|
+
// Full GitHub URL: https://github.com/owner/repo
|
|
28
|
+
if (input.startsWith("https://")) {
|
|
29
|
+
const match = input.match(/github\.com\/([^/]+\/[^/]+)/);
|
|
30
|
+
if (match) {
|
|
31
|
+
return match[1].replace(/\.git$/, "");
|
|
32
|
+
}
|
|
33
|
+
return input;
|
|
34
|
+
}
|
|
35
|
+
// Already fully qualified: owner/repo
|
|
36
|
+
if (input.includes("/")) {
|
|
37
|
+
return input;
|
|
38
|
+
}
|
|
39
|
+
// Short name: just repo name — resolve via gh api
|
|
40
|
+
const user = gh(["api", "user", "-q", ".login"], ".");
|
|
41
|
+
return `${user}/${input}`;
|
|
42
|
+
}
|
|
43
|
+
/** Detect the default branch name for the repo (main, master, etc.). */
|
|
44
|
+
export function getDefaultBranch(cwd) {
|
|
45
|
+
try {
|
|
46
|
+
// Try to get the default branch from the remote HEAD
|
|
47
|
+
const ref = git(["symbolic-ref", "refs/remotes/origin/HEAD", "--short"], cwd);
|
|
48
|
+
// Returns e.g. "origin/main" — strip the "origin/" prefix
|
|
49
|
+
return ref.replace(/^origin\//, "");
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Fallback: check if "main" exists, otherwise try "master"
|
|
53
|
+
try {
|
|
54
|
+
git(["rev-parse", "--verify", "main"], cwd);
|
|
55
|
+
return "main";
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
try {
|
|
59
|
+
git(["rev-parse", "--verify", "master"], cwd);
|
|
60
|
+
return "master";
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return "main";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function createBranch(name, base, cwd) {
|
|
69
|
+
try {
|
|
70
|
+
git(["checkout", "-b", name, base], cwd);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
74
|
+
if (msg.includes("cannot lock ref") || msg.includes("exists; cannot create")) {
|
|
75
|
+
// Git ref conflict — e.g. branch "sw/X" blocks "sw/X/Y" or vice versa.
|
|
76
|
+
// Delete the conflicting ref and retry.
|
|
77
|
+
const match = msg.match(/'refs\/heads\/([^']+)' exists/);
|
|
78
|
+
if (match) {
|
|
79
|
+
try {
|
|
80
|
+
git(["branch", "-D", match[1]], cwd);
|
|
81
|
+
}
|
|
82
|
+
catch { /* ignore */ }
|
|
83
|
+
}
|
|
84
|
+
git(["checkout", "-b", name, base], cwd);
|
|
85
|
+
}
|
|
86
|
+
else if (msg.includes("already exists")) {
|
|
87
|
+
// Branch already exists — reset it to the base for a clean start
|
|
88
|
+
git(["checkout", name], cwd);
|
|
89
|
+
git(["reset", "--hard", base], cwd);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Unexpected error — do not do destructive operations, re-throw
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function squashMerge(source, target, message, cwd) {
|
|
98
|
+
git(["checkout", target], cwd);
|
|
99
|
+
try {
|
|
100
|
+
git(["merge", "--squash", source], cwd);
|
|
101
|
+
git(["commit", "-m", message], cwd);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
// Clean up the failed merge to restore a clean working tree
|
|
105
|
+
try {
|
|
106
|
+
git(["merge", "--abort"], cwd);
|
|
107
|
+
}
|
|
108
|
+
catch { /* no merge in progress */ }
|
|
109
|
+
try {
|
|
110
|
+
git(["reset", "--hard", "HEAD"], cwd);
|
|
111
|
+
}
|
|
112
|
+
catch { /* best effort */ }
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
git(["branch", "-D", source], cwd);
|
|
116
|
+
}
|
|
117
|
+
export function getDiff(cwd) {
|
|
118
|
+
return git(["diff"], cwd);
|
|
119
|
+
}
|
|
120
|
+
export function getStagedDiff(cwd) {
|
|
121
|
+
return git(["diff", "--cached"], cwd);
|
|
122
|
+
}
|
|
123
|
+
export function commitAll(message, cwd) {
|
|
124
|
+
git(["add", "-A"], cwd);
|
|
125
|
+
git(["commit", "-m", message], cwd);
|
|
126
|
+
}
|
|
127
|
+
export function pushBranch(branch, cwd) {
|
|
128
|
+
git(["push", "origin", branch], cwd);
|
|
129
|
+
}
|
|
130
|
+
export function createPR(title, body, base, head, cwd) {
|
|
131
|
+
return gh(["pr", "create", "--title", title, "--body", body, "--base", base, "--head", head], cwd);
|
|
132
|
+
}
|
|
133
|
+
/** Check whether `dir` is inside a git working tree. */
|
|
134
|
+
export function isGitRepo(dir) {
|
|
135
|
+
try {
|
|
136
|
+
git(["rev-parse", "--is-inside-work-tree"], dir);
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Return the git working-tree root for `dir`. */
|
|
144
|
+
export function getRepoRoot(dir) {
|
|
145
|
+
return git(["rev-parse", "--show-toplevel"], dir);
|
|
146
|
+
}
|
|
147
|
+
/** Derive an owner/repo slug from the origin remote URL. */
|
|
148
|
+
export function repoFromRemote(dir) {
|
|
149
|
+
try {
|
|
150
|
+
const url = git(["remote", "get-url", "origin"], dir);
|
|
151
|
+
// SSH: git@github.com:owner/repo.git
|
|
152
|
+
const ssh = url.match(/github\.com[:/]([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
153
|
+
if (ssh)
|
|
154
|
+
return ssh[1];
|
|
155
|
+
// HTTPS: https://github.com/owner/repo.git
|
|
156
|
+
const https = url.match(/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
157
|
+
if (https)
|
|
158
|
+
return https[1];
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** Delete branches matching a pattern (for cleanup). */
|
|
166
|
+
export function deleteBranches(pattern, cwd) {
|
|
167
|
+
try {
|
|
168
|
+
const branches = git(["branch", "--list", pattern], cwd)
|
|
169
|
+
.split("\n")
|
|
170
|
+
.map(b => b.trim().replace(/^\* /, ""))
|
|
171
|
+
.filter(Boolean);
|
|
172
|
+
for (const branch of branches) {
|
|
173
|
+
try {
|
|
174
|
+
git(["branch", "-D", branch], cwd);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Ignore errors deleting individual branches
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// No branches to delete
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function cloneOrLocateRepo(repo, defaultBranch) {
|
|
186
|
+
const reposDir = join(homedir(), ".sweteam", "repos");
|
|
187
|
+
const repoDirName = repo.replace("/", "--");
|
|
188
|
+
const repoPath = join(reposDir, repoDirName);
|
|
189
|
+
if (existsSync(repoPath)) {
|
|
190
|
+
git(["fetch", "origin"], repoPath);
|
|
191
|
+
const branch = defaultBranch ?? getDefaultBranch(repoPath);
|
|
192
|
+
git(["checkout", branch], repoPath);
|
|
193
|
+
git(["pull"], repoPath);
|
|
194
|
+
return repoPath;
|
|
195
|
+
}
|
|
196
|
+
mkdirSync(reposDir, { recursive: true });
|
|
197
|
+
gh(["repo", "clone", repo, repoPath], ".");
|
|
198
|
+
return repoPath;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "module";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { installShutdownHandlers } from "./lifecycle.js";
|
|
5
|
+
import { setConfigOverrides } from "./config/loader.js";
|
|
6
|
+
installShutdownHandlers();
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
const pkg = require("../package.json");
|
|
9
|
+
const program = new Command();
|
|
10
|
+
program
|
|
11
|
+
.name("sweteam")
|
|
12
|
+
.description("Autonomous coding agent orchestrator — turns high-level goals into PR'd code")
|
|
13
|
+
.version(pkg.version)
|
|
14
|
+
.option("--coder <agent>", "Override coder agent for this session")
|
|
15
|
+
.option("--reviewer <agent>", "Override reviewer agent for this session")
|
|
16
|
+
.option("--parallel <count>", "Override max parallel tasks", parseInt)
|
|
17
|
+
.option("--config <path>", "Use custom config file path");
|
|
18
|
+
// Apply global CLI overrides before any command runs
|
|
19
|
+
program.hook("preAction", () => {
|
|
20
|
+
const opts = program.opts();
|
|
21
|
+
setConfigOverrides({
|
|
22
|
+
coder: opts.coder,
|
|
23
|
+
reviewer: opts.reviewer,
|
|
24
|
+
parallel: opts.parallel,
|
|
25
|
+
configPath: opts.config,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
program
|
|
29
|
+
.command("create")
|
|
30
|
+
.description("Create a new session and enter planning chat")
|
|
31
|
+
.argument("[repo]", "Repository name or URL (defaults to current directory)")
|
|
32
|
+
.action(async (repo) => {
|
|
33
|
+
const { handleCreate } = await import("./commands/create.js");
|
|
34
|
+
const result = await handleCreate(repo);
|
|
35
|
+
if (result) {
|
|
36
|
+
const { runRepl } = await import("./repl/repl.js");
|
|
37
|
+
await runRepl({
|
|
38
|
+
initialSession: { ...result, goal: "" },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
program
|
|
43
|
+
.command("list")
|
|
44
|
+
.description("List all sessions with status")
|
|
45
|
+
.option("--status <status>", "Filter by session status")
|
|
46
|
+
.option("--repo <repo>", "Filter by repository name")
|
|
47
|
+
.action(async (opts) => {
|
|
48
|
+
const { handleList } = await import("./commands/list.js");
|
|
49
|
+
await handleList(opts);
|
|
50
|
+
});
|
|
51
|
+
program
|
|
52
|
+
.command("enter")
|
|
53
|
+
.description("Re-enter an existing session")
|
|
54
|
+
.argument("<session_id>", "Session ID to enter")
|
|
55
|
+
.action(async (sessionId) => {
|
|
56
|
+
try {
|
|
57
|
+
const { getSession } = await import("./session/manager.js");
|
|
58
|
+
const session = getSession(sessionId);
|
|
59
|
+
if (!session) {
|
|
60
|
+
console.error(`Session not found: ${sessionId}`);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const { runRepl } = await import("./repl/repl.js");
|
|
64
|
+
await runRepl({
|
|
65
|
+
initialSession: {
|
|
66
|
+
id: session.id,
|
|
67
|
+
repo: session.repo,
|
|
68
|
+
goal: session.goal,
|
|
69
|
+
repoLocalPath: session.repoLocalPath ?? ".",
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
program
|
|
79
|
+
.command("show")
|
|
80
|
+
.description("Show detailed status of a session")
|
|
81
|
+
.argument("<session_id>", "Session ID to inspect")
|
|
82
|
+
.action(async (sessionId) => {
|
|
83
|
+
try {
|
|
84
|
+
const { handleShow } = await import("./commands/show.js");
|
|
85
|
+
await handleShow(sessionId);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
program
|
|
93
|
+
.command("stop")
|
|
94
|
+
.description("Stop the current session")
|
|
95
|
+
.argument("<session_id>", "Session ID to stop")
|
|
96
|
+
.action(async (sessionId) => {
|
|
97
|
+
try {
|
|
98
|
+
const { handleStop } = await import("./commands/stop.js");
|
|
99
|
+
await handleStop(sessionId);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
program
|
|
107
|
+
.command("delete")
|
|
108
|
+
.description("Delete a session and its data (use --all to delete all)")
|
|
109
|
+
.argument("<session_id>", 'Session ID to delete, or "--all" for all sessions')
|
|
110
|
+
.action(async (sessionId) => {
|
|
111
|
+
try {
|
|
112
|
+
const { handleDelete } = await import("./commands/delete.js");
|
|
113
|
+
await handleDelete(sessionId);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
program
|
|
121
|
+
.command("init")
|
|
122
|
+
.description("Auto-discover installed CLIs and generate config")
|
|
123
|
+
.option("--force", "Overwrite existing config")
|
|
124
|
+
.action(async (opts) => {
|
|
125
|
+
const { runInit, formatInitOutput } = await import("./commands/init.js");
|
|
126
|
+
const result = runInit(undefined, { force: opts.force });
|
|
127
|
+
console.log(formatInitOutput(result));
|
|
128
|
+
});
|
|
129
|
+
// Apply overrides for REPL mode too (no subcommand)
|
|
130
|
+
function applyOverrides() {
|
|
131
|
+
// Parse known options from argv without triggering command handlers
|
|
132
|
+
const opts = program.opts();
|
|
133
|
+
setConfigOverrides({
|
|
134
|
+
coder: opts.coder,
|
|
135
|
+
reviewer: opts.reviewer,
|
|
136
|
+
parallel: opts.parallel,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Detect if no subcommand was provided → launch interactive REPL
|
|
140
|
+
const args = process.argv.slice(2);
|
|
141
|
+
const knownCommands = new Set(program.commands.map((c) => c.name()));
|
|
142
|
+
const hasSubcommand = args.some((a) => !a.startsWith("-") && knownCommands.has(a));
|
|
143
|
+
const hasVersionOrHelp = args.includes("--version") || args.includes("-V") || args.includes("--help") || args.includes("-h");
|
|
144
|
+
if (hasVersionOrHelp || hasSubcommand) {
|
|
145
|
+
// Let Commander handle subcommands, --version, and --help
|
|
146
|
+
program.parse();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// No subcommand — launch interactive REPL
|
|
150
|
+
program.parseOptions(args);
|
|
151
|
+
applyOverrides();
|
|
152
|
+
import("./repl/repl.js").then(({ runRepl }) => runRepl());
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMlD,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAIrD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAkBvC;AA0BD,wBAAgB,uBAAuB,IAAI,IAAI,CAc9C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { closeDb } from "./db/client.js";
|
|
2
|
+
/** Track spawned child processes for cleanup on shutdown. */
|
|
3
|
+
const activeProcesses = new Set();
|
|
4
|
+
export function trackProcess(proc) {
|
|
5
|
+
activeProcesses.add(proc);
|
|
6
|
+
proc.on("close", () => activeProcesses.delete(proc));
|
|
7
|
+
proc.on("error", () => activeProcesses.delete(proc));
|
|
8
|
+
}
|
|
9
|
+
export function killAllProcesses() {
|
|
10
|
+
for (const proc of activeProcesses) {
|
|
11
|
+
try {
|
|
12
|
+
proc.kill("SIGTERM");
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Process may have already exited
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Give processes a moment, then force-kill any remaining
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
for (const proc of activeProcesses) {
|
|
21
|
+
try {
|
|
22
|
+
proc.kill("SIGKILL");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Already dead
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}, 2000);
|
|
29
|
+
}
|
|
30
|
+
let shuttingDown = false;
|
|
31
|
+
function handleShutdown(signal) {
|
|
32
|
+
if (shuttingDown)
|
|
33
|
+
return;
|
|
34
|
+
shuttingDown = true;
|
|
35
|
+
// Restore terminal state
|
|
36
|
+
if (process.stdin.isTTY) {
|
|
37
|
+
try {
|
|
38
|
+
process.stdin.setRawMode(false);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// May not be in raw mode
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log(`\nReceived ${signal}. Cleaning up...`);
|
|
45
|
+
killAllProcesses();
|
|
46
|
+
closeDb();
|
|
47
|
+
// Delay must exceed the SIGKILL fallback (2000ms) to avoid orphaning processes
|
|
48
|
+
setTimeout(() => process.exit(0), 3000);
|
|
49
|
+
}
|
|
50
|
+
export function installShutdownHandlers() {
|
|
51
|
+
process.on("SIGINT", () => handleShutdown("SIGINT"));
|
|
52
|
+
process.on("SIGTERM", () => handleShutdown("SIGTERM"));
|
|
53
|
+
process.on("unhandledRejection", (reason) => {
|
|
54
|
+
console.error("Unhandled promise rejection:", reason);
|
|
55
|
+
});
|
|
56
|
+
process.on("uncaughtException", (err) => {
|
|
57
|
+
console.error("Uncaught exception:", err.message);
|
|
58
|
+
killAllProcesses();
|
|
59
|
+
closeDb();
|
|
60
|
+
process.exit(1);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEhD,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IACD,yDAAyD;IACzD,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AAED,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IAEpB,yBAAyB;IACzB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,kBAAkB,CAAC,CAAC;IAEpD,gBAAgB,EAAE,CAAC;IACnB,OAAO,EAAE,CAAC;IAEV,+EAA+E;IAC/E,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,gBAAgB,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function generatePrBody(goal: string, taskResults: {
|
|
2
|
+
completed: string[];
|
|
3
|
+
failed: string[];
|
|
4
|
+
blocked: string[];
|
|
5
|
+
}, allTasks: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
status: string;
|
|
9
|
+
}>): string;
|
|
10
|
+
export declare function formatCompletionReport(taskResults: {
|
|
11
|
+
completed: string[];
|
|
12
|
+
failed: string[];
|
|
13
|
+
blocked: string[];
|
|
14
|
+
}, allTasks: Array<{
|
|
15
|
+
id: string;
|
|
16
|
+
title: string;
|
|
17
|
+
status: string;
|
|
18
|
+
}>, prUrl?: string): string;
|
|
19
|
+
export declare function handleBuild(sessionId: string, planOutput: string): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=build-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-handler.d.ts","sourceRoot":"","sources":["../../src/orchestrator/build-handler.ts"],"names":[],"mappings":"AAiBA,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EACD,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,MAAM,CAyCR;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EACD,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9D,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CA+BR;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAyJf"}
|