@creativeintelligence/abbie 0.1.6 → 0.1.8

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 (141) hide show
  1. package/bin/dev.js +1 -49
  2. package/bin/run.js +42 -49
  3. package/dist/cli/commands/project/add.d.ts +0 -1
  4. package/dist/cli/commands/project/add.js +16 -52
  5. package/dist/cli/commands/project/list.js +13 -93
  6. package/dist/cli/commands/project/remove.d.ts +0 -2
  7. package/dist/cli/commands/project/remove.js +11 -28
  8. package/dist/cli/commands/session/list.js +3 -12
  9. package/dist/cli/commands/session/mark-done.js +1 -7
  10. package/dist/cli/commands/session/start.d.ts +0 -1
  11. package/dist/cli/commands/session/start.js +5 -7
  12. package/dist/lib/active-sessions.d.ts +0 -12
  13. package/dist/lib/active-sessions.js +6 -175
  14. package/dist/lib/project-path.d.ts +6 -0
  15. package/dist/lib/project-path.js +21 -0
  16. package/dist/lib.d.ts +1 -2
  17. package/dist/lib.js +2 -4
  18. package/oclif.manifest.json +2569 -6368
  19. package/package.json +21 -10
  20. package/dist/cli/commands/backlog/add.d.ts +0 -22
  21. package/dist/cli/commands/backlog/add.js +0 -65
  22. package/dist/cli/commands/backlog/claim.d.ts +0 -19
  23. package/dist/cli/commands/backlog/claim.js +0 -45
  24. package/dist/cli/commands/backlog/complete.d.ts +0 -18
  25. package/dist/cli/commands/backlog/complete.js +0 -42
  26. package/dist/cli/commands/backlog/list.d.ts +0 -20
  27. package/dist/cli/commands/backlog/list.js +0 -91
  28. package/dist/cli/commands/backlog/pick.d.ts +0 -18
  29. package/dist/cli/commands/backlog/pick.js +0 -42
  30. package/dist/cli/commands/backlog/sync.d.ts +0 -24
  31. package/dist/cli/commands/backlog/sync.js +0 -109
  32. package/dist/cli/commands/daemon.d.ts +0 -56
  33. package/dist/cli/commands/daemon.js +0 -1465
  34. package/dist/cli/commands/docs/lint.d.ts +0 -18
  35. package/dist/cli/commands/docs/lint.js +0 -82
  36. package/dist/cli/commands/docs/sync.d.ts +0 -19
  37. package/dist/cli/commands/docs/sync.js +0 -76
  38. package/dist/cli/commands/gc.d.ts +0 -29
  39. package/dist/cli/commands/gc.js +0 -211
  40. package/dist/cli/commands/index.d.ts +0 -36
  41. package/dist/cli/commands/index.js +0 -228
  42. package/dist/cli/commands/panes/broker.d.ts +0 -17
  43. package/dist/cli/commands/panes/broker.js +0 -57
  44. package/dist/cli/commands/panes/pipe-sink.d.ts +0 -17
  45. package/dist/cli/commands/panes/pipe-sink.js +0 -90
  46. package/dist/cli/commands/panes/snapshot.d.ts +0 -20
  47. package/dist/cli/commands/panes/snapshot.js +0 -125
  48. package/dist/cli/commands/preview/init.d.ts +0 -25
  49. package/dist/cli/commands/preview/init.js +0 -159
  50. package/dist/cli/commands/preview/sync.d.ts +0 -23
  51. package/dist/cli/commands/preview/sync.js +0 -144
  52. package/dist/cli/commands/preview/watch.d.ts +0 -24
  53. package/dist/cli/commands/preview/watch.js +0 -153
  54. package/dist/cli/commands/resource/acquire.d.ts +0 -21
  55. package/dist/cli/commands/resource/acquire.js +0 -90
  56. package/dist/cli/commands/resource/list.d.ts +0 -15
  57. package/dist/cli/commands/resource/list.js +0 -61
  58. package/dist/cli/commands/resource/release.d.ts +0 -18
  59. package/dist/cli/commands/resource/release.js +0 -50
  60. package/dist/cli/commands/resource/wait.d.ts +0 -21
  61. package/dist/cli/commands/resource/wait.js +0 -73
  62. package/dist/cli/commands/session/view.d.ts +0 -24
  63. package/dist/cli/commands/session/view.js +0 -145
  64. package/dist/cli/commands/start.d.ts +0 -37
  65. package/dist/cli/commands/start.js +0 -234
  66. package/dist/cli/commands/triage/claim.d.ts +0 -23
  67. package/dist/cli/commands/triage/claim.js +0 -186
  68. package/dist/cli/commands/triage/list.d.ts +0 -22
  69. package/dist/cli/commands/triage/list.js +0 -112
  70. package/dist/cli/commands/triage/next.d.ts +0 -18
  71. package/dist/cli/commands/triage/next.js +0 -63
  72. package/dist/cli/commands/triage/pull.d.ts +0 -19
  73. package/dist/cli/commands/triage/pull.js +0 -82
  74. package/dist/cli/commands/triage/stats.d.ts +0 -16
  75. package/dist/cli/commands/triage/stats.js +0 -69
  76. package/dist/cli/commands/tunnel/list.d.ts +0 -16
  77. package/dist/cli/commands/tunnel/list.js +0 -98
  78. package/dist/cli/commands/tunnel/start.d.ts +0 -24
  79. package/dist/cli/commands/tunnel/start.js +0 -107
  80. package/dist/cli/commands/tunnel/stop.d.ts +0 -20
  81. package/dist/cli/commands/tunnel/stop.js +0 -90
  82. package/dist/cli/commands/tunnel/url.d.ts +0 -21
  83. package/dist/cli/commands/tunnel/url.js +0 -70
  84. package/dist/cli/commands/windows/context.d.ts +0 -18
  85. package/dist/cli/commands/windows/context.js +0 -326
  86. package/dist/cli/commands/windows/focus.d.ts +0 -17
  87. package/dist/cli/commands/windows/focus.js +0 -103
  88. package/dist/cli/commands/windows/list.d.ts +0 -21
  89. package/dist/cli/commands/windows/list.js +0 -172
  90. package/dist/cli/commands/windows/map.d.ts +0 -17
  91. package/dist/cli/commands/windows/map.js +0 -168
  92. package/dist/cli/commands/windows/read.d.ts +0 -21
  93. package/dist/cli/commands/windows/read.js +0 -241
  94. package/dist/cli/commands/windows/search.d.ts +0 -24
  95. package/dist/cli/commands/windows/search.js +0 -171
  96. package/dist/cli/commands/windows/show.d.ts +0 -19
  97. package/dist/cli/commands/windows/show.js +0 -165
  98. package/dist/cli/commands/windows/watch.d.ts +0 -19
  99. package/dist/cli/commands/windows/watch.js +0 -241
  100. package/dist/lib/managed-session.d.ts +0 -27
  101. package/dist/lib/managed-session.js +0 -105
  102. package/dist/lib/panes/broker.d.ts +0 -130
  103. package/dist/lib/panes/broker.js +0 -97
  104. package/dist/lib/panes/index.d.ts +0 -2
  105. package/dist/lib/panes/index.js +0 -1
  106. package/dist/lib/panes/server.d.ts +0 -17
  107. package/dist/lib/panes/server.js +0 -308
  108. package/dist/lib/preview/manager.d.ts +0 -77
  109. package/dist/lib/preview/manager.js +0 -369
  110. package/dist/lib/preview/schema.d.ts +0 -2
  111. package/dist/lib/preview/schema.js +0 -32
  112. package/dist/lib/preview/sprite.d.ts +0 -85
  113. package/dist/lib/preview/sprite.js +0 -321
  114. package/dist/lib/preview/watcher.d.ts +0 -63
  115. package/dist/lib/preview/watcher.js +0 -185
  116. package/dist/lib/project-identity.d.ts +0 -16
  117. package/dist/lib/project-identity.js +0 -75
  118. package/dist/lib/tmux/bridge.d.ts +0 -133
  119. package/dist/lib/tmux/bridge.js +0 -315
  120. package/dist/lib/tmux/context.d.ts +0 -82
  121. package/dist/lib/tmux/context.js +0 -239
  122. package/dist/lib/tmux/index.d.ts +0 -8
  123. package/dist/lib/tmux/index.js +0 -11
  124. package/dist/lib/tmux/map.d.ts +0 -57
  125. package/dist/lib/tmux/map.js +0 -198
  126. package/dist/lib/tmux/panes.d.ts +0 -27
  127. package/dist/lib/tmux/panes.js +0 -151
  128. package/dist/lib/tmux/redaction.d.ts +0 -57
  129. package/dist/lib/tmux/redaction.js +0 -152
  130. package/dist/lib/web/analytics.d.ts +0 -63
  131. package/dist/lib/web/analytics.js +0 -168
  132. package/dist/lib/web/server.d.ts +0 -26
  133. package/dist/lib/web/server.js +0 -697
  134. package/dist/lib/web/tmux-bridge.d.ts +0 -7
  135. package/dist/lib/web/tmux-bridge.js +0 -7
  136. package/dist/lib/windows/index.d.ts +0 -3
  137. package/dist/lib/windows/index.js +0 -2
  138. package/dist/lib/windows/inventory.d.ts +0 -21
  139. package/dist/lib/windows/inventory.js +0 -263
  140. package/dist/lib/windows/types.d.ts +0 -46
  141. package/dist/lib/windows/types.js +0 -1
