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,182 @@
1
+ function tryParseJson(text) {
2
+ // Try to extract JSON from the response (may be wrapped in markdown code blocks)
3
+ const jsonMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
4
+ const jsonStr = jsonMatch ? jsonMatch[1] : text;
5
+ try {
6
+ const parsed = JSON.parse(jsonStr.trim());
7
+ // Handle array of tasks directly
8
+ if (Array.isArray(parsed)) {
9
+ return parsed.map(normalizeTask);
10
+ }
11
+ // Handle { tasks: [...] } wrapper
12
+ if (parsed.tasks && Array.isArray(parsed.tasks)) {
13
+ return parsed.tasks.map(normalizeTask);
14
+ }
15
+ return null;
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ /** Strip inline markdown formatting (bold, italic, code spans) from a string. */
22
+ function stripInlineMarkdown(text) {
23
+ return text
24
+ .replace(/\*\*(.+?)\*\*/g, "$1") // **bold**
25
+ .replace(/__(.+?)__/g, "$1") // __bold__
26
+ .replace(/\*(.+?)\*/g, "$1") // *italic*
27
+ .replace(/(?<=^|\s)_([^_]+)_(?=\s|$)/g, "$1") // _italic_ (only with surrounding whitespace, preserves underscores in identifiers)
28
+ .replace(/`([^`]+)`/g, "$1") // `code`
29
+ .trim();
30
+ }
31
+ function normalizeTask(raw, index) {
32
+ const rawId = String(raw.id ?? `task-${String(index + 1).padStart(3, "0")}`);
33
+ return {
34
+ id: stripInlineMarkdown(rawId),
35
+ title: stripInlineMarkdown(String(raw.title ?? "Untitled task")),
36
+ description: stripInlineMarkdown(String(raw.description ?? "")),
37
+ filesLikelyTouched: toStringArray(raw.files_likely_touched ?? raw.filesLikelyTouched ?? raw.files ?? []),
38
+ dependsOn: toStringArray(raw.depends_on ?? raw.dependsOn ?? raw.dependencies ?? []),
39
+ acceptanceCriteria: toStringArray(raw.acceptance_criteria ?? raw.acceptanceCriteria ?? raw.criteria ?? []),
40
+ };
41
+ }
42
+ function toStringArray(value) {
43
+ if (Array.isArray(value)) {
44
+ return value.map(String);
45
+ }
46
+ if (typeof value === "string") {
47
+ return value
48
+ .split(",")
49
+ .map((s) => s.trim())
50
+ .filter(Boolean);
51
+ }
52
+ return [];
53
+ }
54
+ function parseMarkdown(text) {
55
+ const tasks = [];
56
+ // Match markdown task sections like: ### task-001: Title or ### Task 1: Title or ### 1. Title
57
+ const taskPattern = /###\s*(?:task[-_\s]?)?(\d+|[a-z]+-\d+)[.:\s]+(.+?)(?:\n|$)/gi;
58
+ let match;
59
+ while ((match = taskPattern.exec(text)) !== null) {
60
+ const rawId = match[1];
61
+ const title = match[2].trim();
62
+ const id = rawId.includes("-") ? rawId : `task-${String(rawId).padStart(3, "0")}`;
63
+ // Get content until next ### or end
64
+ const startIdx = match.index + match[0].length;
65
+ const nextMatch = text.indexOf("\n###", startIdx);
66
+ const content = text.slice(startIdx, nextMatch === -1 ? undefined : nextMatch);
67
+ const description = extractSection(content, "description") || content.trim().split("\n")[0] || "";
68
+ const files = extractListItems(content, "files");
69
+ const deps = extractListItems(content, "depends_on|depends|dependencies|deps");
70
+ const criteria = extractListItems(content, "acceptance|criteria");
71
+ tasks.push({
72
+ id,
73
+ title,
74
+ description,
75
+ filesLikelyTouched: files,
76
+ dependsOn: deps,
77
+ acceptanceCriteria: criteria,
78
+ });
79
+ }
80
+ return tasks;
81
+ }
82
+ function extractSection(content, keyword) {
83
+ const pattern = new RegExp(`(?:^|\\n)\\s*\\*?\\*?${keyword}\\*?\\*?[:\\s]*(.+?)(?=\\n\\s*\\*?\\*?\\w+[:\\s]|$)`, "is");
84
+ const match = content.match(pattern);
85
+ return match ? match[1].trim() : "";
86
+ }
87
+ function extractListItems(content, keyword) {
88
+ const pattern = new RegExp(`(?:${keyword})[:\\s]*\\n((?:\\s*[-*]\\s+.+\\n?)+)`, "i");
89
+ const match = content.match(pattern);
90
+ if (!match)
91
+ return [];
92
+ return match[1]
93
+ .split("\n")
94
+ .map((line) => line.replace(/^\s*[-*]\s+/, "").trim())
95
+ .filter(Boolean);
96
+ }
97
+ function parseTable(text) {
98
+ // Match markdown tables with a header row containing "id" and "title"
99
+ const lines = text.split("\n").map((l) => l.trim()).filter(Boolean);
100
+ let headerIdx = -1;
101
+ for (let i = 0; i < lines.length; i++) {
102
+ if (lines[i].includes("|") && /\bid\b/i.test(lines[i]) && /\btitle\b/i.test(lines[i])) {
103
+ headerIdx = i;
104
+ break;
105
+ }
106
+ }
107
+ if (headerIdx === -1)
108
+ return [];
109
+ // Split table row into cells, preserving empty cells but stripping
110
+ // the leading/trailing empty strings from outer `|` delimiters
111
+ const parseCells = (line) => {
112
+ const cells = line.split("|").map((c) => c.trim());
113
+ // Remove leading/trailing empty strings from outer pipes
114
+ if (cells.length > 0 && cells[0] === "")
115
+ cells.shift();
116
+ if (cells.length > 0 && cells[cells.length - 1] === "")
117
+ cells.pop();
118
+ return cells;
119
+ };
120
+ const headers = parseCells(lines[headerIdx]).map((h) => h.toLowerCase().replace(/\s+/g, "_").replace(/[^a-z_]/g, ""));
121
+ // Skip separator row (e.g., |---|---|)
122
+ let dataStart = headerIdx + 1;
123
+ if (dataStart < lines.length && /^[\s|:-]+$/.test(lines[dataStart])) {
124
+ dataStart++;
125
+ }
126
+ const tasks = [];
127
+ for (let i = dataStart; i < lines.length; i++) {
128
+ if (!lines[i].includes("|"))
129
+ continue;
130
+ const cells = parseCells(lines[i]);
131
+ if (cells.length < 2)
132
+ continue;
133
+ const row = {};
134
+ for (let j = 0; j < headers.length && j < cells.length; j++) {
135
+ row[headers[j]] = cells[j];
136
+ }
137
+ tasks.push({
138
+ id: stripInlineMarkdown(row.id || `task-${String(tasks.length + 1).padStart(3, "0")}`),
139
+ title: row.title || "Untitled task",
140
+ description: row.description || "",
141
+ filesLikelyTouched: (row.files_likely_touched || row.files || "")
142
+ .split(",").map((s) => s.trim()).filter(Boolean),
143
+ dependsOn: (row.depends_on || row.dependencies || "")
144
+ .split(",").map((s) => s.trim()).filter(Boolean),
145
+ acceptanceCriteria: (row.acceptance_criteria || row.criteria || "")
146
+ .split(",").map((s) => s.trim()).filter(Boolean),
147
+ });
148
+ }
149
+ return tasks;
150
+ }
151
+ /** Normalize box-drawing characters (│┌┬┐├┼┤└┴┘─) to ASCII equivalents for parsing. */
152
+ function normalizeBoxDrawing(text) {
153
+ return text
154
+ .replace(/│/g, "|")
155
+ .replace(/[┌┬┐├┼┤└┴┘─]/g, "-")
156
+ .replace(/[…]/g, "...");
157
+ }
158
+ export function parsePlan(agentOutput) {
159
+ // Try JSON first
160
+ const jsonTasks = tryParseJson(agentOutput);
161
+ if (jsonTasks && jsonTasks.length > 0) {
162
+ return { tasks: jsonTasks, raw: agentOutput };
163
+ }
164
+ // Try markdown headers
165
+ const mdTasks = parseMarkdown(agentOutput);
166
+ if (mdTasks.length > 0) {
167
+ return { tasks: mdTasks, raw: agentOutput };
168
+ }
169
+ // Try markdown table
170
+ const tableTasks = parseTable(agentOutput);
171
+ if (tableTasks.length > 0) {
172
+ return { tasks: tableTasks, raw: agentOutput };
173
+ }
174
+ // Retry with box-drawing characters normalized to ASCII
175
+ const normalized = normalizeBoxDrawing(agentOutput);
176
+ const normalizedTable = parseTable(normalized);
177
+ if (normalizedTable.length > 0) {
178
+ return { tasks: normalizedTable, raw: agentOutput };
179
+ }
180
+ return { tasks: [], raw: agentOutput };
181
+ }
182
+ //# sourceMappingURL=plan-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-parser.js","sourceRoot":"","sources":["../../src/planner/plan-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function getFilteredFileTree(dir: string, prefix?: string, maxDepth?: number, currentDepth?: number): string[];
2
+ export declare function getManifestContents(repoPath: string): string | null;
3
+ export declare function getRecentCommits(repoPath: string, count?: number): string;
4
+ export declare function buildPlannerPrompt(repo: string, goal: string, repoPath: string, chatHistory: Array<{
5
+ role: string;
6
+ content: string;
7
+ }>): string;
8
+ export declare function invokePlanner(sessionId: string, repo: string, goal: string, repoPath: string, onOutput?: (chunk: string) => void): Promise<string>;
9
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/planner/planner.ts"],"names":[],"mappings":"AA+BA,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAW,EACnB,QAAQ,GAAE,MAAU,EACpB,YAAY,GAAE,MAAU,GACvB,MAAM,EAAE,CAmCV;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYnE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAU7E;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,MAAM,CA+CR;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -0,0 +1,151 @@
1
+ import { execFileSync } from "child_process";
2
+ import { readdirSync, readFileSync, statSync, existsSync } from "fs";
3
+ import { join } from "path";
4
+ import { resolveAdapter } from "../adapters/adapter.js";
5
+ import { loadConfig } from "../config/loader.js";
6
+ import { getMessages } from "../session/manager.js";
7
+ const IGNORED_DIRS = new Set([
8
+ "node_modules",
9
+ ".git",
10
+ "dist",
11
+ "build",
12
+ ".next",
13
+ "target",
14
+ "vendor",
15
+ "__pycache__",
16
+ ".cache",
17
+ "coverage",
18
+ ]);
19
+ const MANIFEST_FILES = [
20
+ "package.json",
21
+ "Cargo.toml",
22
+ "pyproject.toml",
23
+ "go.mod",
24
+ "pom.xml",
25
+ "build.gradle",
26
+ "Gemfile",
27
+ "composer.json",
28
+ ];
29
+ export function getFilteredFileTree(dir, prefix = "", maxDepth = 4, currentDepth = 0) {
30
+ if (currentDepth >= maxDepth)
31
+ return [];
32
+ const lines = [];
33
+ let entries;
34
+ try {
35
+ entries = readdirSync(dir);
36
+ }
37
+ catch {
38
+ return [];
39
+ }
40
+ for (const entry of entries.sort()) {
41
+ if (entry.startsWith(".") && entry !== ".env.example")
42
+ continue;
43
+ if (IGNORED_DIRS.has(entry))
44
+ continue;
45
+ const fullPath = join(dir, entry);
46
+ let stat;
47
+ try {
48
+ stat = statSync(fullPath);
49
+ }
50
+ catch {
51
+ continue;
52
+ }
53
+ if (stat.isDirectory()) {
54
+ lines.push(`${prefix}${entry}/`);
55
+ lines.push(...getFilteredFileTree(fullPath, `${prefix} `, maxDepth, currentDepth + 1));
56
+ }
57
+ else {
58
+ lines.push(`${prefix}${entry}`);
59
+ }
60
+ }
61
+ return lines;
62
+ }
63
+ export function getManifestContents(repoPath) {
64
+ for (const manifest of MANIFEST_FILES) {
65
+ const filePath = join(repoPath, manifest);
66
+ if (existsSync(filePath)) {
67
+ try {
68
+ return readFileSync(filePath, "utf-8");
69
+ }
70
+ catch {
71
+ continue;
72
+ }
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ export function getRecentCommits(repoPath, count = 20) {
78
+ try {
79
+ return execFileSync("git", ["log", "--oneline", `-${count}`], {
80
+ cwd: repoPath,
81
+ encoding: "utf-8",
82
+ timeout: 5000,
83
+ }).trim();
84
+ }
85
+ catch {
86
+ return "(no commits available)";
87
+ }
88
+ }
89
+ export function buildPlannerPrompt(repo, goal, repoPath, chatHistory) {
90
+ const fileTree = getFilteredFileTree(repoPath).join("\n");
91
+ const manifest = getManifestContents(repoPath) ?? "(not found)";
92
+ const commits = getRecentCommits(repoPath);
93
+ const historyText = chatHistory
94
+ .map((m) => `[${m.role}] ${m.content}`)
95
+ .join("\n\n");
96
+ return `You are a senior software architect helping plan a coding task.
97
+ Be concise and direct. You're in a conversation with the user.
98
+
99
+ ## Repository
100
+ - Name: ${repo}
101
+ - File tree:
102
+ ${fileTree}
103
+
104
+ - Package manifest:
105
+ ${manifest}
106
+
107
+ - Recent commits:
108
+ ${commits}
109
+
110
+ ## User's Goal
111
+ ${goal}
112
+
113
+ ## Conversation So Far
114
+ ${historyText}
115
+
116
+ When the user seems happy with the direction, propose a task breakdown.
117
+ Output the tasks as a JSON code block with this exact schema:
118
+
119
+ \`\`\`json
120
+ [
121
+ {
122
+ "id": "1",
123
+ "title": "Short task title",
124
+ "description": "What to do",
125
+ "files_likely_touched": ["path/to/file.py"],
126
+ "depends_on": [],
127
+ "acceptance_criteria": ["criterion 1"]
128
+ }
129
+ ]
130
+ \`\`\`
131
+
132
+ Tell the user to type @build when ready.
133
+ Do NOT generate code. Only plan.`;
134
+ }
135
+ export async function invokePlanner(sessionId, repo, goal, repoPath, onOutput) {
136
+ const config = loadConfig();
137
+ const adapter = resolveAdapter(config.roles.planner, config);
138
+ const chatHistory = getMessages(sessionId).map((m) => ({
139
+ role: m.role,
140
+ content: m.content,
141
+ }));
142
+ const prompt = buildPlannerPrompt(repo, goal, repoPath, chatHistory);
143
+ const result = await adapter.execute({
144
+ prompt,
145
+ cwd: repoPath,
146
+ timeout: 0,
147
+ onOutput,
148
+ });
149
+ return result.output;
150
+ }
151
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/planner/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function parseReplInput(input: string): {
2
+ command: string;
3
+ args: string[];
4
+ };
5
+ /** readline-style completer (kept for tests & potential reuse). */
6
+ export declare function completer(line: string): [string[], string];
7
+ /** Return completions for the live autocomplete dropdown. */
8
+ export declare function getCompletions(line: string): string[];
9
+ export interface ReplOptions {
10
+ /** Pre-activate a session on startup (used by CLI create/enter). */
11
+ initialSession?: {
12
+ id: string;
13
+ repo: string;
14
+ goal: string;
15
+ repoLocalPath: string;
16
+ };
17
+ }
18
+ export declare function runRepl(opts?: ReplOptions): Promise<void>;
19
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/repl/repl.ts"],"names":[],"mappings":"AAqDA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAQA;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CA6B1D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BrD;AAsUD,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,cAAc,CAAC,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,wBAAsB,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G/D"}