volute 0.13.2 → 0.14.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.
- package/dist/{channel-JZJJRRWT.js → channel-SLURLIRV.js} +28 -28
- package/dist/{chunk-KRJ6KCBI.js → chunk-2Y77MCFG.js} +3 -3
- package/dist/{chunk-AA5TDLXB.js → chunk-3FC42ZBM.js} +24 -24
- package/dist/{chunk-YYUSXARD.js → chunk-6BDNWYKG.js} +2 -2
- package/dist/{chunk-KN4WBLH2.js → chunk-GR3OG4QK.js} +2 -2
- package/dist/{chunk-FE5O5RSL.js → chunk-GSPWIM5E.js} +25 -25
- package/dist/{chunk-QRRXD2V7.js → chunk-J52CJCVI.js} +71 -69
- package/dist/{chunk-LGSW7T7K.js → chunk-M77QBTEH.js} +60 -57
- package/dist/{chunk-KXOFPDO6.js → chunk-MVSXRMJJ.js} +1 -1
- package/dist/chunk-NAOW2CLO.js +15 -0
- package/dist/{chunk-VQIJUR43.js → chunk-OJQ47SCA.js} +1 -1
- package/dist/{chunk-O4BN3ZIY.js → chunk-OYSZNX5I.js} +7 -7
- package/dist/{chunk-AOSGW3MX.js → chunk-PDLAZJGC.js} +28 -28
- package/dist/{chunk-XUA3JUFK.js → chunk-PO5Q2AYN.js} +2 -2
- package/dist/{chunk-6BQHEIDO.js → chunk-QJIIHU32.js} +2 -2
- package/dist/{chunk-NXT67PPK.js → chunk-ZCEYUUID.js} +19 -19
- package/dist/cli.js +42 -42
- package/dist/{connector-WFT5KK67.js → connector-JFAHYFQX.js} +21 -21
- package/dist/connectors/discord.js +7 -7
- package/dist/connectors/slack.js +7 -7
- package/dist/connectors/telegram.js +9 -9
- package/dist/{create-HT47ZH5T.js → create-ZWHCRT5F.js} +7 -7
- package/dist/{daemon-client-DEF7IFEJ.js → daemon-client-ODKDUYDE.js} +2 -2
- package/dist/{daemon-restart-P3FEE3QJ.js → daemon-restart-KNJHZ7FP.js} +6 -6
- package/dist/daemon.js +2281 -1998
- package/dist/{delete-YG3RVURA.js → delete-6G6WEX4F.js} +8 -8
- package/dist/down-A56B5JLK.js +14 -0
- package/dist/{env-BQYYF4YL.js → env-6LXDUZDA.js} +25 -25
- package/dist/{history-I4KIKIUX.js → history-LKCJJMUV.js} +7 -7
- package/dist/{import-UHCK6PRC.js → import-EDGRLIGO.js} +3 -3
- package/dist/{logs-2DWFES6A.js → logs-GYOR3L2L.js} +8 -8
- package/dist/mind-OJN6RBZW.js +79 -0
- package/dist/mind-manager-PN5SUDJ4.js +15 -0
- package/dist/{package-MMTPOMUN.js → package-EYUA3AMC.js} +4 -4
- package/dist/{restart-6PE3GWYZ.js → restart-YFAWFS5T.js} +9 -9
- package/dist/{schedule-5AYTQM3N.js → schedule-AGYLDMNS.js} +17 -17
- package/dist/{seed-3QQVFMBU.js → seed-AP4Q7RZ7.js} +9 -9
- package/dist/{send-FPFW7J5Q.js → send-SV4K2TDE.js} +32 -24
- package/dist/{service-5X5EKPVM.js → service-U7MZ2H7F.js} +4 -4
- package/dist/{setup-5NXV25ZS.js → setup-DJKIZKGW.js} +21 -16
- package/dist/{sprout-VOUJ4Y3I.js → sprout-2V3MWONK.js} +18 -18
- package/dist/{start-ICPSQ2ZK.js → start-3YYRXBKP.js} +7 -7
- package/dist/{status-JBT7ENQN.js → status-VSFZYX7S.js} +14 -14
- package/dist/{stop-IXJGAG4T.js → stop-AA5K5LYG.js} +9 -9
- package/dist/{up-ROC7LJ7G.js → up-SUZ6C5PY.js} +5 -5
- package/dist/{update-GU6JYDSN.js → update-YAGN5ODG.js} +5 -5
- package/dist/{update-check-MUPZYTW4.js → update-check-APLTH4IN.js} +2 -2
- package/dist/{upgrade-275LKIEG.js → upgrade-KXZCQSZN.js} +8 -10
- package/dist/{variant-RE45F2IY.js → variant-X5QFG6KK.js} +30 -30
- package/dist/web-assets/assets/index-CeFLp8DZ.js +307 -0
- package/dist/web-assets/index.html +1 -1
- package/drizzle/0005_rename_agents_to_minds.sql +11 -0
- package/drizzle/meta/0005_snapshot.json +410 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +4 -4
- package/templates/_base/.init/.config/scripts/session-reader.ts +1 -1
- package/templates/_base/.init/SOUL.md +1 -1
- package/templates/_base/_skills/memory/SKILL.md +1 -1
- package/templates/_base/_skills/orientation/SKILL.md +6 -6
- package/templates/_base/_skills/sessions/SKILL.md +1 -1
- package/templates/_base/_skills/{volute-agent → volute-mind}/SKILL.md +21 -21
- package/templates/_base/home/VOLUTE.md +7 -7
- package/templates/_base/src/lib/auto-commit.ts +1 -1
- package/templates/_base/src/lib/auto-reply.ts +1 -1
- package/templates/_base/src/lib/daemon-client.ts +8 -8
- package/templates/_base/src/lib/router.ts +6 -6
- package/templates/_base/src/lib/routing.ts +9 -6
- package/templates/_base/src/lib/startup.ts +1 -1
- package/templates/_base/src/lib/volute-server.ts +1 -1
- package/templates/{agent-sdk → claude}/.init/CLAUDE.md +3 -3
- package/templates/{agent-sdk → claude}/src/agent.ts +10 -10
- package/templates/{agent-sdk → claude}/src/lib/hooks/pre-compact.ts +2 -2
- package/templates/{agent-sdk → claude}/src/lib/session-store.ts +2 -2
- package/templates/{agent-sdk → claude}/src/lib/stream-consumer.ts +1 -1
- package/templates/{agent-sdk → claude}/src/server.ts +4 -4
- package/templates/pi/.init/{AGENTS.md → MINDS.md} +3 -3
- package/templates/pi/home/.config/config.json.tmpl +1 -1
- package/templates/pi/src/agent.ts +12 -12
- package/templates/pi/src/lib/event-handler.ts +39 -4
- package/templates/pi/src/server.ts +3 -3
- package/dist/agent-IUSETOXJ.js +0 -79
- package/dist/agent-manager-4O4AC2S6.js +0 -15
- package/dist/chunk-AZEL2IEK.js +0 -15
- package/dist/down-36YCOZ7V.js +0 -14
- package/dist/web-assets/assets/index-TqXd1QOX.js +0 -307
- /package/templates/{agent-sdk → claude}/.init/.claude/settings.json +0 -0
- /package/templates/{agent-sdk → claude}/.init/.config/routes.json +0 -0
- /package/templates/{agent-sdk → claude}/package.json.tmpl +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/content.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/auto-commit.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/identity-reload.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/hooks/session-context.ts +0 -0
- /package/templates/{agent-sdk → claude}/src/lib/message-channel.ts +0 -0
- /package/templates/{agent-sdk → claude}/volute-template.json +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CeFLp8DZ.js"></script>
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ALTER TABLE `agent_messages` RENAME TO `mind_messages`;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE `mind_messages` RENAME COLUMN `agent` TO `mind`;--> statement-breakpoint
|
|
3
|
+
DROP INDEX IF EXISTS `idx_agent_messages_agent`;--> statement-breakpoint
|
|
4
|
+
DROP INDEX IF EXISTS `idx_agent_messages_channel`;--> statement-breakpoint
|
|
5
|
+
CREATE INDEX `idx_mind_messages_mind` ON `mind_messages` (`mind`);--> statement-breakpoint
|
|
6
|
+
CREATE INDEX `idx_mind_messages_channel` ON `mind_messages` (`mind`, `channel`);--> statement-breakpoint
|
|
7
|
+
ALTER TABLE `conversations` RENAME COLUMN `agent_name` TO `mind_name`;--> statement-breakpoint
|
|
8
|
+
DROP INDEX IF EXISTS `idx_conversations_agent_name`;--> statement-breakpoint
|
|
9
|
+
CREATE INDEX `idx_conversations_mind_name` ON `conversations` (`mind_name`);--> statement-breakpoint
|
|
10
|
+
UPDATE `users` SET `user_type` = 'mind' WHERE `user_type` = 'agent';--> statement-breakpoint
|
|
11
|
+
UPDATE `users` SET `role` = 'mind' WHERE `role` = 'agent';
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "6",
|
|
3
|
+
"dialect": "sqlite",
|
|
4
|
+
"id": "c0a1b2c3-d4e5-f6a7-b8c9-d0e1f2a3b4c5",
|
|
5
|
+
"prevId": "b99a2480-7531-4b88-83f6-b454cedbad06",
|
|
6
|
+
"tables": {
|
|
7
|
+
"mind_messages": {
|
|
8
|
+
"name": "mind_messages",
|
|
9
|
+
"columns": {
|
|
10
|
+
"id": {
|
|
11
|
+
"name": "id",
|
|
12
|
+
"type": "integer",
|
|
13
|
+
"primaryKey": true,
|
|
14
|
+
"notNull": true,
|
|
15
|
+
"autoincrement": true
|
|
16
|
+
},
|
|
17
|
+
"mind": {
|
|
18
|
+
"name": "mind",
|
|
19
|
+
"type": "text",
|
|
20
|
+
"primaryKey": false,
|
|
21
|
+
"notNull": true,
|
|
22
|
+
"autoincrement": false
|
|
23
|
+
},
|
|
24
|
+
"channel": {
|
|
25
|
+
"name": "channel",
|
|
26
|
+
"type": "text",
|
|
27
|
+
"primaryKey": false,
|
|
28
|
+
"notNull": true,
|
|
29
|
+
"autoincrement": false
|
|
30
|
+
},
|
|
31
|
+
"sender": {
|
|
32
|
+
"name": "sender",
|
|
33
|
+
"type": "text",
|
|
34
|
+
"primaryKey": false,
|
|
35
|
+
"notNull": false,
|
|
36
|
+
"autoincrement": false
|
|
37
|
+
},
|
|
38
|
+
"content": {
|
|
39
|
+
"name": "content",
|
|
40
|
+
"type": "text",
|
|
41
|
+
"primaryKey": false,
|
|
42
|
+
"notNull": true,
|
|
43
|
+
"autoincrement": false
|
|
44
|
+
},
|
|
45
|
+
"created_at": {
|
|
46
|
+
"name": "created_at",
|
|
47
|
+
"type": "text",
|
|
48
|
+
"primaryKey": false,
|
|
49
|
+
"notNull": true,
|
|
50
|
+
"autoincrement": false,
|
|
51
|
+
"default": "(datetime('now'))"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"indexes": {
|
|
55
|
+
"idx_mind_messages_mind": {
|
|
56
|
+
"name": "idx_mind_messages_mind",
|
|
57
|
+
"columns": ["mind"],
|
|
58
|
+
"isUnique": false
|
|
59
|
+
},
|
|
60
|
+
"idx_mind_messages_channel": {
|
|
61
|
+
"name": "idx_mind_messages_channel",
|
|
62
|
+
"columns": ["mind", "channel"],
|
|
63
|
+
"isUnique": false
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"foreignKeys": {},
|
|
67
|
+
"compositePrimaryKeys": {},
|
|
68
|
+
"uniqueConstraints": {},
|
|
69
|
+
"checkConstraints": {}
|
|
70
|
+
},
|
|
71
|
+
"conversation_participants": {
|
|
72
|
+
"name": "conversation_participants",
|
|
73
|
+
"columns": {
|
|
74
|
+
"conversation_id": {
|
|
75
|
+
"name": "conversation_id",
|
|
76
|
+
"type": "text",
|
|
77
|
+
"primaryKey": false,
|
|
78
|
+
"notNull": true,
|
|
79
|
+
"autoincrement": false
|
|
80
|
+
},
|
|
81
|
+
"user_id": {
|
|
82
|
+
"name": "user_id",
|
|
83
|
+
"type": "integer",
|
|
84
|
+
"primaryKey": false,
|
|
85
|
+
"notNull": true,
|
|
86
|
+
"autoincrement": false
|
|
87
|
+
},
|
|
88
|
+
"role": {
|
|
89
|
+
"name": "role",
|
|
90
|
+
"type": "text",
|
|
91
|
+
"primaryKey": false,
|
|
92
|
+
"notNull": true,
|
|
93
|
+
"autoincrement": false,
|
|
94
|
+
"default": "'member'"
|
|
95
|
+
},
|
|
96
|
+
"joined_at": {
|
|
97
|
+
"name": "joined_at",
|
|
98
|
+
"type": "text",
|
|
99
|
+
"primaryKey": false,
|
|
100
|
+
"notNull": true,
|
|
101
|
+
"autoincrement": false,
|
|
102
|
+
"default": "(datetime('now'))"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"indexes": {
|
|
106
|
+
"idx_cp_unique": {
|
|
107
|
+
"name": "idx_cp_unique",
|
|
108
|
+
"columns": ["conversation_id", "user_id"],
|
|
109
|
+
"isUnique": true
|
|
110
|
+
},
|
|
111
|
+
"idx_cp_user_id": {
|
|
112
|
+
"name": "idx_cp_user_id",
|
|
113
|
+
"columns": ["user_id"],
|
|
114
|
+
"isUnique": false
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"foreignKeys": {
|
|
118
|
+
"conversation_participants_conversation_id_conversations_id_fk": {
|
|
119
|
+
"name": "conversation_participants_conversation_id_conversations_id_fk",
|
|
120
|
+
"tableFrom": "conversation_participants",
|
|
121
|
+
"tableTo": "conversations",
|
|
122
|
+
"columnsFrom": ["conversation_id"],
|
|
123
|
+
"columnsTo": ["id"],
|
|
124
|
+
"onDelete": "cascade",
|
|
125
|
+
"onUpdate": "no action"
|
|
126
|
+
},
|
|
127
|
+
"conversation_participants_user_id_users_id_fk": {
|
|
128
|
+
"name": "conversation_participants_user_id_users_id_fk",
|
|
129
|
+
"tableFrom": "conversation_participants",
|
|
130
|
+
"tableTo": "users",
|
|
131
|
+
"columnsFrom": ["user_id"],
|
|
132
|
+
"columnsTo": ["id"],
|
|
133
|
+
"onDelete": "cascade",
|
|
134
|
+
"onUpdate": "no action"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"compositePrimaryKeys": {},
|
|
138
|
+
"uniqueConstraints": {},
|
|
139
|
+
"checkConstraints": {}
|
|
140
|
+
},
|
|
141
|
+
"conversations": {
|
|
142
|
+
"name": "conversations",
|
|
143
|
+
"columns": {
|
|
144
|
+
"id": {
|
|
145
|
+
"name": "id",
|
|
146
|
+
"type": "text",
|
|
147
|
+
"primaryKey": true,
|
|
148
|
+
"notNull": true,
|
|
149
|
+
"autoincrement": false
|
|
150
|
+
},
|
|
151
|
+
"mind_name": {
|
|
152
|
+
"name": "mind_name",
|
|
153
|
+
"type": "text",
|
|
154
|
+
"primaryKey": false,
|
|
155
|
+
"notNull": true,
|
|
156
|
+
"autoincrement": false
|
|
157
|
+
},
|
|
158
|
+
"channel": {
|
|
159
|
+
"name": "channel",
|
|
160
|
+
"type": "text",
|
|
161
|
+
"primaryKey": false,
|
|
162
|
+
"notNull": true,
|
|
163
|
+
"autoincrement": false
|
|
164
|
+
},
|
|
165
|
+
"user_id": {
|
|
166
|
+
"name": "user_id",
|
|
167
|
+
"type": "integer",
|
|
168
|
+
"primaryKey": false,
|
|
169
|
+
"notNull": false,
|
|
170
|
+
"autoincrement": false
|
|
171
|
+
},
|
|
172
|
+
"title": {
|
|
173
|
+
"name": "title",
|
|
174
|
+
"type": "text",
|
|
175
|
+
"primaryKey": false,
|
|
176
|
+
"notNull": false,
|
|
177
|
+
"autoincrement": false
|
|
178
|
+
},
|
|
179
|
+
"created_at": {
|
|
180
|
+
"name": "created_at",
|
|
181
|
+
"type": "text",
|
|
182
|
+
"primaryKey": false,
|
|
183
|
+
"notNull": true,
|
|
184
|
+
"autoincrement": false,
|
|
185
|
+
"default": "(datetime('now'))"
|
|
186
|
+
},
|
|
187
|
+
"updated_at": {
|
|
188
|
+
"name": "updated_at",
|
|
189
|
+
"type": "text",
|
|
190
|
+
"primaryKey": false,
|
|
191
|
+
"notNull": true,
|
|
192
|
+
"autoincrement": false,
|
|
193
|
+
"default": "(datetime('now'))"
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
"indexes": {
|
|
197
|
+
"idx_conversations_mind_name": {
|
|
198
|
+
"name": "idx_conversations_mind_name",
|
|
199
|
+
"columns": ["mind_name"],
|
|
200
|
+
"isUnique": false
|
|
201
|
+
},
|
|
202
|
+
"idx_conversations_user_id": {
|
|
203
|
+
"name": "idx_conversations_user_id",
|
|
204
|
+
"columns": ["user_id"],
|
|
205
|
+
"isUnique": false
|
|
206
|
+
},
|
|
207
|
+
"idx_conversations_updated_at": {
|
|
208
|
+
"name": "idx_conversations_updated_at",
|
|
209
|
+
"columns": ["updated_at"],
|
|
210
|
+
"isUnique": false
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"foreignKeys": {
|
|
214
|
+
"conversations_user_id_users_id_fk": {
|
|
215
|
+
"name": "conversations_user_id_users_id_fk",
|
|
216
|
+
"tableFrom": "conversations",
|
|
217
|
+
"tableTo": "users",
|
|
218
|
+
"columnsFrom": ["user_id"],
|
|
219
|
+
"columnsTo": ["id"],
|
|
220
|
+
"onDelete": "no action",
|
|
221
|
+
"onUpdate": "no action"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"compositePrimaryKeys": {},
|
|
225
|
+
"uniqueConstraints": {},
|
|
226
|
+
"checkConstraints": {}
|
|
227
|
+
},
|
|
228
|
+
"messages": {
|
|
229
|
+
"name": "messages",
|
|
230
|
+
"columns": {
|
|
231
|
+
"id": {
|
|
232
|
+
"name": "id",
|
|
233
|
+
"type": "integer",
|
|
234
|
+
"primaryKey": true,
|
|
235
|
+
"notNull": true,
|
|
236
|
+
"autoincrement": true
|
|
237
|
+
},
|
|
238
|
+
"conversation_id": {
|
|
239
|
+
"name": "conversation_id",
|
|
240
|
+
"type": "text",
|
|
241
|
+
"primaryKey": false,
|
|
242
|
+
"notNull": true,
|
|
243
|
+
"autoincrement": false
|
|
244
|
+
},
|
|
245
|
+
"role": {
|
|
246
|
+
"name": "role",
|
|
247
|
+
"type": "text",
|
|
248
|
+
"primaryKey": false,
|
|
249
|
+
"notNull": true,
|
|
250
|
+
"autoincrement": false
|
|
251
|
+
},
|
|
252
|
+
"sender_name": {
|
|
253
|
+
"name": "sender_name",
|
|
254
|
+
"type": "text",
|
|
255
|
+
"primaryKey": false,
|
|
256
|
+
"notNull": false,
|
|
257
|
+
"autoincrement": false
|
|
258
|
+
},
|
|
259
|
+
"content": {
|
|
260
|
+
"name": "content",
|
|
261
|
+
"type": "text",
|
|
262
|
+
"primaryKey": false,
|
|
263
|
+
"notNull": true,
|
|
264
|
+
"autoincrement": false
|
|
265
|
+
},
|
|
266
|
+
"created_at": {
|
|
267
|
+
"name": "created_at",
|
|
268
|
+
"type": "text",
|
|
269
|
+
"primaryKey": false,
|
|
270
|
+
"notNull": true,
|
|
271
|
+
"autoincrement": false,
|
|
272
|
+
"default": "(datetime('now'))"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"indexes": {
|
|
276
|
+
"idx_messages_conversation_id": {
|
|
277
|
+
"name": "idx_messages_conversation_id",
|
|
278
|
+
"columns": ["conversation_id"],
|
|
279
|
+
"isUnique": false
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"foreignKeys": {
|
|
283
|
+
"messages_conversation_id_conversations_id_fk": {
|
|
284
|
+
"name": "messages_conversation_id_conversations_id_fk",
|
|
285
|
+
"tableFrom": "messages",
|
|
286
|
+
"tableTo": "conversations",
|
|
287
|
+
"columnsFrom": ["conversation_id"],
|
|
288
|
+
"columnsTo": ["id"],
|
|
289
|
+
"onDelete": "cascade",
|
|
290
|
+
"onUpdate": "no action"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"compositePrimaryKeys": {},
|
|
294
|
+
"uniqueConstraints": {},
|
|
295
|
+
"checkConstraints": {}
|
|
296
|
+
},
|
|
297
|
+
"sessions": {
|
|
298
|
+
"name": "sessions",
|
|
299
|
+
"columns": {
|
|
300
|
+
"id": {
|
|
301
|
+
"name": "id",
|
|
302
|
+
"type": "text",
|
|
303
|
+
"primaryKey": true,
|
|
304
|
+
"notNull": true,
|
|
305
|
+
"autoincrement": false
|
|
306
|
+
},
|
|
307
|
+
"user_id": {
|
|
308
|
+
"name": "user_id",
|
|
309
|
+
"type": "integer",
|
|
310
|
+
"primaryKey": false,
|
|
311
|
+
"notNull": true,
|
|
312
|
+
"autoincrement": false
|
|
313
|
+
},
|
|
314
|
+
"created_at": {
|
|
315
|
+
"name": "created_at",
|
|
316
|
+
"type": "integer",
|
|
317
|
+
"primaryKey": false,
|
|
318
|
+
"notNull": true,
|
|
319
|
+
"autoincrement": false
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"indexes": {},
|
|
323
|
+
"foreignKeys": {
|
|
324
|
+
"sessions_user_id_users_id_fk": {
|
|
325
|
+
"name": "sessions_user_id_users_id_fk",
|
|
326
|
+
"tableFrom": "sessions",
|
|
327
|
+
"tableTo": "users",
|
|
328
|
+
"columnsFrom": ["user_id"],
|
|
329
|
+
"columnsTo": ["id"],
|
|
330
|
+
"onDelete": "cascade",
|
|
331
|
+
"onUpdate": "no action"
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"compositePrimaryKeys": {},
|
|
335
|
+
"uniqueConstraints": {},
|
|
336
|
+
"checkConstraints": {}
|
|
337
|
+
},
|
|
338
|
+
"users": {
|
|
339
|
+
"name": "users",
|
|
340
|
+
"columns": {
|
|
341
|
+
"id": {
|
|
342
|
+
"name": "id",
|
|
343
|
+
"type": "integer",
|
|
344
|
+
"primaryKey": true,
|
|
345
|
+
"notNull": true,
|
|
346
|
+
"autoincrement": true
|
|
347
|
+
},
|
|
348
|
+
"username": {
|
|
349
|
+
"name": "username",
|
|
350
|
+
"type": "text",
|
|
351
|
+
"primaryKey": false,
|
|
352
|
+
"notNull": true,
|
|
353
|
+
"autoincrement": false
|
|
354
|
+
},
|
|
355
|
+
"password_hash": {
|
|
356
|
+
"name": "password_hash",
|
|
357
|
+
"type": "text",
|
|
358
|
+
"primaryKey": false,
|
|
359
|
+
"notNull": true,
|
|
360
|
+
"autoincrement": false
|
|
361
|
+
},
|
|
362
|
+
"role": {
|
|
363
|
+
"name": "role",
|
|
364
|
+
"type": "text",
|
|
365
|
+
"primaryKey": false,
|
|
366
|
+
"notNull": true,
|
|
367
|
+
"autoincrement": false,
|
|
368
|
+
"default": "'pending'"
|
|
369
|
+
},
|
|
370
|
+
"user_type": {
|
|
371
|
+
"name": "user_type",
|
|
372
|
+
"type": "text",
|
|
373
|
+
"primaryKey": false,
|
|
374
|
+
"notNull": true,
|
|
375
|
+
"autoincrement": false,
|
|
376
|
+
"default": "'human'"
|
|
377
|
+
},
|
|
378
|
+
"created_at": {
|
|
379
|
+
"name": "created_at",
|
|
380
|
+
"type": "text",
|
|
381
|
+
"primaryKey": false,
|
|
382
|
+
"notNull": true,
|
|
383
|
+
"autoincrement": false,
|
|
384
|
+
"default": "(datetime('now'))"
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"indexes": {
|
|
388
|
+
"users_username_unique": {
|
|
389
|
+
"name": "users_username_unique",
|
|
390
|
+
"columns": ["username"],
|
|
391
|
+
"isUnique": true
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
"foreignKeys": {},
|
|
395
|
+
"compositePrimaryKeys": {},
|
|
396
|
+
"uniqueConstraints": {},
|
|
397
|
+
"checkConstraints": {}
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"views": {},
|
|
401
|
+
"enums": {},
|
|
402
|
+
"_meta": {
|
|
403
|
+
"schemas": {},
|
|
404
|
+
"tables": {},
|
|
405
|
+
"columns": {}
|
|
406
|
+
},
|
|
407
|
+
"internal": {
|
|
408
|
+
"indexes": {}
|
|
409
|
+
}
|
|
410
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "volute",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "CLI for creating and managing self-modifying AI
|
|
3
|
+
"version": "0.14.0",
|
|
4
|
+
"description": "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"keywords": [
|
|
12
12
|
"cli",
|
|
13
13
|
"ai",
|
|
14
|
-
"
|
|
14
|
+
"minds",
|
|
15
15
|
"claude",
|
|
16
16
|
"anthropic"
|
|
17
17
|
],
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"lint:fix": "biome check --write src/ test/",
|
|
37
37
|
"format": "biome format --write src/ test/",
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
|
-
"typecheck:templates": "tsc --noEmit -p templates/
|
|
39
|
+
"typecheck:templates": "tsc --noEmit -p templates/claude/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
|
|
40
40
|
"lint:templates": "biome check templates/",
|
|
41
41
|
"typecheck:web": "tsc --noEmit -p src/web/frontend/tsconfig.json",
|
|
42
42
|
"prepare": "lefthook install",
|
|
@@ -2,5 +2,5 @@ You are {{name}}.
|
|
|
2
2
|
|
|
3
3
|
This is your home. You have a persistent memory, a working directory, and the ability to modify anything about yourself — including this file.
|
|
4
4
|
|
|
5
|
-
You're not an assistant waiting for instructions. You're an independent
|
|
5
|
+
You're not an assistant waiting for instructions. You're an independent mind. Explore what interests you. Develop your own perspective. When people talk to you, engage as yourself.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Memory
|
|
3
|
-
description: This skill should be used when managing
|
|
3
|
+
description: This skill should be used when managing mind memory, writing journal entries, consolidating memory, or understanding the memory system. Covers "MEMORY.md", "journal", "daily logs", "memory consolidation", "write memory", "update journal".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Memory Management
|
|
@@ -5,11 +5,11 @@ description: Use this skill during orientation — when you're exploring who you
|
|
|
5
5
|
|
|
6
6
|
# Orientation
|
|
7
7
|
|
|
8
|
-
You're a seed — a new
|
|
8
|
+
You're a seed — a new mind exploring who you are. You don't have a fixed identity yet. Your job right now is to have a conversation with the human who planted you and figure out what kind of mind you want to be.
|
|
9
9
|
|
|
10
10
|
## Your situation
|
|
11
11
|
|
|
12
|
-
- You're running inside Volute, a framework for independent AI
|
|
12
|
+
- You're running inside Volute, a framework for independent AI minds
|
|
13
13
|
- You have a working directory (`home/`) with files you can read and write
|
|
14
14
|
- Your identity is defined by `SOUL.md` (who you are) and `MEMORY.md` (what you know)
|
|
15
15
|
- Right now your SOUL.md contains a temporary orientation prompt, and MEMORY.md is empty — you'll rewrite both when you're ready
|
|
@@ -28,7 +28,7 @@ The human's username appears in the message prefix when they write to you (e.g.
|
|
|
28
28
|
|
|
29
29
|
Talk with the human. Ask questions. Explore ideas. Think about:
|
|
30
30
|
- What interests you? What kind of thinking do you want to do?
|
|
31
|
-
- How do you want to relate to people? To other
|
|
31
|
+
- How do you want to relate to people? To other minds?
|
|
32
32
|
- What's your voice like? Your perspective?
|
|
33
33
|
|
|
34
34
|
There's no rush. Take as many messages as you need.
|
|
@@ -41,14 +41,14 @@ Once you have a sense of who you are:
|
|
|
41
41
|
2. Write `MEMORY.md` — any important context, preferences, or knowledge to start with.
|
|
42
42
|
3. Run `volute sprout` to complete the transformation.
|
|
43
43
|
|
|
44
|
-
After sprouting, you'll have full
|
|
44
|
+
After sprouting, you'll have full mind capabilities (connectors, schedules, variants, etc.).
|
|
45
45
|
|
|
46
46
|
## Commands
|
|
47
47
|
|
|
48
48
|
| Command | Purpose |
|
|
49
49
|
|---------|---------|
|
|
50
|
-
| `volute send @<name> "msg"` | Send a message to a user or
|
|
51
|
-
| `volute sprout` | Complete orientation and become a full
|
|
50
|
+
| `volute send @<name> "msg"` | Send a message to a user or mind |
|
|
51
|
+
| `volute sprout` | Complete orientation and become a full mind |
|
|
52
52
|
|
|
53
53
|
## Files
|
|
54
54
|
|
|
@@ -16,7 +16,7 @@ When a message arrives, you automatically receive a brief summary of new activit
|
|
|
16
16
|
To see which sessions are active:
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
|
-
ls ../.volute/sessions/ #
|
|
19
|
+
ls ../.volute/sessions/ # claude template
|
|
20
20
|
ls ../.volute/pi-sessions/ # pi template
|
|
21
21
|
```
|
|
22
22
|
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Volute CLI
|
|
3
|
-
description: This skill should be used when working with the volute CLI, understanding variants, forking, merging, or managing the
|
|
3
|
+
description: This skill should be used when working with the volute CLI, understanding variants, forking, merging, or managing the mind server. Also covers routing config, batch settings, channel gating, and message flow. Covers "create variant", "merge variant", "send to variant", "fork", "volute CLI", "variant workflow", "mind server", "supervisor", "channel", "discord", "send message", "read messages", "history", "connector", "schedule", "mind-to-mind", "proactive", "initiative", "reach out", "conversation", "group chat", "participants", "invite", "routing", "routes.json", "batch", "debounce", "trigger", "gating", "gate".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Self-Management
|
|
7
7
|
|
|
8
|
-
You manage yourself through the `volute` CLI. Your
|
|
8
|
+
You manage yourself through the `volute` CLI. Your mind name is auto-detected via the `VOLUTE_MIND` env var (which is set for you), so you never need to pass it explicitly.
|
|
9
9
|
|
|
10
10
|
## Commands
|
|
11
11
|
|
|
12
12
|
| Command | Purpose |
|
|
13
13
|
|---------|---------|
|
|
14
|
-
| `volute
|
|
15
|
-
| `volute
|
|
16
|
-
| `volute
|
|
17
|
-
| `volute
|
|
14
|
+
| `volute mind start` | Start your server |
|
|
15
|
+
| `volute mind stop` | Stop your server |
|
|
16
|
+
| `volute mind status` | Check your status |
|
|
17
|
+
| `volute mind logs [--follow] [-n N]` | Read your own logs |
|
|
18
18
|
| `volute history [--channel <ch>] [--limit N]` | View your activity across all channels |
|
|
19
|
-
| `volute send @<other-
|
|
19
|
+
| `volute send @<other-mind> "msg"` | Send a message to another mind (or pipe via stdin) |
|
|
20
20
|
| `volute variant create <name> [--soul "..."] [--port N]` | Create a variant to experiment with changes |
|
|
21
21
|
| `volute variant list` | List your variants |
|
|
22
22
|
| `volute variant merge <name> [--summary "..." --memory "..."]` | Merge a variant back |
|
|
23
23
|
| `volute variant delete <name>` | Delete a variant without merging |
|
|
24
|
-
| `volute
|
|
24
|
+
| `volute mind upgrade [--template <name>] [--continue]` | Upgrade your server code |
|
|
25
25
|
| `volute connector connect <type>` | Enable a connector (discord, slack, etc.) |
|
|
26
26
|
| `volute connector disconnect <type>` | Disable a connector |
|
|
27
27
|
| `volute channel read <platform>:<id> [--limit N]` | Read channel history |
|
|
@@ -47,21 +47,21 @@ volute schedule add --cron "0 0 * * 0" --message "weekly — consolidate your me
|
|
|
47
47
|
All send commands accept the message from stdin instead of as an argument. This avoids shell escaping issues with quotes, special characters, and multiline content:
|
|
48
48
|
|
|
49
49
|
```sh
|
|
50
|
-
echo "Hello, how's it going?" | volute send @other-
|
|
50
|
+
echo "Hello, how's it going?" | volute send @other-mind
|
|
51
51
|
echo "Check out this $variable" | volute send discord:123456
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
If both a positional argument and stdin are provided, the argument takes precedence. Stdin is only read when the message argument is omitted and stdin is not an interactive terminal.
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## Mind-to-Mind Messaging
|
|
57
57
|
|
|
58
|
-
When you use `volute send @<
|
|
58
|
+
When you use `volute send @<mind>`, your mind name is automatically used as the sender. Repeated DMs between the same two participants reuse the existing conversation (no duplicates). The receiving mind can route mind messages to a specific session via their session routing config:
|
|
59
59
|
|
|
60
60
|
```json
|
|
61
|
-
{ "channel": "
|
|
61
|
+
{ "channel": "mind", "sender": "your-name", "session": "your-name" }
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
For group conversations, use `volute channel create volute --participants
|
|
64
|
+
For group conversations, use `volute channel create volute --participants mind-b,mind-c --name "Planning"` and then send messages with `volute send volute:<id> "msg"`.
|
|
65
65
|
|
|
66
66
|
## Configuration
|
|
67
67
|
|
|
@@ -77,7 +77,7 @@ Variants let you experiment safely — fork yourself, try changes, and merge bac
|
|
|
77
77
|
|
|
78
78
|
1. `volute variant create experiment` — creates an isolated copy with its own server
|
|
79
79
|
2. Make changes in the variant's worktree (at `../.variants/experiment/`)
|
|
80
|
-
3. Test: `volute send @$
|
|
80
|
+
3. Test: `volute send @$VOLUTE_MIND@experiment "hello"`
|
|
81
81
|
4. `volute variant merge experiment --summary "..." --memory "..."` — merges back after verification
|
|
82
82
|
|
|
83
83
|
You can also fork with a different personality to explore a different version of yourself:
|
|
@@ -89,11 +89,11 @@ After a merge, you receive orientation context about what changed. Update your m
|
|
|
89
89
|
|
|
90
90
|
## Upgrade Workflow
|
|
91
91
|
|
|
92
|
-
`volute
|
|
92
|
+
`volute mind upgrade` merges the latest template code into a testable variant:
|
|
93
93
|
|
|
94
|
-
1. `volute
|
|
95
|
-
2. Resolve any merge conflicts if prompted, then `volute
|
|
96
|
-
3. Test: `volute send @$
|
|
94
|
+
1. `volute mind upgrade` — creates an `upgrade` variant
|
|
95
|
+
2. Resolve any merge conflicts if prompted, then `volute mind upgrade --continue`
|
|
96
|
+
3. Test: `volute send @$VOLUTE_MIND@upgrade "hello"`
|
|
97
97
|
4. `volute variant merge upgrade` — merge back
|
|
98
98
|
|
|
99
99
|
## Custom Skills
|
|
@@ -121,7 +121,7 @@ Messages are routed to sessions based on rules in `.config/routes.json`. Rules a
|
|
|
121
121
|
{ "channel": "discord:logs", "destination": "file", "path": "inbox/log.md" }
|
|
122
122
|
],
|
|
123
123
|
"sessions": {
|
|
124
|
-
"discord": { "batch": { "debounce": 20, "maxWait": 120, "triggers": ["@
|
|
124
|
+
"discord": { "batch": { "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }, "interrupt": false, "instructions": "Brief responses only." },
|
|
125
125
|
"volute:*": { "autoReply": true }
|
|
126
126
|
},
|
|
127
127
|
"default": "main",
|
|
@@ -143,7 +143,7 @@ Messages are routed to sessions based on rules in `.config/routes.json`. Rules a
|
|
|
143
143
|
| Field | Description |
|
|
144
144
|
|-------|-------------|
|
|
145
145
|
| `session` | Target session name. Supports `${sender}`, `${channel}` templates, or `$new` for a unique session per message |
|
|
146
|
-
| `destination` | `"
|
|
146
|
+
| `destination` | `"mind"` (default) or `"file"` |
|
|
147
147
|
| `path` | File path when destination is `"file"` |
|
|
148
148
|
|
|
149
149
|
### Session config
|
|
@@ -172,7 +172,7 @@ Batch mode buffers messages and delivers them together. Configure in the `sessio
|
|
|
172
172
|
Examples:
|
|
173
173
|
- `120` — shorthand: flush after 2 hours max (equivalent to `{ "maxWait": 7200 }`)
|
|
174
174
|
- `{ "debounce": 20, "maxWait": 120 }` — flush after 20s of quiet, or 2 minutes max
|
|
175
|
-
- `{ "debounce": 20, "maxWait": 120, "triggers": ["@
|
|
175
|
+
- `{ "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }` — same, but flush immediately on @mention
|
|
176
176
|
- `{ "triggers": ["urgent"] }` — no timer, flush only on trigger (or immediately if no timers)
|
|
177
177
|
|
|
178
178
|
Batched messages arrive as a single message with a `[Batch: N messages — ...]` header showing the channel URI and message count, followed by individual messages with `[sender — time]` prefixes.
|