@@ -1,369 +0,0 @@
1
- import { Database } from "bun:sqlite";
2
- import { existsSync, mkdirSync } from "node:fs";
3
- import { homedir } from "node:os";
4
- import { join } from "node:path";
5
- import { PREVIEW_SCHEMA } from "./schema.js";
6
- function resolveHomeDir() {
7
- return process.env.HOME || homedir();
8
- }
9
- function getDataDir(homeDir = resolveHomeDir()) {
10
- return join(homeDir, ".abbie", "data");
11
- }
12
- function ensureDir(path) {
13
- if (!existsSync(path)) {
14
- mkdirSync(path, { recursive: true });
15
- }
16
- }
17
- export class PreviewManager {
18
- dataDir;
19
- dbPath;
20
- constructor(options) {
21
- this.dataDir = options?.dataDir ?? getDataDir();
22
- this.dbPath = join(this.dataDir, "previews.db");
23
- ensureDir(this.dataDir);
24
- }
25
- openDb() {
26
- ensureDir(this.dataDir);
27
- const db = new Database(this.dbPath);
28
- // Concurrency-safe settings for multi-process writes.
29
- db.exec("PRAGMA journal_mode = WAL;");
30
- db.exec("PRAGMA synchronous = NORMAL;");
31
- db.exec("PRAGMA busy_timeout = 5000;");
32
- this.ensureSchema(db);
33
- return db;
34
- }
35
- ensureSchema(db) {
36
- const shouldClose = !db;
37
- const database = db ?? this.openDb();
38
- try {
39
- database.exec(PREVIEW_SCHEMA);
40
- }
41
- finally {
42
- if (shouldClose) {
43
- database.close();
44
- }
45
- }
46
- }
47
- rowToSprite(row) {
48
- return {
49
- id: Number(row.id),
50
- project_name: String(row.project_name),
51
- project_path: String(row.project_path),
52
- sprite_name: String(row.sprite_name),
53
- sprite_url: row.sprite_url === null || row.sprite_url === undefined ? null : String(row.sprite_url),
54
- doppler_project: row.doppler_project === null || row.doppler_project === undefined
55
- ? null
56
- : String(row.doppler_project),
57
- dev_command: String(row.dev_command ?? "bun run dev"),
58
- port: Number(row.port ?? 8080),
59
- created_at: String(row.created_at ?? ""),
60
- updated_at: String(row.updated_at ?? ""),
61
- };
62
- }
63
- rowToDeployment(row) {
64
- return {
65
- id: Number(row.id),
66
- sprite_id: Number(row.sprite_id),
67
- status: String(row.status ?? "pending"),
68
- preview_url: row.preview_url === null || row.preview_url === undefined ? null : String(row.preview_url),
69
- screenshot_path: row.screenshot_path === null || row.screenshot_path === undefined
70
- ? null
71
- : String(row.screenshot_path),
72
- started_at: String(row.started_at ?? ""),
73
- stopped_at: row.stopped_at === null || row.stopped_at === undefined ? null : String(row.stopped_at),
74
- error: row.error === null || row.error === undefined ? null : String(row.error),
75
- sync_duration_ms: row.sync_duration_ms === null || row.sync_duration_ms === undefined
76
- ? null
77
- : Number(row.sync_duration_ms),
78
- install_duration_ms: row.install_duration_ms === null || row.install_duration_ms === undefined
79
- ? null
80
- : Number(row.install_duration_ms),
81
- start_duration_ms: row.start_duration_ms === null || row.start_duration_ms === undefined
82
- ? null
83
- : Number(row.start_duration_ms),
84
- };
85
- }
86
- registerSprite(projectName, projectPath, spriteName, options) {
87
- const db = this.openDb();
88
- try {
89
- db.exec("BEGIN IMMEDIATE;");
90
- try {
91
- // Upsert: insert or update on conflict
92
- db.query(`INSERT INTO sprites (project_name, project_path, sprite_name, sprite_url, doppler_project, dev_command, port)
93
- VALUES (?, ?, ?, ?, ?, ?, ?)
94
- ON CONFLICT(project_name) DO UPDATE SET
95
- project_path = excluded.project_path,
96
- sprite_name = excluded.sprite_name,
97
- sprite_url = excluded.sprite_url,
98
- doppler_project = excluded.doppler_project,
99
- dev_command = excluded.dev_command,
100
- port = excluded.port,
101
- updated_at = datetime('now')`).run(projectName, projectPath, spriteName, options?.spriteUrl ?? null, options?.dopplerProject ?? null, options?.devCommand ?? "bun run dev", options?.port ?? 8080);
102
- db.exec("COMMIT;");
103
- }
104
- catch (err) {
105
- db.exec("ROLLBACK;");
106
- throw err;
107
- }
108
- const row = db.query("SELECT * FROM sprites WHERE project_name = ?").get(projectName);
109
- if (!row) {
110
- throw new Error(`Failed to register sprite for ${projectName}`);
111
- }
112
- return this.rowToSprite(row);
113
- }
114
- finally {
115
- db.close();
116
- }
117
- }
118
- getSprite(projectName) {
119
- const db = this.openDb();
120
- try {
121
- const row = db.query("SELECT * FROM sprites WHERE project_name = ?").get(projectName);
122
- if (!row)
123
- return null;
124
- return this.rowToSprite(row);
125
- }
126
- finally {
127
- db.close();
128
- }
129
- }
130
- getSpriteById(id) {
131
- const db = this.openDb();
132
- try {
133
- const row = db.query("SELECT * FROM sprites WHERE id = ?").get(id);
134
- if (!row)
135
- return null;
136
- return this.rowToSprite(row);
137
- }
138
- finally {
139
- db.close();
140
- }
141
- }
142
- listSprites() {
143
- const db = this.openDb();
144
- try {
145
- const rows = db.query("SELECT * FROM sprites ORDER BY project_name ASC").all();
146
- return rows.map((r) => this.rowToSprite(r));
147
- }
148
- finally {
149
- db.close();
150
- }
151
- }
152
- updateSprite(projectName, updates) {
153
- const db = this.openDb();
154
- try {
155
- const setClauses = [];
156
- const params = [];
157
- if (updates.devCommand !== undefined) {
158
- setClauses.push("dev_command = ?");
159
- params.push(updates.devCommand);
160
- }
161
- if (updates.dopplerProject !== undefined) {
162
- setClauses.push("doppler_project = ?");
163
- params.push(updates.dopplerProject);
164
- }
165
- if (updates.port !== undefined) {
166
- setClauses.push("port = ?");
167
- params.push(updates.port);
168
- }
169
- if (setClauses.length === 0)
170
- return this.getSprite(projectName);
171
- setClauses.push("updated_at = datetime('now')");
172
- params.push(projectName);
173
- db.query(`UPDATE sprites SET ${setClauses.join(", ")} WHERE project_name = ?`).run(...params);
174
- const row = db.query("SELECT * FROM sprites WHERE project_name = ?").get(projectName);
175
- return row ? this.rowToSprite(row) : null;
176
- }
177
- finally {
178
- db.close();
179
- }
180
- }
181
- deleteSprite(projectName) {
182
- const db = this.openDb();
183
- try {
184
- db.exec("BEGIN IMMEDIATE;");
185
- try {
186
- // Get sprite ID first
187
- const sprite = db.query("SELECT id FROM sprites WHERE project_name = ?").get(projectName);
188
- if (!sprite) {
189
- db.exec("ROLLBACK;");
190
- return false;
191
- }
192
- // Delete associated deployments first
193
- db.query("DELETE FROM deployments WHERE sprite_id = ?").run(Number(sprite.id));
194
- // Delete the sprite
195
- db.query("DELETE FROM sprites WHERE project_name = ?").run(projectName);
196
- db.exec("COMMIT;");
197
- return true;
198
- }
199
- catch (err) {
200
- db.exec("ROLLBACK;");
201
- throw err;
202
- }
203
- }
204
- finally {
205
- db.close();
206
- }
207
- }
208
- recordDeployment(spriteId, status, options) {
209
- const db = this.openDb();
210
- try {
211
- db.exec("BEGIN IMMEDIATE;");
212
- try {
213
- db.query(`INSERT INTO deployments (sprite_id, status, preview_url, screenshot_path, error, sync_duration_ms, install_duration_ms, start_duration_ms)
214
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(spriteId, status, options?.previewUrl ?? null, options?.screenshotPath ?? null, options?.error ?? null, options?.syncDurationMs ?? null, options?.installDurationMs ?? null, options?.startDurationMs ?? null);
215
- db.exec("COMMIT;");
216
- }
217
- catch (err) {
218
- db.exec("ROLLBACK;");
219
- throw err;
220
- }
221
- // Get the last inserted deployment
222
- const row = db
223
- .query("SELECT * FROM deployments WHERE sprite_id = ? ORDER BY id DESC LIMIT 1")
224
- .get(spriteId);
225
- if (!row) {
226
- throw new Error(`Failed to record deployment for sprite ${spriteId}`);
227
- }
228
- return this.rowToDeployment(row);
229
- }
230
- finally {
231
- db.close();
232
- }
233
- }
234
- updateDeployment(id, updates) {
235
- const db = this.openDb();
236
- try {
237
- db.exec("BEGIN IMMEDIATE;");
238
- try {
239
- const existing = db.query("SELECT * FROM deployments WHERE id = ?").get(id);
240
- if (!existing) {
241
- db.exec("ROLLBACK;");
242
- return null;
243
- }
244
- const setClauses = [];
245
- const params = [];
246
- if (updates.status !== undefined) {
247
- setClauses.push("status = ?");
248
- params.push(updates.status);
249
- }
250
- if (updates.previewUrl !== undefined) {
251
- setClauses.push("preview_url = ?");
252
- params.push(updates.previewUrl);
253
- }
254
- if (updates.screenshotPath !== undefined) {
255
- setClauses.push("screenshot_path = ?");
256
- params.push(updates.screenshotPath);
257
- }
258
- if (updates.stoppedAt !== undefined) {
259
- setClauses.push("stopped_at = ?");
260
- params.push(updates.stoppedAt);
261
- }
262
- if (updates.error !== undefined) {
263
- setClauses.push("error = ?");
264
- params.push(updates.error);
265
- }
266
- if (updates.syncDurationMs !== undefined) {
267
- setClauses.push("sync_duration_ms = ?");
268
- params.push(updates.syncDurationMs);
269
- }
270
- if (updates.installDurationMs !== undefined) {
271
- setClauses.push("install_duration_ms = ?");
272
- params.push(updates.installDurationMs);
273
- }
274
- if (updates.startDurationMs !== undefined) {
275
- setClauses.push("start_duration_ms = ?");
276
- params.push(updates.startDurationMs);
277
- }
278
- if (setClauses.length > 0) {
279
- params.push(id);
280
- db.query(`UPDATE deployments SET ${setClauses.join(", ")} WHERE id = ?`).run(...params);
281
- }
282
- db.exec("COMMIT;");
283
- }
284
- catch (err) {
285
- db.exec("ROLLBACK;");
286
- throw err;
287
- }
288
- const row = db.query("SELECT * FROM deployments WHERE id = ?").get(id);
289
- return row ? this.rowToDeployment(row) : null;
290
- }
291
- finally {
292
- db.close();
293
- }
294
- }
295
- getDeployment(id) {
296
- const db = this.openDb();
297
- try {
298
- const row = db.query("SELECT * FROM deployments WHERE id = ?").get(id);
299
- if (!row)
300
- return null;
301
- return this.rowToDeployment(row);
302
- }
303
- finally {
304
- db.close();
305
- }
306
- }
307
- getLatestDeployment(spriteId) {
308
- const db = this.openDb();
309
- try {
310
- const row = db
311
- .query("SELECT * FROM deployments WHERE sprite_id = ? ORDER BY started_at DESC LIMIT 1")
312
- .get(spriteId);
313
- if (!row)
314
- return null;
315
- return this.rowToDeployment(row);
316
- }
317
- finally {
318
- db.close();
319
- }
320
- }
321
- listDeployments(spriteId, limit) {
322
- const db = this.openDb();
323
- try {
324
- let sql = "SELECT * FROM deployments WHERE sprite_id = ? ORDER BY started_at DESC";
325
- const params = [spriteId];
326
- if (limit && limit > 0) {
327
- sql += " LIMIT ?";
328
- params.push(limit);
329
- }
330
- const rows = db.query(sql).all(...params);
331
- return rows.map((r) => this.rowToDeployment(r));
332
- }
333
- finally {
334
- db.close();
335
- }
336
- }
337
- getActiveDeployments() {
338
- const db = this.openDb();
339
- try {
340
- const rows = db
341
- .query(`SELECT d.*, s.project_name, s.project_path, s.sprite_name, s.sprite_url, s.doppler_project, s.dev_command, s.port, s.created_at as sprite_created_at, s.updated_at as sprite_updated_at
342
- FROM deployments d
343
- JOIN sprites s ON d.sprite_id = s.id
344
- WHERE d.status IN ('pending', 'syncing', 'installing', 'starting', 'running')
345
- ORDER BY d.started_at DESC`)
346
- .all();
347
- return rows.map((r) => ({
348
- ...this.rowToDeployment(r),
349
- sprite: {
350
- id: Number(r.sprite_id),
351
- project_name: String(r.project_name),
352
- project_path: String(r.project_path),
353
- sprite_name: String(r.sprite_name),
354
- sprite_url: r.sprite_url === null || r.sprite_url === undefined ? null : String(r.sprite_url),
355
- doppler_project: r.doppler_project === null || r.doppler_project === undefined
356
- ? null
357
- : String(r.doppler_project),
358
- dev_command: String(r.dev_command ?? "bun run dev"),
359
- port: Number(r.port ?? 8080),
360
- created_at: String(r.sprite_created_at ?? ""),
361
- updated_at: String(r.sprite_updated_at ?? ""),
362
- },
363
- }));
364
- }
365
- finally {
366
- db.close();
367
- }
368
- }
369
- }
@@ -1,2 +0,0 @@
1
- export declare const PREVIEW_SCHEMA = "\nCREATE TABLE IF NOT EXISTS sprites (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_name TEXT UNIQUE NOT NULL,\n project_path TEXT NOT NULL,\n sprite_name TEXT NOT NULL,\n sprite_url TEXT,\n doppler_project TEXT,\n dev_command TEXT DEFAULT 'bun run dev',\n port INTEGER DEFAULT 8080,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS deployments (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n sprite_id INTEGER REFERENCES sprites(id),\n status TEXT NOT NULL,\n preview_url TEXT,\n screenshot_path TEXT,\n started_at TEXT DEFAULT (datetime('now')),\n stopped_at TEXT,\n error TEXT,\n sync_duration_ms INTEGER,\n install_duration_ms INTEGER,\n start_duration_ms INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS idx_sprites_project ON sprites(project_name);\nCREATE INDEX IF NOT EXISTS idx_deployments_sprite ON deployments(sprite_id);\nCREATE INDEX IF NOT EXISTS idx_deployments_status ON deployments(status);\n";
2
- //# sourceMappingURL=schema.d.ts.map
@@ -1,32 +0,0 @@
1
- export const PREVIEW_SCHEMA = `
2
- CREATE TABLE IF NOT EXISTS sprites (
3
- id INTEGER PRIMARY KEY AUTOINCREMENT,
4
- project_name TEXT UNIQUE NOT NULL,
5
- project_path TEXT NOT NULL,
6
- sprite_name TEXT NOT NULL,
7
- sprite_url TEXT,
8
- doppler_project TEXT,
9
- dev_command TEXT DEFAULT 'bun run dev',
10
- port INTEGER DEFAULT 8080,
11
- created_at TEXT DEFAULT (datetime('now')),
12
- updated_at TEXT DEFAULT (datetime('now'))
13
- );
14
-
15
- CREATE TABLE IF NOT EXISTS deployments (
16
- id INTEGER PRIMARY KEY AUTOINCREMENT,
17
- sprite_id INTEGER REFERENCES sprites(id),
18
- status TEXT NOT NULL,
19
- preview_url TEXT,
20
- screenshot_path TEXT,
21
- started_at TEXT DEFAULT (datetime('now')),
22
- stopped_at TEXT,
23
- error TEXT,
24
- sync_duration_ms INTEGER,
25
- install_duration_ms INTEGER,
26
- start_duration_ms INTEGER
27
- );
28
-
29
- CREATE INDEX IF NOT EXISTS idx_sprites_project ON sprites(project_name);
30
- CREATE INDEX IF NOT EXISTS idx_deployments_sprite ON deployments(sprite_id);
31
- CREATE INDEX IF NOT EXISTS idx_deployments_status ON deployments(status);
32
- `;
@@ -1,85 +0,0 @@
1
- export interface SpriteResult {
2
- success: boolean;
3
- stdout: string;
4
- stderr: string;
5
- error?: string;
6
- }
7
- /**
8
- * Run a sprite CLI command and return the result
9
- */
10
- export declare function runSprite(args: string[]): Promise<SpriteResult>;
11
- /**
12
- * Create a new sprite
13
- */
14
- export declare function createSprite(name: string): Promise<SpriteResult>;
15
- /**
16
- * Destroy a sprite
17
- */
18
- export declare function destroySprite(name: string): Promise<SpriteResult>;
19
- /**
20
- * Set sprite URL to public access
21
- */
22
- export declare function makeUrlPublic(spriteName: string): Promise<SpriteResult>;
23
- /**
24
- * Get sprite URL
25
- */
26
- export declare function getSpriteUrl(spriteName: string): Promise<string | null>;
27
- /**
28
- * Check if a sprite exists by listing all sprites
29
- */
30
- export declare function spriteExists(name: string): Promise<boolean>;
31
- /**
32
- * Execute a command on a sprite
33
- */
34
- export declare function execOnSprite(spriteName: string, command: string, options?: {
35
- dir?: string;
36
- env?: Record<string, string>;
37
- files?: Array<{
38
- local: string;
39
- remote: string;
40
- }>;
41
- }): Promise<SpriteResult>;
42
- /**
43
- * Create a tarball of a project excluding common build artifacts
44
- */
45
- /** Directories/files to exclude from tarball and watch (checked against full path and basename) */
46
- export declare const EXCLUDE_PATTERNS: string[];
47
- /** File extensions to exclude from tarball and watch (reduce size for large assets) */
48
- export declare const EXCLUDE_EXTENSIONS: string[];
49
- export declare function createProjectTarball(projectPath: string): Promise<string>;
50
- /**
51
- * Sync project files to sprite:
52
- * 1. Create tarball locally
53
- * 2. Upload via sprite exec -file
54
- * 3. Extract on remote
55
- */
56
- export declare function syncToSprite(spriteName: string, projectPath: string, remotePath?: string): Promise<{
57
- success: boolean;
58
- tarPath?: string;
59
- error?: string;
60
- syncDurationMs?: number;
61
- }>;
62
- /**
63
- * Check if a process is running on the sprite
64
- */
65
- export declare function isProcessRunning(spriteName: string, processPattern: string): Promise<boolean>;
66
- /**
67
- * Kill processes matching a pattern on the sprite
68
- * Note: Uses lsof to find PIDs since pkill is not allowed
69
- */
70
- export declare function killProcess(spriteName: string, processPattern: string): Promise<SpriteResult>;
71
- /**
72
- * Start a dev server on the sprite with health checking.
73
- *
74
- * Uses TTY session for proper PATH/environment on the sprite.
75
- * Pipes output to a local log file so the detached process persists
76
- * after the CLI exits. Polls the sprite URL until healthy (up to 90s).
77
- */
78
- export declare function startDevServer(spriteName: string, devCommand: string, options?: {
79
- dir?: string;
80
- env?: Record<string, string>;
81
- port?: number;
82
- healthCheckUrl?: string;
83
- healthCheckTimeoutMs?: number;
84
- }): Promise<SpriteResult>;
85
- //# sourceMappingURL=sprite.d.ts.map