@decibelsystems/tools 2.2.0-beta.0 → 3.1.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/CHANGELOG.md +226 -0
- package/dist/agentCommands.d.ts +0 -1
- package/dist/agentCommands.d.ts.map +1 -1
- package/dist/agentCommands.js +19 -8
- package/dist/agentCommands.js.map +1 -1
- package/dist/agentPresence.d.ts +82 -0
- package/dist/agentPresence.d.ts.map +1 -1
- package/dist/agentPresence.js +194 -26
- package/dist/agentPresence.js.map +1 -1
- package/dist/agentic/index.d.ts +18 -8
- package/dist/agentic/index.d.ts.map +1 -1
- package/dist/agentic/index.js +18 -144
- package/dist/agentic/index.js.map +1 -1
- package/dist/agentic/types.d.ts +106 -0
- package/dist/agentic/types.d.ts.map +1 -1
- package/dist/agentic/types.js +77 -1
- package/dist/agentic/types.js.map +1 -1
- package/dist/architectAdrs.d.ts +27 -3
- package/dist/architectAdrs.d.ts.map +1 -1
- package/dist/architectAdrs.js +92 -4
- package/dist/architectAdrs.js.map +1 -1
- package/dist/artifacts.d.ts +60 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +208 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/asks.d.ts +93 -0
- package/dist/asks.d.ts.map +1 -0
- package/dist/asks.js +383 -0
- package/dist/asks.js.map +1 -0
- package/dist/chat.d.ts +47 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +288 -0
- package/dist/chat.js.map +1 -0
- package/dist/client/transports.d.ts.map +1 -1
- package/dist/client/transports.js +13 -3
- package/dist/client/transports.js.map +1 -1
- package/dist/daemon.d.ts +33 -3
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +225 -52
- package/dist/daemon.js.map +1 -1
- package/dist/daemonConfig.d.ts +46 -0
- package/dist/daemonConfig.d.ts.map +1 -1
- package/dist/daemonConfig.js +57 -12
- package/dist/daemonConfig.js.map +1 -1
- package/dist/decibelPaths.d.ts.map +1 -1
- package/dist/decibelPaths.js +39 -6
- package/dist/decibelPaths.js.map +1 -1
- package/dist/domain/issue.d.ts +81 -0
- package/dist/domain/issue.d.ts.map +1 -0
- package/dist/domain/issue.js +106 -0
- package/dist/domain/issue.js.map +1 -0
- package/dist/domain/issueCodec.d.ts +39 -0
- package/dist/domain/issueCodec.d.ts.map +1 -0
- package/dist/domain/issueCodec.js +308 -0
- package/dist/domain/issueCodec.js.map +1 -0
- package/dist/domain/issueRepository.d.ts +124 -0
- package/dist/domain/issueRepository.d.ts.map +1 -0
- package/dist/domain/issueRepository.js +296 -0
- package/dist/domain/issueRepository.js.map +1 -0
- package/dist/domain/uid.d.ts +16 -0
- package/dist/domain/uid.d.ts.map +1 -0
- package/dist/domain/uid.js +43 -0
- package/dist/domain/uid.js.map +1 -0
- package/dist/facades/definitions.d.ts +0 -1
- package/dist/facades/definitions.d.ts.map +1 -1
- package/dist/facades/definitions.js +140 -116
- package/dist/facades/definitions.js.map +1 -1
- package/dist/facades/index.d.ts +2 -1
- package/dist/facades/index.d.ts.map +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/facades/index.js.map +1 -1
- package/dist/facades/types.d.ts +17 -0
- package/dist/facades/types.d.ts.map +1 -1
- package/dist/hq/defineAgent.d.ts.map +1 -1
- package/dist/hq/defineAgent.js +7 -11
- package/dist/hq/defineAgent.js.map +1 -1
- package/dist/httpArgs.d.ts +11 -0
- package/dist/httpArgs.d.ts.map +1 -0
- package/dist/httpArgs.js +39 -0
- package/dist/httpArgs.js.map +1 -0
- package/dist/httpServer.d.ts +1 -12
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +298 -144
- package/dist/httpServer.js.map +1 -1
- package/dist/identity.d.ts +123 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +312 -0
- package/dist/identity.js.map +1 -0
- package/dist/kernel.d.ts +46 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +334 -26
- package/dist/kernel.js.map +1 -1
- package/dist/killSwitch.d.ts +117 -0
- package/dist/killSwitch.d.ts.map +1 -0
- package/dist/killSwitch.js +161 -0
- package/dist/killSwitch.js.map +1 -0
- package/dist/lib/agent-services/assumptions.d.ts.map +1 -1
- package/dist/lib/agent-services/assumptions.js +8 -2
- package/dist/lib/agent-services/assumptions.js.map +1 -1
- package/dist/lib/atomicWrite.d.ts +49 -0
- package/dist/lib/atomicWrite.d.ts.map +1 -0
- package/dist/lib/atomicWrite.js +157 -0
- package/dist/lib/atomicWrite.js.map +1 -0
- package/dist/lib/envelope.d.ts +31 -0
- package/dist/lib/envelope.d.ts.map +1 -0
- package/dist/lib/envelope.js +80 -0
- package/dist/lib/envelope.js.map +1 -0
- package/dist/lib/fileLock.d.ts +38 -0
- package/dist/lib/fileLock.d.ts.map +1 -0
- package/dist/lib/fileLock.js +124 -0
- package/dist/lib/fileLock.js.map +1 -0
- package/dist/lib/recordIdAllocator.d.ts +102 -0
- package/dist/lib/recordIdAllocator.d.ts.map +1 -0
- package/dist/lib/recordIdAllocator.js +179 -0
- package/dist/lib/recordIdAllocator.js.map +1 -0
- package/dist/orgId.d.ts +23 -0
- package/dist/orgId.d.ts.map +1 -0
- package/dist/orgId.js +73 -0
- package/dist/orgId.js.map +1 -0
- package/dist/pairCli.d.ts +2 -0
- package/dist/pairCli.d.ts.map +1 -0
- package/dist/pairCli.js +97 -0
- package/dist/pairCli.js.map +1 -0
- package/dist/peerBroker.d.ts +40 -0
- package/dist/peerBroker.d.ts.map +1 -0
- package/dist/peerBroker.js +70 -0
- package/dist/peerBroker.js.map +1 -0
- package/dist/peerBrokerSupervisor.d.ts +21 -0
- package/dist/peerBrokerSupervisor.d.ts.map +1 -0
- package/dist/peerBrokerSupervisor.js +131 -0
- package/dist/peerBrokerSupervisor.js.map +1 -0
- package/dist/projectPaths.d.ts.map +1 -1
- package/dist/projectPaths.js +1 -19
- package/dist/projectPaths.js.map +1 -1
- package/dist/projectRegistry.d.ts +22 -0
- package/dist/projectRegistry.d.ts.map +1 -1
- package/dist/projectRegistry.js +69 -2
- package/dist/projectRegistry.js.map +1 -1
- package/dist/pty/boundary.d.ts +39 -0
- package/dist/pty/boundary.d.ts.map +1 -0
- package/dist/pty/boundary.js +100 -0
- package/dist/pty/boundary.js.map +1 -0
- package/dist/pty/errors.d.ts +6 -0
- package/dist/pty/errors.d.ts.map +1 -0
- package/dist/pty/errors.js +12 -0
- package/dist/pty/errors.js.map +1 -0
- package/dist/pty/fleet.d.ts +159 -0
- package/dist/pty/fleet.d.ts.map +1 -0
- package/dist/pty/fleet.js +543 -0
- package/dist/pty/fleet.js.map +1 -0
- package/dist/pty/launchProfile.d.ts +45 -0
- package/dist/pty/launchProfile.d.ts.map +1 -0
- package/dist/pty/launchProfile.js +149 -0
- package/dist/pty/launchProfile.js.map +1 -0
- package/dist/pty/openTerminal.d.ts +48 -0
- package/dist/pty/openTerminal.d.ts.map +1 -0
- package/dist/pty/openTerminal.js +185 -0
- package/dist/pty/openTerminal.js.map +1 -0
- package/dist/pty/pairDialog.d.ts +16 -0
- package/dist/pty/pairDialog.d.ts.map +1 -0
- package/dist/pty/pairDialog.js +121 -0
- package/dist/pty/pairDialog.js.map +1 -0
- package/dist/pty/pairing.d.ts +86 -0
- package/dist/pty/pairing.d.ts.map +1 -0
- package/dist/pty/pairing.js +351 -0
- package/dist/pty/pairing.js.map +1 -0
- package/dist/pty/routes.d.ts +49 -0
- package/dist/pty/routes.d.ts.map +1 -0
- package/dist/pty/routes.js +624 -0
- package/dist/pty/routes.js.map +1 -0
- package/dist/pty/sessions.d.ts +167 -0
- package/dist/pty/sessions.d.ts.map +1 -0
- package/dist/pty/sessions.js +513 -0
- package/dist/pty/sessions.js.map +1 -0
- package/dist/pty/tmux.d.ts +109 -0
- package/dist/pty/tmux.d.ts.map +1 -0
- package/dist/pty/tmux.js +271 -0
- package/dist/pty/tmux.js.map +1 -0
- package/dist/roster.d.ts +37 -0
- package/dist/roster.d.ts.map +1 -0
- package/dist/roster.js +126 -0
- package/dist/roster.js.map +1 -0
- package/dist/runtime/circuitBreaker.d.ts +95 -0
- package/dist/runtime/circuitBreaker.d.ts.map +1 -0
- package/dist/runtime/circuitBreaker.js +178 -0
- package/dist/runtime/circuitBreaker.js.map +1 -0
- package/dist/runtime/daemonMeta.d.ts +53 -0
- package/dist/runtime/daemonMeta.d.ts.map +1 -0
- package/dist/runtime/daemonMeta.js +121 -0
- package/dist/runtime/daemonMeta.js.map +1 -0
- package/dist/runtime/ensureRuntime.d.ts +103 -0
- package/dist/runtime/ensureRuntime.d.ts.map +1 -0
- package/dist/runtime/ensureRuntime.js +276 -0
- package/dist/runtime/ensureRuntime.js.map +1 -0
- package/dist/runtime/extensions.d.ts +57 -0
- package/dist/runtime/extensions.d.ts.map +1 -0
- package/dist/runtime/extensions.js +216 -0
- package/dist/runtime/extensions.js.map +1 -0
- package/dist/runtime/localHttp.d.ts +24 -0
- package/dist/runtime/localHttp.d.ts.map +1 -0
- package/dist/runtime/localHttp.js +84 -0
- package/dist/runtime/localHttp.js.map +1 -0
- package/dist/runtime/projectResolution.d.ts +29 -0
- package/dist/runtime/projectResolution.d.ts.map +1 -0
- package/dist/runtime/projectResolution.js +67 -0
- package/dist/runtime/projectResolution.js.map +1 -0
- package/dist/runtime/protocol.d.ts +62 -0
- package/dist/runtime/protocol.d.ts.map +1 -0
- package/dist/runtime/protocol.js +74 -0
- package/dist/runtime/protocol.js.map +1 -0
- package/dist/sentinelIssues.d.ts +42 -2
- package/dist/sentinelIssues.d.ts.map +1 -1
- package/dist/sentinelIssues.js +167 -65
- package/dist/sentinelIssues.js.map +1 -1
- package/dist/server.js +123 -15
- package/dist/server.js.map +1 -1
- package/dist/toolConfig.d.ts.map +1 -1
- package/dist/toolConfig.js +12 -0
- package/dist/toolConfig.js.map +1 -1
- package/dist/tools/agentic/agentQueue.d.ts.map +1 -1
- package/dist/tools/agentic/agentQueue.js +4 -0
- package/dist/tools/agentic/agentQueue.js.map +1 -1
- package/dist/tools/agentic/index.d.ts.map +1 -1
- package/dist/tools/agentic/index.js +28 -2
- package/dist/tools/agentic/index.js.map +1 -1
- package/dist/tools/architect/index.d.ts +1 -0
- package/dist/tools/architect/index.d.ts.map +1 -1
- package/dist/tools/architect/index.js +52 -3
- package/dist/tools/architect/index.js.map +1 -1
- package/dist/tools/architect.d.ts.map +1 -1
- package/dist/tools/architect.js +59 -8
- package/dist/tools/architect.js.map +1 -1
- package/dist/tools/artifacts.d.ts +5 -0
- package/dist/tools/artifacts.d.ts.map +1 -0
- package/dist/tools/artifacts.js +89 -0
- package/dist/tools/artifacts.js.map +1 -0
- package/dist/tools/asks.d.ts +6 -0
- package/dist/tools/asks.d.ts.map +1 -0
- package/dist/tools/asks.js +104 -0
- package/dist/tools/asks.js.map +1 -0
- package/dist/tools/context.d.ts +10 -5
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +45 -18
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/coordinator/coordinator.d.ts.map +1 -1
- package/dist/tools/coordinator/coordinator.js +48 -19
- package/dist/tools/coordinator/coordinator.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts +1 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +42 -2
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/crit.d.ts +2 -1
- package/dist/tools/crit.d.ts.map +1 -1
- package/dist/tools/crit.js +19 -4
- package/dist/tools/crit.js.map +1 -1
- package/dist/tools/data-inspector.d.ts +1 -1
- package/dist/tools/data-inspector.d.ts.map +1 -1
- package/dist/tools/data-inspector.js +1 -1
- package/dist/tools/data-inspector.js.map +1 -1
- package/dist/tools/designer/index.d.ts.map +1 -1
- package/dist/tools/designer/index.js +4 -3
- package/dist/tools/designer/index.js.map +1 -1
- package/dist/tools/designer/lateral-tools.d.ts.map +1 -1
- package/dist/tools/designer/lateral-tools.js +4 -2
- package/dist/tools/designer/lateral-tools.js.map +1 -1
- package/dist/tools/designer.d.ts +2 -1
- package/dist/tools/designer.d.ts.map +1 -1
- package/dist/tools/designer.js +24 -12
- package/dist/tools/designer.js.map +1 -1
- package/dist/tools/dojo/index.d.ts.map +1 -1
- package/dist/tools/dojo/index.js +52 -3
- package/dist/tools/dojo/index.js.map +1 -1
- package/dist/tools/dojo.d.ts +65 -3
- package/dist/tools/dojo.d.ts.map +1 -1
- package/dist/tools/dojo.js +148 -23
- package/dist/tools/dojo.js.map +1 -1
- package/dist/tools/friction.d.ts.map +1 -1
- package/dist/tools/friction.js +16 -6
- package/dist/tools/friction.js.map +1 -1
- package/dist/tools/guardian.d.ts +7 -0
- package/dist/tools/guardian.d.ts.map +1 -1
- package/dist/tools/guardian.js +152 -11
- package/dist/tools/guardian.js.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.d.ts.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.js +8 -2
- package/dist/tools/hygiene/oracle-hygiene.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +33 -18
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/killswitch/index.d.ts +13 -0
- package/dist/tools/killswitch/index.d.ts.map +1 -0
- package/dist/tools/killswitch/index.js +138 -0
- package/dist/tools/killswitch/index.js.map +1 -0
- package/dist/tools/learnings.d.ts +2 -1
- package/dist/tools/learnings.d.ts.map +1 -1
- package/dist/tools/learnings.js +31 -15
- package/dist/tools/learnings.js.map +1 -1
- package/dist/tools/oracle/index.d.ts.map +1 -1
- package/dist/tools/oracle/index.js +8 -0
- package/dist/tools/oracle/index.js.map +1 -1
- package/dist/tools/oracle.d.ts +7 -0
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +41 -12
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/policy.d.ts +2 -1
- package/dist/tools/policy.d.ts.map +1 -1
- package/dist/tools/policy.js +28 -9
- package/dist/tools/policy.js.map +1 -1
- package/dist/tools/postoffice/index.d.ts +10 -0
- package/dist/tools/postoffice/index.d.ts.map +1 -0
- package/dist/tools/postoffice/index.js +218 -0
- package/dist/tools/postoffice/index.js.map +1 -0
- package/dist/tools/postoffice.d.ts +78 -0
- package/dist/tools/postoffice.d.ts.map +1 -0
- package/dist/tools/postoffice.js +199 -0
- package/dist/tools/postoffice.js.map +1 -0
- package/dist/tools/provenance.d.ts +18 -2
- package/dist/tools/provenance.d.ts.map +1 -1
- package/dist/tools/provenance.js +68 -40
- package/dist/tools/provenance.js.map +1 -1
- package/dist/tools/registry/index.d.ts.map +1 -1
- package/dist/tools/registry/index.js +24 -0
- package/dist/tools/registry/index.js.map +1 -1
- package/dist/tools/sentinel/index.d.ts +1 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -1
- package/dist/tools/sentinel/index.js +142 -6
- package/dist/tools/sentinel/index.js.map +1 -1
- package/dist/tools/sentinel.d.ts +152 -1
- package/dist/tools/sentinel.d.ts.map +1 -1
- package/dist/tools/sentinel.js +609 -328
- package/dist/tools/sentinel.js.map +1 -1
- package/dist/tools/shared/index.d.ts +2 -1
- package/dist/tools/shared/index.d.ts.map +1 -1
- package/dist/tools/shared/index.js +2 -1
- package/dist/tools/shared/index.js.map +1 -1
- package/dist/tools/shared/response.d.ts +24 -0
- package/dist/tools/shared/response.d.ts.map +1 -1
- package/dist/tools/shared/response.js +61 -7
- package/dist/tools/shared/response.js.map +1 -1
- package/dist/tools/shared/runTracker.d.ts +2 -0
- package/dist/tools/shared/runTracker.d.ts.map +1 -1
- package/dist/tools/shared/runTracker.js +38 -0
- package/dist/tools/shared/runTracker.js.map +1 -1
- package/dist/tools/shared/storeRead.d.ts +153 -0
- package/dist/tools/shared/storeRead.d.ts.map +1 -0
- package/dist/tools/shared/storeRead.js +242 -0
- package/dist/tools/shared/storeRead.js.map +1 -0
- package/dist/tools/swarm.d.ts +3 -1
- package/dist/tools/swarm.d.ts.map +1 -1
- package/dist/tools/swarm.js +6 -12
- package/dist/tools/swarm.js.map +1 -1
- package/dist/tools/testSpec.d.ts +3 -2
- package/dist/tools/testSpec.d.ts.map +1 -1
- package/dist/tools/testSpec.js +51 -14
- package/dist/tools/testSpec.js.map +1 -1
- package/dist/tools/vector.d.ts +33 -1
- package/dist/tools/vector.d.ts.map +1 -1
- package/dist/tools/vector.js +31 -5
- package/dist/tools/vector.js.map +1 -1
- package/dist/tools/voice/index.d.ts +1 -0
- package/dist/tools/voice/index.d.ts.map +1 -1
- package/dist/tools/voice/index.js +33 -2
- package/dist/tools/voice/index.js.map +1 -1
- package/dist/tools/voice.d.ts +48 -1
- package/dist/tools/voice.d.ts.map +1 -1
- package/dist/tools/voice.js +63 -3
- package/dist/tools/voice.js.map +1 -1
- package/dist/tools/zoom/index.d.ts +15 -0
- package/dist/tools/zoom/index.d.ts.map +1 -0
- package/dist/tools/zoom/index.js +174 -0
- package/dist/tools/zoom/index.js.map +1 -0
- package/dist/tools/zoom.d.ts +234 -0
- package/dist/tools/zoom.d.ts.map +1 -0
- package/dist/tools/zoom.js +627 -0
- package/dist/tools/zoom.js.map +1 -0
- package/dist/transports/bridge.d.ts +1 -1
- package/dist/transports/bridge.d.ts.map +1 -1
- package/dist/transports/bridge.js +4 -1
- package/dist/transports/bridge.js.map +1 -1
- package/dist/transports/http.d.ts +1 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +3 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/index.d.ts +1 -0
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +1 -0
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/mcp.d.ts +1 -1
- package/dist/transports/mcp.d.ts.map +1 -1
- package/dist/transports/mcp.js +9 -4
- package/dist/transports/mcp.js.map +1 -1
- package/dist/transports/stdio.d.ts +1 -1
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +2 -0
- package/dist/transports/stdio.js.map +1 -1
- package/dist/transports/thinStdio.d.ts +22 -0
- package/dist/transports/thinStdio.d.ts.map +1 -0
- package/dist/transports/thinStdio.js +218 -0
- package/dist/transports/thinStdio.js.map +1 -0
- package/dist/transports/types.d.ts +8 -1
- package/dist/transports/types.d.ts.map +1 -1
- package/dist/types/agent-services.d.ts +7 -0
- package/dist/types/agent-services.d.ts.map +1 -1
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/package.json +20 -4
- package/templates/AGENT.md +3 -0
- package/templates/CLAUDE-decibel.md +11 -0
- package/templates/com.decibel.daemon.plist +6 -1
- package/dist/tools/deck.d.ts +0 -11
- package/dist/tools/deck.d.ts.map +0 -1
- package/dist/tools/deck.js +0 -1656
- package/dist/tools/deck.js.map +0 -1
- package/dist/tools/mother.d.ts +0 -11
- package/dist/tools/mother.d.ts.map +0 -1
- package/dist/tools/mother.js +0 -503
- package/dist/tools/mother.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -3
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -189
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/senken.d.ts +0 -11
- package/dist/tools/senken.d.ts.map +0 -1
- package/dist/tools/senken.js +0 -482
- package/dist/tools/senken.js.map +0 -1
- package/dist/tools/terminal.d.ts +0 -17
- package/dist/tools/terminal.d.ts.map +0 -1
- package/dist/tools/terminal.js +0 -968
- package/dist/tools/terminal.js.map +0 -1
- package/dist/tools/toolsIndex.d.ts +0 -5
- package/dist/tools/toolsIndex.d.ts.map +0 -1
- package/dist/tools/toolsIndex.js +0 -37
- package/dist/tools/toolsIndex.js.map +0 -1
package/dist/sentinelIssues.js
CHANGED
|
@@ -2,7 +2,10 @@ import fs from 'fs/promises';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { parse as parseYaml, parseAllDocuments, stringify as stringifyYaml } from 'yaml';
|
|
4
4
|
import { log } from './config.js';
|
|
5
|
+
import { assertActor, assertTeam } from './identity.js';
|
|
5
6
|
import { getWritePath, readFilesFromBothPaths } from './decibelPaths.js';
|
|
7
|
+
import { FsIssueRepository } from './domain/issueRepository.js';
|
|
8
|
+
import { writeFileAtomic } from './lib/atomicWrite.js';
|
|
6
9
|
// ============================================================================
|
|
7
10
|
// Constants
|
|
8
11
|
// ============================================================================
|
|
@@ -105,10 +108,15 @@ export async function listIssuesForProject(projectId) {
|
|
|
105
108
|
log(`sentinelIssues: Skipping ${filePath} - missing id or title`);
|
|
106
109
|
continue;
|
|
107
110
|
}
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
111
|
+
// Two DIFFERENT issues can claim one id (ISS-0131). Dropping the second
|
|
112
|
+
// made it unreachable to read_issue/update_issue while the tool still
|
|
113
|
+
// reported success on the first — so keep both and mark them instead.
|
|
114
|
+
// (Cross-path duplicates of the SAME file are already deduped by
|
|
115
|
+
// filename in readFilesFromBothPaths, so this only ever fires on a real
|
|
116
|
+
// id collision.)
|
|
117
|
+
const isDuplicate = seenIds.has(id);
|
|
118
|
+
if (isDuplicate) {
|
|
119
|
+
log(`sentinelIssues: Duplicate id ${id} from ${source} path — both retained, marked ambiguous`);
|
|
112
120
|
}
|
|
113
121
|
seenIds.add(id);
|
|
114
122
|
const issue = {
|
|
@@ -139,6 +147,20 @@ export async function listIssuesForProject(projectId) {
|
|
|
139
147
|
log(`sentinelIssues: Failed to parse ${filePath}: ${message}`);
|
|
140
148
|
}
|
|
141
149
|
}
|
|
150
|
+
// Mark EVERY member of a colliding id, not just the ones seen second — a
|
|
151
|
+
// caller holding the first file is in exactly as much danger as one holding
|
|
152
|
+
// the second, and neither can be safely written by id alone.
|
|
153
|
+
const byId = new Map();
|
|
154
|
+
for (const issue of issues) {
|
|
155
|
+
const key = issue.id.toUpperCase();
|
|
156
|
+
byId.set(key, [...(byId.get(key) ?? []), issue]);
|
|
157
|
+
}
|
|
158
|
+
for (const group of byId.values()) {
|
|
159
|
+
if (group.length > 1) {
|
|
160
|
+
for (const issue of group)
|
|
161
|
+
issue.duplicate_id = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
142
164
|
// Sort by ID (newest first)
|
|
143
165
|
issues.sort((a, b) => extractIssueNumber(b.id) - extractIssueNumber(a.id));
|
|
144
166
|
return issues;
|
|
@@ -146,66 +168,86 @@ export async function listIssuesForProject(projectId) {
|
|
|
146
168
|
/**
|
|
147
169
|
* Create a new issue for a project
|
|
148
170
|
*/
|
|
171
|
+
/**
|
|
172
|
+
* Create an issue.
|
|
173
|
+
*
|
|
174
|
+
* EPIC-0038 Phase 5: this used to be the second writer. It emitted `.yml` while
|
|
175
|
+
* the facade path (src/tools/sentinel.ts -> FsIssueRepository) emitted `.md`,
|
|
176
|
+
* into the same directory, from the same ISS-NNNN space. Converging the files
|
|
177
|
+
* while both writers ran would have left this one re-emitting `.yml` behind the
|
|
178
|
+
* migration — which is why the epic sequences behaviour before representation.
|
|
179
|
+
*
|
|
180
|
+
* So it now delegates. The name, the input contract and the return shape are
|
|
181
|
+
* all preserved; only the bytes on disk change. `SentinelIssue` is a subset of
|
|
182
|
+
* the canonical `Issue`, so the mapping back is total rather than lossy:
|
|
183
|
+
* `details` carries what this API calls `description`, and everything else is
|
|
184
|
+
* the same field under the same name.
|
|
185
|
+
*
|
|
186
|
+
* One field needs a decision rather than a mapping. This API has no `severity`
|
|
187
|
+
* and the canonical model wants one, so callers may now pass it and it defaults
|
|
188
|
+
* to 'med' — the neutral middle of ['low','med','high','critical'] — rather
|
|
189
|
+
* than inventing a severity from `priority`, which answers a different question
|
|
190
|
+
* (how bad it is, versus when it gets worked on).
|
|
191
|
+
*/
|
|
149
192
|
export async function createIssue(input) {
|
|
150
|
-
const { projectId, title, description, epicId, priority, tags } = input;
|
|
151
|
-
//
|
|
193
|
+
const { projectId, title, description, epicId, priority, tags, severity } = input;
|
|
194
|
+
// Validate HERE, at the write boundary, not in the codec. A file that already
|
|
195
|
+
// exists with a damaged identity must still decode (the codec warns instead),
|
|
196
|
+
// but a NEW bad value should never reach disk in the first place.
|
|
197
|
+
if (input.assignee !== undefined)
|
|
198
|
+
assertActor(input.assignee);
|
|
199
|
+
if (input.team !== undefined)
|
|
200
|
+
assertTeam(input.team);
|
|
152
201
|
const issuesDir = await getWritePath(projectId, ISSUES_SUBPATH);
|
|
153
202
|
await ensureDir(issuesDir);
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
const maxNum = existingIssues.reduce((max, issue) => Math.max(max, extractIssueNumber(issue.id)), 0);
|
|
157
|
-
const newNum = maxNum + 1;
|
|
158
|
-
const newId = formatIssueId(newNum);
|
|
159
|
-
// Build filename
|
|
160
|
-
const slug = slugify(title);
|
|
161
|
-
const filename = `${newId}-${slug}.yml`;
|
|
162
|
-
const filePath = path.join(issuesDir, filename);
|
|
163
|
-
// Build issue object
|
|
164
|
-
const now = new Date().toISOString();
|
|
165
|
-
const issue = {
|
|
166
|
-
id: newId,
|
|
203
|
+
const repo = new FsIssueRepository(issuesDir);
|
|
204
|
+
const stored = await repo.create({
|
|
167
205
|
title,
|
|
168
|
-
|
|
169
|
-
|
|
206
|
+
details: description ?? '',
|
|
207
|
+
severity: severity ?? 'med',
|
|
170
208
|
priority: priority || 'medium',
|
|
171
209
|
tags: tags || [],
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
// Use a specific field order for cleaner output
|
|
183
|
-
const yamlObj = {
|
|
210
|
+
assignee: input.assignee,
|
|
211
|
+
team: input.team,
|
|
212
|
+
epicId,
|
|
213
|
+
project: projectId,
|
|
214
|
+
});
|
|
215
|
+
const issue = stored.issue;
|
|
216
|
+
log(`sentinelIssues: Created issue at ${stored.path}`);
|
|
217
|
+
// Rebuilt in this API's shape, not returned raw, so existing callers keep the
|
|
218
|
+
// response they were written against.
|
|
219
|
+
const out = {
|
|
184
220
|
id: issue.id,
|
|
185
221
|
title: issue.title,
|
|
186
|
-
project: issue.project,
|
|
222
|
+
project: issue.project ?? projectId,
|
|
187
223
|
status: issue.status,
|
|
188
224
|
priority: issue.priority,
|
|
225
|
+
tags: issue.tags,
|
|
226
|
+
created_at: issue.created_at,
|
|
227
|
+
// The canonical record omits updated_at until something updates it, but
|
|
228
|
+
// this API has always returned both on create. Echoing created_at keeps
|
|
229
|
+
// that contract without writing a redundant field to disk.
|
|
230
|
+
updated_at: issue.updated_at ?? issue.created_at,
|
|
231
|
+
filePath: stored.path,
|
|
189
232
|
};
|
|
190
|
-
if (epicId)
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
};
|
|
233
|
+
if (issue.epicId)
|
|
234
|
+
out.epicId = issue.epicId;
|
|
235
|
+
if (issue.details)
|
|
236
|
+
out.description = issue.details;
|
|
237
|
+
return out;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Build the refusal for an id that names more than one record. Callers get the
|
|
241
|
+
* candidate filenames because each one is itself a valid, unambiguous id —
|
|
242
|
+
* without them the error would be a dead end rather than a next step.
|
|
243
|
+
*/
|
|
244
|
+
function ambiguousIssueId(issueId, projectId, candidates) {
|
|
245
|
+
const names = candidates.map((c) => typeof c.filename === 'string' ? c.filename : String(c.title ?? '?'));
|
|
246
|
+
const err = new Error(`AMBIGUOUS_ISSUE_ID: "${issueId}" matches ${names.length} records in project "${projectId}", ` +
|
|
247
|
+
`so the target is undefined and nothing was changed. ` +
|
|
248
|
+
`Re-run with one of these filenames as issue_id: ${names.join(', ')}`);
|
|
249
|
+
err.name = 'AmbiguousIssueIdError';
|
|
250
|
+
return err;
|
|
209
251
|
}
|
|
210
252
|
/**
|
|
211
253
|
* Get a single issue by ID (e.g., "ISS-0005") with full content
|
|
@@ -216,29 +258,50 @@ export async function getIssueById(projectId, issueId) {
|
|
|
216
258
|
const norm = (s) => s.toUpperCase().replace(/\.(MD|YA?ML)$/, '');
|
|
217
259
|
const issues = await listIssuesForProject(projectId);
|
|
218
260
|
const normalizedId = norm(issueId);
|
|
219
|
-
|
|
220
|
-
|
|
261
|
+
// Filename is the more specific form and can only match one record, so it
|
|
262
|
+
// wins outright — that keeps "retry with the filename" a working escape
|
|
263
|
+
// hatch out of an ambiguous id.
|
|
264
|
+
const byFilename = issues.filter((i) => typeof i.filename === 'string' && norm(i.filename) === normalizedId);
|
|
265
|
+
if (byFilename.length === 1)
|
|
266
|
+
return byFilename[0];
|
|
267
|
+
const byId = issues.filter((i) => norm(i.id) === normalizedId);
|
|
268
|
+
if (byId.length === 0)
|
|
269
|
+
return null;
|
|
270
|
+
if (byId.length > 1)
|
|
271
|
+
throw ambiguousIssueId(issueId, projectId, byId);
|
|
272
|
+
return byId[0];
|
|
221
273
|
}
|
|
222
274
|
/**
|
|
223
275
|
* Update an existing issue — status, priority, tags, and/or append a note.
|
|
224
276
|
* Reads the YAML file, applies changes, writes back.
|
|
225
277
|
*/
|
|
226
278
|
export async function updateIssue(input) {
|
|
227
|
-
const { projectId, issueId, status, priority, tags, note } = input;
|
|
279
|
+
const { projectId, issueId, status, priority, tags, note, assignee, team } = input;
|
|
228
280
|
// Find the issue file
|
|
229
281
|
const files = await readFilesFromBothPaths(projectId, ISSUES_SUBPATH);
|
|
230
282
|
const normalizedId = issueId.toUpperCase();
|
|
231
|
-
|
|
232
|
-
|
|
283
|
+
// Exact filename beats a prefix, so naming the file disambiguates a
|
|
284
|
+
// duplicate id. Checked first and returned outright.
|
|
285
|
+
const exact = files.filter((f) => path.basename(f.filePath).toUpperCase() === normalizedId);
|
|
286
|
+
// A bare `startsWith` had no boundary: "ISS-011" swallowed ISS-0110,
|
|
287
|
+
// ISS-0112 and ISS-0119, and `break` then wrote to whichever readdir
|
|
288
|
+
// happened to yield first. Require the id to end at a separator or the
|
|
289
|
+
// extension, and collect every hit rather than stopping at the first.
|
|
290
|
+
const prefixed = files.filter((f) => {
|
|
233
291
|
const basename = path.basename(f.filePath).toUpperCase();
|
|
234
|
-
if (basename.startsWith(normalizedId))
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
|
|
292
|
+
if (!basename.startsWith(normalizedId))
|
|
293
|
+
return false;
|
|
294
|
+
const rest = basename.slice(normalizedId.length);
|
|
295
|
+
return rest === '' || rest.startsWith('-') || /^\.(MD|YA?ML)$/.test(rest);
|
|
296
|
+
});
|
|
297
|
+
const matches = exact.length > 0 ? exact : prefixed;
|
|
298
|
+
if (matches.length === 0) {
|
|
240
299
|
throw new Error(`Issue ${issueId} not found in project ${projectId}`);
|
|
241
300
|
}
|
|
301
|
+
if (matches.length > 1) {
|
|
302
|
+
throw ambiguousIssueId(issueId, projectId, matches.map((f) => ({ filename: path.basename(f.filePath) })));
|
|
303
|
+
}
|
|
304
|
+
const matchedFile = matches[0];
|
|
242
305
|
// Read and parse. Two on-disk formats exist:
|
|
243
306
|
// 1. Markdown with `---` frontmatter delimiters + body (tools/sentinel.ts createIssue)
|
|
244
307
|
// 2. Pure YAML (this module's createIssue)
|
|
@@ -254,11 +317,48 @@ export async function updateIssue(input) {
|
|
|
254
317
|
if (status && status !== parsed.status) {
|
|
255
318
|
changes.push(`status: ${parsed.status} → ${status}`);
|
|
256
319
|
parsed.status = status;
|
|
320
|
+
// Markdown records mirror the status into the body as `**Status:** x` for
|
|
321
|
+
// human readers. close_issue rewrites that line; this path did not, so a
|
|
322
|
+
// record moved to in_progress or closed here still read `open` to anyone
|
|
323
|
+
// opening the file. Frontmatter stayed correct, which is why the tools
|
|
324
|
+
// never noticed — the drift was only ever visible to people.
|
|
325
|
+
if (body !== undefined) {
|
|
326
|
+
body = body.replace(/^\*\*Status:\*\* .*$/m, `**Status:** ${status}`);
|
|
327
|
+
}
|
|
257
328
|
}
|
|
258
329
|
if (priority && priority !== parsed.priority) {
|
|
259
330
|
changes.push(`priority: ${parsed.priority ?? 'unset'} → ${priority}`);
|
|
260
331
|
parsed.priority = priority;
|
|
261
332
|
}
|
|
333
|
+
// EPIC-0040. `undefined` means "do not touch"; the empty string means
|
|
334
|
+
// "clear it". Collapsing those two would make unassigning impossible, which
|
|
335
|
+
// is the same silent-omission shape as a status that no filter can select.
|
|
336
|
+
if (assignee !== undefined) {
|
|
337
|
+
const next = assignee.trim();
|
|
338
|
+
if (next)
|
|
339
|
+
assertActor(next);
|
|
340
|
+
const before = parsed.assignee || 'unassigned';
|
|
341
|
+
if (next !== parsed.assignee) {
|
|
342
|
+
changes.push(`assignee: ${before} → ${next || 'unassigned'}`);
|
|
343
|
+
if (next)
|
|
344
|
+
parsed.assignee = next;
|
|
345
|
+
else
|
|
346
|
+
delete parsed.assignee;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (team !== undefined) {
|
|
350
|
+
const next = team.trim();
|
|
351
|
+
if (next)
|
|
352
|
+
assertTeam(next);
|
|
353
|
+
const before = parsed.team || 'none';
|
|
354
|
+
if (next !== parsed.team) {
|
|
355
|
+
changes.push(`team: ${before} → ${next || 'none'}`);
|
|
356
|
+
if (next)
|
|
357
|
+
parsed.team = next;
|
|
358
|
+
else
|
|
359
|
+
delete parsed.team;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
262
362
|
if (tags) {
|
|
263
363
|
const oldTags = parsed.tags || [];
|
|
264
364
|
const merged = [...new Set([...oldTags, ...tags])];
|
|
@@ -291,7 +391,7 @@ export async function updateIssue(input) {
|
|
|
291
391
|
const writeDir = await getWritePath(projectId, ISSUES_SUBPATH);
|
|
292
392
|
await ensureDir(writeDir);
|
|
293
393
|
const writePath = path.join(writeDir, path.basename(matchedFile.filePath));
|
|
294
|
-
await
|
|
394
|
+
await writeFileAtomic(writePath, yamlContent);
|
|
295
395
|
log(`sentinelIssues: Updated issue ${issueId} at ${writePath} — ${changes.join(', ')}`);
|
|
296
396
|
// Build return object
|
|
297
397
|
const issue = {
|
|
@@ -302,6 +402,8 @@ export async function updateIssue(input) {
|
|
|
302
402
|
priority: parsed.priority,
|
|
303
403
|
epicId: parsed.epic_id || parsed.epicId,
|
|
304
404
|
tags: parsed.tags,
|
|
405
|
+
assignee: parsed.assignee,
|
|
406
|
+
team: parsed.team,
|
|
305
407
|
created_at: parsed.created_at,
|
|
306
408
|
updated_at: parsed.updated_at,
|
|
307
409
|
description: parsed.description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelIssues.js","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sentinelIssues.js","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -14,19 +14,27 @@
|
|
|
14
14
|
// node dist/server.js --daemon status
|
|
15
15
|
// node dist/server.js setup → multi-client install wizard
|
|
16
16
|
// ============================================================================
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Static imports are deliberately confined to modules that pull in nothing
|
|
19
|
+
// heavy: node builtins, argv parsing, config files, daemon lifecycle.
|
|
20
|
+
//
|
|
21
|
+
// Everything that reaches the tool graph — the kernel, the HTTP server, the
|
|
22
|
+
// Supabase clients, the transports that embed them — is imported dynamically
|
|
23
|
+
// inside the branch that needs it. This is not stylistic. An ESM static import
|
|
24
|
+
// is evaluated at module load, before main() picks a mode, so a plain
|
|
25
|
+
// `import { createKernel } from './kernel.js'` loaded all 220 tool modules for
|
|
26
|
+
// every client including the ones that only proxy. Skipping the createKernel()
|
|
27
|
+
// CALL freed the registry and nothing else; the memory was in the import graph,
|
|
28
|
+
// which is why --thin measured WORSE than full stdio (113 MB vs 97 MB) when it
|
|
29
|
+
// first landed. Adding a static import of any tool-reaching module here
|
|
30
|
+
// silently undoes that. See scripts/measure-memory.mjs.
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
17
32
|
import fs from 'fs';
|
|
18
33
|
import path from 'path';
|
|
19
34
|
import { getConfig, log } from './config.js';
|
|
20
|
-
import {
|
|
21
|
-
import { StdioAdapter, HttpAdapter, BridgeAdapter } from './transports/index.js';
|
|
22
|
-
import { parseHttpArgs } from './httpServer.js';
|
|
35
|
+
import { parseHttpArgs } from './httpArgs.js';
|
|
23
36
|
import { checkRunning, writePid, removePid, installShutdownHandlers, handleDaemonSubcommand, getLogPath, rotateLog, checkCrashLoop, scheduleHealthReset, resetCrashes, AgentRegistry, } from './daemon.js';
|
|
24
37
|
import { loadConfig } from './daemonConfig.js';
|
|
25
|
-
import { getLicenseValidator } from './license.js';
|
|
26
|
-
import { coordGarbageCollect } from './tools/coordinator/index.js';
|
|
27
|
-
import { listProjects } from './projectRegistry.js';
|
|
28
|
-
import { startPresenceWriter } from './agentPresence.js';
|
|
29
|
-
import { startCommandDispatcher } from './agentCommands.js';
|
|
30
38
|
const config = getConfig();
|
|
31
39
|
log(`Starting Decibel MCP Server`);
|
|
32
40
|
log(`Environment: ${config.env}`);
|
|
@@ -34,8 +42,9 @@ log(`Organization: ${config.org}`);
|
|
|
34
42
|
log(`Root Directory: ${config.rootDir}`);
|
|
35
43
|
if (process.env.DECIBEL_PRO === '1')
|
|
36
44
|
log('Pro features: ENABLED');
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
// Apps tier is no longer an env flag — private facades come from the extension
|
|
46
|
+
// allowlist in ~/.decibel/config.yaml and the kernel logs what it loaded and
|
|
47
|
+
// what it refused. See runtime/extensions.ts.
|
|
39
48
|
async function main() {
|
|
40
49
|
const args = process.argv;
|
|
41
50
|
// Setup wizard — must run before any transport starts (EPIC-0035 Phase 1)
|
|
@@ -43,6 +52,11 @@ async function main() {
|
|
|
43
52
|
const { runSetup } = await import('./setup.js');
|
|
44
53
|
process.exit(await runSetup(args.slice(3)));
|
|
45
54
|
}
|
|
55
|
+
// Browser pairing approval (ADR-0012 in this repo) — a terminal-only act.
|
|
56
|
+
if (args[2] === 'pair') {
|
|
57
|
+
const { runPairCli } = await import('./pairCli.js');
|
|
58
|
+
process.exit(await runPairCli(args.slice(3)));
|
|
59
|
+
}
|
|
46
60
|
const daemonMode = args.includes('--daemon');
|
|
47
61
|
// Handle daemon subcommands (install, uninstall, status) — exits process
|
|
48
62
|
if (daemonMode && handleDaemonSubcommand(args))
|
|
@@ -84,21 +98,54 @@ async function main() {
|
|
|
84
98
|
console.error(`Or remove stale PID: rm ~/.decibel/daemon.pid`);
|
|
85
99
|
process.exit(1);
|
|
86
100
|
}
|
|
101
|
+
// Org gate (ADR-0014 step a). An HQ-connected daemon writes presence and
|
|
102
|
+
// command settlements under service_role, where RLS cannot catch a wrong
|
|
103
|
+
// org. There is no default org any more, so refuse to start rather than
|
|
104
|
+
// guess. A local-only install (no HQ credentials) needs no org and passes.
|
|
105
|
+
try {
|
|
106
|
+
const { assertOrgForHqConnection } = await import('./orgId.js');
|
|
107
|
+
const org = assertOrgForHqConnection();
|
|
108
|
+
if (org)
|
|
109
|
+
log(`Daemon: serving org ${org}`);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
113
|
+
log(`Daemon: refusing to start. ${msg}`);
|
|
114
|
+
console.error(`Daemon: refusing to start. ${msg}`);
|
|
115
|
+
process.exit(78); // EX_CONFIG: retrying cannot fix this; crash-loop protection bounds launchd's retries
|
|
116
|
+
}
|
|
87
117
|
writePid();
|
|
88
118
|
scheduleHealthReset(); // Reset crash counter after 5 minutes of healthy running
|
|
89
119
|
log(`Daemon: mode active, PID ${process.pid}, port ${transportConfig.port}`);
|
|
90
120
|
log(`Daemon: log file at ${getLogPath()}`);
|
|
91
121
|
// Pre-validate license key from config (fire and forget)
|
|
92
122
|
if (daemonConfig.license?.key) {
|
|
123
|
+
const { getLicenseValidator } = await import('./license.js');
|
|
93
124
|
getLicenseValidator().prevalidate(daemonConfig.license.key);
|
|
94
125
|
}
|
|
95
126
|
}
|
|
96
|
-
//
|
|
97
|
-
|
|
127
|
+
// THIN MODE: this process owns no runtime and proxies to the shared daemon.
|
|
128
|
+
//
|
|
129
|
+
// The kernel must not be built here. `--bridge` already proxies tool CALLS,
|
|
130
|
+
// but building the kernel first means a bridge client still loads all 195
|
|
131
|
+
// tool modules, its own registry and its own caches — the memory is spent
|
|
132
|
+
// before the transport choice is made. Six clients at ~110 MB each, five of
|
|
133
|
+
// them paying for a runtime they immediately forward past. That single
|
|
134
|
+
// unconditional line is the whole of the 663 MB measured on 2026-08-30.
|
|
135
|
+
const thinMode = args.includes('--thin');
|
|
136
|
+
// Dynamic on purpose — see the import-block note above. The `await import`
|
|
137
|
+
// is what keeps kernel.js and its 220 tool modules out of a thin client's
|
|
138
|
+
// heap, not the null assignment.
|
|
139
|
+
const kernel = thinMode ? null : await (await import('./kernel.js')).createKernel();
|
|
98
140
|
const adapters = [];
|
|
99
141
|
// In daemon mode, log all dispatches to dispatch.jsonl (async buffered writes + rotation)
|
|
100
142
|
if (daemonMode) {
|
|
101
|
-
|
|
143
|
+
// Structural, not defensive: --thin and --daemon are contradictory. The
|
|
144
|
+
// daemon IS the runtime everything else proxies to.
|
|
145
|
+
if (!kernel)
|
|
146
|
+
throw new Error('Daemon mode requires a local kernel — --thin and --daemon cannot be combined');
|
|
147
|
+
const { daemonStateDir } = await import('./runtime/daemonMeta.js');
|
|
148
|
+
const logsDir = path.join(daemonStateDir(), 'logs');
|
|
102
149
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
103
150
|
const dispatchLogPath = path.join(logsDir, 'dispatch.jsonl');
|
|
104
151
|
const daemonLogPath = path.join(logsDir, 'daemon.log');
|
|
@@ -170,6 +217,8 @@ async function main() {
|
|
|
170
217
|
// Sweep stale agents from registry
|
|
171
218
|
agentRegistry.sweepStale();
|
|
172
219
|
// GC coordinator state across all registered projects
|
|
220
|
+
const { listProjects } = await import('./projectRegistry.js');
|
|
221
|
+
const { coordGarbageCollect } = await import('./tools/coordinator/index.js');
|
|
173
222
|
const projects = listProjects();
|
|
174
223
|
if (projects.length > 0) {
|
|
175
224
|
const projectIds = projects.map(p => p.id);
|
|
@@ -186,18 +235,57 @@ async function main() {
|
|
|
186
235
|
// (Plan D agent-presence domain). No-ops if SUPABASE_URL/SERVICE_KEY unset.
|
|
187
236
|
let stopPresence = () => { };
|
|
188
237
|
let stopCommands = () => { };
|
|
238
|
+
let stopChat = () => { };
|
|
239
|
+
let stopBrokerSupervisor = () => { };
|
|
240
|
+
let stopFleet = () => { };
|
|
241
|
+
let stopAsks = () => { };
|
|
189
242
|
if (daemonMode) {
|
|
190
|
-
|
|
191
|
-
|
|
243
|
+
const { sidecarDir } = await import('./runtime/daemonMeta.js');
|
|
244
|
+
const sidecar = sidecarDir();
|
|
245
|
+
if (sidecar) {
|
|
246
|
+
// One per machine, and the real daemon already runs them: a second
|
|
247
|
+
// broker fights for its port, a second dispatcher claims HQ commands
|
|
248
|
+
// meant for the real daemon.
|
|
249
|
+
log(`Daemon: sidecar (${sidecar}), skipping peer broker, presence, command dispatch and chat`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Before chat and commands, which talk to the broker (ISS-0193).
|
|
253
|
+
const { startBrokerSupervisor } = await import('./peerBrokerSupervisor.js');
|
|
254
|
+
stopBrokerSupervisor = startBrokerSupervisor(daemonConfig.peers?.broker);
|
|
255
|
+
const { startPresenceWriter } = await import('./agentPresence.js');
|
|
256
|
+
const { startCommandDispatcher } = await import('./agentCommands.js');
|
|
257
|
+
const { startChat } = await import('./chat.js');
|
|
258
|
+
stopPresence = startPresenceWriter();
|
|
259
|
+
stopCommands = startCommandDispatcher();
|
|
260
|
+
// HQ chat peer + inbox (decibel-hq EPIC-0016). Local only.
|
|
261
|
+
stopChat = startChat();
|
|
262
|
+
}
|
|
263
|
+
// Fleet ledger + restore_on_start (decibel-hq ADR-0018).
|
|
264
|
+
const { startFleetSweep } = await import('./pty/fleet.js');
|
|
265
|
+
stopFleet = startFleetSweep();
|
|
266
|
+
// Asks (ISS-0215): send asks HQ hasn't got, read answers back into the
|
|
267
|
+
// yaml, tell the asking project. 30 s, the Friday fallback for realtime.
|
|
268
|
+
// Not in a sidecar: one daemon per machine owns the outbox.
|
|
269
|
+
const { sidecarDir: sidecarForAsks } = await import('./runtime/daemonMeta.js');
|
|
270
|
+
if (!sidecarForAsks()) {
|
|
271
|
+
const { startAskPickup } = await import('./asks.js');
|
|
272
|
+
stopAsks = startAskPickup();
|
|
273
|
+
}
|
|
274
|
+
// launch.json's tmux block (mouse, history-limit) onto a tmux server that
|
|
275
|
+
// outlived the last daemon. Spawns apply it to a fresh one.
|
|
276
|
+
const { applyTmuxProfile } = await import('./pty/sessions.js');
|
|
277
|
+
void applyTmuxProfile();
|
|
192
278
|
}
|
|
193
279
|
// Start transport(s)
|
|
194
280
|
if (daemonMode) {
|
|
195
281
|
// Daemon always starts HTTP
|
|
282
|
+
const { HttpAdapter } = await import('./transports/http.js');
|
|
196
283
|
const http = new HttpAdapter();
|
|
197
284
|
await http.start(kernel, transportConfig);
|
|
198
285
|
adapters.push(http);
|
|
199
286
|
// Optionally also start stdio (for dual-mode)
|
|
200
287
|
if (args.includes('--stdio')) {
|
|
288
|
+
const { StdioAdapter } = await import('./transports/stdio.js');
|
|
201
289
|
const stdio = new StdioAdapter();
|
|
202
290
|
await stdio.start(kernel, transportConfig);
|
|
203
291
|
adapters.push(stdio);
|
|
@@ -209,14 +297,32 @@ async function main() {
|
|
|
209
297
|
clearInterval(gcInterval);
|
|
210
298
|
stopPresence();
|
|
211
299
|
stopCommands();
|
|
300
|
+
stopChat();
|
|
301
|
+
stopBrokerSupervisor();
|
|
302
|
+
stopFleet();
|
|
303
|
+
stopAsks();
|
|
212
304
|
await Promise.all(adapters.map(a => a.stop()));
|
|
213
305
|
});
|
|
214
306
|
}
|
|
215
307
|
else if (httpMode) {
|
|
308
|
+
const { HttpAdapter } = await import('./transports/http.js');
|
|
216
309
|
const http = new HttpAdapter();
|
|
217
310
|
await http.start(kernel, transportConfig);
|
|
218
311
|
adapters.push(http);
|
|
219
312
|
}
|
|
313
|
+
else if (thinMode) {
|
|
314
|
+
// A thin client never executes a tool locally, so a missing runtime is a
|
|
315
|
+
// startup failure rather than something to paper over. ensureRuntime will
|
|
316
|
+
// start one if none is serving; if it cannot, the error says why and what
|
|
317
|
+
// to run.
|
|
318
|
+
const thinIdx = args.indexOf('--thin');
|
|
319
|
+
const nextThinArg = args[thinIdx + 1];
|
|
320
|
+
const explicitUrl = nextThinArg && nextThinArg.startsWith('http') ? nextThinArg : undefined;
|
|
321
|
+
const { ThinStdioAdapter } = await import('./transports/thinStdio.js');
|
|
322
|
+
const thin = new ThinStdioAdapter(explicitUrl);
|
|
323
|
+
await thin.start(null, transportConfig);
|
|
324
|
+
adapters.push(thin);
|
|
325
|
+
}
|
|
220
326
|
else if (args.includes('--bridge')) {
|
|
221
327
|
// Bridge mode: stdio with daemon proxy
|
|
222
328
|
const bridgeIdx = args.indexOf('--bridge');
|
|
@@ -224,11 +330,13 @@ async function main() {
|
|
|
224
330
|
// If next arg looks like a URL, use it; otherwise auto-detect
|
|
225
331
|
const explicitUrl = nextArg && nextArg.startsWith('http') ? nextArg : null;
|
|
226
332
|
const daemonUrl = explicitUrl || `http://127.0.0.1:${transportConfig.port || 4888}`;
|
|
333
|
+
const { BridgeAdapter } = await import('./transports/bridge.js');
|
|
227
334
|
const bridge = new BridgeAdapter(daemonUrl);
|
|
228
335
|
await bridge.start(kernel, transportConfig);
|
|
229
336
|
adapters.push(bridge);
|
|
230
337
|
}
|
|
231
338
|
else {
|
|
339
|
+
const { StdioAdapter } = await import('./transports/stdio.js');
|
|
232
340
|
const stdio = new StdioAdapter();
|
|
233
341
|
await stdio.start(kernel, transportConfig);
|
|
234
342
|
adapters.push(stdio);
|