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.
Files changed (206) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +587 -0
  3. package/dist/adapters/adapter.d.ts +19 -0
  4. package/dist/adapters/adapter.d.ts.map +1 -0
  5. package/dist/adapters/adapter.js +20 -0
  6. package/dist/adapters/adapter.js.map +1 -0
  7. package/dist/adapters/claude-code.d.ts +13 -0
  8. package/dist/adapters/claude-code.d.ts.map +1 -0
  9. package/dist/adapters/claude-code.js +150 -0
  10. package/dist/adapters/claude-code.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +13 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +100 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/custom.d.ts +16 -0
  16. package/dist/adapters/custom.d.ts.map +1 -0
  17. package/dist/adapters/custom.js +167 -0
  18. package/dist/adapters/custom.js.map +1 -0
  19. package/dist/adapters/opencode.d.ts +13 -0
  20. package/dist/adapters/opencode.d.ts.map +1 -0
  21. package/dist/adapters/opencode.js +100 -0
  22. package/dist/adapters/opencode.js.map +1 -0
  23. package/dist/adapters/prompt-detection.d.ts +14 -0
  24. package/dist/adapters/prompt-detection.d.ts.map +1 -0
  25. package/dist/adapters/prompt-detection.js +74 -0
  26. package/dist/adapters/prompt-detection.js.map +1 -0
  27. package/dist/commands/create.d.ts +8 -0
  28. package/dist/commands/create.d.ts.map +1 -0
  29. package/dist/commands/create.js +38 -0
  30. package/dist/commands/create.js.map +1 -0
  31. package/dist/commands/delete.d.ts +2 -0
  32. package/dist/commands/delete.d.ts.map +1 -0
  33. package/dist/commands/delete.js +22 -0
  34. package/dist/commands/delete.js.map +1 -0
  35. package/dist/commands/enter.d.ts +19 -0
  36. package/dist/commands/enter.d.ts.map +1 -0
  37. package/dist/commands/enter.js +73 -0
  38. package/dist/commands/enter.js.map +1 -0
  39. package/dist/commands/init.d.ts +14 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +52 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/list.d.ts +8 -0
  44. package/dist/commands/list.d.ts.map +1 -0
  45. package/dist/commands/list.js +98 -0
  46. package/dist/commands/list.js.map +1 -0
  47. package/dist/commands/show.d.ts +33 -0
  48. package/dist/commands/show.d.ts.map +1 -0
  49. package/dist/commands/show.js +142 -0
  50. package/dist/commands/show.js.map +1 -0
  51. package/dist/commands/stop.d.ts +2 -0
  52. package/dist/commands/stop.d.ts.map +1 -0
  53. package/dist/commands/stop.js +10 -0
  54. package/dist/commands/stop.js.map +1 -0
  55. package/dist/config/discovery.d.ts +12 -0
  56. package/dist/config/discovery.d.ts.map +1 -0
  57. package/dist/config/discovery.js +62 -0
  58. package/dist/config/discovery.js.map +1 -0
  59. package/dist/config/gh-auth.d.ts +5 -0
  60. package/dist/config/gh-auth.d.ts.map +1 -0
  61. package/dist/config/gh-auth.js +18 -0
  62. package/dist/config/gh-auth.js.map +1 -0
  63. package/dist/config/loader.d.ts +38 -0
  64. package/dist/config/loader.d.ts.map +1 -0
  65. package/dist/config/loader.js +72 -0
  66. package/dist/config/loader.js.map +1 -0
  67. package/dist/db/client.d.ts +10 -0
  68. package/dist/db/client.d.ts.map +1 -0
  69. package/dist/db/client.js +84 -0
  70. package/dist/db/client.js.map +1 -0
  71. package/dist/db/schema.d.ts +805 -0
  72. package/dist/db/schema.d.ts.map +1 -0
  73. package/dist/db/schema.js +66 -0
  74. package/dist/db/schema.js.map +1 -0
  75. package/dist/git/git.d.ts +29 -0
  76. package/dist/git/git.d.ts.map +1 -0
  77. package/dist/git/git.js +200 -0
  78. package/dist/git/git.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +154 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/lifecycle.d.ts +5 -0
  84. package/dist/lifecycle.d.ts.map +1 -0
  85. package/dist/lifecycle.js +63 -0
  86. package/dist/lifecycle.js.map +1 -0
  87. package/dist/orchestrator/build-handler.d.ts +20 -0
  88. package/dist/orchestrator/build-handler.d.ts.map +1 -0
  89. package/dist/orchestrator/build-handler.js +212 -0
  90. package/dist/orchestrator/build-handler.js.map +1 -0
  91. package/dist/orchestrator/dag.d.ts +10 -0
  92. package/dist/orchestrator/dag.d.ts.map +1 -0
  93. package/dist/orchestrator/dag.js +70 -0
  94. package/dist/orchestrator/dag.js.map +1 -0
  95. package/dist/orchestrator/error-handling.d.ts +21 -0
  96. package/dist/orchestrator/error-handling.d.ts.map +1 -0
  97. package/dist/orchestrator/error-handling.js +124 -0
  98. package/dist/orchestrator/error-handling.js.map +1 -0
  99. package/dist/orchestrator/feedback-handler.d.ts +36 -0
  100. package/dist/orchestrator/feedback-handler.d.ts.map +1 -0
  101. package/dist/orchestrator/feedback-handler.js +316 -0
  102. package/dist/orchestrator/feedback-handler.js.map +1 -0
  103. package/dist/orchestrator/orchestrator.d.ts +21 -0
  104. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  105. package/dist/orchestrator/orchestrator.js +188 -0
  106. package/dist/orchestrator/orchestrator.js.map +1 -0
  107. package/dist/orchestrator/parallel-runner.d.ts +3 -0
  108. package/dist/orchestrator/parallel-runner.d.ts.map +1 -0
  109. package/dist/orchestrator/parallel-runner.js +111 -0
  110. package/dist/orchestrator/parallel-runner.js.map +1 -0
  111. package/dist/orchestrator/reviewer.d.ts +20 -0
  112. package/dist/orchestrator/reviewer.d.ts.map +1 -0
  113. package/dist/orchestrator/reviewer.js +175 -0
  114. package/dist/orchestrator/reviewer.js.map +1 -0
  115. package/dist/orchestrator/task-runner.d.ts +20 -0
  116. package/dist/orchestrator/task-runner.d.ts.map +1 -0
  117. package/dist/orchestrator/task-runner.js +122 -0
  118. package/dist/orchestrator/task-runner.js.map +1 -0
  119. package/dist/orchestrator/test-runner.d.ts +8 -0
  120. package/dist/orchestrator/test-runner.d.ts.map +1 -0
  121. package/dist/orchestrator/test-runner.js +81 -0
  122. package/dist/orchestrator/test-runner.js.map +1 -0
  123. package/dist/planner/plan-parser.d.ts +14 -0
  124. package/dist/planner/plan-parser.d.ts.map +1 -0
  125. package/dist/planner/plan-parser.js +182 -0
  126. package/dist/planner/plan-parser.js.map +1 -0
  127. package/dist/planner/planner.d.ts +9 -0
  128. package/dist/planner/planner.d.ts.map +1 -0
  129. package/dist/planner/planner.js +151 -0
  130. package/dist/planner/planner.js.map +1 -0
  131. package/dist/repl/repl.d.ts +19 -0
  132. package/dist/repl/repl.d.ts.map +1 -0
  133. package/dist/repl/repl.js +505 -0
  134. package/dist/repl/repl.js.map +1 -0
  135. package/dist/session/agent-log.d.ts +35 -0
  136. package/dist/session/agent-log.d.ts.map +1 -0
  137. package/dist/session/agent-log.js +120 -0
  138. package/dist/session/agent-log.js.map +1 -0
  139. package/dist/session/chat.d.ts +38 -0
  140. package/dist/session/chat.d.ts.map +1 -0
  141. package/dist/session/chat.js +106 -0
  142. package/dist/session/chat.js.map +1 -0
  143. package/dist/session/cost-tracker.d.ts +14 -0
  144. package/dist/session/cost-tracker.d.ts.map +1 -0
  145. package/dist/session/cost-tracker.js +61 -0
  146. package/dist/session/cost-tracker.js.map +1 -0
  147. package/dist/session/export.d.ts +2 -0
  148. package/dist/session/export.d.ts.map +1 -0
  149. package/dist/session/export.js +105 -0
  150. package/dist/session/export.js.map +1 -0
  151. package/dist/session/in-session-commands.d.ts +7 -0
  152. package/dist/session/in-session-commands.d.ts.map +1 -0
  153. package/dist/session/in-session-commands.js +227 -0
  154. package/dist/session/in-session-commands.js.map +1 -0
  155. package/dist/session/interactive.d.ts +37 -0
  156. package/dist/session/interactive.d.ts.map +1 -0
  157. package/dist/session/interactive.js +226 -0
  158. package/dist/session/interactive.js.map +1 -0
  159. package/dist/session/manager.d.ts +63 -0
  160. package/dist/session/manager.d.ts.map +1 -0
  161. package/dist/session/manager.js +229 -0
  162. package/dist/session/manager.js.map +1 -0
  163. package/dist/session/resume.d.ts +7 -0
  164. package/dist/session/resume.d.ts.map +1 -0
  165. package/dist/session/resume.js +53 -0
  166. package/dist/session/resume.js.map +1 -0
  167. package/dist/session/state-machine.d.ts +4 -0
  168. package/dist/session/state-machine.d.ts.map +1 -0
  169. package/dist/session/state-machine.js +47 -0
  170. package/dist/session/state-machine.js.map +1 -0
  171. package/dist/tui/chat-ui.d.ts +16 -0
  172. package/dist/tui/chat-ui.d.ts.map +1 -0
  173. package/dist/tui/chat-ui.js +19 -0
  174. package/dist/tui/chat-ui.js.map +1 -0
  175. package/dist/tui/dashboard.d.ts +17 -0
  176. package/dist/tui/dashboard.d.ts.map +1 -0
  177. package/dist/tui/dashboard.js +57 -0
  178. package/dist/tui/dashboard.js.map +1 -0
  179. package/dist/tui/session-list.d.ts +18 -0
  180. package/dist/tui/session-list.d.ts.map +1 -0
  181. package/dist/tui/session-list.js +26 -0
  182. package/dist/tui/session-list.js.map +1 -0
  183. package/dist/ui/agent-panel.d.ts +9 -0
  184. package/dist/ui/agent-panel.d.ts.map +1 -0
  185. package/dist/ui/agent-panel.js +100 -0
  186. package/dist/ui/agent-panel.js.map +1 -0
  187. package/dist/ui/banner.d.ts +10 -0
  188. package/dist/ui/banner.d.ts.map +1 -0
  189. package/dist/ui/banner.js +100 -0
  190. package/dist/ui/banner.js.map +1 -0
  191. package/dist/ui/markdown.d.ts +19 -0
  192. package/dist/ui/markdown.d.ts.map +1 -0
  193. package/dist/ui/markdown.js +174 -0
  194. package/dist/ui/markdown.js.map +1 -0
  195. package/dist/ui/prompt.d.ts +24 -0
  196. package/dist/ui/prompt.d.ts.map +1 -0
  197. package/dist/ui/prompt.js +226 -0
  198. package/dist/ui/prompt.js.map +1 -0
  199. package/dist/utils/time.d.ts +3 -0
  200. package/dist/utils/time.d.ts.map +1 -0
  201. package/dist/utils/time.js +29 -0
  202. package/dist/utils/time.js.map +1 -0
  203. package/drizzle/migrations/0000_naive_human_fly.sql +56 -0
  204. package/drizzle/migrations/meta/0000_snapshot.json +395 -0
  205. package/drizzle/migrations/meta/_journal.json +13 -0
  206. 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"}
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ import type { ChildProcess } from "child_process";
2
+ export declare function trackProcess(proc: ChildProcess): void;
3
+ export declare function killAllProcesses(): void;
4
+ export declare function installShutdownHandlers(): void;
5
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -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"}