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,226 @@
1
+ import chalk from "chalk";
2
+ import { createInterface } from "readline";
3
+ /**
4
+ * Interactive prompt with dropdown autocomplete and ghost-text.
5
+ *
6
+ * When completions are available, a dropdown list renders below the
7
+ * prompt line. The user can navigate with Up/Down arrows and accept
8
+ * with Tab. Ghost text (fish-shell style) also shows the highlighted
9
+ * match inline.
10
+ *
11
+ * - Tab Accept the highlighted suggestion
12
+ * - Up/Down Navigate the dropdown
13
+ * - Right arrow Accept one ghost character (fish-style)
14
+ * - Enter Submit the current input
15
+ * - Escape Dismiss the dropdown
16
+ * - Ctrl-C Exit
17
+ */
18
+ /** Sentinel value returned by promptLine when the user presses Escape to back out. */
19
+ export const ESCAPE_SIGNAL = "\x1b__ESCAPE__";
20
+ export function promptLine(opts) {
21
+ const { prompt, getCompletions } = opts;
22
+ return new Promise((resolve) => {
23
+ let input = "";
24
+ let cursor = 0;
25
+ let suggestions = [];
26
+ let selectedIndex = 0;
27
+ let dropdownRows = 0; // how many rows the dropdown currently occupies
28
+ // ── rendering ────────────────────────────────────────────────
29
+ function clearDropdown() {
30
+ if (dropdownRows > 0) {
31
+ // Move below the prompt line and clear each dropdown row
32
+ for (let i = 0; i < dropdownRows; i++) {
33
+ process.stdout.write("\n\x1b[2K");
34
+ }
35
+ // Move back up to the prompt line
36
+ process.stdout.write(`\x1b[${dropdownRows}A`);
37
+ dropdownRows = 0;
38
+ }
39
+ }
40
+ function render() {
41
+ // Clear previous dropdown first
42
+ clearDropdown();
43
+ // Clear the prompt line and redraw
44
+ process.stdout.write(`\r\x1b[2K${prompt}${input}`);
45
+ // Show ghost text for the selected match
46
+ const selected = suggestions[selectedIndex];
47
+ if (selected && selected.startsWith(input) && selected.length > input.length) {
48
+ const ghost = selected.slice(input.length);
49
+ process.stdout.write(chalk.dim(ghost));
50
+ }
51
+ // Draw dropdown below the prompt line
52
+ if (suggestions.length > 0) {
53
+ const maxVisible = Math.min(suggestions.length, 8);
54
+ for (let i = 0; i < maxVisible; i++) {
55
+ const item = suggestions[i];
56
+ if (i === selectedIndex) {
57
+ process.stdout.write("\n" + chalk.bgBlue.white(` ${item} `));
58
+ }
59
+ else {
60
+ process.stdout.write("\n " + chalk.dim(item) + " ");
61
+ }
62
+ }
63
+ if (suggestions.length > maxVisible) {
64
+ process.stdout.write("\n " + chalk.dim(`… ${suggestions.length - maxVisible} more`));
65
+ dropdownRows = maxVisible + 1;
66
+ }
67
+ else {
68
+ dropdownRows = maxVisible;
69
+ }
70
+ // Move cursor back up to the prompt line
71
+ process.stdout.write(`\x1b[${dropdownRows}A`);
72
+ }
73
+ // Park cursor at end of user's actual input (before ghost)
74
+ process.stdout.write(`\r\x1b[${prompt.length + cursor}C`);
75
+ }
76
+ function refreshSuggestions() {
77
+ suggestions = getCompletions(input);
78
+ selectedIndex = 0;
79
+ }
80
+ // ── lifecycle ───────────────────────────────────────────────
81
+ function finish(value) {
82
+ clearDropdown();
83
+ if (value === ESCAPE_SIGNAL) {
84
+ // Escape — clear the prompt line cleanly, no echo
85
+ process.stdout.write(`\r\x1b[2K`);
86
+ }
87
+ else {
88
+ process.stdout.write(`\r\x1b[2K${prompt}${value}\n`);
89
+ }
90
+ if (process.stdin.isTTY)
91
+ process.stdin.setRawMode(false);
92
+ process.stdin.pause();
93
+ process.stdin.removeListener("data", onData);
94
+ resolve(value);
95
+ }
96
+ // ── key handling ────────────────────────────────────────────
97
+ function acceptSuggestion() {
98
+ if (suggestions.length > 0) {
99
+ input = suggestions[selectedIndex] + " ";
100
+ cursor = input.length;
101
+ refreshSuggestions();
102
+ render();
103
+ }
104
+ }
105
+ function onData(raw) {
106
+ const seq = raw.toString("utf8");
107
+ // ── Enter: submit ──
108
+ if (seq === "\r" || seq === "\n") {
109
+ finish(input);
110
+ return;
111
+ }
112
+ // ── Ctrl-C / Ctrl-D ──
113
+ if (seq === "\x03" || seq === "\x04") {
114
+ finish("");
115
+ return;
116
+ }
117
+ // ── Tab: accept suggestion ──
118
+ if (seq === "\t") {
119
+ acceptSuggestion();
120
+ return;
121
+ }
122
+ // ── Right arrow ──
123
+ if (seq === "\x1b[C") {
124
+ if (cursor === input.length && suggestions.length > 0) {
125
+ // At end of input: accept one ghost character (fish-style)
126
+ const match = suggestions[selectedIndex];
127
+ if (match && match.length > input.length) {
128
+ input = match.slice(0, input.length + 1);
129
+ cursor = input.length;
130
+ refreshSuggestions();
131
+ render();
132
+ }
133
+ }
134
+ else if (cursor < input.length) {
135
+ cursor++;
136
+ render();
137
+ }
138
+ return;
139
+ }
140
+ // ── Left arrow ──
141
+ if (seq === "\x1b[D") {
142
+ if (cursor > 0) {
143
+ cursor--;
144
+ render();
145
+ }
146
+ return;
147
+ }
148
+ // ── Down arrow: move selection down ──
149
+ if (seq === "\x1b[B") {
150
+ if (suggestions.length > 0) {
151
+ selectedIndex = (selectedIndex + 1) % suggestions.length;
152
+ render();
153
+ }
154
+ return;
155
+ }
156
+ // ── Up arrow: move selection up ──
157
+ if (seq === "\x1b[A") {
158
+ if (suggestions.length > 0) {
159
+ selectedIndex =
160
+ (selectedIndex - 1 + suggestions.length) % suggestions.length;
161
+ render();
162
+ }
163
+ return;
164
+ }
165
+ // ── Escape: dismiss dropdown, or back out if nothing to dismiss ──
166
+ if (seq === "\x1b") {
167
+ if (suggestions.length > 0) {
168
+ // Dropdown is open — just dismiss it
169
+ suggestions = [];
170
+ selectedIndex = 0;
171
+ render();
172
+ }
173
+ else if (input === "") {
174
+ // Nothing typed, no dropdown — signal "back out"
175
+ finish(ESCAPE_SIGNAL);
176
+ }
177
+ else {
178
+ // Has typed text — clear the input first
179
+ input = "";
180
+ cursor = 0;
181
+ refreshSuggestions();
182
+ render();
183
+ }
184
+ return;
185
+ }
186
+ // ── Backspace ──
187
+ if (seq === "\x7f" || seq === "\b") {
188
+ if (cursor > 0) {
189
+ input = input.slice(0, cursor - 1) + input.slice(cursor);
190
+ cursor--;
191
+ refreshSuggestions();
192
+ render();
193
+ }
194
+ return;
195
+ }
196
+ // ── Ignore other escape / control sequences ──
197
+ if (seq.startsWith("\x1b") || seq.charCodeAt(0) < 32) {
198
+ return;
199
+ }
200
+ // ── Printable characters (including paste) ──
201
+ for (const ch of seq) {
202
+ input = input.slice(0, cursor) + ch + input.slice(cursor);
203
+ cursor++;
204
+ }
205
+ refreshSuggestions();
206
+ render();
207
+ }
208
+ // ── start ───────────────────────────────────────────────────
209
+ if (!process.stdin.isTTY) {
210
+ // Non-TTY mode (piped input): read line-by-line via readline
211
+ process.stdout.write(prompt);
212
+ const rl = createInterface({ input: process.stdin });
213
+ rl.once("line", (line) => {
214
+ rl.close();
215
+ resolve(line);
216
+ });
217
+ rl.once("close", () => resolve(""));
218
+ return;
219
+ }
220
+ process.stdin.setRawMode(true);
221
+ process.stdin.resume();
222
+ process.stdin.on("data", onData);
223
+ render();
224
+ });
225
+ }
226
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function relativeTime(date: Date): string;
2
+ export declare function formatDuration(start: Date, end: Date): string;
3
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAa/C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAQ7D"}
@@ -0,0 +1,29 @@
1
+ export function relativeTime(date) {
2
+ const now = Date.now();
3
+ const diffMs = now - date.getTime();
4
+ const diffSec = Math.floor(diffMs / 1000);
5
+ const diffMin = Math.floor(diffSec / 60);
6
+ const diffHr = Math.floor(diffMin / 60);
7
+ const diffDay = Math.floor(diffHr / 24);
8
+ if (diffSec < 60)
9
+ return "just now";
10
+ if (diffMin < 60)
11
+ return `${diffMin}m ago`;
12
+ if (diffHr < 24)
13
+ return `${diffHr}h ago`;
14
+ if (diffDay < 30)
15
+ return `${diffDay}d ago`;
16
+ return `${Math.floor(diffDay / 30)}mo ago`;
17
+ }
18
+ export function formatDuration(start, end) {
19
+ const diffMs = end.getTime() - start.getTime();
20
+ const diffSec = Math.floor(diffMs / 1000);
21
+ const diffMin = Math.floor(diffSec / 60);
22
+ const diffHr = Math.floor(diffMin / 60);
23
+ if (diffHr > 0)
24
+ return `${diffHr}h ${diffMin % 60}m`;
25
+ if (diffMin > 0)
26
+ return `${diffMin}m ${diffSec % 60}s`;
27
+ return `${diffSec}s`;
28
+ }
29
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAExC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,IAAI,MAAM,GAAG,EAAE;QAAE,OAAO,GAAG,MAAM,OAAO,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAW,EAAE,GAAS;IACnD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,MAAM,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACrD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACvD,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC"}
@@ -0,0 +1,56 @@
1
+ CREATE TABLE `iterations` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `session_id` text NOT NULL,
4
+ `iteration_number` integer NOT NULL,
5
+ `feedback` text NOT NULL,
6
+ `plan_delta` text,
7
+ `status` text NOT NULL,
8
+ `created_at` integer NOT NULL,
9
+ FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON UPDATE no action ON DELETE cascade
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE TABLE `messages` (
13
+ `id` text PRIMARY KEY NOT NULL,
14
+ `session_id` text NOT NULL,
15
+ `role` text NOT NULL,
16
+ `content` text NOT NULL,
17
+ `metadata` text,
18
+ `created_at` integer NOT NULL,
19
+ FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON UPDATE no action ON DELETE cascade
20
+ );
21
+ --> statement-breakpoint
22
+ CREATE TABLE `sessions` (
23
+ `id` text PRIMARY KEY NOT NULL,
24
+ `repo` text NOT NULL,
25
+ `repo_local_path` text,
26
+ `goal` text NOT NULL,
27
+ `status` text NOT NULL,
28
+ `plan_json` text,
29
+ `pr_url` text,
30
+ `pr_number` integer,
31
+ `working_branch` text,
32
+ `created_at` integer NOT NULL,
33
+ `updated_at` integer NOT NULL,
34
+ `stopped_at` integer
35
+ );
36
+ --> statement-breakpoint
37
+ CREATE TABLE `tasks` (
38
+ `id` text PRIMARY KEY NOT NULL,
39
+ `session_id` text NOT NULL,
40
+ `title` text NOT NULL,
41
+ `description` text NOT NULL,
42
+ `status` text NOT NULL,
43
+ `depends_on` text,
44
+ `files_likely_touched` text,
45
+ `acceptance_criteria` text,
46
+ `branch_name` text,
47
+ `review_verdict` text,
48
+ `review_issues` text,
49
+ `review_cycles` integer DEFAULT 0,
50
+ `diff_patch` text,
51
+ `agent_output` text,
52
+ `order` integer NOT NULL,
53
+ `created_at` integer NOT NULL,
54
+ `updated_at` integer NOT NULL,
55
+ FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON UPDATE no action ON DELETE cascade
56
+ );