volute 0.55.0 → 0.56.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 (160) hide show
  1. package/dist/{activity-events-TFAJBNBW.js → activity-events-YASF46HS.js} +2 -2
  2. package/dist/{ai-service-KEK2V3AP.js → ai-service-3UFNG6GI.js} +2 -4
  3. package/dist/{archive-FOHGXHPT.js → archive-L2OFBGDQ.js} +2 -2
  4. package/dist/{auth-Y27LTNZK.js → auth-N2F5ASAB.js} +3 -3
  5. package/dist/auto-upgrade-O4MQPYQF.js +46 -0
  6. package/dist/{avatar-image-SN576P45.js → avatar-image-QEKKUFDF.js} +2 -2
  7. package/dist/{backup-GDCWH6MC.js → backup-TPM7QQBQ.js} +12 -12
  8. package/dist/{channels-AFJWGX7W.js → channels-JP3GYTPX.js} +16 -16
  9. package/dist/{chat-HVPOZK3O.js → chat-7YCF4ZU5.js} +3 -3
  10. package/dist/{chunk-CKOA4LWV.js → chunk-2B4E6SL7.js} +7 -7
  11. package/dist/{chunk-NM5FDH4T.js → chunk-2LFTJNVH.js} +2 -2
  12. package/dist/{chunk-G3XAB4DK.js → chunk-2QLWAYIU.js} +1 -1
  13. package/dist/{chunk-KS62IHE2.js → chunk-45MCH4G4.js} +1 -1
  14. package/dist/{chunk-QVS3C4DK.js → chunk-4RZS7XCV.js} +4 -4
  15. package/dist/{chunk-DUV4EMNW.js → chunk-6LICEQGP.js} +2 -2
  16. package/dist/{chunk-LAUCO2HC.js → chunk-APDEUAIE.js} +1 -1
  17. package/dist/{chunk-XAG53RWY.js → chunk-CLH357FI.js} +1 -1
  18. package/dist/{chunk-HTSWDOJE.js → chunk-CVPCRWWC.js} +1 -1
  19. package/dist/{chunk-Z7TNIIHW.js → chunk-E2SN3ZOJ.js} +2 -39
  20. package/dist/{chunk-NCRG4SBR.js → chunk-ELQU2GBT.js} +23 -33
  21. package/dist/{chunk-OUGD5L5U.js → chunk-EPRLTYJR.js} +8 -8
  22. package/dist/{chunk-VTFXZPC3.js → chunk-EYFBT2KP.js} +8 -8
  23. package/dist/{chunk-PRZUBJ4K.js → chunk-FYMIGUJ5.js} +1 -1
  24. package/dist/{chunk-7XKPG66D.js → chunk-G7A5LEVI.js} +5 -5
  25. package/dist/{chunk-UEZC5MNB.js → chunk-GAAATVTM.js} +11 -11
  26. package/dist/{chunk-OFU6WJJZ.js → chunk-I3OJ342S.js} +2 -2
  27. package/dist/{chunk-FZUPIS3T.js → chunk-IABDYN4N.js} +3 -3
  28. package/dist/{chunk-TMTAHKYP.js → chunk-IOMBP2T5.js} +12 -12
  29. package/dist/{chunk-W3OIPJPB.js → chunk-IQROTVBG.js} +1 -1
  30. package/dist/{chunk-4VAQKLMU.js → chunk-IRNM4LSF.js} +3 -3
  31. package/dist/{chunk-OKM67ZWH.js → chunk-KN3UHV7O.js} +8 -3
  32. package/dist/{chunk-FSXPPOPM.js → chunk-KXM4K46T.js} +1 -1
  33. package/dist/{chunk-Z4Q6TQWL.js → chunk-LRRPKZBD.js} +2 -2
  34. package/dist/{chunk-OIOW3FPT.js → chunk-NA2NJXY4.js} +1 -1
  35. package/dist/{chunk-GLM7TVWP.js → chunk-OHHS5PSI.js} +1 -1
  36. package/dist/{chunk-CKPAVQNK.js → chunk-OPTA3BJ4.js} +36 -24
  37. package/dist/{chunk-HLWQ3P3R.js → chunk-PAO7JZNW.js} +16 -16
  38. package/dist/{chunk-6HBGUPBA.js → chunk-Q5M5QFKY.js} +2 -2
  39. package/dist/{chunk-IR2FW4W7.js → chunk-T7UMSTH2.js} +2 -2
  40. package/dist/{chunk-H6X6CKDN.js → chunk-TAVIVN2I.js} +2 -32
  41. package/dist/{chunk-BP2X5AIK.js → chunk-TGYKFUCF.js} +6 -6
  42. package/dist/{chunk-5U5GLZSD.js → chunk-TZ7OHGNL.js} +2 -2
  43. package/dist/{chunk-7AA4T2RT.js → chunk-UMQP5TC5.js} +1 -1
  44. package/dist/{chunk-3SFKY4GI.js → chunk-UNTDRIV2.js} +4 -4
  45. package/dist/{chunk-45QTYKQQ.js → chunk-V2M6PNLE.js} +2 -2
  46. package/dist/{chunk-IT4GEFDH.js → chunk-WTZD6LFW.js} +1 -1
  47. package/dist/{chunk-FLIEXG2T.js → chunk-XZP3FJ7Q.js} +1 -1
  48. package/dist/cli.js +26 -23
  49. package/dist/{clock-X7V3C7NL.js → clock-ZT5YT6HA.js} +2 -2
  50. package/dist/{cloud-sync-FM73SVFJ.js → cloud-sync-RTUXMYU2.js} +20 -20
  51. package/dist/{conversations-FH3ODBL7.js → conversations-ERMMPMOS.js} +3 -3
  52. package/dist/{create-P75ZFTVN.js → create-IUCFJXCE.js} +1 -1
  53. package/dist/{daemon-restart-JQMMMITM.js → daemon-restart-N2YOISNJ.js} +11 -6
  54. package/dist/daemon.js +125 -202
  55. package/dist/{db-BONH4SUG.js → db-BQFYIONA.js} +1 -1
  56. package/dist/{delivery-manager-H23Q23N7.js → delivery-manager-5EGCFN4K.js} +16 -16
  57. package/dist/{delivery-notices-S7TKOACE.js → delivery-notices-LZKZXWTX.js} +4 -4
  58. package/dist/{delivery-router-KHBVEVVL.js → delivery-router-U6Q22ZYU.js} +2 -2
  59. package/dist/doctor-225FYBAQ.js +454 -0
  60. package/dist/{down-UN2EDX2Y.js → down-3BQSPUAZ.js} +4 -4
  61. package/dist/echo-text-Y2DFTD7L.js +40 -0
  62. package/dist/{env-SQFCWW52.js → env-4YX5YNWZ.js} +2 -2
  63. package/dist/{exec-Z34TTUO3.js → exec-Y5VMDAVA.js} +2 -2
  64. package/dist/{export-VBNWM7I4.js → export-ASRHBMRG.js} +2 -2
  65. package/dist/{extensions-QD22GXZD.js → extensions-YEPEWURN.js} +20 -20
  66. package/dist/{files-DUGRXN6V.js → files-FASUDSZQ.js} +2 -2
  67. package/dist/{import-RDDUGGFI.js → import-O35Y7DSF.js} +5 -5
  68. package/dist/{isolation-UQPDO34R.js → isolation-ZOAUXYXA.js} +2 -2
  69. package/dist/{login-57MMYILL.js → login-54TZQQP4.js} +5 -5
  70. package/dist/{logout-YFZAJRPY.js → logout-4G46Z4RU.js} +1 -1
  71. package/dist/message-delivery-HBTMGWFU.js +46 -0
  72. package/dist/{mind-BARCLI7O.js → mind-IKMX7K7G.js} +8 -24
  73. package/dist/{mind-activity-tracker-UT23RGBF.js → mind-activity-tracker-ABAEIMA3.js} +3 -3
  74. package/dist/mind-service-LRVOQG2T.js +48 -0
  75. package/dist/{mind-sleep-24HV4RCA.js → mind-sleep-LZAFBDZD.js} +2 -2
  76. package/dist/{package-AUDBDKAO.js → package-X5O7OD2E.js} +3 -2
  77. package/dist/{prompts-MOBF3TMO.js → prompts-ZNOE3KN3.js} +2 -2
  78. package/dist/{registry-TRC2HJXR.js → registry-BTQXLDW6.js} +1 -1
  79. package/dist/{sandbox-VI7XWBIA.js → sandbox-OUFAGN45.js} +2 -2
  80. package/dist/scheduler-G6BCIVGP.js +27 -0
  81. package/dist/{seed-cmd-M6A7N7F3.js → seed-cmd-BGAW3WDY.js} +2 -2
  82. package/dist/{seed-create-TGFZW4IO.js → seed-create-SMCPEUFQ.js} +3 -3
  83. package/dist/{seed-readiness-XBH2MUNA.js → seed-readiness-RBANMSWW.js} +3 -3
  84. package/dist/{seed-sprout-3IC5ZVTI.js → seed-sprout-CSHV36N3.js} +6 -6
  85. package/dist/{send-DHYBAYK4.js → send-D3ADUBR5.js} +5 -5
  86. package/dist/{service-T4P5W6RS.js → service-SWEEBOOY.js} +3 -24
  87. package/dist/{service-install-R4SNYUVO.js → service-install-RCC26KDV.js} +4 -4
  88. package/dist/{setup-6KAH3GRW.js → setup-L5NZG2U3.js} +5 -5
  89. package/dist/{setup-WZSXHHRJ.js → setup-R7Q4HFJP.js} +1 -5
  90. package/dist/{skills-LKQCYFVP.js → skills-BCCU4OJW.js} +3 -3
  91. package/dist/sleep-manager-25P44HAO.js +42 -0
  92. package/dist/{spirit-FKXMGO3N.js → spirit-YPG2MU6W.js} +5 -5
  93. package/dist/spirit-availability-ZQM5IH4C.js +43 -0
  94. package/dist/{status-LCKTTIWS.js → status-BYPCJU6H.js} +4 -4
  95. package/dist/{system-events-ZYOCYAO2.js → system-events-CWC7CBKP.js} +2 -2
  96. package/dist/{systems-HL7SGSW7.js → systems-VDRUZXNF.js} +2 -2
  97. package/dist/{tailscale-F2IMBILZ.js → tailscale-4XY7B5A2.js} +1 -1
  98. package/dist/{template-staleness-IBD722PN.js → template-staleness-CL4V7BT7.js} +2 -2
  99. package/dist/{turn-tracker-BE34OI6O.js → turn-tracker-LZP5X6GZ.js} +6 -6
  100. package/dist/{up-J47J5JRB.js → up-3AAN4GYY.js} +4 -4
  101. package/dist/{update-ILCPVNDD.js → update-2MWXRE2S.js} +4 -4
  102. package/dist/{update-check-SZ7B5IFI.js → update-check-PJOZXZYJ.js} +2 -2
  103. package/dist/variant-cleanup-K7RFMSH7.js +24 -0
  104. package/dist/{version-notify-KIXYNHJC.js → version-notify-QIDHR6WO.js} +5 -5
  105. package/dist/web-assets/assets/{index-CoU1eUKE.js → index-Bfvls20e.js} +3 -3
  106. package/dist/web-assets/index.html +1 -1
  107. package/drizzle/0000_crazy_epoch.sql +232 -0
  108. package/drizzle/README.md +42 -0
  109. package/drizzle/meta/0000_snapshot.json +1420 -3
  110. package/drizzle/meta/_journal.json +2 -128
  111. package/package.json +3 -2
  112. package/dist/auto-upgrade-2MZF7NG3.js +0 -46
  113. package/dist/echo-text-ULEIFJJF.js +0 -40
  114. package/dist/message-delivery-LU4EP244.js +0 -46
  115. package/dist/migrate-init-infrastructure-Z72UJ5NT.js +0 -44
  116. package/dist/migrate-name-placeholder-64AEAWPE.js +0 -37
  117. package/dist/migrate-thread-config-SVF2M3D3.js +0 -90
  118. package/dist/mind-service-ZJCUBAUL.js +0 -48
  119. package/dist/scheduler-GLINVC2B.js +0 -27
  120. package/dist/seed-5JGR7ZRA.js +0 -11
  121. package/dist/sleep-manager-Q3ITFNOJ.js +0 -42
  122. package/dist/spirit-availability-5R2WYSWF.js +0 -43
  123. package/dist/sprout-VEW3CUNX.js +0 -11
  124. package/dist/variant-HHDTW74J.js +0 -62
  125. package/dist/variant-cleanup-JGJZ5KB4.js +0 -24
  126. package/drizzle/0000_baseline.sql +0 -152
  127. package/drizzle/0001_add_conversation_private.sql +0 -1
  128. package/drizzle/0002_turns.sql +0 -21
  129. package/drizzle/0003_turn_feed_links.sql +0 -11
  130. package/drizzle/0004_spirits.sql +0 -5
  131. package/drizzle/0005_meta_summaries.sql +0 -15
  132. package/drizzle/0006_channels.sql +0 -17
  133. package/drizzle/0007_drop_conversation_name_title.sql +0 -11
  134. package/drizzle/0008_performance_indexes.sql +0 -6
  135. package/drizzle/0009_mind_notices.sql +0 -14
  136. package/drizzle/0010_delivery_queue_redrive.sql +0 -10
  137. package/drizzle/0011_drop_turn_summary_event_id.sql +0 -3
  138. package/drizzle/0012_channel_gates.sql +0 -17
  139. package/drizzle/0013_variant_purpose.sql +0 -3
  140. package/drizzle/0014_system_events.sql +0 -26
  141. package/drizzle/0015_rename_session_to_thread.sql +0 -12
  142. package/drizzle/0016_brain_to_human.sql +0 -4
  143. package/drizzle/0017_event_history_rows.sql +0 -9
  144. package/drizzle/0018_api_tokens.sql +0 -20
  145. package/drizzle/meta/0001_snapshot.json +0 -7
  146. package/drizzle/meta/0002_snapshot.json +0 -7
  147. package/drizzle/meta/0003_snapshot.json +0 -7
  148. package/drizzle/meta/0004_snapshot.json +0 -7
  149. package/drizzle/meta/0005_snapshot.json +0 -7
  150. package/drizzle/meta/0006_snapshot.json +0 -7
  151. package/drizzle/meta/0007_snapshot.json +0 -7
  152. package/dist/{env-7AZFBPWX.js → env-IBW2QI6K.js} +5 -5
  153. package/dist/{login-4NUS72Z5.js → login-RJJTCVR3.js} +3 -3
  154. package/dist/{mind-contacts-PEXCDRXA.js → mind-contacts-KV64UDJS.js} +6 -6
  155. package/dist/{mind-history-RZMMCHMX.js → mind-history-H45GM2M2.js} +6 -6
  156. package/dist/{register-WNCSOTAU.js → register-OX4HRSGC.js} +3 -3
  157. package/dist/{restart-B4GNMVF2.js → restart-AGEGNSYQ.js} +4 -4
  158. package/dist/{skill-QYTBUDNQ.js → skill-B5OJEQUA.js} +4 -4
  159. package/dist/{start-BDHJVOVX.js → start-MUMNFR52.js} +3 -3
  160. package/dist/{stop-45QYSGYS.js → stop-EKERNYTX.js} +4 -4
