daycare-cli 2026.2.25 → 2026.2.26
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/engine/agents/agent.d.ts +7 -5
- package/dist/engine/agents/agent.d.ts.map +1 -1
- package/dist/engine/agents/agent.js +45 -45
- package/dist/engine/agents/agent.js.map +1 -1
- package/dist/engine/agents/agent.spec.js +95 -46
- package/dist/engine/agents/agent.spec.js.map +1 -1
- package/dist/engine/agents/agentSystem.d.ts +13 -9
- package/dist/engine/agents/agentSystem.d.ts.map +1 -1
- package/dist/engine/agents/agentSystem.js +146 -89
- package/dist/engine/agents/agentSystem.js.map +1 -1
- package/dist/engine/agents/agentSystem.spec.js +89 -32
- package/dist/engine/agents/agentSystem.spec.js.map +1 -1
- package/dist/engine/agents/agentSystemDurableInbox.spec.js +66 -11
- package/dist/engine/agents/agentSystemDurableInbox.spec.js.map +1 -1
- package/dist/engine/agents/context.d.ts +21 -2
- package/dist/engine/agents/context.d.ts.map +1 -1
- package/dist/engine/agents/context.js +41 -4
- package/dist/engine/agents/context.js.map +1 -1
- package/dist/engine/agents/context.spec.js +15 -5
- package/dist/engine/agents/context.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.d.ts +2 -2
- package/dist/engine/agents/ops/agentDescriptorRead.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.js +2 -2
- package/dist/engine/agents/ops/agentDescriptorRead.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorWrite.d.ts +3 -3
- package/dist/engine/agents/ops/agentDescriptorWrite.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorWrite.js +7 -24
- package/dist/engine/agents/ops/agentDescriptorWrite.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorWrite.spec.js +6 -4
- package/dist/engine/agents/ops/agentDescriptorWrite.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryAppend.d.ts +2 -2
- package/dist/engine/agents/ops/agentHistoryAppend.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentHistoryAppend.js +2 -2
- package/dist/engine/agents/ops/agentHistoryAppend.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoad.d.ts +2 -2
- package/dist/engine/agents/ops/agentHistoryLoad.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoad.js +2 -2
- package/dist/engine/agents/ops/agentHistoryLoad.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoad.spec.js +10 -8
- package/dist/engine/agents/ops/agentHistoryLoad.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoadAll.d.ts +2 -2
- package/dist/engine/agents/ops/agentHistoryLoadAll.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoadAll.js +2 -2
- package/dist/engine/agents/ops/agentHistoryLoadAll.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryLoadAll.spec.js +10 -8
- package/dist/engine/agents/ops/agentHistoryLoadAll.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentInferencePromptWrite.d.ts +2 -2
- package/dist/engine/agents/ops/agentInferencePromptWrite.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentInferencePromptWrite.js +2 -6
- package/dist/engine/agents/ops/agentInferencePromptWrite.js.map +1 -1
- package/dist/engine/agents/ops/agentInferencePromptWrite.spec.js +3 -1
- package/dist/engine/agents/ops/agentInferencePromptWrite.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.js +5 -7
- package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.spec.js +2 -0
- package/dist/engine/agents/ops/agentLoopRun.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentPath.d.ts +2 -2
- package/dist/engine/agents/ops/agentPath.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentPath.js +2 -2
- package/dist/engine/agents/ops/agentPath.js.map +1 -1
- package/dist/engine/agents/ops/agentStateRead.d.ts +2 -2
- package/dist/engine/agents/ops/agentStateRead.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentStateRead.js +2 -2
- package/dist/engine/agents/ops/agentStateRead.js.map +1 -1
- package/dist/engine/agents/ops/agentStateRead.spec.js +13 -9
- package/dist/engine/agents/ops/agentStateRead.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentStateWrite.d.ts +2 -2
- package/dist/engine/agents/ops/agentStateWrite.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentStateWrite.js +4 -4
- package/dist/engine/agents/ops/agentStateWrite.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPrompt.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPrompt.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPrompt.js +1 -1
- package/dist/engine/agents/ops/agentSystemPrompt.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPrompt.spec.js +6 -2
- package/dist/engine/agents/ops/agentSystemPrompt.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptContext.d.ts +2 -3
- package/dist/engine/agents/ops/agentSystemPromptContext.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAgentsTopologySignalsChannels.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAgentsTopologySignalsChannels.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAgentsTopologySignalsChannels.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAgentsTopologySignalsChannels.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionAutonomousOperation.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionFormatting.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionFormatting.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionFormatting.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionFormatting.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.js +5 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionModels.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPreamble.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionSkills.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionSkills.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionSkills.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionSkills.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.js +3 -4
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.js +2 -2
- package/dist/engine/agents/ops/agentSystemPromptSectionToolCalling.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptWrite.d.ts +3 -3
- package/dist/engine/agents/ops/agentSystemPromptWrite.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptWrite.js +4 -3
- package/dist/engine/agents/ops/agentSystemPromptWrite.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptWrite.spec.js +5 -3
- package/dist/engine/agents/ops/agentSystemPromptWrite.spec.js.map +1 -1
- package/dist/engine/apps/appExecute.d.ts.map +1 -1
- package/dist/engine/apps/appExecute.js +7 -5
- package/dist/engine/apps/appExecute.js.map +1 -1
- package/dist/engine/apps/appExecute.spec.js +19 -10
- package/dist/engine/apps/appExecute.spec.js.map +1 -1
- package/dist/engine/apps/appInstallToolBuild.js +4 -3
- package/dist/engine/apps/appInstallToolBuild.js.map +1 -1
- package/dist/engine/channels/channels.d.ts.map +1 -1
- package/dist/engine/channels/channels.js +9 -11
- package/dist/engine/channels/channels.js.map +1 -1
- package/dist/engine/channels/channels.spec.js +4 -4
- package/dist/engine/channels/channels.spec.js.map +1 -1
- package/dist/engine/cron/crons.d.ts.map +1 -1
- package/dist/engine/cron/crons.js +2 -1
- package/dist/engine/cron/crons.js.map +1 -1
- package/dist/engine/cron/crons.spec.js +3 -5
- package/dist/engine/cron/crons.spec.js.map +1 -1
- package/dist/engine/cron/ops/cronScheduler.js +2 -2
- package/dist/engine/cron/ops/cronScheduler.js.map +1 -1
- package/dist/engine/engine.d.ts +5 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +39 -15
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/engine.spec.js +9 -4
- package/dist/engine/engine.spec.js.map +1 -1
- package/dist/engine/expose/exposes.d.ts.map +1 -1
- package/dist/engine/expose/exposes.js +9 -2
- package/dist/engine/expose/exposes.js.map +1 -1
- package/dist/engine/heartbeat/heartbeats.d.ts.map +1 -1
- package/dist/engine/heartbeat/heartbeats.js +17 -8
- package/dist/engine/heartbeat/heartbeats.js.map +1 -1
- package/dist/engine/heartbeat/heartbeats.spec.js +1 -1
- package/dist/engine/heartbeat/heartbeats.spec.js.map +1 -1
- package/dist/engine/heartbeat/ops/heartbeatScheduler.js +2 -2
- package/dist/engine/heartbeat/ops/heartbeatScheduler.js.map +1 -1
- package/dist/engine/ipc/server.d.ts.map +1 -1
- package/dist/engine/ipc/server.js +11 -3
- package/dist/engine/ipc/server.js.map +1 -1
- package/dist/engine/ipc/serverMemoryRoutesRegister.d.ts +3 -2
- package/dist/engine/ipc/serverMemoryRoutesRegister.d.ts.map +1 -1
- package/dist/engine/ipc/serverMemoryRoutesRegister.js +3 -2
- package/dist/engine/ipc/serverMemoryRoutesRegister.js.map +1 -1
- package/dist/engine/ipc/serverMemoryRoutesRegister.spec.js +3 -2
- package/dist/engine/ipc/serverMemoryRoutesRegister.spec.js.map +1 -1
- package/dist/engine/memory/memory.d.ts +6 -5
- package/dist/engine/memory/memory.d.ts.map +1 -1
- package/dist/engine/memory/memory.js +12 -12
- package/dist/engine/memory/memory.js.map +1 -1
- package/dist/engine/memory/memory.spec.js +10 -6
- package/dist/engine/memory/memory.spec.js.map +1 -1
- package/dist/engine/memory/memorySessionObserve.spec.js +3 -3
- package/dist/engine/memory/memorySessionObserve.spec.js.map +1 -1
- package/dist/engine/memory/memoryWorker.d.ts +2 -1
- package/dist/engine/memory/memoryWorker.d.ts.map +1 -1
- package/dist/engine/memory/memoryWorker.js +3 -1
- package/dist/engine/memory/memoryWorker.js.map +1 -1
- package/dist/engine/memory/memoryWorker.spec.js +4 -2
- package/dist/engine/memory/memoryWorker.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.spec.js +7 -4
- package/dist/engine/modules/rlm/rlmTool.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmToolsForContextResolve.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmToolsForContextResolve.js +2 -4
- package/dist/engine/modules/rlm/rlmToolsForContextResolve.js.map +1 -1
- package/dist/engine/modules/rlm/rlmToolsForContextResolve.spec.js +5 -3
- package/dist/engine/modules/rlm/rlmToolsForContextResolve.spec.js.map +1 -1
- package/dist/engine/modules/toolResolver.spec.js +2 -2
- package/dist/engine/modules/toolResolver.spec.js.map +1 -1
- package/dist/engine/modules/tools/agentCompactTool.d.ts.map +1 -1
- package/dist/engine/modules/tools/agentCompactTool.js +5 -1
- package/dist/engine/modules/tools/agentCompactTool.js.map +1 -1
- package/dist/engine/modules/tools/agentCompactTool.spec.js +9 -5
- package/dist/engine/modules/tools/agentCompactTool.spec.js.map +1 -1
- package/dist/engine/modules/tools/agentModelSetToolBuild.spec.js +5 -8
- package/dist/engine/modules/tools/agentModelSetToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/agentResetTool.d.ts.map +1 -1
- package/dist/engine/modules/tools/agentResetTool.js +5 -1
- package/dist/engine/modules/tools/agentResetTool.js.map +1 -1
- package/dist/engine/modules/tools/agentResetTool.spec.js +12 -7
- package/dist/engine/modules/tools/agentResetTool.spec.js.map +1 -1
- package/dist/engine/modules/tools/background.d.ts.map +1 -1
- package/dist/engine/modules/tools/background.js +5 -40
- package/dist/engine/modules/tools/background.js.map +1 -1
- package/dist/engine/modules/tools/background.spec.js +3 -2
- package/dist/engine/modules/tools/background.spec.js.map +1 -1
- package/dist/engine/modules/tools/memoryNodeReadToolBuild.js +2 -2
- package/dist/engine/modules/tools/memoryNodeReadToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/memoryNodeReadToolBuild.spec.js +3 -4
- package/dist/engine/modules/tools/memoryNodeReadToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/memoryNodeWriteToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/memoryNodeWriteToolBuild.js +2 -3
- package/dist/engine/modules/tools/memoryNodeWriteToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/memoryNodeWriteToolBuild.spec.js +3 -4
- package/dist/engine/modules/tools/memoryNodeWriteToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/memorySearchToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/memorySearchToolBuild.js +2 -2
- package/dist/engine/modules/tools/memorySearchToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.js +12 -10
- package/dist/engine/modules/tools/permanentAgentToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.spec.js +2 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/sendUserMessageTool.d.ts.map +1 -1
- package/dist/engine/modules/tools/sendUserMessageTool.js +6 -2
- package/dist/engine/modules/tools/sendUserMessageTool.js.map +1 -1
- package/dist/engine/modules/tools/sendUserMessageTool.spec.js +5 -4
- package/dist/engine/modules/tools/sendUserMessageTool.spec.js.map +1 -1
- package/dist/engine/modules/tools/sessionHistoryToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/sessionHistoryToolBuild.js +7 -3
- package/dist/engine/modules/tools/sessionHistoryToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/sessionHistoryToolBuild.spec.js +23 -18
- package/dist/engine/modules/tools/sessionHistoryToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/skillToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/skillToolBuild.js +6 -2
- package/dist/engine/modules/tools/skillToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/skillToolBuild.spec.js +5 -3
- package/dist/engine/modules/tools/skillToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/subuserConfigureToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/subuserConfigureToolBuild.js +3 -2
- package/dist/engine/modules/tools/subuserConfigureToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/subuserCreateToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/subuserCreateToolBuild.js +4 -3
- package/dist/engine/modules/tools/subuserCreateToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/subuserCreateToolBuild.spec.js +3 -4
- package/dist/engine/modules/tools/subuserCreateToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/subuserListToolBuild.js +1 -4
- package/dist/engine/modules/tools/subuserListToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.js +2 -2
- package/dist/engine/modules/tools/topologyToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.spec.js +29 -23
- package/dist/engine/modules/tools/topologyToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/types.d.ts +1 -2
- package/dist/engine/modules/tools/types.d.ts.map +1 -1
- package/dist/engine/processes/processes.d.ts.map +1 -1
- package/dist/engine/processes/processes.js +7 -2
- package/dist/engine/processes/processes.js.map +1 -1
- package/dist/engine/signals/signals.js +9 -2
- package/dist/engine/signals/signals.js.map +1 -1
- package/dist/plugins/dashboard/site/404.html +1 -1
- package/dist/plugins/dashboard/site/agent.html +1 -1
- package/dist/plugins/dashboard/site/agent.txt +1 -1
- package/dist/plugins/dashboard/site/agents.html +1 -1
- package/dist/plugins/dashboard/site/agents.txt +1 -1
- package/dist/plugins/dashboard/site/automations.html +1 -1
- package/dist/plugins/dashboard/site/automations.txt +1 -1
- package/dist/plugins/dashboard/site/connectors.html +1 -1
- package/dist/plugins/dashboard/site/connectors.txt +1 -1
- package/dist/plugins/dashboard/site/index.html +1 -1
- package/dist/plugins/dashboard/site/index.txt +1 -1
- package/dist/plugins/dashboard/site/memory.html +1 -1
- package/dist/plugins/dashboard/site/memory.txt +1 -1
- package/dist/plugins/dashboard/site/processes.html +1 -1
- package/dist/plugins/dashboard/site/processes.txt +1 -1
- package/dist/plugins/dashboard/site/providers.html +1 -1
- package/dist/plugins/dashboard/site/providers.txt +1 -1
- package/dist/plugins/dashboard/site/signals.html +1 -1
- package/dist/plugins/dashboard/site/signals.txt +1 -1
- package/dist/plugins/dashboard/site/telemetry.html +1 -1
- package/dist/plugins/dashboard/site/telemetry.txt +1 -1
- package/dist/plugins/dashboard/site/tools.html +1 -1
- package/dist/plugins/dashboard/site/tools.txt +1 -1
- package/dist/plugins/database/__tests__/plugin.spec.js +4 -3
- package/dist/plugins/database/__tests__/plugin.spec.js.map +1 -1
- package/dist/plugins/monty-python/tool.spec.js +4 -2
- package/dist/plugins/monty-python/tool.spec.js.map +1 -1
- package/dist/plugins/shell/tool.spec.js +4 -2
- package/dist/plugins/shell/tool.spec.js.map +1 -1
- package/dist/storage/delayedSignalsRepository.d.ts +1 -1
- package/dist/storage/delayedSignalsRepository.d.ts.map +1 -1
- package/dist/storage/delayedSignalsRepository.js +29 -22
- package/dist/storage/delayedSignalsRepository.js.map +1 -1
- package/dist/storage/signalSubscriptionsRepository.js +3 -3
- package/dist/storage/signalSubscriptionsRepository.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- /package/dist/plugins/dashboard/site/_next/static/{Tn0eCf61QYHaE96GNMJsm → X_oqQhoSTmj1_qmNPx-r5}/_buildManifest.js +0 -0
- /package/dist/plugins/dashboard/site/_next/static/{Tn0eCf61QYHaE96GNMJsm → X_oqQhoSTmj1_qmNPx-r5}/_ssgManifest.js +0 -0
|
@@ -8,7 +8,7 @@ import { cuid2Is } from "../../utils/cuid2Is.js";
|
|
|
8
8
|
import { Memory } from "../memory/memory.js";
|
|
9
9
|
import { UserHome } from "../users/userHome.js";
|
|
10
10
|
import { Agent } from "./agent.js";
|
|
11
|
-
import {
|
|
11
|
+
import { contextForAgent, contextForUser } from "./context.js";
|
|
12
12
|
import { agentDescriptorCacheKey } from "./ops/agentDescriptorCacheKey.js";
|
|
13
13
|
import { agentDescriptorMatchesStrategy } from "./ops/agentDescriptorMatchesStrategy.js";
|
|
14
14
|
import { agentDescriptorRead } from "./ops/agentDescriptorRead.js";
|
|
@@ -102,9 +102,10 @@ export class AgentSystem {
|
|
|
102
102
|
const records = await this.storage.agents.findMany();
|
|
103
103
|
for (const record of records) {
|
|
104
104
|
const agentId = record.id;
|
|
105
|
+
const ctx = contextForAgent({ userId: record.userId, agentId });
|
|
105
106
|
let state = null;
|
|
106
107
|
try {
|
|
107
|
-
state = await agentStateRead(this.storage,
|
|
108
|
+
state = await agentStateRead(this.storage, ctx);
|
|
108
109
|
}
|
|
109
110
|
catch (error) {
|
|
110
111
|
logger.warn({ agentId, error }, "restore: Agent restore skipped due to invalid persisted data");
|
|
@@ -126,17 +127,16 @@ export class AgentSystem {
|
|
|
126
127
|
deliverAt: state.updatedAt + AGENT_POISON_PILL_DELAY_MS
|
|
127
128
|
});
|
|
128
129
|
}
|
|
129
|
-
const key =
|
|
130
|
+
const key = agentCacheKeyForCtx(ctx, descriptor);
|
|
130
131
|
this.keyMap.set(key, agentId);
|
|
131
132
|
logger.info({ agentId }, "restore: Agent restore skipped (sleeping)");
|
|
132
133
|
continue;
|
|
133
134
|
}
|
|
134
135
|
const inbox = new AgentInbox(agentId);
|
|
135
136
|
const userHome = this.userHomeForUserId(record.userId);
|
|
136
|
-
const agent = Agent.restore(
|
|
137
|
+
const agent = Agent.restore(ctx, descriptor, state, inbox, this, userHome);
|
|
137
138
|
const registered = this.registerEntry({
|
|
138
|
-
|
|
139
|
-
userId: record.userId,
|
|
139
|
+
ctx,
|
|
140
140
|
descriptor,
|
|
141
141
|
agent,
|
|
142
142
|
inbox
|
|
@@ -160,20 +160,20 @@ export class AgentSystem {
|
|
|
160
160
|
this.startEntryIfRunning(entry);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
-
async post(target, item) {
|
|
163
|
+
async post(ctx, target, item) {
|
|
164
164
|
if (this.stage === "idle" && (item.type === "message" || item.type === "system_message")) {
|
|
165
165
|
const agentType = "descriptor" in target ? target.descriptor.type : "agent";
|
|
166
166
|
logger.warn({ agentType }, "load: AgentSystem received message before load");
|
|
167
167
|
}
|
|
168
168
|
const targetLabel = "descriptor" in target ? `descriptor:${target.descriptor.type}` : `agent:${target.agentId}`;
|
|
169
169
|
logger.debug(`receive: post() received itemType=${item.type} target=${targetLabel} stage=${this.stage}`);
|
|
170
|
-
const entry = await this.resolveEntry(target, item);
|
|
170
|
+
const entry = await this.resolveEntry(ctx, target, item);
|
|
171
171
|
await this.enqueueEntry(entry, item, null);
|
|
172
|
-
logger.debug(`event: post() queued item agentId=${entry.agentId} inboxSize=${entry.inbox.size()}`);
|
|
172
|
+
logger.debug(`event: post() queued item agentId=${entry.ctx.agentId} inboxSize=${entry.inbox.size()}`);
|
|
173
173
|
this.startEntryIfRunning(entry);
|
|
174
174
|
}
|
|
175
|
-
async postAndAwait(target, item) {
|
|
176
|
-
const entry = await this.resolveEntry(target, item);
|
|
175
|
+
async postAndAwait(ctx, target, item) {
|
|
176
|
+
const entry = await this.resolveEntry(ctx, target, item);
|
|
177
177
|
const completion = this.createCompletion();
|
|
178
178
|
await this.enqueueEntry(entry, item, completion.completion);
|
|
179
179
|
this.startEntryIfRunning(entry);
|
|
@@ -183,16 +183,16 @@ export class AgentSystem {
|
|
|
183
183
|
* Resolves a target to its concrete agent id, creating/restoring when needed.
|
|
184
184
|
* Expects: descriptor targets are valid for agent creation.
|
|
185
185
|
*/
|
|
186
|
-
async agentIdForTarget(target) {
|
|
187
|
-
const entry = await this.resolveEntry(target, {
|
|
186
|
+
async agentIdForTarget(ctx, target) {
|
|
187
|
+
const entry = await this.resolveEntry(ctx, target, {
|
|
188
188
|
type: "message",
|
|
189
189
|
message: { text: null },
|
|
190
190
|
context: {}
|
|
191
191
|
});
|
|
192
|
-
return entry.agentId;
|
|
192
|
+
return entry.ctx.agentId;
|
|
193
193
|
}
|
|
194
|
-
async tokensForTarget(target) {
|
|
195
|
-
const entry = await this.resolveEntry(target, {
|
|
194
|
+
async tokensForTarget(ctx, target) {
|
|
195
|
+
const entry = await this.resolveEntry(ctx, target, {
|
|
196
196
|
type: "message",
|
|
197
197
|
message: { text: null },
|
|
198
198
|
context: {}
|
|
@@ -212,7 +212,11 @@ export class AgentSystem {
|
|
|
212
212
|
return true;
|
|
213
213
|
}
|
|
214
214
|
try {
|
|
215
|
-
const
|
|
215
|
+
const context = await this.contextForAgentId(agentId);
|
|
216
|
+
if (!context) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
const descriptor = await agentDescriptorRead(this.storage, context);
|
|
216
220
|
return !!descriptor;
|
|
217
221
|
}
|
|
218
222
|
catch {
|
|
@@ -226,13 +230,13 @@ export class AgentSystem {
|
|
|
226
230
|
async contextForAgentId(agentId) {
|
|
227
231
|
const loaded = this.entries.get(agentId);
|
|
228
232
|
if (loaded) {
|
|
229
|
-
return
|
|
233
|
+
return loaded.ctx;
|
|
230
234
|
}
|
|
231
235
|
const record = await this.storage.agents.findById(agentId);
|
|
232
236
|
if (!record) {
|
|
233
237
|
return null;
|
|
234
238
|
}
|
|
235
|
-
return
|
|
239
|
+
return contextForAgent({ userId: record.userId, agentId: record.id });
|
|
236
240
|
}
|
|
237
241
|
async signalDeliver(signal, subscriptions) {
|
|
238
242
|
await Promise.all(subscriptions.map(async (subscription) => {
|
|
@@ -244,7 +248,7 @@ export class AgentSystem {
|
|
|
244
248
|
return;
|
|
245
249
|
}
|
|
246
250
|
try {
|
|
247
|
-
await this.post({ agentId: subscription.ctx.agentId }, {
|
|
251
|
+
await this.post(context, { agentId: subscription.ctx.agentId }, {
|
|
248
252
|
type: "signal",
|
|
249
253
|
signal,
|
|
250
254
|
subscriptionPattern: subscription.pattern
|
|
@@ -266,18 +270,21 @@ export class AgentSystem {
|
|
|
266
270
|
* The current tool completes but remaining queued tools are cancelled.
|
|
267
271
|
* Wakes the agent if sleeping.
|
|
268
272
|
*/
|
|
269
|
-
async steer(agentId, steering) {
|
|
273
|
+
async steer(ctx, agentId, steering) {
|
|
270
274
|
const entry = this.entries.get(agentId);
|
|
271
275
|
if (!entry) {
|
|
272
276
|
throw new Error(`Agent not found: ${agentId}`);
|
|
273
277
|
}
|
|
278
|
+
if (ctx.userId !== entry.ctx.userId) {
|
|
279
|
+
throw new Error(`Cannot steer agent from another user: ${agentId}`);
|
|
280
|
+
}
|
|
274
281
|
let woke = false;
|
|
275
282
|
await entry.lock.inLock(async () => {
|
|
276
283
|
woke = await this.wakeEntryIfSleeping(entry);
|
|
277
284
|
entry.inbox.steer(steering);
|
|
278
285
|
});
|
|
279
286
|
if (woke) {
|
|
280
|
-
await this.signalLifecycle(entry.agentId, "wake");
|
|
287
|
+
await this.signalLifecycle(entry.ctx.agentId, "wake");
|
|
281
288
|
}
|
|
282
289
|
logger.info({ agentId, origin: steering.origin }, "event: Steering message delivered");
|
|
283
290
|
this.startEntryIfRunning(entry);
|
|
@@ -292,7 +299,7 @@ export class AgentSystem {
|
|
|
292
299
|
return false;
|
|
293
300
|
}
|
|
294
301
|
const aborted = entry.agent.abortInference();
|
|
295
|
-
logger.info({ agentId: entry.agentId, aborted }, "event: Abort inference requested");
|
|
302
|
+
logger.info({ agentId: entry.ctx.agentId, aborted }, "event: Abort inference requested");
|
|
296
303
|
return aborted;
|
|
297
304
|
}
|
|
298
305
|
markStopped(agentId, error) {
|
|
@@ -318,7 +325,7 @@ export class AgentSystem {
|
|
|
318
325
|
return;
|
|
319
326
|
}
|
|
320
327
|
entry.agent.state.state = "sleeping";
|
|
321
|
-
await agentStateWrite(this.storage,
|
|
328
|
+
await agentStateWrite(this.storage, entry.ctx, entry.agent.state);
|
|
322
329
|
this.eventBus.emit("agent.sleep", { agentId, reason });
|
|
323
330
|
logger.debug({ agentId, reason }, "event: Agent entered sleep mode");
|
|
324
331
|
// Mark session for memory processing on idle
|
|
@@ -342,9 +349,9 @@ export class AgentSystem {
|
|
|
342
349
|
await this.signalLifecycle(agentId, "sleep");
|
|
343
350
|
}
|
|
344
351
|
}
|
|
345
|
-
agentFor(strategy) {
|
|
352
|
+
agentFor(ctx, strategy) {
|
|
346
353
|
const candidates = Array.from(this.entries.values()).filter((entry) => {
|
|
347
|
-
return agentDescriptorMatchesStrategy(entry.descriptor, strategy);
|
|
354
|
+
return entry.ctx.userId === ctx.userId && agentDescriptorMatchesStrategy(entry.descriptor, strategy);
|
|
348
355
|
});
|
|
349
356
|
if (candidates.length === 0) {
|
|
350
357
|
return null;
|
|
@@ -354,7 +361,7 @@ export class AgentSystem {
|
|
|
354
361
|
const bTime = agentTimestampGet(b.agent.state.updatedAt);
|
|
355
362
|
return bTime - aTime;
|
|
356
363
|
});
|
|
357
|
-
return candidates[0]?.agentId ?? null;
|
|
364
|
+
return candidates[0]?.ctx.agentId ?? null;
|
|
358
365
|
}
|
|
359
366
|
/**
|
|
360
367
|
* Returns the descriptor for an agent by id.
|
|
@@ -399,7 +406,7 @@ export class AgentSystem {
|
|
|
399
406
|
}
|
|
400
407
|
entry.agent.state.modelOverride = override;
|
|
401
408
|
entry.agent.state.updatedAt = Date.now();
|
|
402
|
-
await agentStateWrite(this.storage,
|
|
409
|
+
await agentStateWrite(this.storage, entry.ctx, entry.agent.state);
|
|
403
410
|
return true;
|
|
404
411
|
}
|
|
405
412
|
async inReadLock(operation) {
|
|
@@ -412,30 +419,37 @@ export class AgentSystem {
|
|
|
412
419
|
if ("agentId" in target) {
|
|
413
420
|
return this.entries.get(target.agentId) ?? null;
|
|
414
421
|
}
|
|
415
|
-
const
|
|
416
|
-
const
|
|
417
|
-
|
|
418
|
-
|
|
422
|
+
const descriptorKey = agentDescriptorCacheKey(target.descriptor);
|
|
423
|
+
for (const entry of this.entries.values()) {
|
|
424
|
+
if (agentDescriptorCacheKey(entry.descriptor) === descriptorKey) {
|
|
425
|
+
return entry;
|
|
426
|
+
}
|
|
419
427
|
}
|
|
420
|
-
return
|
|
428
|
+
return null;
|
|
421
429
|
}
|
|
422
|
-
async resolveEntry(target, _item) {
|
|
430
|
+
async resolveEntry(ctx, target, _item) {
|
|
423
431
|
if ("agentId" in target) {
|
|
424
432
|
const existing = this.entries.get(target.agentId);
|
|
425
433
|
if (existing) {
|
|
426
434
|
if (existing.agent.state.state === "dead" || existing.terminating) {
|
|
427
435
|
throw deadErrorBuild(target.agentId);
|
|
428
436
|
}
|
|
437
|
+
if (existing.ctx.userId !== ctx.userId) {
|
|
438
|
+
throw new Error(`Cannot post to agent from another user: ${target.agentId}`);
|
|
439
|
+
}
|
|
429
440
|
return existing;
|
|
430
441
|
}
|
|
431
442
|
const restored = await this.restoreAgent(target.agentId, { allowSleeping: true });
|
|
432
443
|
if (restored) {
|
|
444
|
+
if (restored.ctx.userId !== ctx.userId) {
|
|
445
|
+
throw new Error(`Cannot post to agent from another user: ${target.agentId}`);
|
|
446
|
+
}
|
|
433
447
|
return restored;
|
|
434
448
|
}
|
|
435
449
|
throw new Error(`Agent not found: ${target.agentId}`);
|
|
436
450
|
}
|
|
437
451
|
const descriptor = target.descriptor;
|
|
438
|
-
const key =
|
|
452
|
+
const key = agentCacheKeyForCtx(ctx, descriptor);
|
|
439
453
|
const existingAgentId = this.keyMap.get(key);
|
|
440
454
|
if (existingAgentId) {
|
|
441
455
|
const existing = this.entries.get(existingAgentId);
|
|
@@ -443,10 +457,16 @@ export class AgentSystem {
|
|
|
443
457
|
if (existing.agent.state.state === "dead" || existing.terminating) {
|
|
444
458
|
throw deadErrorBuild(existingAgentId);
|
|
445
459
|
}
|
|
460
|
+
if (existing.ctx.userId !== ctx.userId) {
|
|
461
|
+
throw new Error(`Cannot resolve agent from another user: ${existingAgentId}`);
|
|
462
|
+
}
|
|
446
463
|
return existing;
|
|
447
464
|
}
|
|
448
465
|
const restored = await this.restoreAgent(existingAgentId, { allowSleeping: true });
|
|
449
466
|
if (restored) {
|
|
467
|
+
if (restored.ctx.userId !== ctx.userId) {
|
|
468
|
+
throw new Error(`Cannot resolve agent from another user: ${existingAgentId}`);
|
|
469
|
+
}
|
|
450
470
|
return restored;
|
|
451
471
|
}
|
|
452
472
|
}
|
|
@@ -456,10 +476,16 @@ export class AgentSystem {
|
|
|
456
476
|
if (existing.agent.state.state === "dead" || existing.terminating) {
|
|
457
477
|
throw deadErrorBuild(descriptor.id);
|
|
458
478
|
}
|
|
479
|
+
if (existing.ctx.userId !== ctx.userId) {
|
|
480
|
+
throw new Error(`Cannot resolve agent from another user: ${descriptor.id}`);
|
|
481
|
+
}
|
|
459
482
|
return existing;
|
|
460
483
|
}
|
|
461
484
|
const restored = await this.restoreAgent(descriptor.id, { allowSleeping: true });
|
|
462
485
|
if (restored) {
|
|
486
|
+
if (restored.ctx.userId !== ctx.userId) {
|
|
487
|
+
throw new Error(`Cannot resolve agent from another user: ${descriptor.id}`);
|
|
488
|
+
}
|
|
463
489
|
return restored;
|
|
464
490
|
}
|
|
465
491
|
}
|
|
@@ -469,12 +495,15 @@ export class AgentSystem {
|
|
|
469
495
|
: descriptor;
|
|
470
496
|
logger.debug(`event: Creating agent entry agentId=${agentId} type=${resolvedDescriptor.type}`);
|
|
471
497
|
const inbox = new AgentInbox(agentId);
|
|
472
|
-
const userId = await this.resolveUserIdForDescriptor(resolvedDescriptor);
|
|
473
|
-
|
|
474
|
-
|
|
498
|
+
const userId = await this.resolveUserIdForDescriptor(ctx, resolvedDescriptor);
|
|
499
|
+
if (userId !== ctx.userId) {
|
|
500
|
+
throw new Error(`Cannot create agent for another user: ${agentId}`);
|
|
501
|
+
}
|
|
502
|
+
const createdCtx = contextForAgent({ userId, agentId });
|
|
503
|
+
const userHome = this.userHomeForCtx(createdCtx);
|
|
504
|
+
const agent = await Agent.create(createdCtx, resolvedDescriptor, inbox, this, userHome);
|
|
475
505
|
const entry = this.registerEntry({
|
|
476
|
-
|
|
477
|
-
userId,
|
|
506
|
+
ctx: createdCtx,
|
|
478
507
|
descriptor: resolvedDescriptor,
|
|
479
508
|
agent,
|
|
480
509
|
inbox
|
|
@@ -484,8 +513,7 @@ export class AgentSystem {
|
|
|
484
513
|
}
|
|
485
514
|
registerEntry(input) {
|
|
486
515
|
const entry = {
|
|
487
|
-
|
|
488
|
-
userId: input.userId,
|
|
516
|
+
ctx: input.ctx,
|
|
489
517
|
descriptor: input.descriptor,
|
|
490
518
|
agent: input.agent,
|
|
491
519
|
inbox: input.inbox,
|
|
@@ -493,21 +521,21 @@ export class AgentSystem {
|
|
|
493
521
|
terminating: false,
|
|
494
522
|
lock: new AsyncLock()
|
|
495
523
|
};
|
|
496
|
-
this.entries.set(input.agentId, entry);
|
|
497
|
-
const key =
|
|
498
|
-
this.keyMap.set(key, input.agentId);
|
|
524
|
+
this.entries.set(input.ctx.agentId, entry);
|
|
525
|
+
const key = agentCacheKeyForCtx(input.ctx, input.descriptor);
|
|
526
|
+
this.keyMap.set(key, input.ctx.agentId);
|
|
499
527
|
return entry;
|
|
500
528
|
}
|
|
501
529
|
startEntryIfRunning(entry) {
|
|
502
530
|
if (this.stage !== "running") {
|
|
503
|
-
logger.debug(`skip: startEntryIfRunning skipped agentId=${entry.agentId} reason=stage:${this.stage}`);
|
|
531
|
+
logger.debug(`skip: startEntryIfRunning skipped agentId=${entry.ctx.agentId} reason=stage:${this.stage}`);
|
|
504
532
|
return;
|
|
505
533
|
}
|
|
506
534
|
if (entry.running) {
|
|
507
|
-
logger.debug(`skip: startEntryIfRunning skipped agentId=${entry.agentId} reason=already-running`);
|
|
535
|
+
logger.debug(`skip: startEntryIfRunning skipped agentId=${entry.ctx.agentId} reason=already-running`);
|
|
508
536
|
return;
|
|
509
537
|
}
|
|
510
|
-
logger.debug(`start: startEntryIfRunning starting agentId=${entry.agentId} type=${entry.descriptor.type}`);
|
|
538
|
+
logger.debug(`start: startEntryIfRunning starting agentId=${entry.ctx.agentId} type=${entry.descriptor.type}`);
|
|
511
539
|
entry.running = true;
|
|
512
540
|
entry.agent.start();
|
|
513
541
|
}
|
|
@@ -517,28 +545,28 @@ export class AgentSystem {
|
|
|
517
545
|
woke = await this.wakeEntryIfSleeping(entry);
|
|
518
546
|
const postedAt = Date.now();
|
|
519
547
|
const generatedId = createId();
|
|
520
|
-
await this.storage.inbox.insert(generatedId, entry.agentId, postedAt, item.type, inboxItemSerialize(item));
|
|
548
|
+
await this.storage.inbox.insert(generatedId, entry.ctx.agentId, postedAt, item.type, inboxItemSerialize(item));
|
|
521
549
|
const queued = entry.inbox.post(item, completion, { id: generatedId, postedAt });
|
|
522
550
|
if (queued.id !== generatedId) {
|
|
523
551
|
// Message merge consumed the new row into an existing queue entry.
|
|
524
552
|
await this.storage.inbox.delete(generatedId);
|
|
525
|
-
await this.storage.inbox.insert(queued.id, entry.agentId, queued.postedAt, queued.item.type, inboxItemSerialize(queued.item));
|
|
553
|
+
await this.storage.inbox.insert(queued.id, entry.ctx.agentId, queued.postedAt, queued.item.type, inboxItemSerialize(queued.item));
|
|
526
554
|
}
|
|
527
555
|
});
|
|
528
556
|
if (woke) {
|
|
529
|
-
await this.signalLifecycle(entry.agentId, "wake");
|
|
557
|
+
await this.signalLifecycle(entry.ctx.agentId, "wake");
|
|
530
558
|
}
|
|
531
559
|
}
|
|
532
560
|
async replayPersistedInboxItems(entry) {
|
|
533
561
|
await entry.lock.inLock(async () => {
|
|
534
|
-
const rows = await this.storage.inbox.findByAgentId(entry.agentId);
|
|
562
|
+
const rows = await this.storage.inbox.findByAgentId(entry.ctx.agentId);
|
|
535
563
|
for (const row of rows) {
|
|
536
564
|
try {
|
|
537
565
|
const item = inboxItemDeserialize(row.data);
|
|
538
566
|
entry.inbox.post(item, null, { id: row.id, postedAt: row.postedAt, merge: false });
|
|
539
567
|
}
|
|
540
568
|
catch (error) {
|
|
541
|
-
logger.warn({ agentId: entry.agentId, inboxItemId: row.id, error }, "restore: Dropping invalid persisted inbox row");
|
|
569
|
+
logger.warn({ agentId: entry.ctx.agentId, inboxItemId: row.id, error }, "restore: Dropping invalid persisted inbox row");
|
|
542
570
|
await this.storage.inbox.delete(row.id);
|
|
543
571
|
}
|
|
544
572
|
}
|
|
@@ -548,12 +576,12 @@ export class AgentSystem {
|
|
|
548
576
|
if (entry.agent.state.state !== "sleeping") {
|
|
549
577
|
return false;
|
|
550
578
|
}
|
|
551
|
-
await this.cancelIdleSignal(entry.agentId);
|
|
552
|
-
await this.cancelPoisonPill(entry.agentId, { descriptor: entry.descriptor });
|
|
579
|
+
await this.cancelIdleSignal(entry.ctx.agentId);
|
|
580
|
+
await this.cancelPoisonPill(entry.ctx.agentId, { descriptor: entry.descriptor });
|
|
553
581
|
entry.agent.state.state = "active";
|
|
554
|
-
await agentStateWrite(this.storage, entry.
|
|
555
|
-
this.eventBus.emit("agent.woke", { agentId: entry.agentId });
|
|
556
|
-
logger.debug({ agentId: entry.agentId }, "event: Agent woke from sleep");
|
|
582
|
+
await agentStateWrite(this.storage, entry.ctx, entry.agent.state);
|
|
583
|
+
this.eventBus.emit("agent.woke", { agentId: entry.ctx.agentId });
|
|
584
|
+
logger.debug({ agentId: entry.ctx.agentId }, "event: Agent woke from sleep");
|
|
557
585
|
return true;
|
|
558
586
|
}
|
|
559
587
|
async scheduleIdleSignal(agentId) {
|
|
@@ -688,8 +716,12 @@ export class AgentSystem {
|
|
|
688
716
|
let descriptor = null;
|
|
689
717
|
let state = null;
|
|
690
718
|
try {
|
|
691
|
-
|
|
692
|
-
|
|
719
|
+
const context = await this.contextForAgentId(agentId);
|
|
720
|
+
if (!context) {
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
descriptor = await agentDescriptorRead(this.storage, context);
|
|
724
|
+
state = await agentStateRead(this.storage, context);
|
|
693
725
|
}
|
|
694
726
|
catch (error) {
|
|
695
727
|
logger.warn({ agentId, error }, "error: Poison-pill read failed");
|
|
@@ -704,7 +736,11 @@ export class AgentSystem {
|
|
|
704
736
|
await this.cancelPoisonPill(agentId, { descriptor });
|
|
705
737
|
state.state = "dead";
|
|
706
738
|
state.updatedAt = Date.now();
|
|
707
|
-
await
|
|
739
|
+
const context = await this.contextForAgentId(agentId);
|
|
740
|
+
if (!context) {
|
|
741
|
+
return;
|
|
742
|
+
}
|
|
743
|
+
await agentStateWrite(this.storage, context, state);
|
|
708
744
|
await this.storage.inbox.deleteByAgentId(agentId);
|
|
709
745
|
this.eventBus.emit("agent.dead", { agentId, reason: "poison-pill" });
|
|
710
746
|
}
|
|
@@ -717,43 +753,45 @@ export class AgentSystem {
|
|
|
717
753
|
pending = [];
|
|
718
754
|
return;
|
|
719
755
|
}
|
|
720
|
-
await this.cancelIdleSignal(entry.agentId);
|
|
721
|
-
await this.cancelPoisonPill(entry.agentId, { descriptor: entry.descriptor });
|
|
756
|
+
await this.cancelIdleSignal(entry.ctx.agentId);
|
|
757
|
+
await this.cancelPoisonPill(entry.ctx.agentId, { descriptor: entry.descriptor });
|
|
722
758
|
entry.agent.state.state = "dead";
|
|
723
759
|
entry.agent.state.updatedAt = Date.now();
|
|
724
|
-
await agentStateWrite(this.storage, entry.
|
|
760
|
+
await agentStateWrite(this.storage, entry.ctx, entry.agent.state);
|
|
725
761
|
pending = entry.inbox.drainPending();
|
|
726
|
-
await this.storage.inbox.deleteByAgentId(entry.agentId);
|
|
762
|
+
await this.storage.inbox.deleteByAgentId(entry.ctx.agentId);
|
|
727
763
|
changed = true;
|
|
728
764
|
});
|
|
729
765
|
if (!changed) {
|
|
730
766
|
return;
|
|
731
767
|
}
|
|
732
768
|
entry.running = false;
|
|
733
|
-
this.entries.delete(entry.agentId);
|
|
734
|
-
const key =
|
|
769
|
+
this.entries.delete(entry.ctx.agentId);
|
|
770
|
+
const key = agentCacheKeyForCtx(entry.ctx, entry.descriptor);
|
|
735
771
|
this.keyMap.delete(key);
|
|
736
|
-
const deadError = deadErrorBuild(entry.agentId);
|
|
772
|
+
const deadError = deadErrorBuild(entry.ctx.agentId);
|
|
737
773
|
for (const queued of pending) {
|
|
738
774
|
queued.completion?.reject(deadError);
|
|
739
775
|
}
|
|
740
|
-
this.eventBus.emit("agent.dead", { agentId: entry.agentId, reason });
|
|
776
|
+
this.eventBus.emit("agent.dead", { agentId: entry.ctx.agentId, reason });
|
|
741
777
|
}
|
|
742
778
|
async restoreAgent(agentId, options) {
|
|
743
779
|
let descriptor = null;
|
|
744
780
|
let state = null;
|
|
745
|
-
let
|
|
781
|
+
let ctx = null;
|
|
746
782
|
try {
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
783
|
+
ctx = await this.contextForAgentId(agentId);
|
|
784
|
+
if (!ctx) {
|
|
785
|
+
return null;
|
|
786
|
+
}
|
|
787
|
+
descriptor = await agentDescriptorRead(this.storage, ctx);
|
|
788
|
+
state = await agentStateRead(this.storage, ctx);
|
|
751
789
|
}
|
|
752
790
|
catch (error) {
|
|
753
791
|
logger.warn({ agentId, error }, "error: Agent restore failed due to invalid persisted data");
|
|
754
792
|
return null;
|
|
755
793
|
}
|
|
756
|
-
if (!descriptor || !state || !
|
|
794
|
+
if (!descriptor || !state || !ctx) {
|
|
757
795
|
return null;
|
|
758
796
|
}
|
|
759
797
|
if (state.state === "dead") {
|
|
@@ -763,11 +801,10 @@ export class AgentSystem {
|
|
|
763
801
|
return null;
|
|
764
802
|
}
|
|
765
803
|
const inbox = new AgentInbox(agentId);
|
|
766
|
-
const userHome = this.
|
|
767
|
-
const agent = Agent.restore(
|
|
804
|
+
const userHome = this.userHomeForCtx(ctx);
|
|
805
|
+
const agent = Agent.restore(ctx, descriptor, state, inbox, this, userHome);
|
|
768
806
|
const entry = this.registerEntry({
|
|
769
|
-
|
|
770
|
-
userId: recordUserId,
|
|
807
|
+
ctx,
|
|
771
808
|
descriptor,
|
|
772
809
|
agent,
|
|
773
810
|
inbox
|
|
@@ -777,23 +814,33 @@ export class AgentSystem {
|
|
|
777
814
|
this.startEntryIfRunning(entry);
|
|
778
815
|
return entry;
|
|
779
816
|
}
|
|
780
|
-
async resolveUserIdForDescriptor(descriptor) {
|
|
817
|
+
async resolveUserIdForDescriptor(ctx, descriptor) {
|
|
781
818
|
if (descriptor.type === "user") {
|
|
782
819
|
const connectorKey = userConnectorKeyCreate(descriptor.connector, descriptor.userId);
|
|
783
820
|
return this.resolveUserIdForConnectorKey(connectorKey);
|
|
784
821
|
}
|
|
785
|
-
if (descriptor.type === "subagent" || descriptor.type === "app") {
|
|
822
|
+
if (descriptor.type === "subagent" || descriptor.type === "app" || descriptor.type === "memory-search") {
|
|
786
823
|
const parent = await this.contextForAgentId(descriptor.parentAgentId);
|
|
787
824
|
if (parent) {
|
|
788
825
|
return parent.userId;
|
|
789
826
|
}
|
|
790
|
-
|
|
827
|
+
throw new Error("Parent agent not found");
|
|
828
|
+
}
|
|
829
|
+
if (descriptor.type === "memory-agent") {
|
|
830
|
+
const source = await this.contextForAgentId(descriptor.id);
|
|
831
|
+
if (source) {
|
|
832
|
+
return source.userId;
|
|
833
|
+
}
|
|
834
|
+
throw new Error("Source agent not found for memory-agent");
|
|
791
835
|
}
|
|
792
836
|
// Subuser gateway agents belong to the subuser — descriptor.id IS the subuser's userId
|
|
793
837
|
if (descriptor.type === "subuser") {
|
|
794
838
|
return descriptor.id;
|
|
795
839
|
}
|
|
796
|
-
|
|
840
|
+
if (descriptor.type === "system" || descriptor.type === "cron" || descriptor.type === "permanent") {
|
|
841
|
+
return ctx.userId;
|
|
842
|
+
}
|
|
843
|
+
throw new Error("Cannot resolve user for descriptor");
|
|
797
844
|
}
|
|
798
845
|
async resolveUserIdForConnectorKey(connectorKey) {
|
|
799
846
|
try {
|
|
@@ -804,14 +851,14 @@ export class AgentSystem {
|
|
|
804
851
|
}
|
|
805
852
|
}
|
|
806
853
|
catch (error) {
|
|
807
|
-
logger.warn({ connectorKey, error }, "warn: Failed to resolve connector user
|
|
854
|
+
logger.warn({ connectorKey, error }, "warn: Failed to resolve connector user");
|
|
808
855
|
}
|
|
809
|
-
|
|
856
|
+
throw new Error("User not found for connector key");
|
|
810
857
|
}
|
|
811
|
-
async
|
|
858
|
+
async ownerCtxEnsure() {
|
|
812
859
|
const owner = await this.storage.users.findOwner();
|
|
813
860
|
if (owner) {
|
|
814
|
-
return owner.id;
|
|
861
|
+
return contextForUser({ userId: owner.id });
|
|
815
862
|
}
|
|
816
863
|
const now = Date.now();
|
|
817
864
|
const ownerId = createId();
|
|
@@ -822,12 +869,12 @@ export class AgentSystem {
|
|
|
822
869
|
createdAt: now,
|
|
823
870
|
updatedAt: now
|
|
824
871
|
});
|
|
825
|
-
return ownerId;
|
|
872
|
+
return contextForUser({ userId: ownerId });
|
|
826
873
|
}
|
|
827
874
|
catch {
|
|
828
875
|
const recovered = await this.storage.users.findOwner();
|
|
829
876
|
if (recovered) {
|
|
830
|
-
return recovered.id;
|
|
877
|
+
return contextForUser({ userId: recovered.id });
|
|
831
878
|
}
|
|
832
879
|
throw new Error("Failed to resolve owner user");
|
|
833
880
|
}
|
|
@@ -839,6 +886,13 @@ export class AgentSystem {
|
|
|
839
886
|
userHomeForUserId(userId) {
|
|
840
887
|
return new UserHome(this.config.current.usersDir, userId);
|
|
841
888
|
}
|
|
889
|
+
/**
|
|
890
|
+
* Resolves a UserHome facade from caller context.
|
|
891
|
+
* Expects: ctx.userId belongs to an existing or soon-to-be-created runtime user.
|
|
892
|
+
*/
|
|
893
|
+
userHomeForCtx(ctx) {
|
|
894
|
+
return this.userHomeForUserId(ctx.userId);
|
|
895
|
+
}
|
|
842
896
|
createCompletion() {
|
|
843
897
|
let resolve = null;
|
|
844
898
|
let reject = null;
|
|
@@ -858,6 +912,9 @@ export class AgentSystem {
|
|
|
858
912
|
function lifecycleSignalTypeBuild(agentId, state) {
|
|
859
913
|
return `agent:${agentId}:${state}`;
|
|
860
914
|
}
|
|
915
|
+
function agentCacheKeyForCtx(ctx, descriptor) {
|
|
916
|
+
return `${ctx.userId}:${agentDescriptorCacheKey(descriptor)}`;
|
|
917
|
+
}
|
|
861
918
|
function parsePoisonPillAgentId(signalType) {
|
|
862
919
|
const parts = signalType.split(":");
|
|
863
920
|
if (parts.length !== 3) {
|