runcastle 0.1.0 → 1.0.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 (74) hide show
  1. package/README.md +47 -0
  2. package/bin/runcastle.js +5580 -0
  3. package/drizzle/0000_amused_bruce_banner.sql +74 -0
  4. package/drizzle/0001_mapped_feature_flag.sql +1 -0
  5. package/drizzle/0002_waypoints.sql +14 -0
  6. package/drizzle/0003_project_closed_at.sql +1 -0
  7. package/drizzle/0004_events_project_id.sql +28 -0
  8. package/drizzle/0005_project_setting_overrides.sql +2 -0
  9. package/drizzle/meta/0000_snapshot.json +466 -0
  10. package/drizzle/meta/0001_snapshot.json +474 -0
  11. package/drizzle/meta/0002_snapshot.json +568 -0
  12. package/drizzle/meta/0003_snapshot.json +575 -0
  13. package/drizzle/meta/0004_snapshot.json +582 -0
  14. package/drizzle/meta/0005_snapshot.json +596 -0
  15. package/drizzle/meta/_journal.json +48 -0
  16. package/hook-client.ts +67 -0
  17. package/index.js +5424 -0
  18. package/package.json +24 -30
  19. package/pty-host.cjs +186 -0
  20. package/sandcastle-template/Containerfile +33 -0
  21. package/sandcastle-template/Dockerfile +33 -0
  22. package/skills/burner/implement-ticket.md +42 -0
  23. package/skills/burner/research-waypoint.md +45 -0
  24. package/skills/packs/README.md +50 -0
  25. package/skills/packs/runcastle/.claude-plugin/plugin.json +6 -0
  26. package/skills/packs/runcastle/skills/converge/SKILL.md +51 -0
  27. package/skills/packs/runcastle/skills/ideate/SKILL.md +81 -0
  28. package/skills/packs/runcastle/skills/qa/SKILL.md +30 -0
  29. package/skills/packs/runcastle/skills/spec/SKILL.md +43 -0
  30. package/skills/packs/runcastle/skills/tickets/SKILL.md +52 -0
  31. package/skills/packs/runcastle/skills/waypoint/SKILL.md +54 -0
  32. package/web/assets/index-CKZ5Z7vc.css +1 -0
  33. package/web/assets/index-YBuT7tTz.js +108 -0
  34. package/web/index.html +13 -0
  35. package/dist/add-PRGLHAVL.js +0 -298
  36. package/dist/add-PRGLHAVL.js.map +0 -1
  37. package/dist/chunk-44KDPUYJ.js +0 -49
  38. package/dist/chunk-44KDPUYJ.js.map +0 -1
  39. package/dist/chunk-5VPKMXSV.js +0 -190
  40. package/dist/chunk-5VPKMXSV.js.map +0 -1
  41. package/dist/chunk-6CWCR5SO.js +0 -24
  42. package/dist/chunk-6CWCR5SO.js.map +0 -1
  43. package/dist/chunk-AHRTPV2C.js +0 -1082
  44. package/dist/chunk-AHRTPV2C.js.map +0 -1
  45. package/dist/chunk-LP5MV76P.js +0 -33
  46. package/dist/chunk-LP5MV76P.js.map +0 -1
  47. package/dist/chunk-OJ356IMJ.js +0 -136
  48. package/dist/chunk-OJ356IMJ.js.map +0 -1
  49. package/dist/chunk-PRNBOQHW.js +0 -32
  50. package/dist/chunk-PRNBOQHW.js.map +0 -1
  51. package/dist/chunk-SNUH2UT6.js +0 -95
  52. package/dist/chunk-SNUH2UT6.js.map +0 -1
  53. package/dist/chunk-UCYVC3H6.js +0 -108
  54. package/dist/chunk-UCYVC3H6.js.map +0 -1
  55. package/dist/chunk-Y5P5BQWF.js +0 -136
  56. package/dist/chunk-Y5P5BQWF.js.map +0 -1
  57. package/dist/chunk-ZQ3BK4ZD.js +0 -134
  58. package/dist/chunk-ZQ3BK4ZD.js.map +0 -1
  59. package/dist/index.js +0 -94
  60. package/dist/index.js.map +0 -1
  61. package/dist/info-U6AZZ2TV.js +0 -78
  62. package/dist/info-U6AZZ2TV.js.map +0 -1
  63. package/dist/init-MOJNLWXK.js +0 -212
  64. package/dist/init-MOJNLWXK.js.map +0 -1
  65. package/dist/logout-YPGZ6BB6.js +0 -27
  66. package/dist/logout-YPGZ6BB6.js.map +0 -1
  67. package/dist/publish-W37Y6TO6.js +0 -211
  68. package/dist/publish-W37Y6TO6.js.map +0 -1
  69. package/dist/search-2KNAXPM5.js +0 -55
  70. package/dist/search-2KNAXPM5.js.map +0 -1
  71. package/dist/update-NIIUPL2E.js +0 -123
  72. package/dist/update-NIIUPL2E.js.map +0 -1
  73. package/dist/validate-GFDSEVPV.js +0 -12
  74. package/dist/validate-GFDSEVPV.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ CREATE TABLE `events` (
2
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
+ `feature_id` text NOT NULL,
4
+ `run_id` text,
5
+ `ticket_id` text,
6
+ `ts` integer NOT NULL,
7
+ `type` text NOT NULL,
8
+ `message` text NOT NULL,
9
+ `data` text
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE TABLE `features` (
13
+ `id` text PRIMARY KEY NOT NULL,
14
+ `project_id` text NOT NULL,
15
+ `slug` text NOT NULL,
16
+ `title` text NOT NULL,
17
+ `one_liner` text NOT NULL,
18
+ `size` text NOT NULL,
19
+ `phase` text NOT NULL,
20
+ `branch` text NOT NULL,
21
+ `status` text NOT NULL,
22
+ `created_at` integer NOT NULL
23
+ );
24
+ --> statement-breakpoint
25
+ CREATE TABLE `gate_overrides` (
26
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
27
+ `feature_id` text NOT NULL,
28
+ `gate` text NOT NULL,
29
+ `reason` text NOT NULL,
30
+ `ts` integer NOT NULL
31
+ );
32
+ --> statement-breakpoint
33
+ CREATE TABLE `projects` (
34
+ `id` text PRIMARY KEY NOT NULL,
35
+ `name` text NOT NULL,
36
+ `repo_path` text NOT NULL,
37
+ `main_branch` text NOT NULL,
38
+ `dev_command` text
39
+ );
40
+ --> statement-breakpoint
41
+ CREATE TABLE `runs` (
42
+ `id` text PRIMARY KEY NOT NULL,
43
+ `feature_id` text NOT NULL,
44
+ `workflow` text NOT NULL,
45
+ `status` text NOT NULL,
46
+ `started_at` integer NOT NULL,
47
+ `ended_at` integer,
48
+ `summary` text
49
+ );
50
+ --> statement-breakpoint
51
+ CREATE TABLE `sessions` (
52
+ `id` text PRIMARY KEY NOT NULL,
53
+ `feature_id` text NOT NULL,
54
+ `kind` text NOT NULL,
55
+ `cc_session_id` text,
56
+ `transcript_path` text,
57
+ `status` text NOT NULL,
58
+ `worktree_path` text NOT NULL
59
+ );
60
+ --> statement-breakpoint
61
+ CREATE TABLE `tickets` (
62
+ `id` text PRIMARY KEY NOT NULL,
63
+ `feature_id` text NOT NULL,
64
+ `seq` integer NOT NULL,
65
+ `title` text NOT NULL,
66
+ `goal` text NOT NULL,
67
+ `context` text NOT NULL,
68
+ `acceptance_criteria` text NOT NULL,
69
+ `seams` text NOT NULL,
70
+ `blocked_by` text NOT NULL,
71
+ `status` text NOT NULL,
72
+ `commits` text NOT NULL,
73
+ `error` text
74
+ );
@@ -0,0 +1 @@
1
+ ALTER TABLE `features` ADD `mapped` integer DEFAULT false NOT NULL;
@@ -0,0 +1,14 @@
1
+ CREATE TABLE `waypoints` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `feature_id` text NOT NULL,
4
+ `seq` integer NOT NULL,
5
+ `title` text NOT NULL,
6
+ `type` text NOT NULL,
7
+ `question` text NOT NULL,
8
+ `blocked_by` text NOT NULL,
9
+ `origin_waypoint_id` text,
10
+ `status` text NOT NULL,
11
+ `claimed_by` text,
12
+ `last_session_id` text,
13
+ `summary` text
14
+ );
@@ -0,0 +1 @@
1
+ ALTER TABLE `projects` ADD `closed_at` integer;
@@ -0,0 +1,28 @@
1
+ CREATE TABLE `__new_events` (
2
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
+ `project_id` text NOT NULL,
4
+ `feature_id` text,
5
+ `run_id` text,
6
+ `ticket_id` text,
7
+ `ts` integer NOT NULL,
8
+ `type` text NOT NULL,
9
+ `message` text NOT NULL,
10
+ `data` text
11
+ );
12
+ --> statement-breakpoint
13
+ INSERT INTO `__new_events` (`id`, `project_id`, `feature_id`, `run_id`, `ticket_id`, `ts`, `type`, `message`, `data`)
14
+ SELECT
15
+ `id`,
16
+ COALESCE((SELECT `project_id` FROM `features` WHERE `features`.`id` = `events`.`feature_id`), `feature_id`),
17
+ CASE WHEN `feature_id` IN (SELECT `id` FROM `features`) THEN `feature_id` ELSE NULL END,
18
+ `run_id`,
19
+ `ticket_id`,
20
+ `ts`,
21
+ `type`,
22
+ `message`,
23
+ `data`
24
+ FROM `events`;
25
+ --> statement-breakpoint
26
+ DROP TABLE `events`;
27
+ --> statement-breakpoint
28
+ ALTER TABLE `__new_events` RENAME TO `events`;
@@ -0,0 +1,2 @@
1
+ ALTER TABLE `projects` ADD `model` text;--> statement-breakpoint
2
+ ALTER TABLE `projects` ADD `sandbox` text;
@@ -0,0 +1,466 @@
1
+ {
2
+ "version": "6",
3
+ "dialect": "sqlite",
4
+ "id": "588e6d89-fa51-4682-874a-810f8eede731",
5
+ "prevId": "00000000-0000-0000-0000-000000000000",
6
+ "tables": {
7
+ "events": {
8
+ "name": "events",
9
+ "columns": {
10
+ "id": {
11
+ "name": "id",
12
+ "type": "integer",
13
+ "primaryKey": true,
14
+ "notNull": true,
15
+ "autoincrement": true
16
+ },
17
+ "feature_id": {
18
+ "name": "feature_id",
19
+ "type": "text",
20
+ "primaryKey": false,
21
+ "notNull": true,
22
+ "autoincrement": false
23
+ },
24
+ "run_id": {
25
+ "name": "run_id",
26
+ "type": "text",
27
+ "primaryKey": false,
28
+ "notNull": false,
29
+ "autoincrement": false
30
+ },
31
+ "ticket_id": {
32
+ "name": "ticket_id",
33
+ "type": "text",
34
+ "primaryKey": false,
35
+ "notNull": false,
36
+ "autoincrement": false
37
+ },
38
+ "ts": {
39
+ "name": "ts",
40
+ "type": "integer",
41
+ "primaryKey": false,
42
+ "notNull": true,
43
+ "autoincrement": false
44
+ },
45
+ "type": {
46
+ "name": "type",
47
+ "type": "text",
48
+ "primaryKey": false,
49
+ "notNull": true,
50
+ "autoincrement": false
51
+ },
52
+ "message": {
53
+ "name": "message",
54
+ "type": "text",
55
+ "primaryKey": false,
56
+ "notNull": true,
57
+ "autoincrement": false
58
+ },
59
+ "data": {
60
+ "name": "data",
61
+ "type": "text",
62
+ "primaryKey": false,
63
+ "notNull": false,
64
+ "autoincrement": false
65
+ }
66
+ },
67
+ "indexes": {},
68
+ "foreignKeys": {},
69
+ "compositePrimaryKeys": {},
70
+ "uniqueConstraints": {},
71
+ "checkConstraints": {}
72
+ },
73
+ "features": {
74
+ "name": "features",
75
+ "columns": {
76
+ "id": {
77
+ "name": "id",
78
+ "type": "text",
79
+ "primaryKey": true,
80
+ "notNull": true,
81
+ "autoincrement": false
82
+ },
83
+ "project_id": {
84
+ "name": "project_id",
85
+ "type": "text",
86
+ "primaryKey": false,
87
+ "notNull": true,
88
+ "autoincrement": false
89
+ },
90
+ "slug": {
91
+ "name": "slug",
92
+ "type": "text",
93
+ "primaryKey": false,
94
+ "notNull": true,
95
+ "autoincrement": false
96
+ },
97
+ "title": {
98
+ "name": "title",
99
+ "type": "text",
100
+ "primaryKey": false,
101
+ "notNull": true,
102
+ "autoincrement": false
103
+ },
104
+ "one_liner": {
105
+ "name": "one_liner",
106
+ "type": "text",
107
+ "primaryKey": false,
108
+ "notNull": true,
109
+ "autoincrement": false
110
+ },
111
+ "size": {
112
+ "name": "size",
113
+ "type": "text",
114
+ "primaryKey": false,
115
+ "notNull": true,
116
+ "autoincrement": false
117
+ },
118
+ "phase": {
119
+ "name": "phase",
120
+ "type": "text",
121
+ "primaryKey": false,
122
+ "notNull": true,
123
+ "autoincrement": false
124
+ },
125
+ "branch": {
126
+ "name": "branch",
127
+ "type": "text",
128
+ "primaryKey": false,
129
+ "notNull": true,
130
+ "autoincrement": false
131
+ },
132
+ "status": {
133
+ "name": "status",
134
+ "type": "text",
135
+ "primaryKey": false,
136
+ "notNull": true,
137
+ "autoincrement": false
138
+ },
139
+ "created_at": {
140
+ "name": "created_at",
141
+ "type": "integer",
142
+ "primaryKey": false,
143
+ "notNull": true,
144
+ "autoincrement": false
145
+ }
146
+ },
147
+ "indexes": {},
148
+ "foreignKeys": {},
149
+ "compositePrimaryKeys": {},
150
+ "uniqueConstraints": {},
151
+ "checkConstraints": {}
152
+ },
153
+ "gate_overrides": {
154
+ "name": "gate_overrides",
155
+ "columns": {
156
+ "id": {
157
+ "name": "id",
158
+ "type": "integer",
159
+ "primaryKey": true,
160
+ "notNull": true,
161
+ "autoincrement": true
162
+ },
163
+ "feature_id": {
164
+ "name": "feature_id",
165
+ "type": "text",
166
+ "primaryKey": false,
167
+ "notNull": true,
168
+ "autoincrement": false
169
+ },
170
+ "gate": {
171
+ "name": "gate",
172
+ "type": "text",
173
+ "primaryKey": false,
174
+ "notNull": true,
175
+ "autoincrement": false
176
+ },
177
+ "reason": {
178
+ "name": "reason",
179
+ "type": "text",
180
+ "primaryKey": false,
181
+ "notNull": true,
182
+ "autoincrement": false
183
+ },
184
+ "ts": {
185
+ "name": "ts",
186
+ "type": "integer",
187
+ "primaryKey": false,
188
+ "notNull": true,
189
+ "autoincrement": false
190
+ }
191
+ },
192
+ "indexes": {},
193
+ "foreignKeys": {},
194
+ "compositePrimaryKeys": {},
195
+ "uniqueConstraints": {},
196
+ "checkConstraints": {}
197
+ },
198
+ "projects": {
199
+ "name": "projects",
200
+ "columns": {
201
+ "id": {
202
+ "name": "id",
203
+ "type": "text",
204
+ "primaryKey": true,
205
+ "notNull": true,
206
+ "autoincrement": false
207
+ },
208
+ "name": {
209
+ "name": "name",
210
+ "type": "text",
211
+ "primaryKey": false,
212
+ "notNull": true,
213
+ "autoincrement": false
214
+ },
215
+ "repo_path": {
216
+ "name": "repo_path",
217
+ "type": "text",
218
+ "primaryKey": false,
219
+ "notNull": true,
220
+ "autoincrement": false
221
+ },
222
+ "main_branch": {
223
+ "name": "main_branch",
224
+ "type": "text",
225
+ "primaryKey": false,
226
+ "notNull": true,
227
+ "autoincrement": false
228
+ },
229
+ "dev_command": {
230
+ "name": "dev_command",
231
+ "type": "text",
232
+ "primaryKey": false,
233
+ "notNull": false,
234
+ "autoincrement": false
235
+ }
236
+ },
237
+ "indexes": {},
238
+ "foreignKeys": {},
239
+ "compositePrimaryKeys": {},
240
+ "uniqueConstraints": {},
241
+ "checkConstraints": {}
242
+ },
243
+ "runs": {
244
+ "name": "runs",
245
+ "columns": {
246
+ "id": {
247
+ "name": "id",
248
+ "type": "text",
249
+ "primaryKey": true,
250
+ "notNull": true,
251
+ "autoincrement": false
252
+ },
253
+ "feature_id": {
254
+ "name": "feature_id",
255
+ "type": "text",
256
+ "primaryKey": false,
257
+ "notNull": true,
258
+ "autoincrement": false
259
+ },
260
+ "workflow": {
261
+ "name": "workflow",
262
+ "type": "text",
263
+ "primaryKey": false,
264
+ "notNull": true,
265
+ "autoincrement": false
266
+ },
267
+ "status": {
268
+ "name": "status",
269
+ "type": "text",
270
+ "primaryKey": false,
271
+ "notNull": true,
272
+ "autoincrement": false
273
+ },
274
+ "started_at": {
275
+ "name": "started_at",
276
+ "type": "integer",
277
+ "primaryKey": false,
278
+ "notNull": true,
279
+ "autoincrement": false
280
+ },
281
+ "ended_at": {
282
+ "name": "ended_at",
283
+ "type": "integer",
284
+ "primaryKey": false,
285
+ "notNull": false,
286
+ "autoincrement": false
287
+ },
288
+ "summary": {
289
+ "name": "summary",
290
+ "type": "text",
291
+ "primaryKey": false,
292
+ "notNull": false,
293
+ "autoincrement": false
294
+ }
295
+ },
296
+ "indexes": {},
297
+ "foreignKeys": {},
298
+ "compositePrimaryKeys": {},
299
+ "uniqueConstraints": {},
300
+ "checkConstraints": {}
301
+ },
302
+ "sessions": {
303
+ "name": "sessions",
304
+ "columns": {
305
+ "id": {
306
+ "name": "id",
307
+ "type": "text",
308
+ "primaryKey": true,
309
+ "notNull": true,
310
+ "autoincrement": false
311
+ },
312
+ "feature_id": {
313
+ "name": "feature_id",
314
+ "type": "text",
315
+ "primaryKey": false,
316
+ "notNull": true,
317
+ "autoincrement": false
318
+ },
319
+ "kind": {
320
+ "name": "kind",
321
+ "type": "text",
322
+ "primaryKey": false,
323
+ "notNull": true,
324
+ "autoincrement": false
325
+ },
326
+ "cc_session_id": {
327
+ "name": "cc_session_id",
328
+ "type": "text",
329
+ "primaryKey": false,
330
+ "notNull": false,
331
+ "autoincrement": false
332
+ },
333
+ "transcript_path": {
334
+ "name": "transcript_path",
335
+ "type": "text",
336
+ "primaryKey": false,
337
+ "notNull": false,
338
+ "autoincrement": false
339
+ },
340
+ "status": {
341
+ "name": "status",
342
+ "type": "text",
343
+ "primaryKey": false,
344
+ "notNull": true,
345
+ "autoincrement": false
346
+ },
347
+ "worktree_path": {
348
+ "name": "worktree_path",
349
+ "type": "text",
350
+ "primaryKey": false,
351
+ "notNull": true,
352
+ "autoincrement": false
353
+ }
354
+ },
355
+ "indexes": {},
356
+ "foreignKeys": {},
357
+ "compositePrimaryKeys": {},
358
+ "uniqueConstraints": {},
359
+ "checkConstraints": {}
360
+ },
361
+ "tickets": {
362
+ "name": "tickets",
363
+ "columns": {
364
+ "id": {
365
+ "name": "id",
366
+ "type": "text",
367
+ "primaryKey": true,
368
+ "notNull": true,
369
+ "autoincrement": false
370
+ },
371
+ "feature_id": {
372
+ "name": "feature_id",
373
+ "type": "text",
374
+ "primaryKey": false,
375
+ "notNull": true,
376
+ "autoincrement": false
377
+ },
378
+ "seq": {
379
+ "name": "seq",
380
+ "type": "integer",
381
+ "primaryKey": false,
382
+ "notNull": true,
383
+ "autoincrement": false
384
+ },
385
+ "title": {
386
+ "name": "title",
387
+ "type": "text",
388
+ "primaryKey": false,
389
+ "notNull": true,
390
+ "autoincrement": false
391
+ },
392
+ "goal": {
393
+ "name": "goal",
394
+ "type": "text",
395
+ "primaryKey": false,
396
+ "notNull": true,
397
+ "autoincrement": false
398
+ },
399
+ "context": {
400
+ "name": "context",
401
+ "type": "text",
402
+ "primaryKey": false,
403
+ "notNull": true,
404
+ "autoincrement": false
405
+ },
406
+ "acceptance_criteria": {
407
+ "name": "acceptance_criteria",
408
+ "type": "text",
409
+ "primaryKey": false,
410
+ "notNull": true,
411
+ "autoincrement": false
412
+ },
413
+ "seams": {
414
+ "name": "seams",
415
+ "type": "text",
416
+ "primaryKey": false,
417
+ "notNull": true,
418
+ "autoincrement": false
419
+ },
420
+ "blocked_by": {
421
+ "name": "blocked_by",
422
+ "type": "text",
423
+ "primaryKey": false,
424
+ "notNull": true,
425
+ "autoincrement": false
426
+ },
427
+ "status": {
428
+ "name": "status",
429
+ "type": "text",
430
+ "primaryKey": false,
431
+ "notNull": true,
432
+ "autoincrement": false
433
+ },
434
+ "commits": {
435
+ "name": "commits",
436
+ "type": "text",
437
+ "primaryKey": false,
438
+ "notNull": true,
439
+ "autoincrement": false
440
+ },
441
+ "error": {
442
+ "name": "error",
443
+ "type": "text",
444
+ "primaryKey": false,
445
+ "notNull": false,
446
+ "autoincrement": false
447
+ }
448
+ },
449
+ "indexes": {},
450
+ "foreignKeys": {},
451
+ "compositePrimaryKeys": {},
452
+ "uniqueConstraints": {},
453
+ "checkConstraints": {}
454
+ }
455
+ },
456
+ "views": {},
457
+ "enums": {},
458
+ "_meta": {
459
+ "schemas": {},
460
+ "tables": {},
461
+ "columns": {}
462
+ },
463
+ "internal": {
464
+ "indexes": {}
465
+ }
466
+ }