@@ -1,62 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- subcommands
4
- } from "./chunk-TXSA4Q3V.js";
5
- import "./chunk-O7IGP7ZW.js";
6
- import "./chunk-K3NQKI34.js";
7
-
8
- // packages/cli/src/commands/variant.ts
9
- var cmd = subcommands({
10
- name: "volute variant",
11
- description: "(deprecated) Use 'volute mind split/join' instead",
12
- commands: {
13
- create: {
14
- description: "(deprecated) Use 'volute mind split'",
15
- run: async () => {
16
- console.error(
17
- "'volute variant create' has been replaced. Use 'volute mind split' to create variants."
18
- );
19
- console.error(
20
- "Usage: volute mind split <name> [--from <mind>] [--soul '...'] [--no-start]"
21
- );
22
- process.exit(1);
23
- }
24
- },
25
- merge: {
26
- description: "(deprecated) Use 'volute mind join'",
27
- run: async () => {
28
- console.error(
29
- "'volute variant merge' has been replaced. Use 'volute mind join' to merge variants."
30
- );
31
- console.error(
32
- "Usage: volute mind join <name> [--summary '...' --memory '...' --justification '...']"
33
- );
34
- process.exit(1);
35
- }
36
- },
37
- list: {
38
- description: "(deprecated) Use 'volute mind list'",
39
- run: async () => {
40
- console.error("'volute variant list' is no longer available.");
41
- console.error(
42
- "Use 'volute mind list' to see variants, or 'volute mind delete <variant-name>' to delete."
43
- );
44
- process.exit(1);
45
- }
46
- },
47
- delete: {
48
- description: "(deprecated) Use 'volute mind delete'",
49
- run: async () => {
50
- console.error("'volute variant delete' is no longer available.");
51
- console.error(
52
- "Use 'volute mind list' to see variants, or 'volute mind delete <variant-name>' to delete."
53
- );
54
- process.exit(1);
55
- }
56
- }
57
- }
58
- });
59
- var run = cmd.execute;
60
- export {
61
- run
62
- };
@@ -1,24 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- cleanupVariant,
4
- reconcileVariants
5
- } from "./chunk-QVS3C4DK.js";
6
- import "./chunk-HLWQ3P3R.js";
7
- import "./chunk-BP2X5AIK.js";
8
- import "./chunk-XAG53RWY.js";
9
- import "./chunk-OFU6WJJZ.js";
10
- import "./chunk-PRZUBJ4K.js";
11
- import "./chunk-DUV4EMNW.js";
12
- import "./chunk-MNKPAAQF.js";
13
- import "./chunk-HTSWDOJE.js";
14
- import "./chunk-OIOW3FPT.js";
15
- import "./chunk-GLM7TVWP.js";
16
- import "./chunk-Z7TNIIHW.js";
17
- import "./chunk-2674KIGI.js";
18
- import "./chunk-H6X6CKDN.js";
19
- import "./chunk-2RNMBXD2.js";
20
- import "./chunk-K3NQKI34.js";
21
- export {
22
- cleanupVariant,
23
- reconcileVariants
24
- };
@@ -1,152 +0,0 @@
1
- -- Baseline schema: all tables as of v0.30.x
2
- -- Uses IF NOT EXISTS so existing installs safely skip everything.
3
-
4
- CREATE TABLE IF NOT EXISTS `users` (
5
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
6
- `username` text NOT NULL,
7
- `password_hash` text NOT NULL,
8
- `role` text NOT NULL DEFAULT 'pending',
9
- `user_type` text NOT NULL DEFAULT 'brain',
10
- `display_name` text,
11
- `description` text,
12
- `avatar` text,
13
- `created_at` text NOT NULL DEFAULT (datetime('now'))
14
- );
15
- --> statement-breakpoint
16
- CREATE UNIQUE INDEX IF NOT EXISTS `users_username_unique` ON `users` (`username`);
17
- --> statement-breakpoint
18
- CREATE TABLE IF NOT EXISTS `minds` (
19
- `name` text PRIMARY KEY NOT NULL,
20
- `port` integer NOT NULL,
21
- `parent` text REFERENCES `minds`(`name`) ON DELETE CASCADE,
22
- `dir` text,
23
- `branch` text,
24
- `stage` text,
25
- `template` text,
26
- `template_hash` text,
27
- `running` integer NOT NULL DEFAULT 0,
28
- `created_at` text NOT NULL DEFAULT (datetime('now'))
29
- );
30
- --> statement-breakpoint
31
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_minds_port` ON `minds` (`port`);
32
- --> statement-breakpoint
33
- CREATE INDEX IF NOT EXISTS `idx_minds_parent` ON `minds` (`parent`);
34
- --> statement-breakpoint
35
- CREATE TABLE IF NOT EXISTS `conversations` (
36
- `id` text PRIMARY KEY NOT NULL,
37
- `mind_name` text,
38
- `channel` text NOT NULL,
39
- `type` text NOT NULL DEFAULT 'dm',
40
- `name` text,
41
- `user_id` integer REFERENCES `users`(`id`),
42
- `title` text,
43
- `created_at` text NOT NULL DEFAULT (datetime('now')),
44
- `updated_at` text NOT NULL DEFAULT (datetime('now'))
45
- );
46
- --> statement-breakpoint
47
- CREATE INDEX IF NOT EXISTS `idx_conversations_mind_name` ON `conversations` (`mind_name`);
48
- --> statement-breakpoint
49
- CREATE INDEX IF NOT EXISTS `idx_conversations_user_id` ON `conversations` (`user_id`);
50
- --> statement-breakpoint
51
- CREATE INDEX IF NOT EXISTS `idx_conversations_updated_at` ON `conversations` (`updated_at`);
52
- --> statement-breakpoint
53
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_conversations_name` ON `conversations` (`name`);
54
- --> statement-breakpoint
55
- CREATE TABLE IF NOT EXISTS `messages` (
56
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
57
- `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
58
- `role` text NOT NULL,
59
- `sender_name` text,
60
- `content` text NOT NULL,
61
- `created_at` text NOT NULL DEFAULT (datetime('now'))
62
- );
63
- --> statement-breakpoint
64
- CREATE INDEX IF NOT EXISTS `idx_messages_conversation_id` ON `messages` (`conversation_id`);
65
- --> statement-breakpoint
66
- CREATE TABLE IF NOT EXISTS `conversation_participants` (
67
- `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
68
- `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
69
- `role` text NOT NULL DEFAULT 'member',
70
- `joined_at` text NOT NULL DEFAULT (datetime('now'))
71
- );
72
- --> statement-breakpoint
73
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_cp_unique` ON `conversation_participants` (`conversation_id`, `user_id`);
74
- --> statement-breakpoint
75
- CREATE INDEX IF NOT EXISTS `idx_cp_user_id` ON `conversation_participants` (`user_id`);
76
- --> statement-breakpoint
77
- CREATE TABLE IF NOT EXISTS `sessions` (
78
- `id` text PRIMARY KEY NOT NULL,
79
- `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
80
- `created_at` integer NOT NULL
81
- );
82
- --> statement-breakpoint
83
- CREATE TABLE IF NOT EXISTS `mind_history` (
84
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
85
- `mind` text NOT NULL,
86
- `channel` text,
87
- `session` text,
88
- `sender` text,
89
- `message_id` text,
90
- `type` text NOT NULL DEFAULT 'inbound',
91
- `content` text,
92
- `metadata` text,
93
- `created_at` text NOT NULL DEFAULT (datetime('now'))
94
- );
95
- --> statement-breakpoint
96
- CREATE INDEX IF NOT EXISTS `idx_mind_history_mind` ON `mind_history` (`mind`);
97
- --> statement-breakpoint
98
- CREATE INDEX IF NOT EXISTS `idx_mind_history_mind_channel` ON `mind_history` (`mind`, `channel`);
99
- --> statement-breakpoint
100
- CREATE INDEX IF NOT EXISTS `idx_mind_history_mind_type` ON `mind_history` (`mind`, `type`);
101
- --> statement-breakpoint
102
- CREATE TABLE IF NOT EXISTS `system_prompts` (
103
- `key` text PRIMARY KEY NOT NULL,
104
- `content` text NOT NULL,
105
- `updated_at` text NOT NULL DEFAULT (datetime('now'))
106
- );
107
- --> statement-breakpoint
108
- CREATE TABLE IF NOT EXISTS `shared_skills` (
109
- `id` text PRIMARY KEY NOT NULL,
110
- `name` text NOT NULL,
111
- `description` text NOT NULL DEFAULT '',
112
- `author` text NOT NULL,
113
- `version` integer NOT NULL DEFAULT 1,
114
- `created_at` text NOT NULL DEFAULT (datetime('now')),
115
- `updated_at` text NOT NULL DEFAULT (datetime('now'))
116
- );
117
- --> statement-breakpoint
118
- CREATE TABLE IF NOT EXISTS `delivery_queue` (
119
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
120
- `mind` text NOT NULL,
121
- `session` text NOT NULL,
122
- `channel` text,
123
- `sender` text,
124
- `status` text NOT NULL DEFAULT 'pending',
125
- `payload` text NOT NULL,
126
- `created_at` text NOT NULL DEFAULT (datetime('now'))
127
- );
128
- --> statement-breakpoint
129
- CREATE INDEX IF NOT EXISTS `idx_delivery_queue_mind_session` ON `delivery_queue` (`mind`, `session`);
130
- --> statement-breakpoint
131
- CREATE INDEX IF NOT EXISTS `idx_delivery_queue_mind_status` ON `delivery_queue` (`mind`, `status`);
132
- --> statement-breakpoint
133
- CREATE TABLE IF NOT EXISTS `activity` (
134
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
135
- `type` text NOT NULL,
136
- `mind` text NOT NULL,
137
- `summary` text NOT NULL,
138
- `metadata` text,
139
- `created_at` text NOT NULL DEFAULT (datetime('now'))
140
- );
141
- --> statement-breakpoint
142
- CREATE INDEX IF NOT EXISTS `idx_activity_created_at` ON `activity` (`created_at`);
143
- --> statement-breakpoint
144
- CREATE INDEX IF NOT EXISTS `idx_activity_mind` ON `activity` (`mind`);
145
- --> statement-breakpoint
146
- CREATE TABLE IF NOT EXISTS `conversation_reads` (
147
- `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
148
- `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
149
- `last_read_message_id` integer NOT NULL DEFAULT 0
150
- );
151
- --> statement-breakpoint
152
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_conversation_reads_unique` ON `conversation_reads` (`user_id`, `conversation_id`);
@@ -1 +0,0 @@
1
- ALTER TABLE `conversations` ADD `private` integer NOT NULL DEFAULT 0;
@@ -1,21 +0,0 @@
1
- -- First-class turns: track turn lifecycle and link events/messages to turns
2
-
3
- CREATE TABLE IF NOT EXISTS `turns` (
4
- `id` text PRIMARY KEY NOT NULL,
5
- `mind` text NOT NULL,
6
- `session` text,
7
- `trigger_event_id` integer,
8
- `summary_event_id` integer,
9
- `status` text NOT NULL DEFAULT 'active',
10
- `created_at` text NOT NULL DEFAULT (datetime('now'))
11
- );
12
- --> statement-breakpoint
13
- CREATE INDEX IF NOT EXISTS `idx_turns_mind` ON `turns` (`mind`);
14
- --> statement-breakpoint
15
- CREATE INDEX IF NOT EXISTS `idx_turns_mind_status` ON `turns` (`mind`, `status`);
16
- --> statement-breakpoint
17
- ALTER TABLE `mind_history` ADD `turn_id` text;
18
- --> statement-breakpoint
19
- CREATE INDEX IF NOT EXISTS `idx_mind_history_turn_id` ON `mind_history` (`turn_id`);
20
- --> statement-breakpoint
21
- ALTER TABLE `messages` ADD `source_event_id` integer;
@@ -1,11 +0,0 @@
1
- -- Link feed items (messages, activities) to turns via turn_id
2
-
3
- ALTER TABLE `messages` ADD `turn_id` text;
4
- --> statement-breakpoint
5
- CREATE INDEX IF NOT EXISTS `idx_messages_turn_id` ON `messages` (`turn_id`);
6
- --> statement-breakpoint
7
- ALTER TABLE `activity` ADD `turn_id` text;
8
- --> statement-breakpoint
9
- ALTER TABLE `activity` ADD `source_event_id` integer;
10
- --> statement-breakpoint
11
- CREATE INDEX IF NOT EXISTS `idx_activity_turn_id` ON `activity` (`turn_id`);
@@ -1,5 +0,0 @@
1
- ALTER TABLE `minds` ADD `mind_type` text NOT NULL DEFAULT 'mind';
2
- --> statement-breakpoint
3
- ALTER TABLE `minds` ADD `created_by` text;
4
- --> statement-breakpoint
5
- CREATE INDEX IF NOT EXISTS `idx_minds_mind_type` ON `minds` (`mind_type`);
@@ -1,15 +0,0 @@
1
- CREATE TABLE IF NOT EXISTS `summaries` (
2
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
- `mind` text NOT NULL,
4
- `period` text NOT NULL,
5
- `period_key` text NOT NULL,
6
- `content` text NOT NULL,
7
- `metadata` text,
8
- `created_at` text NOT NULL DEFAULT (datetime('now'))
9
- );
10
- --> statement-breakpoint
11
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_summaries_unique` ON `summaries` (`mind`, `period`, `period_key`);
12
- --> statement-breakpoint
13
- CREATE INDEX IF NOT EXISTS `idx_summaries_mind_period` ON `summaries` (`mind`, `period`);
14
- --> statement-breakpoint
15
- ALTER TABLE `turns` ADD `summary_id` integer REFERENCES `summaries`(`id`);
@@ -1,17 +0,0 @@
1
- CREATE TABLE IF NOT EXISTS `channels` (
2
- `conversation_id` text PRIMARY KEY NOT NULL,
3
- `name` text NOT NULL,
4
- `description` text,
5
- `rules` text,
6
- `char_limit` integer,
7
- `private` integer NOT NULL DEFAULT 0,
8
- `created_at` text NOT NULL DEFAULT (datetime('now')),
9
- `updated_at` text NOT NULL DEFAULT (datetime('now')),
10
- FOREIGN KEY (`conversation_id`) REFERENCES `conversations`(`id`) ON UPDATE no action ON DELETE cascade
11
- );
12
- --> statement-breakpoint
13
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_channels_name` ON `channels` (`name`);
14
- --> statement-breakpoint
15
- INSERT INTO `channels` (`conversation_id`, `name`, `private`, `created_at`, `updated_at`)
16
- SELECT `id`, `name`, `private`, `created_at`, `updated_at`
17
- FROM `conversations` WHERE `type` = 'channel' AND `name` IS NOT NULL;
@@ -1,11 +0,0 @@
1
- DROP INDEX IF EXISTS idx_conversations_name;
2
- --> statement-breakpoint
3
- DROP INDEX IF EXISTS idx_conversations_mind_name;
4
- --> statement-breakpoint
5
- ALTER TABLE conversations DROP COLUMN name;
6
- --> statement-breakpoint
7
- ALTER TABLE conversations DROP COLUMN title;
8
- --> statement-breakpoint
9
- ALTER TABLE conversations DROP COLUMN mind_name;
10
- --> statement-breakpoint
11
- ALTER TABLE conversations DROP COLUMN channel;
@@ -1,6 +0,0 @@
1
- CREATE INDEX IF NOT EXISTS `idx_turns_mind_created_at` ON `turns` (`mind`,`created_at`);
2
- CREATE INDEX IF NOT EXISTS `idx_mind_history_session` ON `mind_history` (`session`);
3
- CREATE INDEX IF NOT EXISTS `idx_mind_history_mind_created_at` ON `mind_history` (`mind`,`created_at`);
4
- CREATE INDEX IF NOT EXISTS `idx_summaries_mind_period_key` ON `summaries` (`mind`,`period_key`);
5
- CREATE INDEX IF NOT EXISTS `idx_activity_type` ON `activity` (`type`);
6
- CREATE INDEX IF NOT EXISTS `idx_delivery_queue_status` ON `delivery_queue` (`status`);
@@ -1,14 +0,0 @@
1
- -- Failure notices delivered to minds on their next successful turn
2
-
3
- CREATE TABLE IF NOT EXISTS `mind_notices` (
4
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
5
- `mind` text NOT NULL,
6
- `session` text NOT NULL,
7
- `kind` text NOT NULL,
8
- `reason` text NOT NULL,
9
- `detail` text NOT NULL,
10
- `raw` text,
11
- `created_at` text NOT NULL DEFAULT (datetime('now'))
12
- );
13
- --> statement-breakpoint
14
- CREATE INDEX IF NOT EXISTS `idx_mind_notices_mind_session` ON `mind_notices` (`mind`, `session`);
@@ -1,10 +0,0 @@
1
- -- Make delivery_queue an at-least-once queue: track attempts and a backoff
2
- -- window so a redrive loop can re-deliver stranded rows without hot-looping.
3
-
4
- ALTER TABLE `delivery_queue` ADD `attempts` integer DEFAULT 0 NOT NULL;--> statement-breakpoint
5
- ALTER TABLE `delivery_queue` ADD `next_attempt_at` text;--> statement-breakpoint
6
- -- Original delivery target (may be a variant name); redrive resolves the port from
7
- -- this so a variant's stranded row is re-delivered to the variant, not the parent.
8
- -- Nullable: legacy rows fall back to `mind` (the base name) at read time.
9
- ALTER TABLE `delivery_queue` ADD `target_mind` text;--> statement-breakpoint
10
- CREATE INDEX IF NOT EXISTS `idx_delivery_queue_status_next` ON `delivery_queue` (`status`, `next_attempt_at`);
@@ -1,3 +0,0 @@
1
- -- Drop the dead turns.summary_event_id column (superseded by summary_id, never written).
2
-
3
- ALTER TABLE `turns` DROP COLUMN `summary_event_id`;
@@ -1,17 +0,0 @@
1
- -- Per-(mind, channel) gate state so a mind can explicitly decline an unrouted
2
- -- channel. Absence of a row means "pending" (undecided); the only stored state
3
- -- is "declined". Declined channels are never released and never re-notify.
4
- CREATE TABLE `channel_gates` (
5
- `mind` text NOT NULL,
6
- `channel` text NOT NULL,
7
- `state` text NOT NULL,
8
- `updated_at` text DEFAULT (datetime('now')) NOT NULL,
9
- PRIMARY KEY(`mind`, `channel`)
10
- );
11
- --> statement-breakpoint
12
- -- Backfill: archive stale gated rows so the first routes.json edit on an existing
13
- -- mind with a months-old backlog can't release hundreds of messages at once. The
14
- -- bounded release only ever promotes the newest N per channel anyway; anything
15
- -- older than a week is treated as history and made inert here.
16
- UPDATE `delivery_queue` SET `status` = 'archived'
17
- WHERE `status` = 'gated' AND `created_at` < datetime('now', '-7 days');
@@ -1,3 +0,0 @@
1
- -- Purpose/intent captured at split time, recorded on the variant's row so it can
2
- -- orient the variant, feed the variant list UI, and default the join message.
3
- ALTER TABLE `minds` ADD `purpose` text;
@@ -1,26 +0,0 @@
1
- -- System events: environment → mind traffic (replaces mind_notices).
2
- -- No sender, no reply target; a separate stream from chat.
3
-
4
- CREATE TABLE IF NOT EXISTS `system_events` (
5
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
6
- `mind` text NOT NULL,
7
- `type` text NOT NULL,
8
- `body` text NOT NULL,
9
- `meta` text,
10
- `delivery` text NOT NULL DEFAULT 'immediate',
11
- `session` text NOT NULL DEFAULT 'main',
12
- `created_at` text NOT NULL DEFAULT (datetime('now')),
13
- `delivered_at` text,
14
- `reflection` text
15
- );
16
- --> statement-breakpoint
17
- CREATE INDEX IF NOT EXISTS `idx_system_events_mind` ON `system_events` (`mind`);
18
- --> statement-breakpoint
19
- CREATE INDEX IF NOT EXISTS `idx_system_events_mind_delivery` ON `system_events` (`mind`, `delivery`, `delivered_at`);
20
- --> statement-breakpoint
21
- CREATE INDEX IF NOT EXISTS `idx_system_events_mind_type` ON `system_events` (`mind`, `type`);
22
- --> statement-breakpoint
23
- -- Deliberately discards any pending mind_notices rows at upgrade: notice rows were
24
- -- transient (deleted after delivery), so losing an undelivered failure notice across
25
- -- an upgrade is acceptable — no data migration is performed.
26
- DROP TABLE IF EXISTS `mind_notices`;
@@ -1,12 +0,0 @@
1
- -- Rename the routing "session" column to "thread" on turns, mind_history,
2
- -- delivery_queue, and system_events. The routing sense of "session" is renamed
3
- -- to "thread" (issue #493); auth sessions and SDK transcript files keep "session".
4
- ALTER TABLE `turns` RENAME COLUMN `session` TO `thread`;--> statement-breakpoint
5
- ALTER TABLE `mind_history` RENAME COLUMN `session` TO `thread`;--> statement-breakpoint
6
- DROP INDEX IF EXISTS `idx_mind_history_session`;--> statement-breakpoint
7
- CREATE INDEX IF NOT EXISTS `idx_mind_history_thread` ON `mind_history` (`thread`);--> statement-breakpoint
8
- ALTER TABLE `delivery_queue` RENAME COLUMN `session` TO `thread`;--> statement-breakpoint
9
- DROP INDEX IF EXISTS `idx_delivery_queue_mind_session`;--> statement-breakpoint
10
- CREATE INDEX IF NOT EXISTS `idx_delivery_queue_mind_thread` ON `delivery_queue` (`mind`, `thread`);--> statement-breakpoint
11
- -- system_events is created by 0014 on this same train, so the rename is always valid.
12
- ALTER TABLE `system_events` RENAME COLUMN `session` TO `thread`;
@@ -1,4 +0,0 @@
1
- -- Retire the "brain" user_type in favour of "human" (issue #493). Human users
2
- -- were stored as user_type = 'brain'; migrate live rows so prefixes and profile
3
- -- cards render [human]. Mind, system, and puppet types are unchanged.
4
- UPDATE `users` SET `user_type` = 'human' WHERE `user_type` = 'brain';
@@ -1,9 +0,0 @@
1
- -- System events are not messages. They were recorded in mind_history as `inbound` rows,
2
- -- so every history surface rendered them as chat with a phantom sender ("user"), and minds
3
- -- read them as messages they were expected to reply to. Retype the delivered-event rows so
4
- -- the timeline and `volute mind history` can render them as system markers instead.
5
- --
6
- -- The `event:<type>:<id>` channel is written only by recordEventRow, so it identifies
7
- -- these rows exactly. Turn linkage (turn_id / trigger_event_id) is untouched — the linkers
8
- -- match both types, so reflection capture keeps working for historical turns.
9
- UPDATE `mind_history` SET `type` = 'event' WHERE `type` = 'inbound' AND `channel` LIKE 'event:%';
@@ -1,20 +0,0 @@
1
- -- Durable, hashed, revocable per-user API credentials.
2
- --
3
- -- Keyed to a `users` row rather than a mind name, so the same token type serves
4
- -- external minds (users rows with user_type "mind" and no minds registry row)
5
- -- and, later, external humans. Only the SHA-256 hash is stored; revocation is a
6
- -- row DELETE, and the FK cascade drops a user's tokens along with the user.
7
- --
8
- -- Orthogonal to the in-memory native-mind token map: these survive a restart.
9
-
10
- CREATE TABLE IF NOT EXISTS `api_tokens` (
11
- `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
12
- `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
13
- `token_hash` text NOT NULL,
14
- `label` text,
15
- `created_at` text NOT NULL DEFAULT (datetime('now'))
16
- );
17
- --> statement-breakpoint
18
- CREATE UNIQUE INDEX IF NOT EXISTS `idx_api_tokens_hash` ON `api_tokens` (`token_hash`);
19
- --> statement-breakpoint
20
- CREATE INDEX IF NOT EXISTS `idx_api_tokens_user` ON `api_tokens` (`user_id`);
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0001_add_conversation_private",
3
- "prevId": "0000_baseline",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0002_turns",
3
- "prevId": "0001_add_conversation_private",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0003_turn_feed_links",
3
- "prevId": "0002_turns",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0004_spirits",
3
- "prevId": "0003_turn_feed_links",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0005_meta_summaries",
3
- "prevId": "0004_spirits",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0006_channels",
3
- "prevId": "0005_meta_summaries",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "id": "0007_drop_conversation_name_title",
3
- "prevId": "0006_channels",
4
- "version": "6",
5
- "dialect": "sqlite",
6
- "tables": {}
7
- }
@@ -3,15 +3,15 @@ import {
3
3
  isCompact
4
4
  } from "./chunk-7YJY3F2R.js";
5
5
  import {
6
- getClient,
7
- urlOf
8
- } from "./chunk-LOPXTW6H.js";
6
+ promptLine
7
+ } from "./chunk-VHWGEJ4V.js";
9
8
  import {
10
9
  daemonFetch
11
10
  } from "./chunk-M74I3HHF.js";
12
11
  import {
13
- promptLine
14
- } from "./chunk-VHWGEJ4V.js";
12
+ getClient,
13
+ urlOf
14
+ } from "./chunk-LOPXTW6H.js";
15
15
  import {
16
16
  command,
17
17
  subcommands
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-M74I3HHF.js";
5
2
  import {
6
3
  promptLine
7
4
  } from "./chunk-VHWGEJ4V.js";
5
+ import {
6
+ daemonFetch
7
+ } from "./chunk-M74I3HHF.js";
8
8
  import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- getClient,
4
- urlOf
5
- } from "./chunk-LOPXTW6H.js";
3
+ relativeAge
4
+ } from "./chunk-WZZCA23D.js";
6
5
  import {
7
6
  resolveMindName
8
7
  } from "./chunk-BTY4WNFE.js";
