daycare-cli 2026.2.23 → 2026.2.25

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 (247) hide show
  1. package/dist/commands/models.d.ts +10 -0
  2. package/dist/commands/models.d.ts.map +1 -0
  3. package/dist/commands/models.js +210 -0
  4. package/dist/commands/models.js.map +1 -0
  5. package/dist/engine/agents/agent.d.ts.map +1 -1
  6. package/dist/engine/agents/agent.js +28 -17
  7. package/dist/engine/agents/agent.js.map +1 -1
  8. package/dist/engine/agents/agentSystem.d.ts.map +1 -1
  9. package/dist/engine/agents/agentSystem.js +7 -3
  10. package/dist/engine/agents/agentSystem.js.map +1 -1
  11. package/dist/engine/agents/ops/agentBackgroundList.d.ts.map +1 -1
  12. package/dist/engine/agents/ops/agentBackgroundList.js +8 -2
  13. package/dist/engine/agents/ops/agentBackgroundList.js.map +1 -1
  14. package/dist/engine/agents/ops/agentDescriptorCacheKey.d.ts.map +1 -1
  15. package/dist/engine/agents/ops/agentDescriptorCacheKey.js +4 -0
  16. package/dist/engine/agents/ops/agentDescriptorCacheKey.js.map +1 -1
  17. package/dist/engine/agents/ops/agentDescriptorCacheKey.spec.js +16 -0
  18. package/dist/engine/agents/ops/agentDescriptorCacheKey.spec.js.map +1 -1
  19. package/dist/engine/agents/ops/agentDescriptorLabel.d.ts.map +1 -1
  20. package/dist/engine/agents/ops/agentDescriptorLabel.js +6 -0
  21. package/dist/engine/agents/ops/agentDescriptorLabel.js.map +1 -1
  22. package/dist/engine/agents/ops/agentDescriptorLabel.spec.js +8 -0
  23. package/dist/engine/agents/ops/agentDescriptorLabel.spec.js.map +1 -1
  24. package/dist/engine/agents/ops/agentDescriptorRoleResolve.d.ts +8 -0
  25. package/dist/engine/agents/ops/agentDescriptorRoleResolve.d.ts.map +1 -0
  26. package/dist/engine/agents/ops/agentDescriptorRoleResolve.js +27 -0
  27. package/dist/engine/agents/ops/agentDescriptorRoleResolve.js.map +1 -0
  28. package/dist/engine/agents/ops/agentDescriptorRoleResolve.spec.d.ts +2 -0
  29. package/dist/engine/agents/ops/agentDescriptorRoleResolve.spec.d.ts.map +1 -0
  30. package/dist/engine/agents/ops/agentDescriptorRoleResolve.spec.js +63 -0
  31. package/dist/engine/agents/ops/agentDescriptorRoleResolve.spec.js.map +1 -0
  32. package/dist/engine/agents/ops/agentDescriptorTypes.d.ts +10 -0
  33. package/dist/engine/agents/ops/agentDescriptorTypes.d.ts.map +1 -1
  34. package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
  35. package/dist/engine/agents/ops/agentLoopRun.js +7 -3
  36. package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
  37. package/dist/engine/agents/ops/agentPromptResolve.d.ts.map +1 -1
  38. package/dist/engine/agents/ops/agentPromptResolve.js +8 -1
  39. package/dist/engine/agents/ops/agentPromptResolve.js.map +1 -1
  40. package/dist/engine/agents/ops/agentPromptResolve.spec.js +22 -0
  41. package/dist/engine/agents/ops/agentPromptResolve.spec.js.map +1 -1
  42. package/dist/engine/agents/ops/agentSystemPrompt.d.ts.map +1 -1
  43. package/dist/engine/agents/ops/agentSystemPrompt.js +3 -1
  44. package/dist/engine/agents/ops/agentSystemPrompt.js.map +1 -1
  45. package/dist/engine/agents/ops/agentSystemPrompt.spec.js +9 -0
  46. package/dist/engine/agents/ops/agentSystemPrompt.spec.js.map +1 -1
  47. package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.d.ts.map +1 -1
  48. package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.js +3 -2
  49. package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.js.map +1 -1
  50. package/dist/engine/agents/ops/agentSystemPromptSectionModels.d.ts +7 -0
  51. package/dist/engine/agents/ops/agentSystemPromptSectionModels.d.ts.map +1 -0
  52. package/dist/engine/agents/ops/agentSystemPromptSectionModels.js +42 -0
  53. package/dist/engine/agents/ops/agentSystemPromptSectionModels.js.map +1 -0
  54. package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.d.ts +2 -0
  55. package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.d.ts.map +1 -0
  56. package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.js +54 -0
  57. package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.js.map +1 -0
  58. package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.d.ts.map +1 -1
  59. package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.js +3 -2
  60. package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.js.map +1 -1
  61. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.d.ts.map +1 -1
  62. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.js +22 -2
  63. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.js.map +1 -1
  64. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.d.ts +2 -0
  65. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.d.ts.map +1 -0
  66. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.js +62 -0
  67. package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.js.map +1 -0
  68. package/dist/engine/agents/ops/agentToolExecutionAllowlistResolve.d.ts.map +1 -1
  69. package/dist/engine/agents/ops/agentToolExecutionAllowlistResolve.js +8 -0
  70. package/dist/engine/agents/ops/agentToolExecutionAllowlistResolve.js.map +1 -1
  71. package/dist/engine/agents/ops/agentToolExecutionAllowlistResolve.spec.js +8 -0
  72. package/dist/engine/agents/ops/agentToolExecutionAllowlistResolve.spec.js.map +1 -1
  73. package/dist/engine/engine.d.ts.map +1 -1
  74. package/dist/engine/engine.js +8 -0
  75. package/dist/engine/engine.js.map +1 -1
  76. package/dist/engine/ipc/server.d.ts.map +1 -1
  77. package/dist/engine/ipc/server.js +14 -3
  78. package/dist/engine/ipc/server.js.map +1 -1
  79. package/dist/engine/memory/memoryWorker.js +3 -3
  80. package/dist/engine/memory/memoryWorker.js.map +1 -1
  81. package/dist/engine/modules/tools/background.d.ts.map +1 -1
  82. package/dist/engine/modules/tools/background.js +38 -1
  83. package/dist/engine/modules/tools/background.js.map +1 -1
  84. package/dist/engine/modules/tools/channelSendTool.js +6 -0
  85. package/dist/engine/modules/tools/channelSendTool.js.map +1 -1
  86. package/dist/engine/modules/tools/cron.d.ts.map +1 -1
  87. package/dist/engine/modules/tools/cron.js +12 -9
  88. package/dist/engine/modules/tools/cron.js.map +1 -1
  89. package/dist/engine/modules/tools/memoryNodeReadToolBuild.d.ts.map +1 -1
  90. package/dist/engine/modules/tools/memoryNodeReadToolBuild.js +1 -1
  91. package/dist/engine/modules/tools/memoryNodeReadToolBuild.js.map +1 -1
  92. package/dist/engine/modules/tools/memorySearchToolBuild.d.ts +7 -0
  93. package/dist/engine/modules/tools/memorySearchToolBuild.d.ts.map +1 -0
  94. package/dist/engine/modules/tools/memorySearchToolBuild.js +66 -0
  95. package/dist/engine/modules/tools/memorySearchToolBuild.js.map +1 -0
  96. package/dist/engine/modules/tools/sendUserMessageTool.d.ts.map +1 -1
  97. package/dist/engine/modules/tools/sendUserMessageTool.js +3 -1
  98. package/dist/engine/modules/tools/sendUserMessageTool.js.map +1 -1
  99. package/dist/engine/modules/tools/skillToolBuild.d.ts.map +1 -1
  100. package/dist/engine/modules/tools/skillToolBuild.js +17 -5
  101. package/dist/engine/modules/tools/skillToolBuild.js.map +1 -1
  102. package/dist/engine/modules/tools/skillToolBuild.spec.js +50 -0
  103. package/dist/engine/modules/tools/skillToolBuild.spec.js.map +1 -1
  104. package/dist/engine/modules/tools/subuserConfigureToolBuild.d.ts +7 -0
  105. package/dist/engine/modules/tools/subuserConfigureToolBuild.d.ts.map +1 -0
  106. package/dist/engine/modules/tools/subuserConfigureToolBuild.js +95 -0
  107. package/dist/engine/modules/tools/subuserConfigureToolBuild.js.map +1 -0
  108. package/dist/engine/modules/tools/subuserConfigureToolBuild.spec.d.ts +2 -0
  109. package/dist/engine/modules/tools/subuserConfigureToolBuild.spec.d.ts.map +1 -0
  110. package/dist/engine/modules/tools/subuserConfigureToolBuild.spec.js +91 -0
  111. package/dist/engine/modules/tools/subuserConfigureToolBuild.spec.js.map +1 -0
  112. package/dist/engine/modules/tools/subuserCreateToolBuild.d.ts +7 -0
  113. package/dist/engine/modules/tools/subuserCreateToolBuild.d.ts.map +1 -0
  114. package/dist/engine/modules/tools/subuserCreateToolBuild.js +119 -0
  115. package/dist/engine/modules/tools/subuserCreateToolBuild.js.map +1 -0
  116. package/dist/engine/modules/tools/subuserCreateToolBuild.spec.d.ts +2 -0
  117. package/dist/engine/modules/tools/subuserCreateToolBuild.spec.d.ts.map +1 -0
  118. package/dist/engine/modules/tools/subuserCreateToolBuild.spec.js +98 -0
  119. package/dist/engine/modules/tools/subuserCreateToolBuild.spec.js.map +1 -0
  120. package/dist/engine/modules/tools/subuserListToolBuild.d.ts +7 -0
  121. package/dist/engine/modules/tools/subuserListToolBuild.d.ts.map +1 -0
  122. package/dist/engine/modules/tools/subuserListToolBuild.js +69 -0
  123. package/dist/engine/modules/tools/subuserListToolBuild.js.map +1 -0
  124. package/dist/engine/modules/tools/subuserListToolBuild.spec.d.ts +2 -0
  125. package/dist/engine/modules/tools/subuserListToolBuild.spec.d.ts.map +1 -0
  126. package/dist/engine/modules/tools/subuserListToolBuild.spec.js +81 -0
  127. package/dist/engine/modules/tools/subuserListToolBuild.spec.js.map +1 -0
  128. package/dist/engine/modules/tools/topologyToolBuild.d.ts.map +1 -1
  129. package/dist/engine/modules/tools/topologyToolBuild.js +48 -16
  130. package/dist/engine/modules/tools/topologyToolBuild.js.map +1 -1
  131. package/dist/engine/modules/tools/topologyToolBuild.spec.js +98 -0
  132. package/dist/engine/modules/tools/topologyToolBuild.spec.js.map +1 -1
  133. package/dist/main.js +7 -0
  134. package/dist/main.js.map +1 -1
  135. package/dist/plugins/dashboard/site/404.html +1 -1
  136. package/dist/plugins/dashboard/site/_next/static/chunks/app/agent/page-8434e05e02ab5847.js +1 -0
  137. package/dist/plugins/dashboard/site/_next/static/chunks/app/agents/page-70ae793aa3d3a28f.js +1 -0
  138. package/dist/plugins/dashboard/site/_next/static/chunks/app/automations/{page-6a39540c21d6b25b.js → page-6be961a7eafef90d.js} +1 -1
  139. package/dist/plugins/dashboard/site/_next/static/chunks/app/connectors/{page-92a732501885071f.js → page-8e756eb48c3f7c03.js} +1 -1
  140. package/dist/plugins/dashboard/site/_next/static/chunks/app/memory/{page-74c0b70421c567ab.js → page-be87f13a7b6fac14.js} +1 -1
  141. package/dist/plugins/dashboard/site/_next/static/chunks/app/{page-c4cbe1c7aca2ecd7.js → page-bd7cca39bd0f6e71.js} +1 -1
  142. package/dist/plugins/dashboard/site/_next/static/chunks/app/processes/{page-bf7900fe583d361e.js → page-87f7e8a74fbee01f.js} +1 -1
  143. package/dist/plugins/dashboard/site/_next/static/chunks/app/providers/{page-b2e79cb03244c267.js → page-fcedae8d614253d3.js} +1 -1
  144. package/dist/plugins/dashboard/site/_next/static/chunks/app/signals/page-efe599a7802349fa.js +1 -0
  145. package/dist/plugins/dashboard/site/_next/static/chunks/app/tools/page-e669223389d84f30.js +1 -0
  146. package/dist/plugins/dashboard/site/_next/static/css/62b1686547b31a3c.css +5 -0
  147. package/dist/plugins/dashboard/site/agent.html +1 -1
  148. package/dist/plugins/dashboard/site/agent.txt +2 -2
  149. package/dist/plugins/dashboard/site/agents.html +1 -1
  150. package/dist/plugins/dashboard/site/agents.txt +2 -2
  151. package/dist/plugins/dashboard/site/automations.html +1 -1
  152. package/dist/plugins/dashboard/site/automations.txt +2 -2
  153. package/dist/plugins/dashboard/site/connectors.html +1 -1
  154. package/dist/plugins/dashboard/site/connectors.txt +2 -2
  155. package/dist/plugins/dashboard/site/index.html +2 -2
  156. package/dist/plugins/dashboard/site/index.txt +2 -2
  157. package/dist/plugins/dashboard/site/memory.html +1 -1
  158. package/dist/plugins/dashboard/site/memory.txt +2 -2
  159. package/dist/plugins/dashboard/site/processes.html +1 -1
  160. package/dist/plugins/dashboard/site/processes.txt +2 -2
  161. package/dist/plugins/dashboard/site/providers.html +1 -1
  162. package/dist/plugins/dashboard/site/providers.txt +2 -2
  163. package/dist/plugins/dashboard/site/signals.html +1 -1
  164. package/dist/plugins/dashboard/site/signals.txt +2 -2
  165. package/dist/plugins/dashboard/site/telemetry.html +2 -2
  166. package/dist/plugins/dashboard/site/telemetry.txt +1 -1
  167. package/dist/plugins/dashboard/site/tools.html +1 -1
  168. package/dist/plugins/dashboard/site/tools.txt +2 -2
  169. package/dist/plugins/shell/tool.js +4 -2
  170. package/dist/plugins/shell/tool.js.map +1 -1
  171. package/dist/plugins/shell/tool.spec.js +19 -2
  172. package/dist/plugins/shell/tool.spec.js.map +1 -1
  173. package/dist/plugins/telegram/connector.d.ts +2 -0
  174. package/dist/plugins/telegram/connector.d.ts.map +1 -1
  175. package/dist/plugins/telegram/connector.js +9 -0
  176. package/dist/plugins/telegram/connector.js.map +1 -1
  177. package/dist/plugins/telegram/connector.spec.js +60 -0
  178. package/dist/plugins/telegram/connector.spec.js.map +1 -1
  179. package/dist/plugins/telegram/plugin.d.ts +2 -1
  180. package/dist/plugins/telegram/plugin.d.ts.map +1 -1
  181. package/dist/plugins/telegram/plugin.js +43 -3
  182. package/dist/plugins/telegram/plugin.js.map +1 -1
  183. package/dist/plugins/telegram/plugin.spec.d.ts +2 -0
  184. package/dist/plugins/telegram/plugin.spec.d.ts.map +1 -0
  185. package/dist/plugins/telegram/plugin.spec.js +93 -0
  186. package/dist/plugins/telegram/plugin.spec.js.map +1 -0
  187. package/dist/prompts/SYSTEM_MEMORY.md +15 -1
  188. package/dist/prompts/SYSTEM_MODELS.md +42 -0
  189. package/dist/prompts/memory/MEMORY_SEARCH.md +57 -0
  190. package/dist/providers/modelRoleApply.d.ts +13 -0
  191. package/dist/providers/modelRoleApply.d.ts.map +1 -0
  192. package/dist/providers/modelRoleApply.js +27 -0
  193. package/dist/providers/modelRoleApply.js.map +1 -0
  194. package/dist/providers/modelRoleApply.spec.d.ts +2 -0
  195. package/dist/providers/modelRoleApply.spec.d.ts.map +1 -0
  196. package/dist/providers/modelRoleApply.spec.js +36 -0
  197. package/dist/providers/modelRoleApply.spec.js.map +1 -0
  198. package/dist/providers/modelRoleResolve.d.ts +13 -0
  199. package/dist/providers/modelRoleResolve.d.ts.map +1 -0
  200. package/dist/providers/modelRoleResolve.js +23 -0
  201. package/dist/providers/modelRoleResolve.js.map +1 -0
  202. package/dist/providers/modelRoleResolve.spec.d.ts +2 -0
  203. package/dist/providers/modelRoleResolve.spec.d.ts.map +1 -0
  204. package/dist/providers/modelRoleResolve.spec.js +35 -0
  205. package/dist/providers/modelRoleResolve.spec.js.map +1 -0
  206. package/dist/settings.d.ts +7 -0
  207. package/dist/settings.d.ts.map +1 -1
  208. package/dist/settings.js.map +1 -1
  209. package/dist/storage/databaseTypes.d.ts +8 -0
  210. package/dist/storage/databaseTypes.d.ts.map +1 -1
  211. package/dist/storage/migrations/20260222_add_user_parent.d.ts +7 -0
  212. package/dist/storage/migrations/20260222_add_user_parent.d.ts.map +1 -0
  213. package/dist/storage/migrations/20260222_add_user_parent.js +23 -0
  214. package/dist/storage/migrations/20260222_add_user_parent.js.map +1 -0
  215. package/dist/storage/migrations/20260222_add_user_parent.spec.d.ts +2 -0
  216. package/dist/storage/migrations/20260222_add_user_parent.spec.d.ts.map +1 -0
  217. package/dist/storage/migrations/20260222_add_user_parent.spec.js +48 -0
  218. package/dist/storage/migrations/20260222_add_user_parent.spec.js.map +1 -0
  219. package/dist/storage/migrations/20260222_session_ended_at.d.ts +7 -0
  220. package/dist/storage/migrations/20260222_session_ended_at.d.ts.map +1 -0
  221. package/dist/storage/migrations/20260222_session_ended_at.js +18 -0
  222. package/dist/storage/migrations/20260222_session_ended_at.js.map +1 -0
  223. package/dist/storage/migrations/20260222_session_ended_at.spec.d.ts +2 -0
  224. package/dist/storage/migrations/20260222_session_ended_at.spec.d.ts.map +1 -0
  225. package/dist/storage/migrations/20260222_session_ended_at.spec.js +37 -0
  226. package/dist/storage/migrations/20260222_session_ended_at.spec.js.map +1 -0
  227. package/dist/storage/migrations/_migrations.d.ts.map +1 -1
  228. package/dist/storage/migrations/_migrations.js +5 -1
  229. package/dist/storage/migrations/_migrations.js.map +1 -1
  230. package/dist/storage/sessionsRepository.d.ts +5 -0
  231. package/dist/storage/sessionsRepository.d.ts.map +1 -1
  232. package/dist/storage/sessionsRepository.js +9 -1
  233. package/dist/storage/sessionsRepository.js.map +1 -1
  234. package/dist/storage/sessionsRepository.spec.js +31 -1
  235. package/dist/storage/sessionsRepository.spec.js.map +1 -1
  236. package/dist/storage/usersRepository.d.ts +1 -0
  237. package/dist/storage/usersRepository.d.ts.map +1 -1
  238. package/dist/storage/usersRepository.js +18 -2
  239. package/dist/storage/usersRepository.js.map +1 -1
  240. package/package.json +1 -1
  241. package/dist/plugins/dashboard/site/_next/static/chunks/app/agent/page-2d345f6346edc077.js +0 -1
  242. package/dist/plugins/dashboard/site/_next/static/chunks/app/agents/page-326ff3cf564198c7.js +0 -1
  243. package/dist/plugins/dashboard/site/_next/static/chunks/app/signals/page-2992aa1807b6fdab.js +0 -1
  244. package/dist/plugins/dashboard/site/_next/static/chunks/app/tools/page-4a2e5a16190af659.js +0 -1
  245. package/dist/plugins/dashboard/site/_next/static/css/42d76d007d742231.css +0 -5
  246. /package/dist/plugins/dashboard/site/_next/static/{9-NVJBP-YwBbxw-w3gjmQ → Tn0eCf61QYHaE96GNMJsm}/_buildManifest.js +0 -0
  247. /package/dist/plugins/dashboard/site/_next/static/{9-NVJBP-YwBbxw-w3gjmQ → Tn0eCf61QYHaE96GNMJsm}/_ssgManifest.js +0 -0
