@excitedjs/dreamux 0.26.0-beta.265 → 0.26.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.json +393 -0
- package/CHANGELOG.md +71 -1
- package/README.md +47 -34
- package/dist/admin/client.js +18 -7
- package/dist/admin/client.js.map +1 -1
- package/dist/admin/socket.js +15 -104
- package/dist/admin/socket.js.map +1 -1
- package/dist/agent-runtime/capabilities.js +4 -17
- package/dist/agent-runtime/capabilities.js.map +1 -1
- package/dist/agent-runtime/catalog.js.map +1 -1
- package/dist/agent-runtime/external-provider.js.map +1 -1
- package/dist/agent-runtime/host-context.js +1 -12
- package/dist/agent-runtime/host-context.js.map +1 -1
- package/dist/agent-runtime/host-paths.js +1 -1
- package/dist/agent-runtime/host-paths.js.map +1 -1
- package/dist/agent-runtime/index.js +7 -0
- package/dist/agent-runtime/index.js.map +1 -1
- package/dist/agent-runtime/skill-sources.js +23 -6
- package/dist/agent-runtime/skill-sources.js.map +1 -1
- package/dist/channel/catalog.js.map +1 -1
- package/dist/channel/external-channel-provider.js.map +1 -1
- package/dist/cli/commands/daemon.js +5 -8
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/dispatcher.js +11 -15
- package/dist/cli/commands/dispatcher.js.map +1 -1
- package/dist/cli/commands/index.js +4 -4
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +2 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/onboard.js +0 -4
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/parse.js +1 -1
- package/dist/cli/commands/parse.js.map +1 -1
- package/dist/cli/commands/serve.js +3 -2
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/status.js +3 -3
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/types.js +25 -3
- package/dist/cli/commands/types.js.map +1 -1
- package/dist/cli/commands/uninstall.js +2 -8
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/doctor-plugins.js +44 -0
- package/dist/cli/doctor-plugins.js.map +1 -0
- package/dist/cli/doctor-types.js +2 -0
- package/dist/cli/doctor-types.js.map +1 -0
- package/dist/cli/doctor.js +48 -125
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/dreamux.js +2 -30
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/cli/server.js +55 -70
- package/dist/cli/server.js.map +1 -1
- package/dist/command/errors.js +43 -2
- package/dist/command/errors.js.map +1 -1
- package/dist/command/host.js +10 -17
- package/dist/command/host.js.map +1 -1
- package/dist/command/payload.js +0 -9
- package/dist/command/payload.js.map +1 -1
- package/dist/command/port.js +0 -4
- package/dist/command/port.js.map +1 -1
- package/dist/command/registry.js +0 -4
- package/dist/command/registry.js.map +1 -1
- package/dist/command/schema.js.map +1 -1
- package/dist/command/types.js.map +1 -0
- package/dist/command/validate.js +22 -41
- package/dist/command/validate.js.map +1 -1
- package/dist/config/commands.js +46 -0
- package/dist/config/commands.js.map +1 -0
- package/dist/config/config.js +155 -169
- package/dist/config/config.js.map +1 -1
- package/dist/config/load.js +138 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/service.js +196 -0
- package/dist/config/service.js.map +1 -0
- package/dist/daemon/{service-control.js → control.js} +15 -16
- package/dist/daemon/control.js.map +1 -0
- package/dist/daemon/environment.js +353 -0
- package/dist/daemon/environment.js.map +1 -0
- package/dist/daemon/host.js +16 -0
- package/dist/daemon/host.js.map +1 -0
- package/dist/daemon/install.js +167 -69
- package/dist/daemon/install.js.map +1 -1
- package/dist/daemon/status.js +87 -0
- package/dist/daemon/status.js.map +1 -0
- package/dist/{cli/service-status-parse.js → daemon/unit.js} +90 -12
- package/dist/daemon/unit.js.map +1 -0
- package/dist/{service/mcp/descriptor.js → mcp/launch.js} +3 -7
- package/dist/mcp/launch.js.map +1 -0
- package/dist/mcp/server.js +9 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/shim.js +18 -16
- package/dist/mcp/shim.js.map +1 -1
- package/dist/onboard/config-files.js +12 -26
- package/dist/onboard/config-files.js.map +1 -1
- package/dist/onboard/run.js +47 -66
- package/dist/onboard/run.js.map +1 -1
- package/dist/onboard/uninstall.js +59 -42
- package/dist/onboard/uninstall.js.map +1 -1
- package/dist/onboard/wizard.js +33 -18
- package/dist/onboard/wizard.js.map +1 -1
- package/dist/{onboard/commands.js → platform/command-runner.js} +7 -3
- package/dist/platform/command-runner.js.map +1 -0
- package/dist/platform/deduplicate.js +32 -0
- package/dist/platform/deduplicate.js.map +1 -0
- package/dist/{state → platform}/dispatcher-id.js +1 -1
- package/dist/platform/dispatcher-id.js.map +1 -0
- package/dist/platform/errors.js +23 -23
- package/dist/platform/errors.js.map +1 -1
- package/dist/{onboard/ledger.js → platform/file-ledger.js} +13 -38
- package/dist/platform/file-ledger.js.map +1 -0
- package/dist/platform/history-page.js +62 -0
- package/dist/platform/history-page.js.map +1 -0
- package/dist/platform/in-flight-work.js.map +1 -0
- package/dist/platform/instance-lock.js +95 -0
- package/dist/platform/instance-lock.js.map +1 -0
- package/dist/platform/json-value.js +26 -15
- package/dist/platform/json-value.js.map +1 -1
- package/dist/platform/jsonl.js.map +1 -1
- package/dist/platform/logger.js +5 -5
- package/dist/platform/logger.js.map +1 -1
- package/dist/platform/package-bin.js +3 -1
- package/dist/platform/package-bin.js.map +1 -1
- package/dist/platform/paths.js +42 -69
- package/dist/platform/paths.js.map +1 -1
- package/dist/platform/runtime-sockets.js +7 -2
- package/dist/platform/runtime-sockets.js.map +1 -1
- package/dist/platform/serial-queue.js +22 -0
- package/dist/platform/serial-queue.js.map +1 -0
- package/dist/platform/shutdown-errors.js.map +1 -0
- package/dist/platform/work-fence.js +30 -0
- package/dist/platform/work-fence.js.map +1 -0
- package/dist/plugin/hooks.js +407 -0
- package/dist/plugin/hooks.js.map +1 -0
- package/dist/plugin/host.js +97 -0
- package/dist/plugin/host.js.map +1 -0
- package/dist/plugin/loader.js +250 -0
- package/dist/plugin/loader.js.map +1 -0
- package/dist/provider-diagnostics.js +12 -8
- package/dist/provider-diagnostics.js.map +1 -1
- package/dist/registry/builtins.js +49 -45
- package/dist/registry/builtins.js.map +1 -1
- package/dist/registry/index.js +10 -2
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/provider-loader.js +41 -61
- package/dist/registry/provider-loader.js.map +1 -1
- package/dist/registry/provider-ref.js.map +1 -1
- package/dist/registry/registry.js +14 -22
- package/dist/registry/registry.js.map +1 -1
- package/dist/{command/catalog.js → server/command-catalog.js} +14 -5
- package/dist/server/command-catalog.js.map +1 -0
- package/dist/server/command-host.js +2 -0
- package/dist/server/command-host.js.map +1 -0
- package/dist/server-commands.js +1 -1
- package/dist/server-commands.js.map +1 -1
- package/dist/server.js +70 -129
- package/dist/server.js.map +1 -1
- package/dist/service/{agent-entity/activity-reader.js → agent/activity.js} +86 -34
- package/dist/service/agent/activity.js.map +1 -0
- package/dist/service/{teammate-service/admission-ledger.js → agent/admission.js} +66 -1
- package/dist/service/agent/admission.js.map +1 -0
- package/dist/service/{channel-submission.js → agent/channel-submission.js} +5 -5
- package/dist/service/agent/channel-submission.js.map +1 -0
- package/dist/service/{teammate-collection → agent}/commands.js +38 -50
- package/dist/service/agent/commands.js.map +1 -0
- package/dist/service/{teammate-service → agent}/completion-renderer.js +30 -5
- package/dist/service/agent/completion-renderer.js.map +1 -0
- package/dist/service/agent/errors.js.map +1 -0
- package/dist/service/agent/factory.js +78 -0
- package/dist/service/agent/factory.js.map +1 -0
- package/dist/service/{agent-entity/types.js → agent/identity.js} +28 -34
- package/dist/service/agent/identity.js.map +1 -0
- package/dist/service/agent/index.js +769 -0
- package/dist/service/agent/index.js.map +1 -0
- package/dist/service/agent/mcp.js +420 -0
- package/dist/service/agent/mcp.js.map +1 -0
- package/dist/service/agent/records.js +74 -0
- package/dist/service/agent/records.js.map +1 -0
- package/dist/service/agent/requests.js +172 -0
- package/dist/service/agent/requests.js.map +1 -0
- package/dist/service/{teammate-service/runtime-owner.js → agent/runtime-generation.js} +81 -79
- package/dist/service/agent/runtime-generation.js.map +1 -0
- package/dist/service/agent/runtime-id.js +22 -0
- package/dist/service/agent/runtime-id.js.map +1 -0
- package/dist/service/{agent-entity → agent}/runtime-state.js +33 -40
- package/dist/service/agent/runtime-state.js.map +1 -0
- package/dist/service/agent/service-types.js +28 -0
- package/dist/service/agent/service-types.js.map +1 -0
- package/dist/service/{teammate-service/index.js → agent/service.js} +236 -102
- package/dist/service/agent/service.js.map +1 -0
- package/dist/service/{agent-entity/identity-store.js → agent/store.js} +175 -96
- package/dist/service/agent/store.js.map +1 -0
- package/dist/service/agent/submission.js.map +1 -0
- package/dist/service/{teammate-collection → agent}/system-prompt.js +7 -3
- package/dist/service/agent/system-prompt.js.map +1 -0
- package/dist/service/agent/turn.js +89 -0
- package/dist/service/agent/turn.js.map +1 -0
- package/dist/service/agent/types.js.map +1 -0
- package/dist/service/channel-service/commands.js +7 -3
- package/dist/service/channel-service/commands.js.map +1 -1
- package/dist/{channel → service/channel-service}/core-port.js +6 -5
- package/dist/service/channel-service/core-port.js.map +1 -0
- package/dist/service/channel-service/index.js +211 -93
- package/dist/service/channel-service/index.js.map +1 -1
- package/dist/service/channel-service/mcp-delegate.js +8 -9
- package/dist/service/channel-service/mcp-delegate.js.map +1 -1
- package/dist/service/completion-router/index.js +27 -27
- package/dist/service/completion-router/index.js.map +1 -1
- package/dist/{channel → service/dispatcher-core-events}/conversation-projection.js +9 -7
- package/dist/service/dispatcher-core-events/conversation-projection.js.map +1 -0
- package/dist/service/dispatcher-core-events/index.js +76 -68
- package/dist/service/dispatcher-core-events/index.js.map +1 -1
- package/dist/service/dispatcher-core-events/seal.js +1 -24
- package/dist/service/dispatcher-core-events/seal.js.map +1 -1
- package/dist/service/dispatcher-service/agent.js +267 -45
- package/dist/service/dispatcher-service/agent.js.map +1 -1
- package/dist/service/dispatcher-service/base-prompt.js +2 -2
- package/dist/service/dispatcher-service/base-prompt.js.map +1 -1
- package/dist/service/dispatcher-service/index.js +139 -378
- package/dist/service/dispatcher-service/index.js.map +1 -1
- package/dist/service/dispatcher-service/lifecycle.js +230 -0
- package/dist/service/dispatcher-service/lifecycle.js.map +1 -0
- package/dist/{daemon → service/dispatcher-service}/restart-intent.js +17 -38
- package/dist/service/dispatcher-service/restart-intent.js.map +1 -0
- package/dist/service/dispatcher-workspace.js +10 -23
- package/dist/service/dispatcher-workspace.js.map +1 -1
- package/dist/service/dispatchers/commands.js +30 -31
- package/dist/service/dispatchers/commands.js.map +1 -1
- package/dist/service/dispatchers/index.js +92 -64
- package/dist/service/dispatchers/index.js.map +1 -1
- package/dist/service/index.js +2 -2
- package/dist/service/index.js.map +1 -1
- package/dist/{mcp → service/mcp}/catalog.js +11 -48
- package/dist/service/mcp/catalog.js.map +1 -0
- package/dist/service/mcp/commands.js +3 -3
- package/dist/service/mcp/commands.js.map +1 -1
- package/dist/service/mcp/dispatch-reminders.js +1 -1
- package/dist/service/mcp/dispatch-reminders.js.map +1 -1
- package/dist/service/mcp/identity-version.js +14 -0
- package/dist/service/mcp/identity-version.js.map +1 -1
- package/dist/service/mcp/leases.js +12 -33
- package/dist/service/mcp/leases.js.map +1 -1
- package/dist/service/mcp/tool-metadata.js +15 -76
- package/dist/service/mcp/tool-metadata.js.map +1 -1
- package/dist/service/name-allocator.js +2 -3
- package/dist/service/name-allocator.js.map +1 -1
- package/dist/service/scheduler/commands.js +7 -19
- package/dist/service/scheduler/commands.js.map +1 -1
- package/dist/service/scheduler/errors.js +1 -1
- package/dist/service/scheduler/errors.js.map +1 -1
- package/dist/service/scheduler/{service.js → index.js} +175 -142
- package/dist/service/scheduler/index.js.map +1 -0
- package/dist/service/scheduler/{mcp-delegate.js → mcp.js} +61 -58
- package/dist/service/scheduler/mcp.js.map +1 -0
- package/dist/service/scheduler/requests.js +60 -0
- package/dist/service/scheduler/requests.js.map +1 -0
- package/dist/service/scheduler/store.js +183 -151
- package/dist/service/scheduler/store.js.map +1 -1
- package/dist/service/scheduler/types.js +1 -33
- package/dist/service/scheduler/types.js.map +1 -1
- package/dist/service/{team-collection → team}/commands.js +45 -59
- package/dist/service/team/commands.js.map +1 -0
- package/dist/service/{team-collection → team}/create-request.js +8 -20
- package/dist/service/team/create-request.js.map +1 -0
- package/dist/service/{team-collection → team}/errors.js +7 -10
- package/dist/service/team/errors.js.map +1 -0
- package/dist/service/team/index.js +817 -0
- package/dist/service/team/index.js.map +1 -0
- package/dist/service/team/leader-mcp.js +42 -0
- package/dist/service/team/leader-mcp.js.map +1 -0
- package/dist/service/team/leader.js +157 -0
- package/dist/service/team/leader.js.map +1 -0
- package/dist/service/team/mcp.js +328 -0
- package/dist/service/team/mcp.js.map +1 -0
- package/dist/service/{team-collection/types.js → team/requests.js} +64 -15
- package/dist/service/team/requests.js.map +1 -0
- package/dist/service/team/service.js +903 -0
- package/dist/service/team/service.js.map +1 -0
- package/dist/service/team/store.js +373 -0
- package/dist/service/team/store.js.map +1 -0
- package/dist/service/team/team-summary.js.map +1 -0
- package/dist/service/team/teams-port.js +2 -0
- package/dist/service/team/teams-port.js.map +1 -0
- package/dist/service/team/types.js +22 -0
- package/dist/service/team/types.js.map +1 -0
- package/dist/service/workflow-service/commands.js +5 -6
- package/dist/service/workflow-service/commands.js.map +1 -1
- package/dist/service/workflow-service/errors.js +2 -0
- package/dist/service/workflow-service/errors.js.map +1 -1
- package/dist/service/workflow-service/index.js +80 -112
- package/dist/service/workflow-service/index.js.map +1 -1
- package/dist/service/workflow-service/journal.js +90 -6
- package/dist/service/workflow-service/journal.js.map +1 -1
- package/dist/service/workflow-service/limits.js +20 -9
- package/dist/service/workflow-service/limits.js.map +1 -1
- package/dist/service/workflow-service/mcp.js +171 -0
- package/dist/service/workflow-service/mcp.js.map +1 -0
- package/dist/service/workflow-service/protocol.js +72 -1
- package/dist/service/workflow-service/protocol.js.map +1 -1
- package/dist/service/workflow-service/requests.js +70 -0
- package/dist/service/workflow-service/requests.js.map +1 -0
- package/dist/service/workflow-service/run.js +258 -145
- package/dist/service/workflow-service/run.js.map +1 -1
- package/dist/service/workflow-service/runner-process.js +0 -19
- package/dist/service/workflow-service/runner-process.js.map +1 -1
- package/dist/service/workflow-service/runner.js +6 -30
- package/dist/service/workflow-service/runner.js.map +1 -1
- package/dist/service/workflow-service/script-compiler.js +7 -9
- package/dist/service/workflow-service/script-compiler.js.map +1 -1
- package/dist/service/workflow-service/{run-support.js → semaphore.js} +1 -30
- package/dist/service/workflow-service/semaphore.js.map +1 -0
- package/dist/service/workflow-service/store.js +105 -25
- package/dist/service/workflow-service/store.js.map +1 -1
- package/dist/service/workflow-service/types.js +1 -77
- package/dist/service/workflow-service/types.js.map +1 -1
- package/dist/service/worktree/manager.js +29 -62
- package/dist/service/worktree/manager.js.map +1 -1
- package/dist/service/worktree/paths.js +4 -1
- package/dist/service/worktree/paths.js.map +1 -1
- package/dist/service/worktree/repo-request.js +38 -14
- package/dist/service/worktree/repo-request.js.map +1 -1
- package/dist/service/worktree/types.js +2 -0
- package/dist/service/worktree/types.js.map +1 -0
- package/dist/service/worktree/workspaces.js +27 -34
- package/dist/service/worktree/workspaces.js.map +1 -1
- package/package.json +13 -8
- package/skills/dispatcher/dreamux-maintenance/SKILL.md +5 -4
- package/skills/dispatcher/dreamux-maintenance/references/builtin-bootstrap.md +50 -0
- package/skills/dispatcher/dreamux-maintenance/references/builtin-codex.md +4 -5
- package/skills/dispatcher/dreamux-maintenance/references/builtin-feishu.md +69 -11
- package/skills/dispatcher/dreamux-maintenance/references/config-envelope.md +77 -12
- package/skills/dispatcher/dreamux-maintenance/references/feishu-access-v3.md +39 -24
- package/skills/dispatcher/dreamux-maintenance/references/service-lifecycle.md +105 -37
- package/dist/channel/conversation-projection.js.map +0 -1
- package/dist/channel/core-port.js.map +0 -1
- package/dist/cli/server-ctl.js +0 -163
- package/dist/cli/server-ctl.js.map +0 -1
- package/dist/cli/service-status-parse.js.map +0 -1
- package/dist/command/catalog.js.map +0 -1
- package/dist/config/config-helpers.js +0 -100
- package/dist/config/config-helpers.js.map +0 -1
- package/dist/daemon/restart-intent.js.map +0 -1
- package/dist/daemon/service-control.js.map +0 -1
- package/dist/mcp/catalog.js.map +0 -1
- package/dist/mcp/failure-text.js +0 -46
- package/dist/mcp/failure-text.js.map +0 -1
- package/dist/onboard/commands.js.map +0 -1
- package/dist/onboard/ledger.js.map +0 -1
- package/dist/onboard/service-node.js +0 -183
- package/dist/onboard/service-node.js.map +0 -1
- package/dist/onboard/service.js +0 -310
- package/dist/onboard/service.js.map +0 -1
- package/dist/platform/atomic-write.js +0 -63
- package/dist/platform/atomic-write.js.map +0 -1
- package/dist/platform/error-info.js +0 -11
- package/dist/platform/error-info.js.map +0 -1
- package/dist/platform/json-document-store.js +0 -54
- package/dist/platform/json-document-store.js.map +0 -1
- package/dist/service/agent-entity/activity-errors.js +0 -71
- package/dist/service/agent-entity/activity-errors.js.map +0 -1
- package/dist/service/agent-entity/activity-reader.js.map +0 -1
- package/dist/service/agent-entity/agent-config.js +0 -48
- package/dist/service/agent-entity/agent-config.js.map +0 -1
- package/dist/service/agent-entity/history-query.js +0 -60
- package/dist/service/agent-entity/history-query.js.map +0 -1
- package/dist/service/agent-entity/identity-store.js.map +0 -1
- package/dist/service/agent-entity/read-helpers.js +0 -172
- package/dist/service/agent-entity/read-helpers.js.map +0 -1
- package/dist/service/agent-entity/runtime-profile.js +0 -53
- package/dist/service/agent-entity/runtime-profile.js.map +0 -1
- package/dist/service/agent-entity/runtime-state.js.map +0 -1
- package/dist/service/agent-entity/types.js.map +0 -1
- package/dist/service/channel-service/mcp-delegates.js +0 -21
- package/dist/service/channel-service/mcp-delegates.js.map +0 -1
- package/dist/service/channel-service/types.js.map +0 -1
- package/dist/service/channel-submission.js.map +0 -1
- package/dist/service/closed-fact.js +0 -49
- package/dist/service/closed-fact.js.map +0 -1
- package/dist/service/deduplicate.js +0 -42
- package/dist/service/deduplicate.js.map +0 -1
- package/dist/service/dispatcher-core-events/scoped-source.js +0 -59
- package/dist/service/dispatcher-core-events/scoped-source.js.map +0 -1
- package/dist/service/dispatcher-service/dispatcher-workflows.js +0 -50
- package/dist/service/dispatcher-service/dispatcher-workflows.js.map +0 -1
- package/dist/service/dispatcher-service/identity.js +0 -97
- package/dist/service/dispatcher-service/identity.js.map +0 -1
- package/dist/service/dispatcher-service/inbound-task-drain.js +0 -37
- package/dist/service/dispatcher-service/inbound-task-drain.js.map +0 -1
- package/dist/service/dispatcher-service/input-source-lifecycle.js +0 -312
- package/dist/service/dispatcher-service/input-source-lifecycle.js.map +0 -1
- package/dist/service/dispatcher-service/input-source-start-rollback.js +0 -53
- package/dist/service/dispatcher-service/input-source-start-rollback.js.map +0 -1
- package/dist/service/dispatcher-service/mcp-delegates.js +0 -67
- package/dist/service/dispatcher-service/mcp-delegates.js.map +0 -1
- package/dist/service/dispatcher-service/restart-notice.js +0 -27
- package/dist/service/dispatcher-service/restart-notice.js.map +0 -1
- package/dist/service/dispatcher-service/runnable-channel.js +0 -13
- package/dist/service/dispatcher-service/runnable-channel.js.map +0 -1
- package/dist/service/dispatcher-service/runtime-helpers.js +0 -11
- package/dist/service/dispatcher-service/runtime-helpers.js.map +0 -1
- package/dist/service/dispatcher-service/runtime-status.js +0 -35
- package/dist/service/dispatcher-service/runtime-status.js.map +0 -1
- package/dist/service/dispatcher-service/team-leader-handle.js +0 -29
- package/dist/service/dispatcher-service/team-leader-handle.js.map +0 -1
- package/dist/service/dispatcher-service/team-runtime-stop.js +0 -13
- package/dist/service/dispatcher-service/team-runtime-stop.js.map +0 -1
- package/dist/service/dispatcher-service/teammate-ops.js +0 -14
- package/dist/service/dispatcher-service/teammate-ops.js.map +0 -1
- package/dist/service/frozen-snapshot.js +0 -16
- package/dist/service/frozen-snapshot.js.map +0 -1
- package/dist/service/in-flight-work.js.map +0 -1
- package/dist/service/legacy-state.js +0 -119
- package/dist/service/legacy-state.js.map +0 -1
- package/dist/service/mcp/descriptor.js.map +0 -1
- package/dist/service/scheduler/mcp-delegate.js.map +0 -1
- package/dist/service/scheduler/service.js.map +0 -1
- package/dist/service/serial-queue.js +0 -64
- package/dist/service/serial-queue.js.map +0 -1
- package/dist/service/shutdown-errors.js.map +0 -1
- package/dist/service/team-collection/commands.js.map +0 -1
- package/dist/service/team-collection/create-request.js.map +0 -1
- package/dist/service/team-collection/errors.js.map +0 -1
- package/dist/service/team-collection/index.js +0 -304
- package/dist/service/team-collection/index.js.map +0 -1
- package/dist/service/team-collection/mcp-delegate.js +0 -389
- package/dist/service/team-collection/mcp-delegate.js.map +0 -1
- package/dist/service/team-collection/read-helpers.js +0 -66
- package/dist/service/team-collection/read-helpers.js.map +0 -1
- package/dist/service/team-collection/read-model.js +0 -120
- package/dist/service/team-collection/read-model.js.map +0 -1
- package/dist/service/team-collection/roster-reader.js +0 -52
- package/dist/service/team-collection/roster-reader.js.map +0 -1
- package/dist/service/team-collection/runtime-registry.js +0 -369
- package/dist/service/team-collection/runtime-registry.js.map +0 -1
- package/dist/service/team-collection/store.js +0 -320
- package/dist/service/team-collection/store.js.map +0 -1
- package/dist/service/team-collection/types.js.map +0 -1
- package/dist/service/team-collection/worktree-cleanup.js +0 -45
- package/dist/service/team-collection/worktree-cleanup.js.map +0 -1
- package/dist/service/team-service/closing.js +0 -279
- package/dist/service/team-service/closing.js.map +0 -1
- package/dist/service/team-service/collaborators.js +0 -82
- package/dist/service/team-service/collaborators.js.map +0 -1
- package/dist/service/team-service/completion-targets.js +0 -72
- package/dist/service/team-service/completion-targets.js.map +0 -1
- package/dist/service/team-service/index.js +0 -559
- package/dist/service/team-service/index.js.map +0 -1
- package/dist/service/team-service/leader-agent.js +0 -170
- package/dist/service/team-service/leader-agent.js.map +0 -1
- package/dist/service/team-service/roster-projection.js +0 -69
- package/dist/service/team-service/roster-projection.js.map +0 -1
- package/dist/service/team-service/team-summary.js.map +0 -1
- package/dist/service/team-service/types.js +0 -61
- package/dist/service/team-service/types.js.map +0 -1
- package/dist/service/teammate-collection/commands.js.map +0 -1
- package/dist/service/teammate-collection/dissolve-members.js +0 -44
- package/dist/service/teammate-collection/dissolve-members.js.map +0 -1
- package/dist/service/teammate-collection/errors.js.map +0 -1
- package/dist/service/teammate-collection/index.js +0 -497
- package/dist/service/teammate-collection/index.js.map +0 -1
- package/dist/service/teammate-collection/mcp-delegate.js +0 -210
- package/dist/service/teammate-collection/mcp-delegate.js.map +0 -1
- package/dist/service/teammate-collection/mcp-tool-descriptors.js +0 -421
- package/dist/service/teammate-collection/mcp-tool-descriptors.js.map +0 -1
- package/dist/service/teammate-collection/system-prompt.js.map +0 -1
- package/dist/service/teammate-collection/types.js.map +0 -1
- package/dist/service/teammate-service/admission-ledger.js.map +0 -1
- package/dist/service/teammate-service/completion-renderer.js.map +0 -1
- package/dist/service/teammate-service/factory.js +0 -5
- package/dist/service/teammate-service/factory.js.map +0 -1
- package/dist/service/teammate-service/index.js.map +0 -1
- package/dist/service/teammate-service/runtime-owner.js.map +0 -1
- package/dist/service/teammate-service/submission.js.map +0 -1
- package/dist/service/teammate-service/turn-coordinator.js +0 -93
- package/dist/service/teammate-service/turn-coordinator.js.map +0 -1
- package/dist/service/teammate-service/turn-recording.js +0 -178
- package/dist/service/teammate-service/turn-recording.js.map +0 -1
- package/dist/service/teammate-service/types.js +0 -12
- package/dist/service/teammate-service/types.js.map +0 -1
- package/dist/service/workflow-service/agent-policy.js +0 -6
- package/dist/service/workflow-service/agent-policy.js.map +0 -1
- package/dist/service/workflow-service/json-args.js +0 -72
- package/dist/service/workflow-service/json-args.js.map +0 -1
- package/dist/service/workflow-service/run-support.js.map +0 -1
- package/dist/service/workflow-service/run-terminal.js +0 -111
- package/dist/service/workflow-service/run-terminal.js.map +0 -1
- package/dist/state/dispatcher-id.js.map +0 -1
- package/dist/state/dispatcher-store.js +0 -73
- package/dist/state/dispatcher-store.js.map +0 -1
- /package/dist/{service/channel-service → command}/types.js +0 -0
- /package/dist/{service → platform}/in-flight-work.js +0 -0
- /package/dist/{service → platform}/shutdown-errors.js +0 -0
- /package/dist/service/{teammate-collection → agent}/errors.js +0 -0
- /package/dist/service/{teammate-service → agent}/submission.js +0 -0
- /package/dist/service/{teammate-collection → agent}/types.js +0 -0
- /package/dist/service/{team-service → team}/team-summary.js +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { pathExists } from '../platform/fs-errors.js';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { loadAgentRuntimeProviders } from '../agent-runtime/external-provider.js';
|
|
4
|
+
import { loadChannelProviders } from '../channel/external-channel-provider.js';
|
|
5
|
+
import { parseProviderRef, ProviderRegistry } from '../registry/index.js';
|
|
6
|
+
import { isPlainObject } from '@excitedjs/dreamux-utils';
|
|
7
|
+
import { createLogger } from '../platform/logger.js';
|
|
8
|
+
import { loadPlugins, readPluginConfigs, readPluginEntries, } from '../plugin/loader.js';
|
|
9
|
+
import { assertConfigFileMode, globalConfigFile, legacyGlobalConfigFile, mergeWithDefaults, } from './config.js';
|
|
10
|
+
export async function loadConfig(overrides = {}) {
|
|
11
|
+
const file = globalConfigFile();
|
|
12
|
+
const providerRegistry = overrides.providerRegistry ?? new ProviderRegistry();
|
|
13
|
+
await assertNoLegacyTomlOnly();
|
|
14
|
+
const { config, plugins } = await readConfigFile(file, providerRegistry);
|
|
15
|
+
return { config, configFile: file, providerRegistry, plugins };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Open, parse, and resolve `config.json`: existence and mode checks, JSON
|
|
19
|
+
* parse, one-time plugin load, then {@link resolveConfig}. Shared by the CLI
|
|
20
|
+
* read path below (`doctor`/`onboard`/`loadConfig`) and `ConfigService`'s own
|
|
21
|
+
* open sequence (`config/service.ts`'s `loadFile`), so "open the file" is
|
|
22
|
+
* written once; `ConfigService` additionally holds `raw` (the parsed object,
|
|
23
|
+
* returned here so it does not re-parse) for its `TransactionalStore`.
|
|
24
|
+
*/
|
|
25
|
+
export async function readConfigFile(file, providerRegistry) {
|
|
26
|
+
if (!(await pathExists(file))) {
|
|
27
|
+
throw new Error(`dreamux config is missing at ${file}.\n` +
|
|
28
|
+
'Run `dreamux onboard` to create it before starting the server.');
|
|
29
|
+
}
|
|
30
|
+
await assertConfigFileMode(file);
|
|
31
|
+
const text = await readFile(file, 'utf8');
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = JSON.parse(text);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
+
throw new Error(`dreamux config parse error in ${file}: ${msg}\n` +
|
|
39
|
+
`Fix the JSON syntax in ${file}, then restart. Run \`dreamux onboard\` if you need to recreate the config.`);
|
|
40
|
+
}
|
|
41
|
+
// Plugins contribute providers config may address, so they load before
|
|
42
|
+
// provider refs are loaded and validated. A non-object top level is still
|
|
43
|
+
// reported by resolveConfig's mergeWithDefaults.
|
|
44
|
+
const entries = isPlainObject(parsed)
|
|
45
|
+
? readPluginEntries(parsed, file)
|
|
46
|
+
: undefined;
|
|
47
|
+
const plugins = await loadPlugins({
|
|
48
|
+
registry: providerRegistry,
|
|
49
|
+
entries: entries ?? [],
|
|
50
|
+
// The serve file logger does not exist yet; contribute only registers.
|
|
51
|
+
logger: createLogger({ name: 'plugins' }),
|
|
52
|
+
});
|
|
53
|
+
const config = await resolveConfig(parsed, file, providerRegistry);
|
|
54
|
+
readPluginConfigs(plugins, file);
|
|
55
|
+
return {
|
|
56
|
+
// resolveConfig's mergeWithDefaults already rejects a non-object top
|
|
57
|
+
// level before returning, so parsed is a plain object whenever this
|
|
58
|
+
// line runs.
|
|
59
|
+
raw: parsed,
|
|
60
|
+
config: entries === undefined ? config : { ...config, plugins: entries },
|
|
61
|
+
plugins,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Loads the agent-runtime/channel providers `raw`'s `agents[]`/
|
|
66
|
+
* `dispatchers[].channels[]` entries reference, then validates and shapes
|
|
67
|
+
* `raw` into a `DreamuxConfig`. Deliberately excludes `plugins[]` loading
|
|
68
|
+
* (`loadPlugins`/`readPluginConfigs`): that is a one-time, process-open step
|
|
69
|
+
* — a plugin's `contribute()` registers providers and collides with itself
|
|
70
|
+
* if run twice — so callers that may resolve a config more than once per
|
|
71
|
+
* process (`ConfigService.replaceAgents`, `config/service.ts`) must not
|
|
72
|
+
* route `plugins[]` through here.
|
|
73
|
+
*/
|
|
74
|
+
export async function resolveConfig(raw, file, providerRegistry) {
|
|
75
|
+
await loadAgentRuntimeProviders({
|
|
76
|
+
registry: providerRegistry,
|
|
77
|
+
refs: agentProviderRefs(raw),
|
|
78
|
+
});
|
|
79
|
+
await loadChannelProviders({
|
|
80
|
+
registry: providerRegistry,
|
|
81
|
+
refs: channelProviderRefs(raw),
|
|
82
|
+
});
|
|
83
|
+
return mergeWithDefaults(raw, file, providerRegistry);
|
|
84
|
+
}
|
|
85
|
+
export async function assertNoLegacyTomlOnly() {
|
|
86
|
+
const jsonFile = globalConfigFile();
|
|
87
|
+
const tomlFile = legacyGlobalConfigFile();
|
|
88
|
+
if ((await pathExists(jsonFile)) || !(await pathExists(tomlFile)))
|
|
89
|
+
return;
|
|
90
|
+
throw new Error(`legacy dreamux config detected at ${tomlFile}, but ${jsonFile} does not exist.\n` +
|
|
91
|
+
'dreamux 0.x does not migrate TOML config; it will not read it or write default ' +
|
|
92
|
+
'JSON over an existing install.\n' +
|
|
93
|
+
`Recreate the config as JSON (run \`dreamux onboard\`, or write ${jsonFile} with a ` +
|
|
94
|
+
`dispatchers array), then move ${tomlFile} aside.`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Every well-formed `agents[].provider` ref the loader should resolve. Malformed
|
|
98
|
+
* refs are dropped here; normal config validation reports them with context.
|
|
99
|
+
*/
|
|
100
|
+
function agentProviderRefs(raw) {
|
|
101
|
+
if (!isPlainObject(raw))
|
|
102
|
+
return [];
|
|
103
|
+
return providerRefsFrom(raw['agents'], (agent) => agent['provider']);
|
|
104
|
+
}
|
|
105
|
+
function channelProviderRefs(raw) {
|
|
106
|
+
if (!isPlainObject(raw))
|
|
107
|
+
return [];
|
|
108
|
+
const dispatchers = raw['dispatchers'];
|
|
109
|
+
if (!Array.isArray(dispatchers))
|
|
110
|
+
return [];
|
|
111
|
+
const out = [];
|
|
112
|
+
for (const dispatcher of dispatchers) {
|
|
113
|
+
if (!isPlainObject(dispatcher))
|
|
114
|
+
continue;
|
|
115
|
+
out.push(...providerRefsFrom(dispatcher['channels'], (channel) => channel['provider']));
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
function providerRefsFrom(entries, pick) {
|
|
120
|
+
if (!Array.isArray(entries))
|
|
121
|
+
return [];
|
|
122
|
+
const out = [];
|
|
123
|
+
for (const entry of entries) {
|
|
124
|
+
if (!isPlainObject(entry))
|
|
125
|
+
continue;
|
|
126
|
+
const provider = pick(entry);
|
|
127
|
+
if (typeof provider !== 'string')
|
|
128
|
+
continue;
|
|
129
|
+
try {
|
|
130
|
+
out.push(parseProviderRef(provider).raw);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// The normal config validation path reports malformed refs with context.
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Config Service: `config.json`'s single in-process authority.
|
|
3
|
+
*
|
|
4
|
+
* One process opens one `ConfigService` (`cli/server.ts`, at the point
|
|
5
|
+
* `loadConfig` ran before this existed) and every long-lived object that
|
|
6
|
+
* needs the current config holds this instead of a `DreamuxConfig` value it
|
|
7
|
+
* captured once — see {@link ConfigReader}. A `TransactionalStore` backs it,
|
|
8
|
+
* so every read sees the same committed value and every write goes through
|
|
9
|
+
* the store's own serialized read-decide-replace: no second reservation,
|
|
10
|
+
* file-open, or validation path beside the one `readConfigFile`/
|
|
11
|
+
* `resolveConfig` (`./load.js`) already gives the file-read path
|
|
12
|
+
* `doctor`/`onboard`/`loadConfig` use.
|
|
13
|
+
*
|
|
14
|
+
* The store's value pairs the parsed file (`raw`) with its resolved shape
|
|
15
|
+
* (`config`). `raw` is what gets written back out — a hand-written
|
|
16
|
+
* `dispatchers` block, `~` paths, and every other value survive a
|
|
17
|
+
* `config.agents.replace` untouched, because only `raw.agents` is ever
|
|
18
|
+
* replaced and the rest of `raw` travels through unchanged; a
|
|
19
|
+
* `config.agents.replace` write does re-serialize the whole file at
|
|
20
|
+
* two-space indentation (`encode`, below), so whitespace/indentation is not
|
|
21
|
+
* preserved byte-for-byte, only values and key order. `config` is never
|
|
22
|
+
* serialized; it exists so `current()` never has to re-run `resolveConfig`
|
|
23
|
+
* on every read.
|
|
24
|
+
*/
|
|
25
|
+
import { isPlainObject, isSecretKeyName, redactSecretKeyValues, TransactionalStore, } from '@excitedjs/dreamux-utils';
|
|
26
|
+
import { throwCallerMistake } from '../command/errors.js';
|
|
27
|
+
import { globalConfigFile } from './config.js';
|
|
28
|
+
import { assertNoLegacyTomlOnly, readConfigFile, resolveConfig, } from './load.js';
|
|
29
|
+
export class ConfigService {
|
|
30
|
+
file;
|
|
31
|
+
providerRegistry;
|
|
32
|
+
store;
|
|
33
|
+
loadedPlugins = [];
|
|
34
|
+
constructor(file, providerRegistry) {
|
|
35
|
+
this.file = file;
|
|
36
|
+
this.providerRegistry = providerRegistry;
|
|
37
|
+
this.store = new TransactionalStore({
|
|
38
|
+
path: file,
|
|
39
|
+
load: () => this.loadFile(),
|
|
40
|
+
encode: (value) => `${JSON.stringify(value.raw, null, 2)}\n`,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Open `config.json`, running today's checks in today's order with
|
|
45
|
+
* today's messages (legacy TOML, missing file, file mode, parse), then
|
|
46
|
+
* loading it. A failure rejects here — `dreamux serve` still stops before
|
|
47
|
+
* a `ConfigService` exists. Loading before returning means `current()` and
|
|
48
|
+
* {@link plugins} are never observably pre-load.
|
|
49
|
+
*/
|
|
50
|
+
static async open(options) {
|
|
51
|
+
const service = new ConfigService(globalConfigFile(), options.providerRegistry);
|
|
52
|
+
await service.store.load();
|
|
53
|
+
return service;
|
|
54
|
+
}
|
|
55
|
+
current() {
|
|
56
|
+
return this.store.current.config;
|
|
57
|
+
}
|
|
58
|
+
/** Loaded and contributed, with configs read; populated by the one `open()` load. */
|
|
59
|
+
get plugins() {
|
|
60
|
+
return this.loadedPlugins;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The current `agents[]` in file shape, every secret-named value emptied.
|
|
64
|
+
* A deep copy: the caller may do anything with it without touching the
|
|
65
|
+
* store's committed value.
|
|
66
|
+
*/
|
|
67
|
+
readAgents() {
|
|
68
|
+
const rawAgents = this.store.current.raw['agents'];
|
|
69
|
+
const copy = structuredClone(Array.isArray(rawAgents) ? rawAgents : []);
|
|
70
|
+
redactSecretKeyValues(copy, '');
|
|
71
|
+
return copy;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Replace the whole `agents[]` section and return the redacted projection
|
|
75
|
+
* of what committed.
|
|
76
|
+
*
|
|
77
|
+
* One store `update`: merge `candidateAgents` onto the committed
|
|
78
|
+
* `agents[]` by `id` (restoring a committed secret under a submitted `''`,
|
|
79
|
+
* {@link mergeAgentEntries}), splice the result into the committed `raw`,
|
|
80
|
+
* then run it through `resolveConfig` — the identical loader/validator a
|
|
81
|
+
* fresh `dreamux serve` uses, so a write this rejects is a write the next
|
|
82
|
+
* start would also reject. Every validator on that path raises a
|
|
83
|
+
* `RuleViolation` for a value it checked and refused: `config.ts`'s
|
|
84
|
+
* `mergeWithDefaults`, the shared readers in `@excitedjs/dreamux-utils`, each
|
|
85
|
+
* provider's own `config.read`, and the loader's refusal of an unregistered
|
|
86
|
+
* `builtin:` ref. {@link throwCallerMistake} re-types exactly that into the
|
|
87
|
+
* caller's mistake, so `config.agents.replace` reports `BAD_REQUEST` instead
|
|
88
|
+
* of `INTERNAL` for a bad payload. A dynamic import, a file read, or a
|
|
89
|
+
* provider's own `TypeError` is not a refused value and keeps its own code.
|
|
90
|
+
* Either way this call rejects with file and memory unchanged, by
|
|
91
|
+
* `TransactionalStore.update`'s own contract (nothing is written or swapped
|
|
92
|
+
* before `change` returns).
|
|
93
|
+
*/
|
|
94
|
+
async replaceAgents(candidateAgents) {
|
|
95
|
+
await this.store.update(async (committed) => {
|
|
96
|
+
const committedAgents = committed.raw['agents'];
|
|
97
|
+
const mergedAgents = mergeAgentEntries(candidateAgents, Array.isArray(committedAgents) ? committedAgents : []);
|
|
98
|
+
const candidateRaw = { ...committed.raw, agents: mergedAgents };
|
|
99
|
+
let config;
|
|
100
|
+
try {
|
|
101
|
+
config = await resolveConfig(candidateRaw, this.file, this.providerRegistry);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
throwCallerMistake(err);
|
|
105
|
+
}
|
|
106
|
+
// resolveConfig (mergeWithDefaults) never sets `config.plugins` — that
|
|
107
|
+
// field is loadFile's own addition, carrying the raw plugins[] entries
|
|
108
|
+
// only so stringifyConfig can round-trip them (./config.js). A replace
|
|
109
|
+
// never touches plugins[] (design decision 1), so the committed value
|
|
110
|
+
// is still exactly right; without this, current().plugins would flip
|
|
111
|
+
// to undefined on the first replace even though raw.plugins is unchanged.
|
|
112
|
+
return {
|
|
113
|
+
raw: candidateRaw,
|
|
114
|
+
config: committed.config.plugins === undefined
|
|
115
|
+
? config
|
|
116
|
+
: { ...config, plugins: committed.config.plugins },
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
return this.readAgents();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The store's `load()` callback — the whole open sequence, including
|
|
123
|
+
* one-time plugin loading. Delegates the "open the file" sequence to
|
|
124
|
+
* `readConfigFile` (`./load.js`), the same function the CLI read path
|
|
125
|
+
* (`doctor`/`onboard`/`loadConfig`) uses, so today's checks, order, and
|
|
126
|
+
* messages (legacy TOML, missing file, file mode, parse) stay one
|
|
127
|
+
* implementation. `TransactionalStore.load()` guarantees this runs at most
|
|
128
|
+
* once per store, which is what makes assigning `this.loadedPlugins` here
|
|
129
|
+
* safe: a plugin's `contribute()` registers providers and collides with
|
|
130
|
+
* itself if run twice, so this must never re-run for the life of this
|
|
131
|
+
* `ConfigService`.
|
|
132
|
+
*/
|
|
133
|
+
async loadFile() {
|
|
134
|
+
await assertNoLegacyTomlOnly();
|
|
135
|
+
const { raw, config, plugins } = await readConfigFile(this.file, this.providerRegistry);
|
|
136
|
+
// Runs once per this store (see this method's own doc comment); a future
|
|
137
|
+
// change to TransactionalStore's "load() runs at most once" guarantee
|
|
138
|
+
// would make this reassign on every read instead of the one open.
|
|
139
|
+
this.loadedPlugins = plugins;
|
|
140
|
+
return { raw, config };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The whole-entry-replace merge {@link ConfigService.replaceAgents} performs
|
|
145
|
+
* on every submitted `agents[]` entry, matched to a committed entry by `id`.
|
|
146
|
+
* A submitted value survives at every depth except one override: a
|
|
147
|
+
* secret-named key submitted as `''` is restored to the committed value at
|
|
148
|
+
* that same JSON path, but only when the committed entry (same `id`)
|
|
149
|
+
* actually has a value there — a new `id`, or a key the committed entry never
|
|
150
|
+
* had, keeps the submitted `''`, since there is nothing to fall back to. An
|
|
151
|
+
* `id` present only in `committedAgents` is dropped: this replaces the whole
|
|
152
|
+
* section, not one entry in it.
|
|
153
|
+
*
|
|
154
|
+
* `id` is trusted to be a non-empty string here: `config/commands.ts`'s
|
|
155
|
+
* `parse()`, the only caller of `replaceAgents`, already narrowed the payload
|
|
156
|
+
* to that shape before this runs.
|
|
157
|
+
*/
|
|
158
|
+
function mergeAgentEntries(candidateAgents, committedAgents) {
|
|
159
|
+
const committedById = new Map();
|
|
160
|
+
for (const entry of committedAgents) {
|
|
161
|
+
if (isPlainObject(entry) && typeof entry['id'] === 'string') {
|
|
162
|
+
committedById.set(entry['id'], entry);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return candidateAgents.map((candidate) => {
|
|
166
|
+
const committed = committedById.get(candidate['id']);
|
|
167
|
+
return restoreCommittedSecrets(candidate, committed);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Walk `submitted`, restoring `committed`'s value wherever a secret-named
|
|
172
|
+
* key's submitted value is `''` and `committed` has a value at that same
|
|
173
|
+
* path; every other value — known key or not, at any depth — passes through
|
|
174
|
+
* as submitted. Arrays walk by index, mirroring `redactSecretKeyValues`'s own
|
|
175
|
+
* walk (`@excitedjs/dreamux-utils/src/redaction.ts`).
|
|
176
|
+
*/
|
|
177
|
+
function restoreCommittedSecrets(submitted, committed) {
|
|
178
|
+
if (Array.isArray(submitted)) {
|
|
179
|
+
const committedArray = Array.isArray(committed) ? committed : undefined;
|
|
180
|
+
return submitted.map((item, index) => restoreCommittedSecrets(item, committedArray?.[index]));
|
|
181
|
+
}
|
|
182
|
+
if (!isPlainObject(submitted))
|
|
183
|
+
return submitted;
|
|
184
|
+
const committedObject = isPlainObject(committed) ? committed : undefined;
|
|
185
|
+
const out = {};
|
|
186
|
+
for (const [key, value] of Object.entries(submitted)) {
|
|
187
|
+
const committedValue = committedObject?.[key];
|
|
188
|
+
if (isSecretKeyName(key) && value === '' && committedValue !== undefined) {
|
|
189
|
+
out[key] = committedValue;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
out[key] = restoreCommittedSecrets(value, committedValue);
|
|
193
|
+
}
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/config/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,43 +14,42 @@
|
|
|
14
14
|
* launchd's KeepAlive=true relaunches a plain `kill`, so a stop that *stays*
|
|
15
15
|
* stopped is a `bootout`; start/restart then re-bootstrap when needed.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
17
|
+
import { createServiceHost } from './host.js';
|
|
18
|
+
import { launchdTarget, serviceUnitPath, SYSTEMD_UNIT, } from './unit.js';
|
|
19
19
|
export async function controlUserService(verb, options) {
|
|
20
|
-
const
|
|
21
|
-
const unit = serviceUnitPath(
|
|
20
|
+
const host = createServiceHost(options);
|
|
21
|
+
const unit = serviceUnitPath(host.platform, host.homeDir);
|
|
22
22
|
const dryRun = options.dryRun ?? false;
|
|
23
23
|
const commands = [];
|
|
24
24
|
if (unit.platform === 'systemd') {
|
|
25
25
|
const args = ['--user', verb, SYSTEMD_UNIT];
|
|
26
|
-
await
|
|
26
|
+
await host.runner.run('systemctl', args, { dryRun });
|
|
27
27
|
commands.push({ command: 'systemctl', args });
|
|
28
28
|
return { platform: 'systemd', verb, commands };
|
|
29
29
|
}
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const loaded = await options.runner.check('launchctl', ['print', target], { dryRun });
|
|
30
|
+
const target = launchdTarget(host.uid);
|
|
31
|
+
const domain = `gui/${host.uid}`;
|
|
32
|
+
const loaded = await host.runner.check('launchctl', ['print', target], {
|
|
33
|
+
dryRun,
|
|
34
|
+
});
|
|
36
35
|
if (verb === 'stop') {
|
|
37
36
|
if (loaded) {
|
|
38
37
|
const args = ['bootout', target];
|
|
39
|
-
await
|
|
38
|
+
await host.runner.run('launchctl', args, { dryRun });
|
|
40
39
|
commands.push({ command: 'launchctl', args });
|
|
41
40
|
}
|
|
42
41
|
return { platform: 'launchd', verb, commands };
|
|
43
42
|
}
|
|
44
43
|
if (!loaded) {
|
|
45
|
-
const args = ['bootstrap',
|
|
46
|
-
await
|
|
44
|
+
const args = ['bootstrap', domain, unit.path];
|
|
45
|
+
await host.runner.run('launchctl', args, { dryRun });
|
|
47
46
|
commands.push({ command: 'launchctl', args });
|
|
48
47
|
if (verb === 'start')
|
|
49
48
|
return { platform: 'launchd', verb, commands };
|
|
50
49
|
}
|
|
51
50
|
const args = verb === 'restart' ? ['kickstart', '-k', target] : ['kickstart', target];
|
|
52
|
-
await
|
|
51
|
+
await host.runner.run('launchctl', args, { dryRun });
|
|
53
52
|
commands.push({ command: 'launchctl', args });
|
|
54
53
|
return { platform: 'launchd', verb, commands };
|
|
55
54
|
}
|
|
56
|
-
//# sourceMappingURL=
|
|
55
|
+
//# sourceMappingURL=control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/daemon/control.ts"],"names":[],"mappings":"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"}
|