9
- import {
10
- relativeAge
11
- } from "./chunk-WZZCA23D.js";
12
8
  import {
13
9
  daemonFetch
14
10
  } from "./chunk-M74I3HHF.js";
11
+ import {
12
+ getClient,
13
+ urlOf
14
+ } from "./chunk-LOPXTW6H.js";
15
15
  import {
16
16
  command
17
17
  } from "./chunk-TXSA4Q3V.js";
@@ -4,19 +4,19 @@ import {
4
4
  formatSender,
5
5
  isCompact
6
6
  } from "./chunk-7YJY3F2R.js";
7
+ import {
8
+ resolveMindName
9
+ } from "./chunk-BTY4WNFE.js";
7
10
  import {
8
11
  readStdin
9
12
  } from "./chunk-33ODGMFZ.js";
13
+ import {
14
+ daemonFetch
15
+ } from "./chunk-M74I3HHF.js";
10
16
  import {
11
17
  getClient,
12
18
  urlOf
13
19
  } from "./chunk-LOPXTW6H.js";
14
- import {
15
- resolveMindName
16
- } from "./chunk-BTY4WNFE.js";
17
- import {
18
- daemonFetch
19
- } from "./chunk-M74I3HHF.js";
20
20
  import {
21
21
  command
22
22
  } from "./chunk-TXSA4Q3V.js";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-M74I3HHF.js";
5
2
  import {
6
3
  promptLine
7
4
  } from "./chunk-VHWGEJ4V.js";
5
+ import {
6
+ daemonFetch
7
+ } from "./chunk-M74I3HHF.js";
8
8
  import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- getClient,
4
- urlOf
5
- } from "./chunk-LOPXTW6H.js";
6
2
  import {
7
3
  resolveMindName
8
4
  } from "./chunk-BTY4WNFE.js";
9
5
  import {
10
6
  daemonFetch
11
7
  } from "./chunk-M74I3HHF.js";
8
+ import {
9
+ getClient,
10
+ urlOf
11
+ } from "./chunk-LOPXTW6H.js";
12
12
  import {
13
13
  command
14
14
  } from "./chunk-TXSA4Q3V.js";