@animalabs/connectome-host 0.7.4 → 0.8.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/.env.example +12 -5
- package/.github/PULL_REQUEST_TEMPLATE.md +3 -2
- package/.github/workflows/changelog.yml +9 -4
- package/.github/workflows/ci.yml +5 -3
- package/.github/workflows/publish.yml +12 -6
- package/CHANGELOG.md +245 -0
- package/CONTRIBUTING.md +47 -19
- package/README.md +27 -0
- package/bun.lock +27 -31
- package/changelog.d/README.md +28 -0
- package/package.json +5 -5
- package/recipes/SETUP.md +11 -5
- package/recipes/TRIUMVIRATE-SETUP.md +68 -14
- package/recipes/knowledge-miner.json +0 -30
- package/recipes/mock-test.json +19 -0
- package/recipes/triumvirate.json +6 -1
- package/scripts/release-changelog.ts +210 -21
- package/src/cache-keepalive-log.ts +41 -0
- package/src/commands.ts +96 -0
- package/src/framework-strategy.ts +37 -0
- package/src/gate-telemetry.ts +106 -0
- package/src/headless.ts +10 -0
- package/src/index.ts +167 -55
- package/src/mcpl-config.ts +99 -1
- package/src/modules/identity-module.ts +310 -2
- package/src/modules/instructions-module.ts +265 -0
- package/src/modules/mcpl-admin-module.ts +58 -11
- package/src/modules/subagent-module.ts +18 -0
- package/src/recipe.ts +732 -25
- package/src/web/panel-data.ts +19 -0
- package/src/workspace-mounts.ts +73 -0
- package/test/audit-module-optins.test.ts +10 -3
- package/test/cache-keepalive-log.test.ts +83 -0
- package/test/conversations-recipe.test.ts +142 -0
- package/test/framework-fkm-composition.test.ts +35 -3
- package/test/framework-strategy-defaults.test.ts +19 -0
- package/test/gate-telemetry-adapter.test.ts +84 -0
- package/test/gate-telemetry.test.ts +91 -0
- package/test/identity-and-surfaces.test.ts +212 -1
- package/test/instructions-module.test.ts +258 -0
- package/test/mcpl-admin-module.test.ts +41 -0
- package/test/mcpl-agent-overlay.test.ts +51 -3
- package/test/mcpl-child-env.test.ts +64 -0
- package/test/nudge-command.test.ts +47 -0
- package/test/recipe-cache-keepalive.test.ts +59 -0
- package/test/recipe-compression-fallback.test.ts +19 -0
- package/test/recipe-hybrid-prose-routing.test.ts +12 -0
- package/test/recipe-instructions.test.ts +176 -0
- package/test/recipe-kv-unified.test.ts +87 -0
- package/test/recipe-mcp-source.test.ts +54 -0
- package/test/recipe-openai-compatible.test.ts +54 -0
- package/test/recipe-path-resolution.test.ts +19 -8
- package/test/recipe-provider.test.ts +14 -0
- package/test/recipe-save-unresolved.test.ts +244 -0
- package/test/recipe-source-only.test.ts +38 -0
- package/test/release-changelog.test.ts +202 -0
- package/test/subagent-prose-routing.test.ts +109 -0
- package/test/workspace-mounts.test.ts +68 -0
- package/web/src/App.tsx +1 -0
- package/web/src/Health.tsx +61 -1
package/bun.lock
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"lockfileVersion": 1,
|
|
3
|
-
"configVersion":
|
|
3
|
+
"configVersion": 0,
|
|
4
4
|
"workspaces": {
|
|
5
5
|
"": {
|
|
6
|
-
"name": "connectome-host",
|
|
6
|
+
"name": "@animalabs/connectome-host",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@animalabs/agent-framework": "^0.
|
|
9
|
-
"@animalabs/chronicle": "^0.
|
|
10
|
-
"@animalabs/context-manager": "^0.6.
|
|
11
|
-
"@animalabs/membrane": "^0.5.
|
|
8
|
+
"@animalabs/agent-framework": "^0.12.0",
|
|
9
|
+
"@animalabs/chronicle": "^0.3.0",
|
|
10
|
+
"@animalabs/context-manager": "^0.6.3",
|
|
11
|
+
"@animalabs/membrane": "^0.5.82",
|
|
12
12
|
"@opentui/core": "^0.1.82",
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
},
|
|
20
20
|
},
|
|
21
21
|
"packages": {
|
|
22
|
-
"@animalabs/agent-framework": ["@animalabs/agent-framework@0.
|
|
22
|
+
"@animalabs/agent-framework": ["@animalabs/agent-framework@0.12.0", "", { "dependencies": { "@animalabs/chronicle": "^0.3.0", "@animalabs/context-manager": "^0.6.0", "@animalabs/membrane": "^0.5.78", "chokidar": "^4.0.3", "discord.js": "^14.25.1", "ws": "^8.18.0" }, "bin": { "agent-framework-mcp": "dist/src/api/mcp-server.js", "agent-framework-recover": "dist/src/recovery/recover-cli.js" } }, "sha512-Yj0E4vA+kqMxp8LzVT1DBBppwBtPaaweOCloO47pAbJemLzLsJoCD1O9GOYjZ75LLfvGenzLgg1fWo0wXkMJ1w=="],
|
|
23
23
|
|
|
24
|
-
"@animalabs/chronicle": ["@animalabs/chronicle@0.
|
|
24
|
+
"@animalabs/chronicle": ["@animalabs/chronicle@0.3.0", "", {}, "sha512-6BBJ9pWb8AnuHTNJTU07Y6Wut3IvdgWFxsy05IdlWcEnR5W23dlaBlaeJq7gDc7TwX05HfsDC+QZFEc69G+s4Q=="],
|
|
25
25
|
|
|
26
|
-
"@animalabs/context-manager": ["@animalabs/context-manager@0.6.
|
|
26
|
+
"@animalabs/context-manager": ["@animalabs/context-manager@0.6.3", "", { "dependencies": { "@animalabs/chronicle": "^0.3.0", "@animalabs/membrane": "^0.5.69" } }, "sha512-zh60LgZxXzBbGrLpDHBAfGSPSL/H8mxz8nSWLOSh4pjiTOYbD0o0BjAM8CFz4LiaOIXnuSCbRoiv5UKsnrKwDw=="],
|
|
27
27
|
|
|
28
|
-
"@animalabs/membrane": ["@animalabs/membrane@0.5.
|
|
28
|
+
"@animalabs/membrane": ["@animalabs/membrane@0.5.82", "", { "dependencies": { "@anthropic-ai/sdk": "^0.52.0" } }, "sha512-kCI3s/HXnXBPVcYCXIZfsdJBLRj77j5QyA9Hor1mC/nyD35D7e7N/VgR9awxqdGGWgIvgpjs6owXbGMk5t1pQA=="],
|
|
29
29
|
|
|
30
30
|
"@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.52.0", "", { "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-d4c+fg+xy9e46c8+YnrrgIQR45CZlAi7PwdzIfDXDM6ACxEZli1/fxhURsq30ZpMZy6LvSkr41jGq5aF5TD7rQ=="],
|
|
31
31
|
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
"@discordjs/formatters": ["@discordjs/formatters@0.6.2", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ=="],
|
|
39
39
|
|
|
40
|
-
"@discordjs/rest": ["@discordjs/rest@2.6.
|
|
40
|
+
"@discordjs/rest": ["@discordjs/rest@2.6.3", "", { "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.2.0", "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.5", "@vladfrangu/async_event_emitter": "^2.4.6", "discord-api-types": "^0.38.50", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "^6.27.0" } }, "sha512-wvOylxNYJkwKjctS/Mn5GP1w9r3/rzyH+ThD1JlAca6zEdlHs8QWBBUQJpU5Q+W6DoIj/Ljh1IPlZs7hTU+UAg=="],
|
|
41
41
|
|
|
42
42
|
"@discordjs/util": ["@discordjs/util@1.2.0", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg=="],
|
|
43
43
|
|
|
@@ -117,23 +117,23 @@
|
|
|
117
117
|
|
|
118
118
|
"@sapphire/shapeshift": ["@sapphire/shapeshift@4.0.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" } }, "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg=="],
|
|
119
119
|
|
|
120
|
-
"@sapphire/snowflake": ["@sapphire/snowflake@3.5.
|
|
120
|
+
"@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="],
|
|
121
121
|
|
|
122
122
|
"@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="],
|
|
123
123
|
|
|
124
124
|
"@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
|
|
125
125
|
|
|
126
|
-
"@types/node": ["@types/node@22.
|
|
126
|
+
"@types/node": ["@types/node@22.20.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q=="],
|
|
127
127
|
|
|
128
128
|
"@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
|
|
129
129
|
|
|
130
130
|
"@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.7", "", {}, "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g=="],
|
|
131
131
|
|
|
132
|
-
"@webgpu/types": ["@webgpu/types@0.1.
|
|
132
|
+
"@webgpu/types": ["@webgpu/types@0.1.71", "", {}, "sha512-mMy8/ODcKhab808co15eW+yN+HgXoQxRQHTiBV9Mrvl1r0ufnid7YOcI+gi4eUWSWl9ezD6TW2KXccrL8HCh2A=="],
|
|
133
133
|
|
|
134
134
|
"abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="],
|
|
135
135
|
|
|
136
|
-
"ansi-regex": ["ansi-regex@6.
|
|
136
|
+
"ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="],
|
|
137
137
|
|
|
138
138
|
"any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="],
|
|
139
139
|
|
|
@@ -163,9 +163,9 @@
|
|
|
163
163
|
|
|
164
164
|
"diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="],
|
|
165
165
|
|
|
166
|
-
"discord-api-types": ["discord-api-types@0.38.
|
|
166
|
+
"discord-api-types": ["discord-api-types@0.38.53", "", {}, "sha512-HL1zz/UuZ+bbJjA/X8Kbxx9gk8v9rJAbTeWRNYKmIdjwJ7EovjlHgoJTxcLpATfNJ+AonOtMdy3Y5MVIJAAd/A=="],
|
|
167
167
|
|
|
168
|
-
"discord.js": ["discord.js@14.
|
|
168
|
+
"discord.js": ["discord.js@14.27.0", "", { "dependencies": { "@discordjs/builders": "^1.14.1", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.2", "@discordjs/rest": "^2.6.2", "@discordjs/util": "^1.2.0", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.5", "discord-api-types": "^0.38.49", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "^6.27.0" } }, "sha512-qHbFlFG2N7y3LjPySYsL6A1+BnX6bkTVgo842EX0CqVPk/KTMwZkojPHEXKsQUpWZNyz5BISNHK1cPpQw0+m4A=="],
|
|
169
169
|
|
|
170
170
|
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
|
|
171
171
|
|
|
@@ -195,11 +195,11 @@
|
|
|
195
195
|
|
|
196
196
|
"lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="],
|
|
197
197
|
|
|
198
|
-
"magic-bytes.js": ["magic-bytes.js@1.13.
|
|
198
|
+
"magic-bytes.js": ["magic-bytes.js@1.13.1", "", {}, "sha512-x5sn4UX2k5gCWlcfmoFwG4TPie8+dctESyqOBdhB5p6MsgWXdBKGmt9nXPObj/JI50TTL928lc5Yt1WntMn1bw=="],
|
|
199
199
|
|
|
200
|
-
"marked": ["marked@17.0.1", "", { "bin":
|
|
200
|
+
"marked": ["marked@17.0.1", "", { "bin": "bin/marked.js" }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="],
|
|
201
201
|
|
|
202
|
-
"mime": ["mime@3.0.0", "", { "bin":
|
|
202
|
+
"mime": ["mime@3.0.0", "", { "bin": "cli.js" }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="],
|
|
203
203
|
|
|
204
204
|
"omggif": ["omggif@1.0.10", "", {}, "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="],
|
|
205
205
|
|
|
@@ -213,9 +213,9 @@
|
|
|
213
213
|
|
|
214
214
|
"peek-readable": ["peek-readable@4.1.0", "", {}, "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="],
|
|
215
215
|
|
|
216
|
-
"pixelmatch": ["pixelmatch@5.3.0", "", { "dependencies": { "pngjs": "^6.0.0" }, "bin":
|
|
216
|
+
"pixelmatch": ["pixelmatch@5.3.0", "", { "dependencies": { "pngjs": "^6.0.0" }, "bin": "bin/pixelmatch" }, "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q=="],
|
|
217
217
|
|
|
218
|
-
"planck": ["planck@1.
|
|
218
|
+
"planck": ["planck@1.4.2", "", { "peerDependencies": { "stage-js": "^1.0.0-alpha.12" } }, "sha512-mNbhnV3g8X2rwGxzcesjmN8BDA6qfXgQxXVMkWau9MCRlQY0RLNEkyHlVp6yFy/X6qrzAXyNONCnZ1cGDLrNew=="],
|
|
219
219
|
|
|
220
220
|
"pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="],
|
|
221
221
|
|
|
@@ -229,11 +229,11 @@
|
|
|
229
229
|
|
|
230
230
|
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
|
231
231
|
|
|
232
|
-
"sax": ["sax@1.6.
|
|
232
|
+
"sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="],
|
|
233
233
|
|
|
234
234
|
"simple-xml-to-json": ["simple-xml-to-json@1.2.7", "", {}, "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q=="],
|
|
235
235
|
|
|
236
|
-
"stage-js": ["stage-js@1.0.
|
|
236
|
+
"stage-js": ["stage-js@1.0.1", "", {}, "sha512-cz14aPp/wY0s3bkb/B93BPP5ZAEhgBbRmAT3CCDqert8eCAqIpQ0RB2zpK8Ksxf+Pisl5oTzvPHtL4CVzzeHcw=="],
|
|
237
237
|
|
|
238
238
|
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
|
239
239
|
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
|
|
256
256
|
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
257
257
|
|
|
258
|
-
"undici": ["undici@6.
|
|
258
|
+
"undici": ["undici@6.28.0", "", {}, "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA=="],
|
|
259
259
|
|
|
260
260
|
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
261
261
|
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
|
|
264
264
|
"web-tree-sitter": ["web-tree-sitter@0.25.10", "", { "peerDependencies": { "@types/emscripten": "^1.40.0" }, "optionalPeers": ["@types/emscripten"] }, "sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA=="],
|
|
265
265
|
|
|
266
|
-
"ws": ["ws@8.21.
|
|
266
|
+
"ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="],
|
|
267
267
|
|
|
268
268
|
"xml-parse-from-string": ["xml-parse-from-string@1.0.1", "", {}, "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="],
|
|
269
269
|
|
|
@@ -275,14 +275,10 @@
|
|
|
275
275
|
|
|
276
276
|
"zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
|
|
277
277
|
|
|
278
|
-
"@animalabs/
|
|
279
|
-
|
|
280
|
-
"@animalabs/context-manager/@animalabs/chronicle": ["@animalabs/chronicle@0.2.6", "", { "optionalDependencies": { "@animalabs/chronicle-darwin-arm64": "0.2.6", "@animalabs/chronicle-darwin-x64": "0.2.6", "@animalabs/chronicle-linux-arm64-gnu": "0.2.6", "@animalabs/chronicle-linux-x64-gnu": "0.2.6", "@animalabs/chronicle-win32-x64-msvc": "0.2.6" } }, "sha512-+gbt2GR4SP8MnKxeqkJZf6oZn339fLiBtk6GHyBD/gHQ4e4eFqBpTaTd5eKycKBws0xWGcOqyiJFH4IdBkweUA=="],
|
|
278
|
+
"@animalabs/context-manager/@animalabs/membrane": ["@animalabs/membrane@0.5.80", "", { "dependencies": { "@anthropic-ai/sdk": "^0.52.0" } }, "sha512-D4xEij+J/3sJo2ZKFyjAeb0VuJl3QmygzEmi44J0nDNtmJSpUPYMJMaSid/ABj3dIs5EyXds/Ltr4qqyQ2DRTw=="],
|
|
281
279
|
|
|
282
280
|
"@discordjs/rest/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="],
|
|
283
281
|
|
|
284
|
-
"@discordjs/rest/@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="],
|
|
285
|
-
|
|
286
282
|
"@discordjs/ws/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="],
|
|
287
283
|
|
|
288
284
|
"image-q/@types/node": ["@types/node@16.9.1", "", {}, "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="],
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Pending changelog fragments
|
|
2
|
+
|
|
3
|
+
One file per change, so concurrent branches never conflict the way shared
|
|
4
|
+
`CHANGELOG.md` edits do. At release time `npm version` folds every fragment
|
|
5
|
+
here into the new version section of `CHANGELOG.md` and deletes it.
|
|
6
|
+
|
|
7
|
+
**Name:** `<slug>.<breaking|added|changed|fixed>.md`, as a flat file directly
|
|
8
|
+
in this directory. The slug just has to be unique among pending fragments and
|
|
9
|
+
filesystem-safe: the PR number works, and so does the branch name with `/`
|
|
10
|
+
replaced by `-` (`100-prose-routing.added.md`, `fix-retry-backoff.fixed.md`). The
|
|
11
|
+
release script refuses subdirectories and any other stray file here, so a
|
|
12
|
+
misplaced entry fails the release loudly instead of being left out.
|
|
13
|
+
|
|
14
|
+
**Content:** one or more markdown bullets, exactly as they should appear in
|
|
15
|
+
`CHANGELOG.md`. Continuation lines indent two spaces (nested bullets are
|
|
16
|
+
fine); headings and horizontal rules are refused even when indented, since a
|
|
17
|
+
heading inside a fragment would corrupt the section structure:
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
- Recipes accept `agent.proseRouting: "disabled"` for tool-only external
|
|
22
|
+
publication (#100). Continuation lines indent two spaces.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Breaking fragments open by naming who needs to act:
|
|
26
|
+
`- **Recipe authors:** …`.
|
|
27
|
+
|
|
28
|
+
See [CONTRIBUTING.md](../CONTRIBUTING.md#changelog) for what needs an entry.
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@animalabs/connectome-host",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "General-purpose agent TUI host with recipe-based configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"start": "bun src/index.ts",
|
|
8
8
|
"dev": "bun --watch src/index.ts",
|
|
9
9
|
"test": "bun test",
|
|
10
|
-
"version": "bun scripts/release-changelog.ts && git add CHANGELOG.md",
|
|
10
|
+
"version": "bun scripts/release-changelog.ts && git add CHANGELOG.md changelog.d",
|
|
11
11
|
"build:web": "npm --prefix web install && npm --prefix web run build",
|
|
12
12
|
"build:web:ci": "npm ci --prefix web && npm --prefix web run build",
|
|
13
13
|
"relock:web": "rm -rf web/node_modules web/package-lock.json && npm --prefix web install",
|
|
14
14
|
"postinstall": "test -d web && npm --prefix web install && npm --prefix web run build || true"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@animalabs/agent-framework": "^0.
|
|
18
|
-
"@animalabs/chronicle": "^0.
|
|
17
|
+
"@animalabs/agent-framework": "^0.12.0",
|
|
18
|
+
"@animalabs/chronicle": "^0.3.0",
|
|
19
19
|
"@animalabs/context-manager": "^0.6.3",
|
|
20
|
-
"@animalabs/membrane": "^0.5.
|
|
20
|
+
"@animalabs/membrane": "^0.5.82",
|
|
21
21
|
"@opentui/core": "^0.1.82"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
package/recipes/SETUP.md
CHANGED
|
@@ -69,17 +69,17 @@ Works with both gitlab.com and self-hosted GitLab instances.
|
|
|
69
69
|
|
|
70
70
|
No separate installation needed — the recipe uses `npx` to run `@zereight/mcp-gitlab` on demand.
|
|
71
71
|
|
|
72
|
-
### Notion (optional, via an MCP server)
|
|
72
|
+
### Notion (optional, via an MCP server — not included by default)
|
|
73
73
|
|
|
74
|
-
If you want the agent to read your Notion workspace,
|
|
74
|
+
The recipe ships **without** a Notion server: the adapter its prompt was developed against (`syncntn`) is not publicly available. If you want the agent to read your Notion workspace, add an `mcpServers` entry pointing at any MCP server that exposes Notion search and page-read tools. The entry name `syncntn` is just a label — any Notion MCP server works, as long as its exposed tool names match what the system prompt references (`syncntn--search_pages`, `syncntn--get_page_markdown`, and friends). If your server uses different tool names, either name the MCP key `syncntn` and update the prompt, or accept that the agent will discover the tools under whatever names they export.
|
|
75
75
|
|
|
76
76
|
Typical setup:
|
|
77
77
|
|
|
78
78
|
1. Install and start your Notion MCP server somewhere the recipe can launch it.
|
|
79
79
|
2. Note any configuration it needs (API credentials, workspace ID, storage URL).
|
|
80
|
-
3.
|
|
80
|
+
3. Add a `syncntn` block with those values to the recipe in Step 3 below.
|
|
81
81
|
|
|
82
|
-
Don't have a Notion MCP server?
|
|
82
|
+
Don't have a Notion MCP server? Skip this — the agent adapts and works with whatever sources remain.
|
|
83
83
|
|
|
84
84
|
### DuckDuckGo web search (optional, but enabled by default)
|
|
85
85
|
|
|
@@ -98,6 +98,10 @@ cd ../connectome-host
|
|
|
98
98
|
|
|
99
99
|
The recipe expects the entry-point script at `../duckduckgo-mcp-server/.venv/bin/duckduckgo-mcp-server`. No API key needed. Don't want public-web access? Remove the `ddg` block from the recipe.
|
|
100
100
|
|
|
101
|
+
### Scribe — audio/video transcription (optional, not included by default)
|
|
102
|
+
|
|
103
|
+
The miner's prompt also knows how to drive [`dariakroshka/scribe-mcp`](https://github.com/dariakroshka/scribe-mcp) for transcribing recordings. It needs a Gemini API key (media is uploaded to Google's Gemini API) and a sibling checkout, so the shipped recipe omits it. To enable: clone scribe-mcp as a sibling of `connectome-host/`, run `bun install` in it, add a `scribe` block under `mcpServers` (see the [Triumvirate guide's Scribe section](./TRIUMVIRATE-SETUP.md#scribe--audiovideo-transcription-optional-off-by-default) for the exact JSON), and set `GEMINI_API_KEY` in `.env`.
|
|
104
|
+
|
|
101
105
|
## Step 3: Configure the recipe
|
|
102
106
|
|
|
103
107
|
Copy the template recipe and fill in your credentials:
|
|
@@ -120,8 +124,10 @@ Edit `my-recipe.json` and replace the placeholder values in `mcpServers`:
|
|
|
120
124
|
"ZULIP_RC_PATH": "./.zuliprc" // path to your .zuliprc
|
|
121
125
|
}
|
|
122
126
|
},
|
|
127
|
+
// Optional — NOT in the shipped recipe. Add only if you set up a
|
|
128
|
+
// Notion MCP server (see Step 2 above):
|
|
123
129
|
"syncntn": {
|
|
124
|
-
"command": "../
|
|
130
|
+
"command": "../your-notion-mcp/start.sh",
|
|
125
131
|
"env": {
|
|
126
132
|
"STORAGE_URL": "http://localhost:8000",
|
|
127
133
|
"WORKSPACE_ID": "YOUR_WORKSPACE_ID" // <-- replace this
|
|
@@ -138,23 +138,26 @@ ANTHROPIC_API_KEY=sk-ant-...
|
|
|
138
138
|
ZULIP_CHANNEL=your-channel-name
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
Optional — **only** if you want the miner to extract from
|
|
141
|
+
Optional — **only** if you want the miner to extract from GitLab (otherwise remove the `gitlab` block from `recipes/knowledge-miner.json` and skip these):
|
|
142
142
|
|
|
143
143
|
```ini
|
|
144
144
|
# GitLab (knowledge-miner.json: gitlab)
|
|
145
145
|
GITLAB_TOKEN=glpat-...
|
|
146
146
|
GITLAB_API_URL=https://gitlab.example.com/api/v4
|
|
147
|
+
```
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
Optional — the conductor's web UI is protected by Basic-Auth that defaults to `admin` / `admin`. Fine for a laptop; **change it** the moment the machine is reachable by anyone else:
|
|
150
|
+
|
|
151
|
+
```ini
|
|
152
|
+
WEBUI_USERNAME=...
|
|
153
|
+
WEBUI_PASSWORD=...
|
|
151
154
|
```
|
|
152
155
|
|
|
153
156
|
Bun auto-loads `.env`, so nothing else to wire. If a recipe references a `${VAR}` you haven't set, the child's startup will fail with a clear message telling you which variable is missing and which recipe referenced it.
|
|
154
157
|
|
|
155
158
|
## Step 6: Decide which data sources you want
|
|
156
159
|
|
|
157
|
-
The miner child uses `recipes/knowledge-miner.json`, which comes pre-wired to talk to **Zulip,
|
|
160
|
+
The miner child uses `recipes/knowledge-miner.json`, which comes pre-wired to talk to **Zulip, GitLab, and DuckDuckGo** (public web); **Notion** and **Scribe** (audio/video transcription) connections can be added — see their subsections below. The recipe itself references credentials via `${VAR}` placeholders — you don't edit the recipe to fill in secrets; you set the env vars in Step 5 and the framework substitutes at load time.
|
|
158
161
|
|
|
159
162
|
You decide which sources are active by whether you **set the matching env vars** and whether you **keep the matching mcpServers block in the recipe**.
|
|
160
163
|
|
|
@@ -175,17 +178,29 @@ No separate install — the recipe runs `npx @zereight/mcp-gitlab` on demand.
|
|
|
175
178
|
|
|
176
179
|
To disable: remove the `gitlab` block from `recipes/knowledge-miner.json`. If you leave it in but don't set the env vars, the child will fail to start with a message like `Recipe "recipes/knowledge-miner.json" references environment variable ${GITLAB_TOKEN} which is not set.` — that's the system telling you to either fill in the env var or delete the block.
|
|
177
180
|
|
|
178
|
-
### Notion (optional)
|
|
181
|
+
### Notion (optional, off by default)
|
|
182
|
+
|
|
183
|
+
The recipe ships **without** a Notion server — the adapter it was developed against (`syncntn`) is not publicly available, so a default block would only produce a startup failure. The miner's system prompt still describes the `syncntn--*` tools; the agent simply won't have them until you wire a server in.
|
|
179
184
|
|
|
180
|
-
To enable: install a Notion MCP server (
|
|
185
|
+
To enable: install a Notion MCP server (any server whose tool names match what the prompt references — see [SETUP.md → Notion](./SETUP.md#notion-optional-via-an-mcp-server) for selection caveats), then add a block to `recipes/knowledge-miner.json` under `mcpServers`:
|
|
186
|
+
|
|
187
|
+
```jsonc
|
|
188
|
+
"syncntn": {
|
|
189
|
+
"command": "../your-notion-mcp/start.sh", // however your server is launched
|
|
190
|
+
"env": {
|
|
191
|
+
"STORAGE_SERVICE_URL": "${NOTION_STORAGE_URL}",
|
|
192
|
+
"WORKSPACE_ID": "${NOTION_WORKSPACE_ID}"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
and set the referenced vars in `.env`:
|
|
181
198
|
|
|
182
199
|
```ini
|
|
183
200
|
NOTION_STORAGE_URL=http://localhost:8000
|
|
184
201
|
NOTION_WORKSPACE_ID=...
|
|
185
202
|
```
|
|
186
203
|
|
|
187
|
-
To disable: remove the `syncntn` block from `recipes/knowledge-miner.json`. Same behavior as above — unset env + kept block = startup failure with a clear message.
|
|
188
|
-
|
|
189
204
|
### DuckDuckGo web search (optional, enabled by default)
|
|
190
205
|
|
|
191
206
|
The miner is wired to [`nickclyde/duckduckgo-mcp-server`](https://github.com/nickclyde/duckduckgo-mcp-server) as `ddg`. No API key — DuckDuckGo's public HTML search, scraped at request time.
|
|
@@ -207,14 +222,51 @@ Web hits get tagged `[WEB: <url>]` in mined reports — internal `[SRC]` always
|
|
|
207
222
|
|
|
208
223
|
To disable: remove the `ddg` block from `recipes/knowledge-miner.json`. The agent will skip the public web.
|
|
209
224
|
|
|
225
|
+
### Scribe — audio/video transcription (optional, off by default)
|
|
226
|
+
|
|
227
|
+
The miner's prompt knows how to use [`dariakroshka/scribe-mcp`](https://github.com/dariakroshka/scribe-mcp) to transcribe recordings (via Google's Gemini API — media leaves your machine). The recipe ships without the block: it requires a Gemini API key and a sibling checkout, neither of which a demo should demand.
|
|
228
|
+
|
|
229
|
+
To enable: install the server as a sibling of `connectome-host/`:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
cd ..
|
|
233
|
+
git clone https://github.com/dariakroshka/scribe-mcp.git
|
|
234
|
+
cd scribe-mcp
|
|
235
|
+
bun install
|
|
236
|
+
cd ../connectome-host
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
then add this block to `recipes/knowledge-miner.json` under `mcpServers`:
|
|
240
|
+
|
|
241
|
+
```jsonc
|
|
242
|
+
"scribe": {
|
|
243
|
+
"command": "bun",
|
|
244
|
+
"args": ["../scribe-mcp/src/index.ts"],
|
|
245
|
+
"env": {
|
|
246
|
+
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
|
|
247
|
+
"NOTION_API_KEY": "${NOTION_API_KEY:-}", // only scribe--scribe_notion_page needs it
|
|
248
|
+
"SCRIBE_GLOSSARY_PATH": "./input/glossary.txt",
|
|
249
|
+
"SCRIBE_GLOSSARY_URL": "${SCRIBE_GLOSSARY_URL:-}" // optional domain glossary
|
|
250
|
+
},
|
|
251
|
+
"source": {
|
|
252
|
+
"url": "https://github.com/dariakroshka/scribe-mcp.git",
|
|
253
|
+
"install": { "runtime": "bun", "run": "bun install --frozen-lockfile" },
|
|
254
|
+
"inContainer": { "path": "/scribe-mcp" }
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
and set `GEMINI_API_KEY=...` in `.env`.
|
|
260
|
+
|
|
210
261
|
### Summary table
|
|
211
262
|
|
|
212
|
-
| Source |
|
|
263
|
+
| Source | Block in recipe? | Env vars needed |
|
|
213
264
|
|---|---|---|
|
|
214
|
-
| Zulip | Yes | (configured via `.zuliprc`, no `${VAR}`) |
|
|
215
|
-
| GitLab | Yes
|
|
216
|
-
| Notion |
|
|
217
|
-
| DuckDuckGo | Yes
|
|
265
|
+
| Zulip | Yes (default) | (configured via `.zuliprc`, no `${VAR}`) |
|
|
266
|
+
| GitLab | Yes (default) — remove if not using | `GITLAB_TOKEN`, `GITLAB_API_URL` |
|
|
267
|
+
| Notion | **No** — add a `syncntn` block if using | `NOTION_STORAGE_URL`, `NOTION_WORKSPACE_ID` |
|
|
268
|
+
| DuckDuckGo | Yes (default) — remove if not using | none (no API key) |
|
|
269
|
+
| Scribe | **No** — add a `scribe` block if using | `GEMINI_API_KEY` (+ optional `NOTION_API_KEY`, `SCRIBE_GLOSSARY_URL`) |
|
|
218
270
|
|
|
219
271
|
### Tweaks you can still make to the recipe files
|
|
220
272
|
|
|
@@ -237,6 +289,8 @@ What you'll see:
|
|
|
237
289
|
3. Press **Tab** a couple of times to cycle through view modes. One of them is the **process fleet** view — it lists the three children and their status. All three should reach **ready** (green). If any show **crashed** (red), jump to Troubleshooting.
|
|
238
290
|
4. Ask the conductor `are all three ready?` — it'll run `fleet--list` and confirm. This also serves as a quick "am I set up correctly" smoke test.
|
|
239
291
|
|
|
292
|
+
The conductor also serves a **web UI** on port 7340 (all interfaces, Basic-Auth). Credentials default to `admin` / `admin` unless you set `WEBUI_USERNAME` / `WEBUI_PASSWORD` in `.env` — see Step 5. Open `http://localhost:7340` to watch the fleet from a browser.
|
|
293
|
+
|
|
240
294
|
### The four view modes
|
|
241
295
|
|
|
242
296
|
Press **Tab** to cycle between views. Press **Ctrl+F** to jump straight to the process fleet view from anywhere.
|
|
@@ -32,13 +32,6 @@
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
|
-
"syncntn": {
|
|
36
|
-
"command": "../syncntn/services/mcp/start_mcp_local.sh",
|
|
37
|
-
"env": {
|
|
38
|
-
"STORAGE_SERVICE_URL": "${NOTION_STORAGE_URL}",
|
|
39
|
-
"WORKSPACE_ID": "${NOTION_WORKSPACE_ID}"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
35
|
"gitlab": {
|
|
43
36
|
"command": "npx",
|
|
44
37
|
"args": [
|
|
@@ -66,29 +59,6 @@
|
|
|
66
59
|
"path": "/duckduckgo-mcp-server"
|
|
67
60
|
}
|
|
68
61
|
}
|
|
69
|
-
},
|
|
70
|
-
"scribe": {
|
|
71
|
-
"command": "bun",
|
|
72
|
-
"args": [
|
|
73
|
-
"../scribe-mcp/src/index.ts"
|
|
74
|
-
],
|
|
75
|
-
"env": {
|
|
76
|
-
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
|
|
77
|
-
"NOTION_API_KEY": "${NOTION_API_KEY:-}",
|
|
78
|
-
"SCRIBE_GLOSSARY_PATH": "./input/glossary.txt",
|
|
79
|
-
"SCRIBE_GLOSSARY_URL": "${SCRIBE_GLOSSARY_URL:-}"
|
|
80
|
-
},
|
|
81
|
-
"source": {
|
|
82
|
-
"url": "https://github.com/dariakroshka/scribe-mcp.git",
|
|
83
|
-
"ref": "828ae8ba6ea83ce439ce6ba020ed0223cf096f82",
|
|
84
|
-
"install": {
|
|
85
|
-
"runtime": "bun",
|
|
86
|
-
"run": "bun install --frozen-lockfile"
|
|
87
|
-
},
|
|
88
|
-
"inContainer": {
|
|
89
|
-
"path": "/scribe-mcp"
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
62
|
}
|
|
93
63
|
},
|
|
94
64
|
"modules": {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Mock Test",
|
|
3
|
+
"description": "Zero-cost offline smoke recipe: membrane's mock adapter, no API key, no provider spend. Echoes your messages back through the full host loop.",
|
|
4
|
+
"agent": {
|
|
5
|
+
"name": "agent",
|
|
6
|
+
"provider": "mock",
|
|
7
|
+
"systemPrompt": "You are a mock agent for offline host testing."
|
|
8
|
+
},
|
|
9
|
+
"modules": {
|
|
10
|
+
"subagents": false,
|
|
11
|
+
"lessons": false,
|
|
12
|
+
"retrieval": false,
|
|
13
|
+
"wake": false,
|
|
14
|
+
"workspace": false,
|
|
15
|
+
"webui": {
|
|
16
|
+
"host": "127.0.0.1"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
package/recipes/triumvirate.json
CHANGED