sensorium-mcp 3.0.103 → 3.1.0-refactor.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/README.md +25 -0
- package/dist/config/agent-settings.d.ts +69 -0
- package/dist/config/agent-settings.d.ts.map +1 -0
- package/dist/config/agent-settings.js +225 -0
- package/dist/config/agent-settings.js.map +1 -0
- package/dist/config/agent-templates.d.ts +39 -0
- package/dist/config/agent-templates.d.ts.map +1 -0
- package/dist/config/agent-templates.js +105 -0
- package/dist/config/agent-templates.js.map +1 -0
- package/dist/config/index.d.ts +16 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +58 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/keep-alive-settings.d.ts +29 -0
- package/dist/config/keep-alive-settings.d.ts.map +1 -0
- package/dist/config/keep-alive-settings.js +100 -0
- package/dist/config/keep-alive-settings.js.map +1 -0
- package/dist/config/mcp-settings.d.ts +59 -0
- package/dist/config/mcp-settings.d.ts.map +1 -0
- package/dist/config/mcp-settings.js +196 -0
- package/dist/config/mcp-settings.js.map +1 -0
- package/dist/config/misc-settings.d.ts +46 -0
- package/dist/config/misc-settings.d.ts.map +1 -0
- package/dist/config/misc-settings.js +146 -0
- package/dist/config/misc-settings.js.map +1 -0
- package/dist/config/settings-store.d.ts +10 -0
- package/dist/config/settings-store.d.ts.map +1 -0
- package/dist/config/settings-store.js +65 -0
- package/dist/config/settings-store.js.map +1 -0
- package/dist/dashboard/log-parser.d.ts.map +1 -1
- package/dist/dashboard/log-parser.js +12 -2
- package/dist/dashboard/log-parser.js.map +1 -1
- package/dist/dashboard/presets.d.ts +1 -1
- package/dist/dashboard/presets.d.ts.map +1 -1
- package/dist/dashboard/presets.js +1 -1
- package/dist/dashboard/presets.js.map +1 -1
- package/dist/dashboard/routes/agent-templates.d.ts.map +1 -1
- package/dist/dashboard/routes/agent-templates.js +13 -8
- package/dist/dashboard/routes/agent-templates.js.map +1 -1
- package/dist/dashboard/routes/claude.d.ts.map +1 -1
- package/dist/dashboard/routes/claude.js +6 -3
- package/dist/dashboard/routes/claude.js.map +1 -1
- package/dist/dashboard/routes/copilot.d.ts.map +1 -1
- package/dist/dashboard/routes/copilot.js +16 -7
- package/dist/dashboard/routes/copilot.js.map +1 -1
- package/dist/dashboard/routes/data.d.ts.map +1 -1
- package/dist/dashboard/routes/data.js +43 -15
- package/dist/dashboard/routes/data.js.map +1 -1
- package/dist/dashboard/routes/env-vars.d.ts.map +1 -1
- package/dist/dashboard/routes/env-vars.js.map +1 -1
- package/dist/dashboard/routes/mcp-servers.d.ts.map +1 -1
- package/dist/dashboard/routes/mcp-servers.js +11 -5
- package/dist/dashboard/routes/mcp-servers.js.map +1 -1
- package/dist/dashboard/routes/prompts.d.ts.map +1 -1
- package/dist/dashboard/routes/prompts.js +2 -2
- package/dist/dashboard/routes/prompts.js.map +1 -1
- package/dist/dashboard/routes/settings.d.ts.map +1 -1
- package/dist/dashboard/routes/settings.js +5 -3
- package/dist/dashboard/routes/settings.js.map +1 -1
- package/dist/dashboard/routes/skills.d.ts.map +1 -1
- package/dist/dashboard/routes/skills.js +4 -4
- package/dist/dashboard/routes/skills.js.map +1 -1
- package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
- package/dist/dashboard/routes/snapshots.js +18 -11
- package/dist/dashboard/routes/snapshots.js.map +1 -1
- package/dist/dashboard/routes/templates.d.ts.map +1 -1
- package/dist/dashboard/routes/templates.js +6 -3
- package/dist/dashboard/routes/templates.js.map +1 -1
- package/dist/dashboard/routes/threads-create.d.ts +22 -0
- package/dist/dashboard/routes/threads-create.d.ts.map +1 -0
- package/dist/dashboard/routes/threads-create.js +225 -0
- package/dist/dashboard/routes/threads-create.js.map +1 -0
- package/dist/dashboard/routes/threads-helpers.d.ts +28 -0
- package/dist/dashboard/routes/threads-helpers.d.ts.map +1 -0
- package/dist/dashboard/routes/threads-helpers.js +138 -0
- package/dist/dashboard/routes/threads-helpers.js.map +1 -0
- package/dist/dashboard/routes/threads-read.d.ts +26 -0
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -0
- package/dist/dashboard/routes/threads-read.js +118 -0
- package/dist/dashboard/routes/threads-read.js.map +1 -0
- package/dist/dashboard/routes/threads.d.ts +5 -44
- package/dist/dashboard/routes/threads.d.ts.map +1 -1
- package/dist/dashboard/routes/threads.js +40 -496
- package/dist/dashboard/routes/threads.js.map +1 -1
- package/dist/dashboard/routes/types.d.ts.map +1 -1
- package/dist/dashboard/routes/types.js.map +1 -1
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +9 -5
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/data/daily-marker.d.ts.map +1 -1
- package/dist/data/daily-marker.js +1 -1
- package/dist/data/daily-marker.js.map +1 -1
- package/dist/data/file-storage.d.ts.map +1 -1
- package/dist/data/file-storage.js +40 -16
- package/dist/data/file-storage.js.map +1 -1
- package/dist/data/interfaces.d.ts +23 -2
- package/dist/data/interfaces.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.d.ts +1 -1
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +32 -13
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/consolidation.d.ts.map +1 -1
- package/dist/data/memory/consolidation.js +17 -8
- package/dist/data/memory/consolidation.js.map +1 -1
- package/dist/data/memory/db-types.d.ts +4 -0
- package/dist/data/memory/db-types.d.ts.map +1 -0
- package/dist/data/memory/db-types.js +2 -0
- package/dist/data/memory/db-types.js.map +1 -0
- package/dist/data/memory/episodes.d.ts.map +1 -1
- package/dist/data/memory/episodes.js +3 -5
- package/dist/data/memory/episodes.js.map +1 -1
- package/dist/data/memory/index.d.ts +28 -14
- package/dist/data/memory/index.d.ts.map +1 -1
- package/dist/data/memory/index.js +28 -14
- package/dist/data/memory/index.js.map +1 -1
- package/dist/data/memory/migration-runner.d.ts +1 -1
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +23 -15
- package/dist/data/memory/migration-runner.js.map +1 -1
- package/dist/data/memory/narrative-lint.d.ts +12 -0
- package/dist/data/memory/narrative-lint.d.ts.map +1 -0
- package/dist/data/memory/narrative-lint.js +117 -0
- package/dist/data/memory/narrative-lint.js.map +1 -0
- package/dist/data/memory/narrative-resolutions.d.ts +26 -0
- package/dist/data/memory/narrative-resolutions.d.ts.map +1 -0
- package/dist/data/memory/narrative-resolutions.js +81 -0
- package/dist/data/memory/narrative-resolutions.js.map +1 -0
- package/dist/data/memory/narrative-sources.d.ts +19 -0
- package/dist/data/memory/narrative-sources.d.ts.map +1 -0
- package/dist/data/memory/narrative-sources.js +150 -0
- package/dist/data/memory/narrative-sources.js.map +1 -0
- package/dist/data/memory/narrative-store.d.ts +11 -0
- package/dist/data/memory/narrative-store.d.ts.map +1 -0
- package/dist/data/memory/narrative-store.js +80 -0
- package/dist/data/memory/narrative-store.js.map +1 -0
- package/dist/data/memory/narrative-types.d.ts +15 -0
- package/dist/data/memory/narrative-types.d.ts.map +1 -0
- package/dist/data/memory/narrative-types.js +3 -0
- package/dist/data/memory/narrative-types.js.map +1 -0
- package/dist/data/memory/narrative.d.ts +5 -2
- package/dist/data/memory/narrative.d.ts.map +1 -1
- package/dist/data/memory/narrative.js +31 -521
- package/dist/data/memory/narrative.js.map +1 -1
- package/dist/data/memory/note-archival.d.ts +17 -0
- package/dist/data/memory/note-archival.d.ts.map +1 -0
- package/dist/data/memory/note-archival.js +48 -0
- package/dist/data/memory/note-archival.js.map +1 -0
- package/dist/data/memory/note-embeddings.d.ts +27 -0
- package/dist/data/memory/note-embeddings.d.ts.map +1 -0
- package/dist/data/memory/note-embeddings.js +98 -0
- package/dist/data/memory/note-embeddings.js.map +1 -0
- package/dist/data/memory/reflection-dedup.d.ts +17 -0
- package/dist/data/memory/reflection-dedup.d.ts.map +1 -0
- package/dist/data/memory/reflection-dedup.js +55 -0
- package/dist/data/memory/reflection-dedup.js.map +1 -0
- package/dist/data/memory/reflection-gates.d.ts +40 -0
- package/dist/data/memory/reflection-gates.d.ts.map +1 -0
- package/dist/data/memory/reflection-gates.js +220 -0
- package/dist/data/memory/reflection-gates.js.map +1 -0
- package/dist/data/memory/reflection-sources.d.ts +13 -0
- package/dist/data/memory/reflection-sources.d.ts.map +1 -0
- package/dist/data/memory/reflection-sources.js +115 -0
- package/dist/data/memory/reflection-sources.js.map +1 -0
- package/dist/data/memory/reflection.d.ts +5 -35
- package/dist/data/memory/reflection.d.ts.map +1 -1
- package/dist/data/memory/reflection.js +25 -329
- package/dist/data/memory/reflection.js.map +1 -1
- package/dist/data/memory/schema-ddl.d.ts +1 -1
- package/dist/data/memory/schema-ddl.d.ts.map +1 -1
- package/dist/data/memory/schema-ddl.js +5 -3
- package/dist/data/memory/schema-ddl.js.map +1 -1
- package/dist/data/memory/schema-guard.d.ts +1 -1
- package/dist/data/memory/schema-guard.d.ts.map +1 -1
- package/dist/data/memory/schema-guard.js +5 -4
- package/dist/data/memory/schema-guard.js.map +1 -1
- package/dist/data/memory/schema.d.ts +2 -2
- package/dist/data/memory/schema.d.ts.map +1 -1
- package/dist/data/memory/schema.js +4 -2
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/data/memory/{semantic.d.ts → semantic-notes.d.ts} +6 -72
- package/dist/data/memory/semantic-notes.d.ts.map +1 -0
- package/dist/data/memory/semantic-notes.js +249 -0
- package/dist/data/memory/semantic-notes.js.map +1 -0
- package/dist/data/memory/semantic-search.d.ts +29 -0
- package/dist/data/memory/semantic-search.d.ts.map +1 -0
- package/dist/data/memory/semantic-search.js +156 -0
- package/dist/data/memory/semantic-search.js.map +1 -0
- package/dist/data/memory/synthesis.d.ts.map +1 -1
- package/dist/data/memory/synthesis.js +15 -7
- package/dist/data/memory/synthesis.js.map +1 -1
- package/dist/data/memory/thread-registry.d.ts +2 -2
- package/dist/data/memory/thread-registry.d.ts.map +1 -1
- package/dist/data/memory/thread-registry.js +74 -36
- package/dist/data/memory/thread-registry.js.map +1 -1
- package/dist/data/memory/topic-index.d.ts +20 -0
- package/dist/data/memory/topic-index.d.ts.map +1 -0
- package/dist/data/memory/topic-index.js +91 -0
- package/dist/data/memory/topic-index.js.map +1 -0
- package/dist/data/memory/topic-shift.js +1 -1
- package/dist/data/memory/topic-shift.js.map +1 -1
- package/dist/data/memory/utils.d.ts +0 -5
- package/dist/data/memory/utils.d.ts.map +1 -1
- package/dist/data/memory/utils.js +0 -94
- package/dist/data/memory/utils.js.map +1 -1
- package/dist/data/sent-message.repository.js +2 -2
- package/dist/data/sent-message.repository.js.map +1 -1
- package/dist/data/templates.js +2 -2
- package/dist/data/templates.js.map +1 -1
- package/dist/index.js +21 -19
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai/chat.d.ts.map +1 -1
- package/dist/integrations/openai/chat.js +5 -5
- package/dist/integrations/openai/chat.js.map +1 -1
- package/dist/integrations/openai/speech.d.ts +1 -1
- package/dist/integrations/openai/speech.d.ts.map +1 -1
- package/dist/integrations/openai/speech.js +1 -3
- package/dist/integrations/openai/speech.js.map +1 -1
- package/dist/integrations/openai/video.d.ts.map +1 -1
- package/dist/integrations/openai/video.js +21 -10
- package/dist/integrations/openai/video.js.map +1 -1
- package/dist/integrations/openai/vision.d.ts.map +1 -1
- package/dist/integrations/openai/vision.js.map +1 -1
- package/dist/integrations/openai/voice-emotion.d.ts.map +1 -1
- package/dist/integrations/openai/voice-emotion.js +2 -2
- package/dist/integrations/openai/voice-emotion.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/{logger.js → lib/logger.js} +77 -50
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/{markdown.js → lib/markdown.js} +13 -5
- package/dist/lib/markdown.js.map +1 -0
- package/dist/{types.d.ts → lib/types.d.ts} +0 -1
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/{utils.js → lib/utils.js} +29 -9
- package/dist/lib/utils.js.map +1 -0
- package/dist/llm/json.d.ts +14 -0
- package/dist/llm/json.d.ts.map +1 -0
- package/dist/llm/json.js +112 -0
- package/dist/llm/json.js.map +1 -0
- package/dist/llm/prompts/narrative.d.ts +7 -0
- package/dist/llm/prompts/narrative.d.ts.map +1 -0
- package/dist/llm/prompts/narrative.js +124 -0
- package/dist/llm/prompts/narrative.js.map +1 -0
- package/dist/llm/prompts/reflection.d.ts +6 -0
- package/dist/llm/prompts/reflection.d.ts.map +1 -0
- package/dist/llm/prompts/reflection.js +77 -0
- package/dist/llm/prompts/reflection.js.map +1 -0
- package/dist/server/factory.d.ts +2 -2
- package/dist/server/factory.d.ts.map +1 -1
- package/dist/server/factory.js +152 -73
- package/dist/server/factory.js.map +1 -1
- package/dist/{http-server.d.ts → server/http-server.d.ts} +2 -2
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/{http-server.js → server/http-server.js} +38 -17
- package/dist/server/http-server.js.map +1 -0
- package/dist/{stdio-server.d.ts → server/stdio-server.d.ts} +1 -1
- package/dist/server/stdio-server.d.ts.map +1 -0
- package/dist/{stdio-server.js → server/stdio-server.js} +25 -11
- package/dist/server/stdio-server.js.map +1 -0
- package/dist/services/agent-spawn.service.d.ts +1 -1
- package/dist/services/agent-spawn.service.d.ts.map +1 -1
- package/dist/services/agent-spawn.service.js +17 -7
- package/dist/services/agent-spawn.service.js.map +1 -1
- package/dist/services/background-runner.d.ts +2 -2
- package/dist/services/background-runner.d.ts.map +1 -1
- package/dist/services/background-runner.js +8 -3
- package/dist/services/background-runner.js.map +1 -1
- package/dist/services/claude-spawn.service.d.ts.map +1 -1
- package/dist/services/claude-spawn.service.js +61 -52
- package/dist/services/claude-spawn.service.js.map +1 -1
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +52 -40
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/dist/services/consolidation-prompts.d.ts +26 -0
- package/dist/services/consolidation-prompts.d.ts.map +1 -0
- package/dist/services/consolidation-prompts.js +144 -0
- package/dist/services/consolidation-prompts.js.map +1 -0
- package/dist/services/consolidation.service.d.ts +1 -5
- package/dist/services/consolidation.service.d.ts.map +1 -1
- package/dist/services/consolidation.service.js +53 -322
- package/dist/services/consolidation.service.js.map +1 -1
- package/dist/services/copilot-spawn.service.d.ts.map +1 -1
- package/dist/services/copilot-spawn.service.js +47 -57
- package/dist/services/copilot-spawn.service.js.map +1 -1
- package/dist/{daily-session.d.ts → services/daily-session.d.ts} +1 -1
- package/dist/services/daily-session.d.ts.map +1 -0
- package/dist/{daily-session.js → services/daily-session.js} +15 -14
- package/dist/services/daily-session.js.map +1 -0
- package/dist/services/dispatcher/broker.d.ts +0 -6
- package/dist/services/dispatcher/broker.d.ts.map +1 -1
- package/dist/services/dispatcher/broker.js +46 -38
- package/dist/services/dispatcher/broker.js.map +1 -1
- package/dist/services/dispatcher/index.d.ts +1 -1
- package/dist/services/dispatcher/index.d.ts.map +1 -1
- package/dist/services/dispatcher/index.js +1 -1
- package/dist/services/dispatcher/index.js.map +1 -1
- package/dist/services/dispatcher/lock.d.ts.map +1 -1
- package/dist/services/dispatcher/lock.js +24 -9
- package/dist/services/dispatcher/lock.js.map +1 -1
- package/dist/services/dispatcher/poller.d.ts +1 -1
- package/dist/services/dispatcher/poller.d.ts.map +1 -1
- package/dist/services/dispatcher/poller.js +74 -49
- package/dist/services/dispatcher/poller.js.map +1 -1
- package/dist/services/drive.d.ts.map +1 -0
- package/dist/{drive.js → services/drive.js} +1 -1
- package/dist/services/drive.js.map +1 -0
- package/dist/services/intent.d.ts.map +1 -0
- package/dist/{intent.js → services/intent.js} +78 -23
- package/dist/services/intent.js.map +1 -0
- package/dist/services/keep-alive-sync.service.d.ts +11 -0
- package/dist/services/keep-alive-sync.service.d.ts.map +1 -0
- package/dist/services/keep-alive-sync.service.js +47 -0
- package/dist/services/keep-alive-sync.service.js.map +1 -0
- package/dist/services/keeper.service.d.ts +1 -1
- package/dist/services/keeper.service.d.ts.map +1 -1
- package/dist/services/keeper.service.js +31 -18
- package/dist/services/keeper.service.js.map +1 -1
- package/dist/services/maintenance-signal.js +1 -1
- package/dist/services/maintenance-signal.js.map +1 -1
- package/dist/services/mcp-config.service.d.ts.map +1 -1
- package/dist/services/mcp-config.service.js +19 -6
- package/dist/services/mcp-config.service.js.map +1 -1
- package/dist/services/memory-briefing.service.d.ts.map +1 -1
- package/dist/services/memory-briefing.service.js +13 -7
- package/dist/services/memory-briefing.service.js.map +1 -1
- package/dist/services/memory-pruning.service.d.ts +12 -0
- package/dist/services/memory-pruning.service.d.ts.map +1 -0
- package/dist/services/memory-pruning.service.js +177 -0
- package/dist/services/memory-pruning.service.js.map +1 -0
- package/dist/services/process.service.d.ts +7 -2
- package/dist/services/process.service.d.ts.map +1 -1
- package/dist/services/process.service.js +233 -103
- package/dist/services/process.service.js.map +1 -1
- package/dist/services/reconnect-snapshot.service.d.ts.map +1 -1
- package/dist/services/reconnect-snapshot.service.js +3 -3
- package/dist/services/reconnect-snapshot.service.js.map +1 -1
- package/dist/{scheduler.d.ts → services/scheduler.d.ts} +1 -23
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/{scheduler.js → services/scheduler.js} +6 -8
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/self-update.service.d.ts +15 -5
- package/dist/services/self-update.service.d.ts.map +1 -1
- package/dist/services/self-update.service.js +85 -41
- package/dist/services/self-update.service.js.map +1 -1
- package/dist/services/spawn-common.d.ts +40 -16
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +163 -36
- package/dist/services/spawn-common.js.map +1 -1
- package/dist/{telegram.d.ts → services/telegram.d.ts} +3 -3
- package/dist/services/telegram.d.ts.map +1 -0
- package/dist/{telegram.js → services/telegram.js} +16 -8
- package/dist/services/telegram.js.map +1 -0
- package/dist/services/thread-config.service.d.ts +25 -0
- package/dist/services/thread-config.service.d.ts.map +1 -0
- package/dist/services/thread-config.service.js +73 -0
- package/dist/services/thread-config.service.js.map +1 -0
- package/dist/services/thread-health.service.d.ts.map +1 -1
- package/dist/services/thread-health.service.js +23 -9
- package/dist/services/thread-health.service.js.map +1 -1
- package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
- package/dist/services/thread-lifecycle.service.js +21 -7
- package/dist/services/thread-lifecycle.service.js.map +1 -1
- package/dist/services/topic.service.d.ts.map +1 -1
- package/dist/services/topic.service.js +17 -6
- package/dist/services/topic.service.js.map +1 -1
- package/dist/services/worker-cleanup.service.d.ts +3 -2
- package/dist/services/worker-cleanup.service.d.ts.map +1 -1
- package/dist/services/worker-cleanup.service.js +31 -19
- package/dist/services/worker-cleanup.service.js.map +1 -1
- package/dist/sessions/dashboard-registry.d.ts +38 -0
- package/dist/sessions/dashboard-registry.d.ts.map +1 -0
- package/dist/sessions/dashboard-registry.js +84 -0
- package/dist/sessions/dashboard-registry.js.map +1 -0
- package/dist/{sessions.d.ts → sessions/mcp-registry.d.ts} +3 -60
- package/dist/sessions/mcp-registry.d.ts.map +1 -0
- package/dist/{sessions.js → sessions/mcp-registry.js} +5 -214
- package/dist/sessions/mcp-registry.js.map +1 -0
- package/dist/sessions/session-store.d.ts +17 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +69 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/topic-registry.d.ts +14 -0
- package/dist/sessions/topic-registry.d.ts.map +1 -0
- package/dist/sessions/topic-registry.js +67 -0
- package/dist/sessions/topic-registry.js.map +1 -0
- package/dist/tools/definitions.d.ts +1 -9
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/defs/memory-defs.d.ts +1 -1
- package/dist/tools/defs/memory-defs.d.ts.map +1 -1
- package/dist/tools/defs/memory-defs.js +1 -1
- package/dist/tools/defs/memory-defs.js.map +1 -1
- package/dist/tools/defs/session-defs.d.ts +1 -1
- package/dist/tools/defs/session-defs.d.ts.map +1 -1
- package/dist/tools/defs/session-defs.js +3 -14
- package/dist/tools/defs/session-defs.js.map +1 -1
- package/dist/tools/defs/skill-defs.d.ts +1 -1
- package/dist/tools/defs/skill-defs.d.ts.map +1 -1
- package/dist/tools/defs/types.d.ts +11 -0
- package/dist/tools/defs/types.d.ts.map +1 -0
- package/dist/{chat-ui/src → tools/defs}/types.js.map +1 -1
- package/dist/tools/defs/utility-defs.d.ts +1 -1
- package/dist/tools/defs/utility-defs.d.ts.map +1 -1
- package/dist/tools/defs/utility-defs.js.map +1 -1
- package/dist/tools/defs/wait-defs.d.ts +1 -1
- package/dist/tools/defs/wait-defs.d.ts.map +1 -1
- package/dist/tools/delegate-tool.d.ts +2 -2
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +57 -37
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +2 -2
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +108 -37
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/{response-builders.d.ts → tools/response-builders.d.ts} +2 -2
- package/dist/tools/response-builders.d.ts.map +1 -0
- package/dist/{response-builders.js → tools/response-builders.js} +151 -30
- package/dist/tools/response-builders.js.map +1 -0
- package/dist/tools/session-tools.d.ts +5 -14
- package/dist/tools/session-tools.d.ts.map +1 -1
- package/dist/tools/session-tools.js +17 -12
- package/dist/tools/session-tools.js.map +1 -1
- package/dist/tools/shared-agent-utils.d.ts +1 -1
- package/dist/tools/shared-agent-utils.d.ts.map +1 -1
- package/dist/tools/shared-agent-utils.js +2 -4
- package/dist/tools/shared-agent-utils.js.map +1 -1
- package/dist/tools/skill-tools.d.ts +1 -1
- package/dist/tools/skill-tools.d.ts.map +1 -1
- package/dist/tools/skill-tools.js +12 -7
- package/dist/tools/skill-tools.js.map +1 -1
- package/dist/tools/start-session-tool.d.ts +3 -3
- package/dist/tools/start-session-tool.d.ts.map +1 -1
- package/dist/tools/start-session-tool.js +35 -25
- package/dist/tools/start-session-tool.js.map +1 -1
- package/dist/tools/utility-tools.d.ts +3 -3
- package/dist/tools/utility-tools.d.ts.map +1 -1
- package/dist/tools/utility-tools.js +46 -28
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/wait/auto-forward.d.ts +1 -1
- package/dist/tools/wait/auto-forward.d.ts.map +1 -1
- package/dist/tools/wait/auto-forward.js +6 -4
- package/dist/tools/wait/auto-forward.js.map +1 -1
- package/dist/tools/wait/context.d.ts +45 -0
- package/dist/tools/wait/context.d.ts.map +1 -0
- package/dist/tools/wait/context.js +5 -0
- package/dist/tools/wait/context.js.map +1 -0
- package/dist/tools/wait/drive-handler.d.ts +2 -2
- package/dist/tools/wait/drive-handler.d.ts.map +1 -1
- package/dist/tools/wait/drive-handler.js +24 -12
- package/dist/tools/wait/drive-handler.js.map +1 -1
- package/dist/tools/wait/index.d.ts +2 -1
- package/dist/tools/wait/index.d.ts.map +1 -1
- package/dist/tools/wait/index.js.map +1 -1
- package/dist/tools/wait/media-processor.d.ts +4 -4
- package/dist/tools/wait/media-processor.d.ts.map +1 -1
- package/dist/tools/wait/media-processor.js +17 -8
- package/dist/tools/wait/media-processor.js.map +1 -1
- package/dist/tools/wait/message-delivery.d.ts +5 -5
- package/dist/tools/wait/message-delivery.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.js +78 -37
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/dist/tools/wait/message-processing.d.ts +2 -2
- package/dist/tools/wait/message-processing.d.ts.map +1 -1
- package/dist/tools/wait/message-processing.js +95 -37
- package/dist/tools/wait/message-processing.js.map +1 -1
- package/dist/tools/wait/poll-loop.d.ts +2 -41
- package/dist/tools/wait/poll-loop.d.ts.map +1 -1
- package/dist/tools/wait/poll-loop.js +75 -23
- package/dist/tools/wait/poll-loop.js.map +1 -1
- package/dist/tools/wait/reaction-handler.d.ts +3 -3
- package/dist/tools/wait/reaction-handler.d.ts.map +1 -1
- package/dist/tools/wait/reaction-handler.js +6 -6
- package/dist/tools/wait/reaction-handler.js.map +1 -1
- package/dist/tools/wait/task-handler.d.ts +1 -1
- package/dist/tools/wait/task-handler.d.ts.map +1 -1
- package/dist/tools/wait/task-handler.js +5 -4
- package/dist/tools/wait/task-handler.js.map +1 -1
- package/package.json +11 -2
- package/templates/code-review.default.md +1 -1
- package/templates/fire-and-forget.default.md +1 -1
- package/templates/handoff.default.md +1 -1
- package/templates/sensorium-repair.default.md +1 -1
- package/templates/sleep.default.md +1 -1
- package/dist/chat-ui/src/main.d.ts +0 -2
- package/dist/chat-ui/src/main.d.ts.map +0 -1
- package/dist/chat-ui/src/main.js +0 -4
- package/dist/chat-ui/src/main.js.map +0 -1
- package/dist/chat-ui/src/markdown.d.ts +0 -2
- package/dist/chat-ui/src/markdown.d.ts.map +0 -1
- package/dist/chat-ui/src/markdown.js +0 -39
- package/dist/chat-ui/src/markdown.js.map +0 -1
- package/dist/chat-ui/src/mock-data.d.ts +0 -4
- package/dist/chat-ui/src/mock-data.d.ts.map +0 -1
- package/dist/chat-ui/src/mock-data.js +0 -230
- package/dist/chat-ui/src/mock-data.js.map +0 -1
- package/dist/chat-ui/src/types.d.ts +0 -47
- package/dist/chat-ui/src/types.d.ts.map +0 -1
- package/dist/chat-ui/vite.config.d.ts +0 -3
- package/dist/chat-ui/vite.config.d.ts.map +0 -1
- package/dist/chat-ui/vite.config.js +0 -14
- package/dist/chat-ui/vite.config.js.map +0 -1
- package/dist/config.d.ts +0 -228
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -841
- package/dist/config.js.map +0 -1
- package/dist/daily-session.d.ts.map +0 -1
- package/dist/daily-session.js.map +0 -1
- package/dist/dashboard.d.ts +0 -10
- package/dist/dashboard.d.ts.map +0 -1
- package/dist/dashboard.js +0 -10
- package/dist/dashboard.js.map +0 -1
- package/dist/data/memory/semantic.d.ts.map +0 -1
- package/dist/data/memory/semantic.js +0 -588
- package/dist/data/memory/semantic.js.map +0 -1
- package/dist/dispatcher.d.ts +0 -9
- package/dist/dispatcher.d.ts.map +0 -1
- package/dist/dispatcher.js +0 -9
- package/dist/dispatcher.js.map +0 -1
- package/dist/drive.d.ts.map +0 -1
- package/dist/drive.js.map +0 -1
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js.map +0 -1
- package/dist/intent.d.ts.map +0 -1
- package/dist/intent.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js.map +0 -1
- package/dist/memory.d.ts +0 -9
- package/dist/memory.d.ts.map +0 -1
- package/dist/memory.js +0 -9
- package/dist/memory.js.map +0 -1
- package/dist/openai.d.ts +0 -13
- package/dist/openai.d.ts.map +0 -1
- package/dist/openai.js +0 -17
- package/dist/openai.js.map +0 -1
- package/dist/response-builders.d.ts.map +0 -1
- package/dist/response-builders.js.map +0 -1
- package/dist/scheduler.d.ts.map +0 -1
- package/dist/scheduler.js.map +0 -1
- package/dist/sessions.d.ts.map +0 -1
- package/dist/sessions.js.map +0 -1
- package/dist/stdio-server.d.ts.map +0 -1
- package/dist/stdio-server.js.map +0 -1
- package/dist/telegram.d.ts.map +0 -1
- package/dist/telegram.js.map +0 -1
- package/dist/tool-definitions.d.ts +0 -2
- package/dist/tool-definitions.d.ts.map +0 -1
- package/dist/tool-definitions.js +0 -2
- package/dist/tool-definitions.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
- /package/dist/{logger.d.ts → lib/logger.d.ts} +0 -0
- /package/dist/{markdown.d.ts → lib/markdown.d.ts} +0 -0
- /package/dist/{types.js → lib/types.js} +0 -0
- /package/dist/{utils.d.ts → lib/utils.d.ts} +0 -0
- /package/dist/{drive.d.ts → services/drive.d.ts} +0 -0
- /package/dist/{intent.d.ts → services/intent.d.ts} +0 -0
- /package/dist/{chat-ui/src → tools/defs}/types.js +0 -0
|
@@ -8,29 +8,7 @@
|
|
|
8
8
|
* Schedule state is persisted to disk per-thread so tasks survive restarts.
|
|
9
9
|
* The wait_for_instructions polling loop checks for due tasks on each timeout.
|
|
10
10
|
*/
|
|
11
|
-
import type { IScheduleRepository } from "
|
|
12
|
-
export interface ScheduledTask {
|
|
13
|
-
/** Unique task ID (auto-generated). */
|
|
14
|
-
id: string;
|
|
15
|
-
/** Thread ID this task is scoped to. */
|
|
16
|
-
threadId: number;
|
|
17
|
-
/** The prompt to inject when the task fires. */
|
|
18
|
-
prompt: string;
|
|
19
|
-
/** Human-readable label for the task. */
|
|
20
|
-
label: string;
|
|
21
|
-
/** When set, task fires after this many minutes of operator silence. */
|
|
22
|
-
afterIdleMinutes?: number;
|
|
23
|
-
/** When set, ISO 8601 timestamp for one-shot scheduled execution. */
|
|
24
|
-
runAt?: string;
|
|
25
|
-
/** When set, cron expression for recurring execution (minute hour day month weekday). */
|
|
26
|
-
cron?: string;
|
|
27
|
-
/** Timestamp of last execution (ISO string), for cron dedup. */
|
|
28
|
-
lastFiredAt?: string;
|
|
29
|
-
/** If true, the task is a one-shot and should be removed after firing. */
|
|
30
|
-
oneShot: boolean;
|
|
31
|
-
/** Creation timestamp (ISO string). */
|
|
32
|
-
createdAt: string;
|
|
33
|
-
}
|
|
11
|
+
import type { IScheduleRepository, ScheduledTask } from "../data/interfaces.js";
|
|
34
12
|
export declare class ScheduleRepository implements IScheduleRepository {
|
|
35
13
|
loadSchedule(threadId: number): ScheduledTask[];
|
|
36
14
|
saveSchedule(threadId: number, tasks: ScheduledTask[]): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKhF,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAI/C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI;IAI5D,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;CAGjD;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC;AA+B3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAIrD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQrD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAgDD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,qBAAqB,EAAE,MAAM,EAC7B,cAAc,EAAE,OAAO,GACtB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAgHhD"}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* Schedule state is persisted to disk per-thread so tasks survive restarts.
|
|
9
9
|
* The wait_for_instructions polling loop checks for due tasks on each timeout.
|
|
10
10
|
*/
|
|
11
|
-
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
12
12
|
import { randomUUID } from "node:crypto";
|
|
13
13
|
import { homedir } from "node:os";
|
|
14
14
|
import { join } from "node:path";
|
|
15
|
-
import { log } from "
|
|
15
|
+
import { log } from "../lib/logger.js";
|
|
16
16
|
const SCHEDULES_DIR = join(homedir(), ".remote-copilot-mcp", "schedules");
|
|
17
17
|
export class ScheduleRepository {
|
|
18
18
|
loadSchedule(threadId) {
|
|
@@ -63,7 +63,7 @@ export function addSchedule(task) {
|
|
|
63
63
|
}
|
|
64
64
|
export function removeSchedule(threadId, taskId) {
|
|
65
65
|
const tasks = loadSchedules(threadId);
|
|
66
|
-
const idx = tasks.findIndex(t => t.id === taskId);
|
|
66
|
+
const idx = tasks.findIndex((t) => t.id === taskId);
|
|
67
67
|
if (idx === -1)
|
|
68
68
|
return false;
|
|
69
69
|
tasks.splice(idx, 1);
|
|
@@ -102,8 +102,8 @@ export function generateTaskId() {
|
|
|
102
102
|
function matchesCronField(field, value) {
|
|
103
103
|
if (field === "*")
|
|
104
104
|
return true;
|
|
105
|
-
const parts = field.split(",").map(s => s.trim());
|
|
106
|
-
return parts.some(p => Number(p) === value);
|
|
105
|
+
const parts = field.split(",").map((s) => s.trim());
|
|
106
|
+
return parts.some((p) => Number(p) === value);
|
|
107
107
|
}
|
|
108
108
|
function matchesCron(cronExpr, date) {
|
|
109
109
|
const fields = cronExpr.trim().split(/\s+/);
|
|
@@ -201,9 +201,7 @@ export function checkDueTasks(threadId, lastOperatorMessageAt, hasNewMessages) {
|
|
|
201
201
|
// the dedup logic prevents re-firing on the next poll.
|
|
202
202
|
const lastMatch = getLastCronMatch(task.cron, now);
|
|
203
203
|
if (lastMatch) {
|
|
204
|
-
const lastFiredTime = task.lastFiredAt
|
|
205
|
-
? new Date(task.lastFiredAt).getTime()
|
|
206
|
-
: 0;
|
|
204
|
+
const lastFiredTime = task.lastFiredAt ? new Date(task.lastFiredAt).getTime() : 0;
|
|
207
205
|
if (lastFiredTime < lastMatch.getTime()) {
|
|
208
206
|
if (hasNewMessages) {
|
|
209
207
|
// Operator is active — skip catch-up
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Self-update service — polls npm registry for
|
|
3
|
-
* and performs a graceful self-spawn update
|
|
2
|
+
* Self-update service — polls the npm registry for the version published on
|
|
3
|
+
* the update channel and performs a graceful self-spawn update on ANY version
|
|
4
|
+
* mismatch (newer OR older — the latter is the channel-switch rollback path).
|
|
4
5
|
*
|
|
5
6
|
* Entry point: startSelfUpdatePoller({ pkgVersion, httpPort })
|
|
6
7
|
* Call once after the HTTP server is listening (HTTP mode only).
|
|
@@ -10,16 +11,25 @@
|
|
|
10
11
|
* SELF_UPDATE_POLL_INTERVAL_MS Registry check interval (default: 60000)
|
|
11
12
|
* SELF_UPDATE_MIN_UPTIME_MS Min uptime before first update (default: 600000)
|
|
12
13
|
* SELF_UPDATE_GRACE_MS Grace period for agents to observe flag (default: 30000)
|
|
13
|
-
* MCP_START_COMMAND Replacement spawn command (default: npx -y sensorium-mcp
|
|
14
|
+
* MCP_START_COMMAND Replacement spawn command (default: npx -y sensorium-mcp@<target> --prefer-online)
|
|
15
|
+
*
|
|
16
|
+
* Update channel:
|
|
17
|
+
* Derived from MCP_START_COMMAND — the npm spec tag in "sensorium-mcp@<tag>"
|
|
18
|
+
* (e.g. @latest or @refactor). The supervisor propagates this env var from
|
|
19
|
+
* install.config.json (MCPStartCommand) via Install-Sensorium.ps1, so the
|
|
20
|
+
* channel the poller follows always matches the command the replacement
|
|
21
|
+
* process is spawned with. Switch channels by editing install.config.json
|
|
22
|
+
* and re-running Install-Sensorium.ps1. No env var / no tag = "latest".
|
|
14
23
|
*/
|
|
15
24
|
/**
|
|
16
|
-
* Fetch the
|
|
25
|
+
* Fetch the published version of sensorium-mcp for the current update channel
|
|
26
|
+
* (npm dist-tag) from the registry.
|
|
17
27
|
* Returns null on any error so the caller can silently skip this poll cycle.
|
|
18
28
|
*/
|
|
19
29
|
export declare function getRemoteVersion(): Promise<string | null>;
|
|
20
30
|
/**
|
|
21
31
|
* Run one check cycle: compare remote version to current and trigger update
|
|
22
|
-
*
|
|
32
|
+
* on any mismatch (an older remote means the channel moved back — downgrade).
|
|
23
33
|
*/
|
|
24
34
|
export declare function checkForUpdate(): Promise<void>;
|
|
25
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.service.d.ts","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"self-update.service.d.ts","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAyJH;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB/D;AAyJD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCpD;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5C,GAAG,IAAI,CAoBP"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Self-update service — polls npm registry for
|
|
3
|
-
* and performs a graceful self-spawn update
|
|
2
|
+
* Self-update service — polls the npm registry for the version published on
|
|
3
|
+
* the update channel and performs a graceful self-spawn update on ANY version
|
|
4
|
+
* mismatch (newer OR older — the latter is the channel-switch rollback path).
|
|
4
5
|
*
|
|
5
6
|
* Entry point: startSelfUpdatePoller({ pkgVersion, httpPort })
|
|
6
7
|
* Call once after the HTTP server is listening (HTTP mode only).
|
|
@@ -10,31 +11,43 @@
|
|
|
10
11
|
* SELF_UPDATE_POLL_INTERVAL_MS Registry check interval (default: 60000)
|
|
11
12
|
* SELF_UPDATE_MIN_UPTIME_MS Min uptime before first update (default: 600000)
|
|
12
13
|
* SELF_UPDATE_GRACE_MS Grace period for agents to observe flag (default: 30000)
|
|
13
|
-
* MCP_START_COMMAND Replacement spawn command (default: npx -y sensorium-mcp
|
|
14
|
+
* MCP_START_COMMAND Replacement spawn command (default: npx -y sensorium-mcp@<target> --prefer-online)
|
|
15
|
+
*
|
|
16
|
+
* Update channel:
|
|
17
|
+
* Derived from MCP_START_COMMAND — the npm spec tag in "sensorium-mcp@<tag>"
|
|
18
|
+
* (e.g. @latest or @refactor). The supervisor propagates this env var from
|
|
19
|
+
* install.config.json (MCPStartCommand) via Install-Sensorium.ps1, so the
|
|
20
|
+
* channel the poller follows always matches the command the replacement
|
|
21
|
+
* process is spawned with. Switch channels by editing install.config.json
|
|
22
|
+
* and re-running Install-Sensorium.ps1. No env var / no tag = "latest".
|
|
14
23
|
*/
|
|
15
24
|
import { spawn } from "node:child_process";
|
|
16
25
|
import { closeSync, mkdirSync, openSync, unlinkSync, writeFileSync } from "node:fs";
|
|
17
26
|
import { homedir } from "node:os";
|
|
18
27
|
import { join } from "node:path";
|
|
19
|
-
import { log } from "../logger.js";
|
|
28
|
+
import { log } from "../lib/logger.js";
|
|
20
29
|
import { emitMaintenanceSignal, hasObservedMaintenance } from "./maintenance-signal.js";
|
|
21
30
|
import { writeReconnectSnapshot } from "./reconnect-snapshot.service.js";
|
|
22
31
|
import { getActiveThreadIds } from "./process.service.js";
|
|
23
|
-
import { getLiveWaitingThreadIds } from "../sessions.js";
|
|
32
|
+
import { getLiveWaitingThreadIds } from "../sessions/dashboard-registry.js";
|
|
24
33
|
// ---------------------------------------------------------------------------
|
|
25
34
|
// Module-level state
|
|
26
35
|
// ---------------------------------------------------------------------------
|
|
27
36
|
const DATA_DIR = join(homedir(), ".remote-copilot-mcp");
|
|
28
37
|
const FLAG_PATH = join(DATA_DIR, "maintenance.flag");
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
/** Poller state: the config trio is set once by startSelfUpdatePoller;
|
|
39
|
+
* updateInProgress is the re-entrancy guard for check/update cycles. */
|
|
40
|
+
const state = {
|
|
41
|
+
updateInProgress: false,
|
|
42
|
+
currentVersion: "",
|
|
43
|
+
httpPort: 0,
|
|
44
|
+
beforeSpawnHook: null,
|
|
45
|
+
};
|
|
33
46
|
// ---------------------------------------------------------------------------
|
|
34
47
|
// Helpers
|
|
35
48
|
// ---------------------------------------------------------------------------
|
|
36
49
|
function sleep(ms) {
|
|
37
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
50
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
51
|
}
|
|
39
52
|
// Hard cap on the quiesce wait. The update ALWAYS proceeds once this elapses,
|
|
40
53
|
// even if some agent never acknowledged — quiesce can only add bounded latency,
|
|
@@ -59,7 +72,7 @@ const QUIESCE_POLL_MS = 1_000;
|
|
|
59
72
|
async function quiesceAgents() {
|
|
60
73
|
const deadline = Date.now() + QUIESCE_MAX_MS;
|
|
61
74
|
while (Date.now() < deadline) {
|
|
62
|
-
const pending = getLiveWaitingThreadIds().filter(id => !hasObservedMaintenance(id));
|
|
75
|
+
const pending = getLiveWaitingThreadIds().filter((id) => !hasObservedMaintenance(id));
|
|
63
76
|
if (pending.length === 0) {
|
|
64
77
|
log.info("[self-update] Quiesce complete — all live agents observed maintenance.");
|
|
65
78
|
return;
|
|
@@ -107,7 +120,7 @@ async function waitForHealthy(port, targetVersion, timeoutMs = 180_000) {
|
|
|
107
120
|
try {
|
|
108
121
|
const resp = await fetch(url, { signal: AbortSignal.timeout(3_000) });
|
|
109
122
|
if (resp.ok) {
|
|
110
|
-
const data = await resp.json();
|
|
123
|
+
const data = (await resp.json());
|
|
111
124
|
if (data.version === targetVersion)
|
|
112
125
|
return true;
|
|
113
126
|
// Old server still responding — keep waiting for new one
|
|
@@ -122,18 +135,40 @@ async function waitForHealthy(port, targetVersion, timeoutMs = 180_000) {
|
|
|
122
135
|
// ---------------------------------------------------------------------------
|
|
123
136
|
// Core logic
|
|
124
137
|
// ---------------------------------------------------------------------------
|
|
138
|
+
/** Release channel = the npm dist-tag the poller follows, parsed from the
|
|
139
|
+
* "sensorium-mcp@<tag>" spec in MCP_START_COMMAND (the same command the
|
|
140
|
+
* supervisor spawns this process with, propagated from install.config.json).
|
|
141
|
+
* Because an update fires on ANY version mismatch — not only a newer one —
|
|
142
|
+
* pointing the command back at @latest from a prerelease channel
|
|
143
|
+
* automatically DOWNGRADES to the stable build on the next cycle.
|
|
144
|
+
* A bare version in the spec (e.g. @3.0.32) acts as a version pin.
|
|
145
|
+
* No env var or no @tag in it = "latest". */
|
|
146
|
+
function getUpdateChannel() {
|
|
147
|
+
const cmd = process.env.MCP_START_COMMAND ?? "";
|
|
148
|
+
const m = /(?<![\w.-])sensorium-mcp@([A-Za-z0-9._-]+)/.exec(cmd);
|
|
149
|
+
if (m)
|
|
150
|
+
return m[1];
|
|
151
|
+
if (cmd.includes("sensorium-mcp@")) {
|
|
152
|
+
// e.g. a semver range spec like @^3.0.0 — poller can't follow it, so the
|
|
153
|
+
// channel falls back to "latest" while the spawn command keeps the range.
|
|
154
|
+
log.warn(`[self-update] Cannot parse channel from MCP_START_COMMAND "${cmd}" — following "latest"`);
|
|
155
|
+
}
|
|
156
|
+
return "latest";
|
|
157
|
+
}
|
|
125
158
|
/**
|
|
126
|
-
* Fetch the
|
|
159
|
+
* Fetch the published version of sensorium-mcp for the current update channel
|
|
160
|
+
* (npm dist-tag) from the registry.
|
|
127
161
|
* Returns null on any error so the caller can silently skip this poll cycle.
|
|
128
162
|
*/
|
|
129
163
|
export async function getRemoteVersion() {
|
|
164
|
+
const channel = getUpdateChannel();
|
|
130
165
|
try {
|
|
131
|
-
const response = await fetch(
|
|
166
|
+
const response = await fetch(`https://registry.npmjs.org/sensorium-mcp/${encodeURIComponent(channel)}`, { signal: AbortSignal.timeout(15_000) });
|
|
132
167
|
if (!response.ok) {
|
|
133
|
-
log.warn(`[self-update] Registry responded ${response.status} — skipping`);
|
|
168
|
+
log.warn(`[self-update] Registry responded ${response.status} for channel "${channel}" — skipping`);
|
|
134
169
|
return null;
|
|
135
170
|
}
|
|
136
|
-
const data = await response.json();
|
|
171
|
+
const data = (await response.json());
|
|
137
172
|
if (typeof data.version !== "string") {
|
|
138
173
|
log.warn("[self-update] Registry response missing .version — skipping");
|
|
139
174
|
return null;
|
|
@@ -157,11 +192,11 @@ export async function getRemoteVersion() {
|
|
|
157
192
|
* 8b. Unhealthy → kill child, remove flag, abort (MCP continues on current version)
|
|
158
193
|
*/
|
|
159
194
|
async function performUpdate(targetVersion) {
|
|
160
|
-
updateInProgress = true;
|
|
195
|
+
state.updateInProgress = true;
|
|
161
196
|
try {
|
|
162
|
-
log.info(`[self-update] Updating v${currentVersion} -> v${targetVersion}`);
|
|
197
|
+
log.info(`[self-update] Updating v${state.currentVersion} -> v${targetVersion}`);
|
|
163
198
|
// Best-effort Telegram notification (non-blocking)
|
|
164
|
-
void notifyTelegram(`sensorium-mcp: Updating v${currentVersion} -> v${targetVersion}...`);
|
|
199
|
+
void notifyTelegram(`sensorium-mcp: Updating v${state.currentVersion} -> v${targetVersion}...`);
|
|
165
200
|
// Write maintenance flag
|
|
166
201
|
try {
|
|
167
202
|
mkdirSync(DATA_DIR, { recursive: true });
|
|
@@ -196,9 +231,10 @@ async function performUpdate(targetVersion) {
|
|
|
196
231
|
log.warn(`[self-update] Reconnect snapshot failed (non-fatal): ${err}`);
|
|
197
232
|
}
|
|
198
233
|
// Close existing HTTP server to free the port for the replacement process
|
|
199
|
-
|
|
234
|
+
const beforeSpawn = state.beforeSpawnHook;
|
|
235
|
+
if (beforeSpawn) {
|
|
200
236
|
log.info("[self-update] Closing HTTP server to free port...");
|
|
201
|
-
await
|
|
237
|
+
await beforeSpawn();
|
|
202
238
|
}
|
|
203
239
|
// Spawn the replacement process (detached so it survives our exit)
|
|
204
240
|
// Pin exact version to bypass stale npx cache (EPERM prevents cache clear on Windows)
|
|
@@ -219,8 +255,8 @@ async function performUpdate(targetVersion) {
|
|
|
219
255
|
if (child.pid == null) {
|
|
220
256
|
throw new Error("Spawned child process has no PID — cannot proceed");
|
|
221
257
|
}
|
|
222
|
-
log.info(`[self-update] Replacement PID=${child.pid}, polling health on port ${
|
|
223
|
-
const healthy = await waitForHealthy(
|
|
258
|
+
log.info(`[self-update] Replacement PID=${child.pid}, polling health on port ${state.httpPort}…`);
|
|
259
|
+
const healthy = await waitForHealthy(state.httpPort, targetVersion);
|
|
224
260
|
if (healthy) {
|
|
225
261
|
// The new server writes its own server.pid on startup (index.ts) with the
|
|
226
262
|
// real node PID. Do NOT overwrite here — child.pid is the transient shell
|
|
@@ -229,7 +265,9 @@ async function performUpdate(targetVersion) {
|
|
|
229
265
|
try {
|
|
230
266
|
unlinkSync(FLAG_PATH);
|
|
231
267
|
}
|
|
232
|
-
catch {
|
|
268
|
+
catch {
|
|
269
|
+
/* best-effort */
|
|
270
|
+
}
|
|
233
271
|
log.info(`[self-update] Update to v${targetVersion} complete. Exiting.`);
|
|
234
272
|
process.exit(0);
|
|
235
273
|
}
|
|
@@ -240,16 +278,18 @@ async function performUpdate(targetVersion) {
|
|
|
240
278
|
try {
|
|
241
279
|
child.kill();
|
|
242
280
|
}
|
|
243
|
-
catch {
|
|
281
|
+
catch {
|
|
282
|
+
/* may already be dead */
|
|
283
|
+
}
|
|
244
284
|
if (process.platform === "win32") {
|
|
245
285
|
try {
|
|
246
286
|
const { execSync } = await import("node:child_process");
|
|
247
287
|
// Find and kill whatever is bound to our HTTP port
|
|
248
|
-
execSync(`for /f "tokens=5" %a in ('netstat -ano ^| findstr :${
|
|
249
|
-
log.info(`[self-update] Killed orphan process on port ${
|
|
288
|
+
execSync(`for /f "tokens=5" %a in ('netstat -ano ^| findstr :${state.httpPort} ^| findstr LISTENING') do taskkill /F /PID %a`, { shell: "cmd.exe", stdio: "ignore", timeout: 10_000 });
|
|
289
|
+
log.info(`[self-update] Killed orphan process on port ${state.httpPort}`);
|
|
250
290
|
}
|
|
251
291
|
catch {
|
|
252
|
-
log.warn(`[self-update] Could not kill orphan on port ${
|
|
292
|
+
log.warn(`[self-update] Could not kill orphan on port ${state.httpPort} — manual cleanup may be needed`);
|
|
253
293
|
}
|
|
254
294
|
}
|
|
255
295
|
// Leave maintenance.flag intact so supervisor doesn't immediately race
|
|
@@ -263,20 +303,22 @@ async function performUpdate(targetVersion) {
|
|
|
263
303
|
try {
|
|
264
304
|
unlinkSync(FLAG_PATH);
|
|
265
305
|
}
|
|
266
|
-
catch {
|
|
306
|
+
catch {
|
|
307
|
+
/* best-effort */
|
|
308
|
+
}
|
|
267
309
|
}
|
|
268
310
|
finally {
|
|
269
|
-
updateInProgress = false;
|
|
311
|
+
state.updateInProgress = false;
|
|
270
312
|
}
|
|
271
313
|
}
|
|
272
314
|
/**
|
|
273
315
|
* Run one check cycle: compare remote version to current and trigger update
|
|
274
|
-
*
|
|
316
|
+
* on any mismatch (an older remote means the channel moved back — downgrade).
|
|
275
317
|
*/
|
|
276
318
|
export async function checkForUpdate() {
|
|
277
|
-
if (updateInProgress)
|
|
319
|
+
if (state.updateInProgress)
|
|
278
320
|
return;
|
|
279
|
-
updateInProgress = true;
|
|
321
|
+
state.updateInProgress = true;
|
|
280
322
|
try {
|
|
281
323
|
const rawMin = parseInt(process.env.SELF_UPDATE_MIN_UPTIME_MS ?? "", 10);
|
|
282
324
|
const minUptimeMs = Number.isFinite(rawMin) && rawMin > 0 ? rawMin : 600_000;
|
|
@@ -287,17 +329,17 @@ export async function checkForUpdate() {
|
|
|
287
329
|
const remoteVersion = await getRemoteVersion();
|
|
288
330
|
if (remoteVersion === null)
|
|
289
331
|
return;
|
|
290
|
-
if (remoteVersion === currentVersion) {
|
|
332
|
+
if (remoteVersion === state.currentVersion) {
|
|
291
333
|
// Routine "up to date" result — not logged. It fired every check (~once a
|
|
292
334
|
// minute) and was pure noise; the meaningful events (update found/applied/
|
|
293
335
|
// failed) are logged on their own branches.
|
|
294
336
|
return;
|
|
295
337
|
}
|
|
296
|
-
log.info(`[self-update]
|
|
338
|
+
log.info(`[self-update] Channel version changed: v${remoteVersion} (current: v${state.currentVersion}) — updating`);
|
|
297
339
|
await performUpdate(remoteVersion);
|
|
298
340
|
}
|
|
299
341
|
finally {
|
|
300
|
-
updateInProgress = false;
|
|
342
|
+
state.updateInProgress = false;
|
|
301
343
|
}
|
|
302
344
|
}
|
|
303
345
|
// ---------------------------------------------------------------------------
|
|
@@ -315,13 +357,15 @@ export function startSelfUpdatePoller(config) {
|
|
|
315
357
|
log.info("[self-update] Disabled via SELF_UPDATE_ENABLED=false — skipping.");
|
|
316
358
|
return;
|
|
317
359
|
}
|
|
318
|
-
currentVersion = config.pkgVersion;
|
|
319
|
-
|
|
360
|
+
state.currentVersion = config.pkgVersion;
|
|
361
|
+
state.httpPort = config.httpPort;
|
|
320
362
|
if (config.onBeforeSpawn)
|
|
321
|
-
beforeSpawnHook = config.onBeforeSpawn;
|
|
363
|
+
state.beforeSpawnHook = config.onBeforeSpawn;
|
|
322
364
|
const rawInterval = parseInt(process.env.SELF_UPDATE_POLL_INTERVAL_MS ?? "", 10);
|
|
323
365
|
const interval = Number.isFinite(rawInterval) && rawInterval > 0 ? rawInterval : 60_000;
|
|
324
|
-
log.info(`[self-update] Poller started (current: v${currentVersion}, interval: ${interval}ms)`);
|
|
325
|
-
setInterval(() => {
|
|
366
|
+
log.info(`[self-update] Poller started (current: v${state.currentVersion}, interval: ${interval}ms)`);
|
|
367
|
+
setInterval(() => {
|
|
368
|
+
void checkForUpdate();
|
|
369
|
+
}, interval);
|
|
326
370
|
}
|
|
327
371
|
//# sourceMappingURL=self-update.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.service.js","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"self-update.service.js","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* agent module stay focused on its own CLI invocation without duplicating the
|
|
9
9
|
* lifecycle plumbing.
|
|
10
10
|
*/
|
|
11
|
-
import { type ChildProcess } from "node:child_process";
|
|
11
|
+
import { type ChildProcess, type SpawnOptions } from "node:child_process";
|
|
12
12
|
import { type ThreadLifecycleService } from "./thread-lifecycle.service.js";
|
|
13
13
|
import type { SensoriumTransport } from "./mcp-config.service.js";
|
|
14
14
|
/** Result shape shared by every spawn function. */
|
|
@@ -31,21 +31,33 @@ export declare const stripDenylistedEnvVars: (vars: Record<string, string>) => R
|
|
|
31
31
|
export declare const resolveCliPath: (name: string, prefer?: RegExp) => string | null;
|
|
32
32
|
/** On Windows: prefer .exe, fall back to .cmd, refuse extensionless shims (e.g. Volta). */
|
|
33
33
|
export declare function resolveWindowsCliPath(name: string): string | null;
|
|
34
|
-
/** Parse MCP transport from env. Returns null if port is not set or invalid. */
|
|
35
|
-
export declare function parseSensoriumTransport(): SensoriumTransport | null;
|
|
36
34
|
export declare const normalizeWorkingDirectory: (workingDirectory?: string) => string | undefined;
|
|
37
35
|
export declare const isStartupCleanupInProgress: () => boolean;
|
|
38
36
|
export declare const setStartupCleanupInProgress: (v: boolean) => void;
|
|
39
37
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
38
|
+
* Shared spawn preflight: refuse when the dashboard's max-concurrent-threads
|
|
39
|
+
* limit is already reached, then require the MCP HTTP transport. Kept here so
|
|
40
|
+
* both checks and their error wording apply uniformly to Claude, Copilot and
|
|
41
|
+
* Codex spawns rather than drifting per agent.
|
|
44
42
|
*/
|
|
45
|
-
export declare function
|
|
43
|
+
export declare function checkSpawnPreconditions(agentLabel: string): {
|
|
44
|
+
transport: SensoriumTransport;
|
|
45
|
+
} | {
|
|
46
46
|
error: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
47
|
+
};
|
|
48
|
+
/** Per-thread log file: sanitized name + threadId + date under THREAD_LOGS_DIR. */
|
|
49
|
+
export declare function buildThreadLogPath(name: string, threadId: number, ext: "json" | "jsonl"): string;
|
|
50
|
+
/** Session-bootstrap prompt shared by the Claude and Copilot CLIs (Codex
|
|
51
|
+
* delivers its own autonomous-loop prompt over stdin instead). */
|
|
52
|
+
export declare const buildSessionPrompt: (name: string, threadId: number) => string;
|
|
53
|
+
/**
|
|
54
|
+
* Spawn options shared by every agent child: detached from this (ephemeral)
|
|
55
|
+
* server process, stdout/stderr on the child-owned log fd, and .cmd/.bat
|
|
56
|
+
* launched through a shell on Windows. `stdin` defaults to "ignore"; Codex
|
|
57
|
+
* passes "pipe" because it delivers its prompt over stdin.
|
|
58
|
+
*/
|
|
59
|
+
export declare function detachedChildOptions(cliPath: string, outFd: number, env: NodeJS.ProcessEnv, cwd: string | undefined, stdin?: "ignore" | "pipe"): SpawnOptions;
|
|
60
|
+
interface RegisterSpawnOpts {
|
|
49
61
|
child: ChildProcess;
|
|
50
62
|
threadId: number;
|
|
51
63
|
name: string;
|
|
@@ -55,10 +67,22 @@ export interface RegisterSpawnOpts {
|
|
|
55
67
|
memorySourceThreadId?: number;
|
|
56
68
|
threadType?: "worker" | "branch";
|
|
57
69
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Shared tail of every agent spawn: open the log fd, run the agent-specific
|
|
72
|
+
* spawn callback, register the child for lifecycle bookkeeping, and translate
|
|
73
|
+
* any exception into an error result.
|
|
74
|
+
*
|
|
75
|
+
* stdout/stderr go to a file descriptor the CHILD owns, not a pipe drained by
|
|
76
|
+
* this (ephemeral) server process. A pipe's only reader is this node process;
|
|
77
|
+
* when it dies on a self-update/restart the orphaned, detached child keeps
|
|
78
|
+
* writing, the ~64KB OS pipe buffer fills, and the next write() blocks the
|
|
79
|
+
* child's event loop forever — killing MCP polling, the API stream and any
|
|
80
|
+
* reconnect (the exact zombie we saw on thread 20869). A file fd is duplicated
|
|
81
|
+
* into the child at spawn and drained by the OS, so it survives our restarts.
|
|
82
|
+
* (64KB blocking is a PIPE phenomenon, not a file.)
|
|
83
|
+
*/
|
|
84
|
+
export declare function launchAgentChild(opts: Omit<RegisterSpawnOpts, "child"> & {
|
|
85
|
+
spawnChild: (outFd: number) => ChildProcess;
|
|
86
|
+
}, threadLifecycle: ThreadLifecycleService): SpawnResult;
|
|
87
|
+
export {};
|
|
64
88
|
//# sourceMappingURL=spawn-common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-common.d.ts","sourceRoot":"","sources":["../../src/services/spawn-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn-common.d.ts","sourceRoot":"","sources":["../../src/services/spawn-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAa,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA8BrF,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA6BlE,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwB/E,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAG,MAAM,CAAC,UAKpF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAI1F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,IAsBvE,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBjE;AASD,eAAO,MAAM,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,GAAG,SAK9E,CAAC;AAOF,eAAO,MAAM,0BAA0B,QAAO,OAAmC,CAAC;AAClF,eAAO,MAAM,2BAA2B,GAAI,GAAG,OAAO,KAAG,IAExD,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB;IAAE,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAYvD;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAMhG;AAED;kEACkE;AAClE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MACkD,CAAC;AAEvH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,GAAE,QAAQ,GAAG,MAAiB,GAClC,YAAY,CASd;AAID,UAAU,iBAAiB;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAClC;AA8ND;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;IAAE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,CAAA;CAAE,EACxF,eAAe,EAAE,sBAAsB,GACtC,WAAW,CAmBb"}
|