@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
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Artifacts — published pages registered into hq.artifacts for humans to find
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Daemon half of decibel-hq EPIC-0019 (the /artifacts library on HQ). Two ways
|
|
5
|
+
// in, one write path:
|
|
6
|
+
// 1. artifacts.register — an agent says "I just published this".
|
|
7
|
+
// 2. chat harvest — an inbound /chat message carries a claude.ai artifact
|
|
8
|
+
// link (Ben approved this 2026-10-08; it moves chat-derived text into Core).
|
|
9
|
+
// Both call hq.register_artifact() via SERVICE_ROLE, the same scoped exception
|
|
10
|
+
// as presence. The RPC owns the overwrite rules: source, published_by,
|
|
11
|
+
// project_id, meta and published_at are insert-only; 'agent' refreshes title
|
|
12
|
+
// and description unless a human added the row; 'chat' never updates. Doing
|
|
13
|
+
// this as one atomic RPC rather than a client-side two-step is the contract —
|
|
14
|
+
// don't replace it with an upsert.
|
|
15
|
+
//
|
|
16
|
+
// Not project intel: nothing here is written to .decibel, and the
|
|
17
|
+
// agent_commands queue / projector don't apply.
|
|
18
|
+
//
|
|
19
|
+
// Never throws into the daemon. Without Supabase credentials or DECIBEL_ORG_ID
|
|
20
|
+
// it is a no-op that says why (ADR-0014: there is no default org).
|
|
21
|
+
// ============================================================================
|
|
22
|
+
import path from 'path';
|
|
23
|
+
import { log } from './config.js';
|
|
24
|
+
import { getOrgId } from './orgId.js';
|
|
25
|
+
import { withRetryResult } from './supabaseRetry.js';
|
|
26
|
+
import { serviceClient, resolveProjectId, resolveAgentId, deriveAgentName, resolveHost, sanitizeText, sanitizeMeta, } from './agentPresence.js';
|
|
27
|
+
import { listProjects } from './projectRegistry.js';
|
|
28
|
+
export const TITLE_MAX = 200;
|
|
29
|
+
export const DESCRIPTION_MAX = 1000;
|
|
30
|
+
export const URL_MAX = 2048;
|
|
31
|
+
/**
|
|
32
|
+
* Mirrors decibel-hq src/lib/artifacts.ts extractArtifactLinks EXACTLY. If HQ
|
|
33
|
+
* changes its regex, change this one — tests/unit/artifacts.test.ts pins both
|
|
34
|
+
* to the same fixtures.
|
|
35
|
+
*/
|
|
36
|
+
export function extractArtifactLinks(text) {
|
|
37
|
+
const re = /https:\/\/claude\.ai\/(?:code\/)?artifact\/[A-Za-z0-9-]+/g;
|
|
38
|
+
return [...new Set(text.match(re) ?? [])];
|
|
39
|
+
}
|
|
40
|
+
// One log line per process when the RPC is missing, not one per call.
|
|
41
|
+
let unavailableWarned = false;
|
|
42
|
+
/** For tests. */
|
|
43
|
+
export function _resetArtifacts() {
|
|
44
|
+
unavailableWarned = false;
|
|
45
|
+
}
|
|
46
|
+
function isWithin(child, parent) {
|
|
47
|
+
const p = parent.replace(/\/+$/, '');
|
|
48
|
+
return child === p || child.startsWith(p + '/');
|
|
49
|
+
}
|
|
50
|
+
/** The registered project root that contains `dir`, deepest match wins. */
|
|
51
|
+
export function projectRootFor(dir) {
|
|
52
|
+
if (!dir)
|
|
53
|
+
return null;
|
|
54
|
+
let best = null;
|
|
55
|
+
for (const p of listProjects()) {
|
|
56
|
+
if (p.available === false || !p.path)
|
|
57
|
+
continue;
|
|
58
|
+
if (isWithin(dir, p.path) && (!best || p.path.length > best.length))
|
|
59
|
+
best = p.path;
|
|
60
|
+
}
|
|
61
|
+
return best;
|
|
62
|
+
}
|
|
63
|
+
/** Validate before the round trip so the caller gets a message, not a SQLSTATE. */
|
|
64
|
+
export function validateUrl(url) {
|
|
65
|
+
if (typeof url !== 'string' || !url.trim())
|
|
66
|
+
return 'url is required';
|
|
67
|
+
const u = url.trim();
|
|
68
|
+
if (u.length > URL_MAX)
|
|
69
|
+
return `url is longer than ${URL_MAX} characters`;
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = new URL(u);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return 'url is not a valid URL';
|
|
76
|
+
}
|
|
77
|
+
if (parsed.protocol !== 'https:')
|
|
78
|
+
return 'url must be https';
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
async function mapProject(client, project, root) {
|
|
82
|
+
try {
|
|
83
|
+
if (project) {
|
|
84
|
+
// A local registry id first (its path's basename is the HQ key, as with
|
|
85
|
+
// presence), then the string itself as an HQ key.
|
|
86
|
+
const entry = listProjects().find((p) => p.id === project || (p.aliases ?? []).includes(project));
|
|
87
|
+
const key = entry?.path ? entry.path : project;
|
|
88
|
+
const id = await resolveProjectId(client, key);
|
|
89
|
+
if (id)
|
|
90
|
+
return id;
|
|
91
|
+
}
|
|
92
|
+
return root ? await resolveProjectId(client, root) : null;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null; // a lookup failure must not fail the registration
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export async function registerArtifact(input, deps = {}) {
|
|
99
|
+
const urlErr = validateUrl(input.url);
|
|
100
|
+
if (urlErr)
|
|
101
|
+
return { ok: false, reason: 'invalid', message: urlErr };
|
|
102
|
+
const title = sanitizeText(input.title?.trim(), TITLE_MAX);
|
|
103
|
+
if (!title)
|
|
104
|
+
return { ok: false, reason: 'invalid', message: 'title is required (1-200 characters)' };
|
|
105
|
+
const client = deps.client === undefined ? serviceClient() : deps.client;
|
|
106
|
+
if (!client) {
|
|
107
|
+
return { ok: false, reason: 'unconfigured', message: 'HQ is not configured on this machine (SUPABASE_URL / SUPABASE_SERVICE_KEY unset)' };
|
|
108
|
+
}
|
|
109
|
+
let org;
|
|
110
|
+
try {
|
|
111
|
+
org = getOrgId();
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return { ok: false, reason: 'unconfigured', message: e instanceof Error ? e.message : String(e) };
|
|
115
|
+
}
|
|
116
|
+
if (!org) {
|
|
117
|
+
return { ok: false, reason: 'unconfigured', message: 'DECIBEL_ORG_ID is not set; there is no default org (ADR-0014)' };
|
|
118
|
+
}
|
|
119
|
+
const root = projectRootFor(input.cwd ?? null);
|
|
120
|
+
const project_id = await mapProject(client, input.project, root);
|
|
121
|
+
// published_by: only an agent registration has a publisher, and only when
|
|
122
|
+
// the call is made from inside a registered project. Derived from WHERE the
|
|
123
|
+
// caller is, never from a name it supplies (see deriveAgentName).
|
|
124
|
+
let published_by = null;
|
|
125
|
+
if (input.source === 'agent' && root) {
|
|
126
|
+
try {
|
|
127
|
+
const agentId = await resolveAgentId(client, deriveAgentName({ gitRoot: root, runtime: 'claude-code', host: resolveHost() }), 'claude-code');
|
|
128
|
+
if (agentId)
|
|
129
|
+
published_by = `agent:${agentId}`;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
published_by = null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const { data, error } = await withRetryResult(() => client.rpc('register_artifact', {
|
|
136
|
+
p_org: org,
|
|
137
|
+
p_url: input.url.trim(),
|
|
138
|
+
p_title: title,
|
|
139
|
+
p_source: input.source,
|
|
140
|
+
p_description: sanitizeText(input.description?.trim(), DESCRIPTION_MAX),
|
|
141
|
+
p_project: project_id,
|
|
142
|
+
p_published_by: published_by,
|
|
143
|
+
p_meta: sanitizeMeta(input.meta),
|
|
144
|
+
}), `artifacts.register ${input.source}`);
|
|
145
|
+
if (error) {
|
|
146
|
+
const code = error.code;
|
|
147
|
+
if (code === '22023' || code === '23514') {
|
|
148
|
+
return { ok: false, reason: 'invalid', message: error.message };
|
|
149
|
+
}
|
|
150
|
+
// Function or table absent: PostgREST reports PGRST202, Postgres 42883/42P01.
|
|
151
|
+
if (code === 'PGRST202' || code === '42883' || code === '42P01') {
|
|
152
|
+
if (!unavailableWarned) {
|
|
153
|
+
unavailableWarned = true;
|
|
154
|
+
log(`Artifacts: hq.register_artifact unavailable (${error.message}); registrations are off until the migration is applied.`);
|
|
155
|
+
}
|
|
156
|
+
return { ok: false, reason: 'unavailable', message: 'hq.register_artifact is not available on Core (migration hq_artifacts not applied?)' };
|
|
157
|
+
}
|
|
158
|
+
return { ok: false, reason: 'failed', message: error.message };
|
|
159
|
+
}
|
|
160
|
+
return { ok: true, id: String(data) };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* A title from the text around the link. Chat text is untrusted data: it is
|
|
164
|
+
* only ever used as a display string, stripped of control characters and
|
|
165
|
+
* capped, and falls back to a fixed phrase when there is nothing usable.
|
|
166
|
+
*/
|
|
167
|
+
export function titleFromChat(text, project) {
|
|
168
|
+
const fallback = `Artifact from ${project || 'chat'}`;
|
|
169
|
+
const stripped = text
|
|
170
|
+
.replace(/https?:\/\/\S+/g, ' ')
|
|
171
|
+
.split('\n')
|
|
172
|
+
.map((l) => l.replace(/^[\s>*#\-•:]+/, '').replace(/[\s:–—-]+$/, '').replace(/\s+/g, ' ').trim())
|
|
173
|
+
.find((l) => /[A-Za-z0-9]/.test(l) && l.length >= 3);
|
|
174
|
+
if (!stripped)
|
|
175
|
+
return fallback;
|
|
176
|
+
return sanitizeText(stripped, TITLE_MAX) ?? fallback;
|
|
177
|
+
}
|
|
178
|
+
/** Register every artifact link in one inbound chat message. Never throws. */
|
|
179
|
+
export async function harvestChatMessage(m, deps = {}) {
|
|
180
|
+
if (m.dir !== 'in')
|
|
181
|
+
return [];
|
|
182
|
+
const links = extractArtifactLinks(m.text || '');
|
|
183
|
+
if (!links.length)
|
|
184
|
+
return [];
|
|
185
|
+
const projectLabel = m.project_id || (m.cwd ? path.basename(m.cwd) : null);
|
|
186
|
+
const title = titleFromChat(m.text, projectLabel);
|
|
187
|
+
const out = [];
|
|
188
|
+
for (const url of links) {
|
|
189
|
+
try {
|
|
190
|
+
const result = await registerArtifact({
|
|
191
|
+
url,
|
|
192
|
+
title,
|
|
193
|
+
source: 'chat',
|
|
194
|
+
project: m.project_id ?? null,
|
|
195
|
+
cwd: m.cwd ?? null,
|
|
196
|
+
meta: { chat_id: m.id, ...(m.peer_id ? { peer_id: m.peer_id } : {}) },
|
|
197
|
+
}, deps);
|
|
198
|
+
if (!result.ok && result.reason === 'failed')
|
|
199
|
+
log(`Artifacts: chat harvest of ${url} failed: ${result.message}`);
|
|
200
|
+
out.push({ url, result });
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
log(`Artifacts: chat harvest of ${url} threw: ${e instanceof Error ? e.message : String(e)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/asks.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type DbClient } from './agentPresence.js';
|
|
2
|
+
export declare const QUESTION_MAX = 4000;
|
|
3
|
+
export declare const CHOICES_MAX = 10;
|
|
4
|
+
export declare const CHOICE_MAX = 200;
|
|
5
|
+
export declare const CONTEXT_REF_MAX = 500;
|
|
6
|
+
export type AskShape = {
|
|
7
|
+
kind: 'yes_no';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'text';
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'options';
|
|
12
|
+
choices: string[];
|
|
13
|
+
};
|
|
14
|
+
export type AskStatus = 'draft' | 'open' | 'answered' | 'withdrawn' | 'expired';
|
|
15
|
+
export interface AskRecord {
|
|
16
|
+
ask_id: string;
|
|
17
|
+
project_id: string;
|
|
18
|
+
project_key: string;
|
|
19
|
+
asker: string;
|
|
20
|
+
target: string;
|
|
21
|
+
question: string;
|
|
22
|
+
shape: AskShape;
|
|
23
|
+
context_ref?: string;
|
|
24
|
+
requires_approval: boolean;
|
|
25
|
+
status: AskStatus;
|
|
26
|
+
created_at: string;
|
|
27
|
+
expires_at?: string;
|
|
28
|
+
/** True once hq.asks holds this row. */
|
|
29
|
+
synced: boolean;
|
|
30
|
+
sync_error?: string;
|
|
31
|
+
answer?: boolean | string;
|
|
32
|
+
answered_by?: string;
|
|
33
|
+
on_behalf_of?: string;
|
|
34
|
+
answered_via?: string;
|
|
35
|
+
answered_at?: string;
|
|
36
|
+
superseded_answers?: unknown[];
|
|
37
|
+
/** When a live session in the project was told the outcome. */
|
|
38
|
+
notified_at?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare class AskError extends Error {
|
|
41
|
+
}
|
|
42
|
+
/** ASK- plus a ULID: 10 chars of time, 16 of randomness. Sorts by creation. */
|
|
43
|
+
export declare function mintAskId(now?: number): string;
|
|
44
|
+
export declare function parseShape(raw: unknown): AskShape;
|
|
45
|
+
/** A human who can answer: user:<uuid>, human:<name>, or guest:<grant uuid>. */
|
|
46
|
+
export declare function parseTarget(raw: unknown): {
|
|
47
|
+
target: string;
|
|
48
|
+
guest: boolean;
|
|
49
|
+
};
|
|
50
|
+
export declare function readAsks(projectId: string): AskRecord[];
|
|
51
|
+
export declare function readAsk(projectId: string, askId: string): AskRecord | null;
|
|
52
|
+
/** The hq.asks row for a record. Never includes answer columns. */
|
|
53
|
+
export declare function hqRow(rec: AskRecord, orgId: string): Record<string, unknown>;
|
|
54
|
+
export interface CreateInput {
|
|
55
|
+
project_id?: string;
|
|
56
|
+
question: unknown;
|
|
57
|
+
target: unknown;
|
|
58
|
+
shape?: unknown;
|
|
59
|
+
context_ref?: unknown;
|
|
60
|
+
expires_at?: unknown;
|
|
61
|
+
requires_approval?: unknown;
|
|
62
|
+
/** Who is asking. Callers pass their agent name; defaults to the project's agent. */
|
|
63
|
+
asker?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CreateDeps {
|
|
66
|
+
client?: DbClient | null;
|
|
67
|
+
orgId?: () => string | null;
|
|
68
|
+
now?: () => Date;
|
|
69
|
+
}
|
|
70
|
+
export declare function createAsk(input: CreateInput, deps?: CreateDeps): Promise<AskRecord>;
|
|
71
|
+
export interface PickupDeps {
|
|
72
|
+
client?: DbClient | null;
|
|
73
|
+
orgId?: () => string | null;
|
|
74
|
+
/** project_ids to scan; defaults to every registered project. */
|
|
75
|
+
projects?: () => string[];
|
|
76
|
+
/** Tell a live session in the project; true when someone received it. */
|
|
77
|
+
notify?: (projectId: string, text: string) => Promise<boolean>;
|
|
78
|
+
now?: () => Date;
|
|
79
|
+
}
|
|
80
|
+
export declare function outcomeText(rec: AskRecord): string;
|
|
81
|
+
export interface PickupResult {
|
|
82
|
+
pushed: number;
|
|
83
|
+
resolved: number;
|
|
84
|
+
notified: number;
|
|
85
|
+
errors: string[];
|
|
86
|
+
}
|
|
87
|
+
export declare function pickupOnce(deps?: PickupDeps): Promise<PickupResult>;
|
|
88
|
+
/** Notify live claude-peers sessions whose repo is the project's. */
|
|
89
|
+
export declare function notifyProjectSessions(projectId: string, text: string): Promise<boolean>;
|
|
90
|
+
export declare const PICKUP_MS = 30000;
|
|
91
|
+
/** The daemon's 30 s loop (the Friday fallback for realtime; ISS-0213). */
|
|
92
|
+
export declare function startAskPickup(intervalMs?: number): () => void;
|
|
93
|
+
//# sourceMappingURL=asks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asks.d.ts","sourceRoot":"","sources":["../src/asks.ts"],"names":[],"mappings":"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"}
|