@@ -0,0 +1,91 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it, vi } from "vitest";
5
+ import { configResolve } from "../../../config/configResolve.js";
6
+ import { Storage } from "../../../storage/storage.js";
7
+ import { UserHome } from "../../users/userHome.js";
8
+ import { subuserConfigureToolBuild } from "./subuserConfigureToolBuild.js";
9
+ import { subuserCreateToolBuild } from "./subuserCreateToolBuild.js";
10
+ const configureToolCall = { id: "tool-2", name: "subuser_configure" };
11
+ const createToolCall = { id: "tool-1", name: "subuser_create" };
12
+ describe("subuserConfigureToolBuild", () => {
13
+ it("updates the gateway agent system prompt", async () => {
14
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-configure-"));
15
+ try {
16
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
17
+ const storage = Storage.open(config.dbPath);
18
+ const owner = await storage.users.findOwner();
19
+ const ownerUserId = owner.id;
20
+ const updateAgentDescriptor = vi.fn();
21
+ const context = contextBuild(ownerUserId, {
22
+ config: { current: config },
23
+ storage,
24
+ updateAgentDescriptor
25
+ });
26
+ // First create a subuser
27
+ const createTool = subuserCreateToolBuild();
28
+ const createResult = await createTool.execute({ name: "my-app", systemPrompt: "Initial prompt." }, context, createToolCall);
29
+ const createTyped = createResult.typedResult;
30
+ const subuserId = createTyped.subuserId;
31
+ const gatewayAgentId = createTyped.gatewayAgentId;
32
+ // Now configure it
33
+ const configureTool = subuserConfigureToolBuild();
34
+ const configureResult = await configureTool.execute({ subuserId, systemPrompt: "Updated prompt." }, context, configureToolCall);
35
+ const configTyped = configureResult.typedResult;
36
+ expect(configTyped.subuserId).toBe(subuserId);
37
+ expect(configTyped.gatewayAgentId).toBe(gatewayAgentId);
38
+ // Verify descriptor was updated in storage
39
+ const agent = await storage.agents.findById(gatewayAgentId);
40
+ expect(agent.descriptor.type).toBe("subuser");
41
+ if (agent.descriptor.type === "subuser") {
42
+ expect(agent.descriptor.systemPrompt).toBe("Updated prompt.");
43
+ }
44
+ // Verify in-memory update was called
45
+ expect(updateAgentDescriptor).toHaveBeenCalled();
46
+ storage.close();
47
+ }
48
+ finally {
49
+ await rm(dir, { recursive: true, force: true });
50
+ }
51
+ });
52
+ it("rejects non-owner callers", async () => {
53
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-configure-reject-"));
54
+ try {
55
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
56
+ const storage = Storage.open(config.dbPath);
57
+ await storage.users.create({ id: "regular-user" });
58
+ const tool = subuserConfigureToolBuild();
59
+ const context = contextBuild("regular-user", {
60
+ config: { current: config },
61
+ storage,
62
+ updateAgentDescriptor: vi.fn()
63
+ });
64
+ await expect(tool.execute({ subuserId: "some-id", systemPrompt: "prompt" }, context, configureToolCall)).rejects.toThrow("Only the owner user can configure subusers.");
65
+ storage.close();
66
+ }
67
+ finally {
68
+ await rm(dir, { recursive: true, force: true });
69
+ }
70
+ });
71
+ });
72
+ function contextBuild(userId, agentSystem) {
73
+ return {
74
+ connectorRegistry: null,
75
+ fileStore: null,
76
+ auth: null,
77
+ logger: console,
78
+ assistant: null,
79
+ permissions: { workingDir: "/workspace", writeDirs: ["/workspace"] },
80
+ agent: { id: "caller-agent" },
81
+ ctx: { agentId: "caller-agent", userId },
82
+ source: "test",
83
+ messageContext: {},
84
+ agentSystem: {
85
+ ...agentSystem,
86
+ userHomeForUserId: (uid) => new UserHome(agentSystem.config.current.usersDir, uid)
87
+ },
88
+ heartbeats: null
89
+ };
90
+ }
91
+ //# sourceMappingURL=subuserConfigureToolBuild.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserConfigureToolBuild.spec.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserConfigureToolBuild.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition } from "@/types";
2
+ /**
3
+ * Builds the subuser_create tool that provisions an isolated child user with a gateway agent.
4
+ * Expects: caller is the owner user; name and systemPrompt are non-empty.
5
+ */
6
+ export declare function subuserCreateToolBuild(): ToolDefinition;
7
+ //# sourceMappingURL=subuserCreateToolBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserCreateToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserCreateToolBuild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAA4C,MAAM,SAAS,CAAC;AAiCxF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CA4FvD"}
@@ -0,0 +1,119 @@
1
+ import { createId } from "@paralleldrive/cuid2";
2
+ import { Type } from "@sinclair/typebox";
3
+ import { agentDescriptorWrite } from "../../agents/ops/agentDescriptorWrite.js";
4
+ import { agentStateWrite } from "../../agents/ops/agentStateWrite.js";
5
+ import { permissionBuildUser } from "../../permissions/permissionBuildUser.js";
6
+ import { userHomeEnsure } from "../../users/userHomeEnsure.js";
7
+ const schema = Type.Object({
8
+ name: Type.String({ minLength: 1 }),
9
+ systemPrompt: Type.String({ minLength: 1 })
10
+ }, { additionalProperties: false });
11
+ const resultSchema = Type.Object({
12
+ summary: Type.String(),
13
+ subuserId: Type.String(),
14
+ gatewayAgentId: Type.String(),
15
+ name: Type.String()
16
+ }, { additionalProperties: false });
17
+ const returns = {
18
+ schema: resultSchema,
19
+ toLLMText: (result) => result.summary
20
+ };
21
+ /**
22
+ * Builds the subuser_create tool that provisions an isolated child user with a gateway agent.
23
+ * Expects: caller is the owner user; name and systemPrompt are non-empty.
24
+ */
25
+ export function subuserCreateToolBuild() {
26
+ return {
27
+ tool: {
28
+ name: "subuser_create",
29
+ description: "Create an isolated subuser with its own memory, filesystem, and a gateway agent. " +
30
+ "Only the owner can create subusers. The gateway agent receives messages forwarded by owner agents.",
31
+ parameters: schema
32
+ },
33
+ returns,
34
+ visibleByDefault: (context) => context.descriptor.type !== "subuser",
35
+ execute: async (args, toolContext, toolCall) => {
36
+ const payload = args;
37
+ const name = payload.name.trim();
38
+ if (!name) {
39
+ throw new Error("Subuser name is required.");
40
+ }
41
+ const systemPrompt = payload.systemPrompt.trim();
42
+ if (!systemPrompt) {
43
+ throw new Error("Subuser system prompt is required.");
44
+ }
45
+ await assertCallerIsOwner(toolContext);
46
+ const storage = toolContext.agentSystem.storage;
47
+ const subuserId = createId();
48
+ const now = Date.now();
49
+ // Create child user
50
+ await storage.users.create({
51
+ id: subuserId,
52
+ parentUserId: toolContext.ctx.userId,
53
+ name,
54
+ createdAt: now,
55
+ updatedAt: now
56
+ });
57
+ // Ensure subuser home directories
58
+ const subuserHome = toolContext.agentSystem.userHomeForUserId(subuserId);
59
+ await userHomeEnsure(subuserHome);
60
+ // Create gateway agent belonging to the subuser
61
+ const gatewayAgentId = createId();
62
+ const descriptor = {
63
+ type: "subuser",
64
+ id: subuserId,
65
+ name,
66
+ systemPrompt
67
+ };
68
+ const permissions = permissionBuildUser(subuserHome);
69
+ await agentDescriptorWrite(storage, gatewayAgentId, descriptor, subuserId, permissions);
70
+ // Create a session and write agent state in one step
71
+ const inferenceSessionId = createId();
72
+ const sessionId = await storage.sessions.create({
73
+ agentId: gatewayAgentId,
74
+ inferenceSessionId,
75
+ createdAt: now
76
+ });
77
+ await agentStateWrite(storage, gatewayAgentId, {
78
+ context: { messages: [] },
79
+ activeSessionId: sessionId,
80
+ inferenceSessionId,
81
+ permissions,
82
+ tokens: null,
83
+ stats: {},
84
+ createdAt: now,
85
+ updatedAt: now,
86
+ state: "active"
87
+ });
88
+ const summary = `Subuser created: ${subuserId} (name: ${name}). Gateway agent: ${gatewayAgentId}.`;
89
+ const toolMessage = {
90
+ role: "toolResult",
91
+ toolCallId: toolCall.id,
92
+ toolName: toolCall.name,
93
+ content: [{ type: "text", text: summary }],
94
+ isError: false,
95
+ timestamp: Date.now()
96
+ };
97
+ return {
98
+ toolMessage,
99
+ typedResult: {
100
+ summary,
101
+ subuserId,
102
+ gatewayAgentId,
103
+ name
104
+ }
105
+ };
106
+ }
107
+ };
108
+ }
109
+ async function assertCallerIsOwner(toolContext) {
110
+ const userId = toolContext.ctx?.userId;
111
+ if (!userId) {
112
+ throw new Error("Tool context userId is required.");
113
+ }
114
+ const user = await toolContext.agentSystem.storage.users.findById(userId);
115
+ if (!user || !user.isOwner) {
116
+ throw new Error("Only the owner user can create subusers.");
117
+ }
118
+ }
119
+ //# sourceMappingURL=subuserCreateToolBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserCreateToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserCreateToolBuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subuserCreateToolBuild.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserCreateToolBuild.spec.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserCreateToolBuild.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it } from "vitest";
5
+ import { configResolve } from "../../../config/configResolve.js";
6
+ import { Storage } from "../../../storage/storage.js";
7
+ import { UserHome } from "../../users/userHome.js";
8
+ import { subuserCreateToolBuild } from "./subuserCreateToolBuild.js";
9
+ const toolCall = { id: "tool-1", name: "subuser_create" };
10
+ describe("subuserCreateToolBuild", () => {
11
+ it("creates a subuser with gateway agent", async () => {
12
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-create-"));
13
+ try {
14
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
15
+ const storage = Storage.open(config.dbPath);
16
+ // Bootstrap migration creates an owner; find it
17
+ const owner = await storage.users.findOwner();
18
+ const ownerUserId = owner.id;
19
+ const tool = subuserCreateToolBuild();
20
+ const context = contextBuild(ownerUserId, {
21
+ config: { current: config },
22
+ storage
23
+ });
24
+ const result = await tool.execute({ name: "my-app", systemPrompt: "You are a helpful assistant." }, context, toolCall);
25
+ const typed = result.typedResult;
26
+ expect(typed.name).toBe("my-app");
27
+ expect(typed.subuserId).toBeTruthy();
28
+ expect(typed.gatewayAgentId).toBeTruthy();
29
+ // Verify subuser was created with correct parent
30
+ const subuser = await storage.users.findById(typed.subuserId);
31
+ expect(subuser).not.toBeNull();
32
+ expect(subuser.parentUserId).toBe(ownerUserId);
33
+ expect(subuser.name).toBe("my-app");
34
+ // Verify gateway agent was created
35
+ const agent = await storage.agents.findById(typed.gatewayAgentId);
36
+ expect(agent).not.toBeNull();
37
+ expect(agent.userId).toBe(typed.subuserId);
38
+ expect(agent.type).toBe("subuser");
39
+ expect(agent.descriptor.type).toBe("subuser");
40
+ storage.close();
41
+ }
42
+ finally {
43
+ await rm(dir, { recursive: true, force: true });
44
+ }
45
+ });
46
+ it("rejects non-owner callers", async () => {
47
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-create-reject-"));
48
+ try {
49
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
50
+ const storage = Storage.open(config.dbPath);
51
+ // Bootstrap creates owner; create a regular user
52
+ await storage.users.create({ id: "regular-user" });
53
+ const tool = subuserCreateToolBuild();
54
+ const context = contextBuild("regular-user", {
55
+ config: { current: config },
56
+ storage
57
+ });
58
+ await expect(tool.execute({ name: "my-app", systemPrompt: "prompt" }, context, toolCall)).rejects.toThrow("Only the owner user can create subusers.");
59
+ storage.close();
60
+ }
61
+ finally {
62
+ await rm(dir, { recursive: true, force: true });
63
+ }
64
+ });
65
+ it("hides from subuser agents", () => {
66
+ const tool = subuserCreateToolBuild();
67
+ expect(tool.visibleByDefault?.({
68
+ userId: "u1",
69
+ agentId: "a1",
70
+ descriptor: { type: "subuser", id: "su1", name: "app", systemPrompt: "sp" }
71
+ })).toBe(false);
72
+ expect(tool.visibleByDefault?.({
73
+ userId: "u1",
74
+ agentId: "a1",
75
+ descriptor: { type: "user", connector: "telegram", userId: "u1", channelId: "c1" }
76
+ })).toBe(true);
77
+ });
78
+ });
79
+ function contextBuild(userId, agentSystem) {
80
+ return {
81
+ connectorRegistry: null,
82
+ fileStore: null,
83
+ auth: null,
84
+ logger: console,
85
+ assistant: null,
86
+ permissions: { workingDir: "/workspace", writeDirs: ["/workspace"] },
87
+ agent: { id: "caller-agent" },
88
+ ctx: { agentId: "caller-agent", userId },
89
+ source: "test",
90
+ messageContext: {},
91
+ agentSystem: {
92
+ ...agentSystem,
93
+ userHomeForUserId: (uid) => new UserHome(agentSystem.config.current.usersDir, uid)
94
+ },
95
+ heartbeats: null
96
+ };
97
+ }
98
+ //# sourceMappingURL=subuserCreateToolBuild.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserCreateToolBuild.spec.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserCreateToolBuild.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition } from "@/types";
2
+ /**
3
+ * Builds the subuser_list tool that lists all subusers owned by the calling user.
4
+ * Expects: caller is the owner user.
5
+ */
6
+ export declare function subuserListToolBuild(): ToolDefinition;
7
+ //# sourceMappingURL=subuserListToolBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserListToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserListToolBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAA4C,MAAM,SAAS,CAAC;AA8BxF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAsDrD"}
@@ -0,0 +1,69 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ const schema = Type.Object({}, { additionalProperties: false });
3
+ const resultSchema = Type.Object({
4
+ summary: Type.String(),
5
+ count: Type.Number()
6
+ }, { additionalProperties: false });
7
+ const returns = {
8
+ schema: resultSchema,
9
+ toLLMText: (result) => result.summary
10
+ };
11
+ /**
12
+ * Builds the subuser_list tool that lists all subusers owned by the calling user.
13
+ * Expects: caller is the owner user.
14
+ */
15
+ export function subuserListToolBuild() {
16
+ return {
17
+ tool: {
18
+ name: "subuser_list",
19
+ description: "List all subusers and their gateway agents. Only the owner can list subusers.",
20
+ parameters: schema
21
+ },
22
+ returns,
23
+ visibleByDefault: (context) => context.descriptor.type !== "subuser",
24
+ execute: async (_args, toolContext, toolCall) => {
25
+ await assertCallerIsOwner(toolContext);
26
+ const storage = toolContext.agentSystem.storage;
27
+ const subusers = await storage.users.findByParentUserId(toolContext.ctx.userId);
28
+ const agents = await storage.agents.findMany();
29
+ const entries = subusers.map((subuser) => {
30
+ const gateway = agents.find((agent) => agent.descriptor.type === "subuser" && agent.descriptor.id === subuser.id);
31
+ return {
32
+ subuserId: subuser.id,
33
+ name: subuser.name,
34
+ gatewayAgentId: gateway?.id ?? null,
35
+ gatewayLifecycle: gateway?.lifecycle ?? null
36
+ };
37
+ });
38
+ const lines = entries.length === 0
39
+ ? ["No subusers."]
40
+ : entries.map((entry) => `${entry.subuserId} name="${entry.name ?? "unnamed"}" ` +
41
+ `gatewayAgent=${entry.gatewayAgentId ?? "none"} ` +
42
+ `lifecycle=${entry.gatewayLifecycle ?? "unknown"}`);
43
+ const summary = [`## Subusers (${entries.length})`, ...lines].join("\n");
44
+ const toolMessage = {
45
+ role: "toolResult",
46
+ toolCallId: toolCall.id,
47
+ toolName: toolCall.name,
48
+ content: [{ type: "text", text: summary }],
49
+ isError: false,
50
+ timestamp: Date.now()
51
+ };
52
+ return {
53
+ toolMessage,
54
+ typedResult: { summary, count: entries.length }
55
+ };
56
+ }
57
+ };
58
+ }
59
+ async function assertCallerIsOwner(toolContext) {
60
+ const userId = toolContext.ctx?.userId;
61
+ if (!userId) {
62
+ throw new Error("Tool context userId is required.");
63
+ }
64
+ const user = await toolContext.agentSystem.storage.users.findById(userId);
65
+ if (!user || !user.isOwner) {
66
+ throw new Error("Only the owner user can list subusers.");
67
+ }
68
+ }
69
+ //# sourceMappingURL=subuserListToolBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserListToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserListToolBuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subuserListToolBuild.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserListToolBuild.spec.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserListToolBuild.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it } from "vitest";
5
+ import { configResolve } from "../../../config/configResolve.js";
6
+ import { Storage } from "../../../storage/storage.js";
7
+ import { UserHome } from "../../users/userHome.js";
8
+ import { subuserCreateToolBuild } from "./subuserCreateToolBuild.js";
9
+ import { subuserListToolBuild } from "./subuserListToolBuild.js";
10
+ const listToolCall = { id: "tool-2", name: "subuser_list" };
11
+ const createToolCall = { id: "tool-1", name: "subuser_create" };
12
+ describe("subuserListToolBuild", () => {
13
+ it("lists created subusers", async () => {
14
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-list-"));
15
+ try {
16
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
17
+ const storage = Storage.open(config.dbPath);
18
+ const owner = await storage.users.findOwner();
19
+ const ownerUserId = owner.id;
20
+ const context = contextBuild(ownerUserId, {
21
+ config: { current: config },
22
+ storage
23
+ });
24
+ // Create two subusers
25
+ const createTool = subuserCreateToolBuild();
26
+ await createTool.execute({ name: "app-one", systemPrompt: "Prompt 1." }, context, createToolCall);
27
+ await createTool.execute({ name: "app-two", systemPrompt: "Prompt 2." }, context, createToolCall);
28
+ // List them
29
+ const listTool = subuserListToolBuild();
30
+ const result = await listTool.execute({}, context, listToolCall);
31
+ expect(result.typedResult.count).toBe(2);
32
+ expect(result.typedResult.summary).toContain("app-one");
33
+ expect(result.typedResult.summary).toContain("app-two");
34
+ storage.close();
35
+ }
36
+ finally {
37
+ await rm(dir, { recursive: true, force: true });
38
+ }
39
+ });
40
+ it("returns empty list when no subusers", async () => {
41
+ const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-subuser-list-empty-"));
42
+ try {
43
+ const config = configResolve({ engine: { dataDir: dir } }, path.join(dir, "settings.json"));
44
+ const storage = Storage.open(config.dbPath);
45
+ const owner = await storage.users.findOwner();
46
+ const ownerUserId = owner.id;
47
+ const context = contextBuild(ownerUserId, {
48
+ config: { current: config },
49
+ storage
50
+ });
51
+ const listTool = subuserListToolBuild();
52
+ const result = await listTool.execute({}, context, listToolCall);
53
+ expect(result.typedResult.count).toBe(0);
54
+ expect(result.typedResult.summary).toContain("No subusers");
55
+ storage.close();
56
+ }
57
+ finally {
58
+ await rm(dir, { recursive: true, force: true });
59
+ }
60
+ });
61
+ });
62
+ function contextBuild(userId, agentSystem) {
63
+ return {
64
+ connectorRegistry: null,
65
+ fileStore: null,
66
+ auth: null,
67
+ logger: console,
68
+ assistant: null,
69
+ permissions: { workingDir: "/workspace", writeDirs: ["/workspace"] },
70
+ agent: { id: "caller-agent" },
71
+ ctx: { agentId: "caller-agent", userId },
72
+ source: "test",
73
+ messageContext: {},
74
+ agentSystem: {
75
+ ...agentSystem,
76
+ userHomeForUserId: (uid) => new UserHome(agentSystem.config.current.usersDir, uid)
77
+ },
78
+ heartbeats: null
79
+ };
80
+ }
81
+ //# sourceMappingURL=subuserListToolBuild.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subuserListToolBuild.spec.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/subuserListToolBuild.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"topologyToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/topologyToolBuild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAgCxD;;;GAGG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAC/B,cAAc,CA+JhB"}
1
+ {"version":3,"file":"topologyToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/topologyToolBuild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAgCxD;;;GAGG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAC/B,cAAc,CA2MhB"}