@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/onboard/ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { constants } from 'node:fs';
|
|
2
|
-
import { access, realpath } from 'node:fs/promises';
|
|
3
|
-
/**
|
|
4
|
-
* Minimum Node version the managed-service environment requires. The launchd
|
|
5
|
-
* plist and systemd user unit persist a stable Node binary; selection (see
|
|
6
|
-
* {@link selectServiceNodeBin}) refuses candidates below this version.
|
|
7
|
-
*/
|
|
8
|
-
export const MIN_SERVICE_NODE_VERSION = '22.7.0';
|
|
9
|
-
/**
|
|
10
|
-
* Parse a `node --version` (or `v<major>.<minor>.<patch>`) string and decide
|
|
11
|
-
* whether it satisfies {@link MIN_SERVICE_NODE_VERSION}. Pure and side-effect
|
|
12
|
-
* free so selection and the launch doctor share one comparison.
|
|
13
|
-
*/
|
|
14
|
-
export function nodeVersionSatisfies(raw) {
|
|
15
|
-
const match = raw.trim().match(/^v?(\d+)\.(\d+)\.(\d+)/);
|
|
16
|
-
if (match === null)
|
|
17
|
-
return false;
|
|
18
|
-
const major = Number(match[1]);
|
|
19
|
-
const minor = Number(match[2]);
|
|
20
|
-
if (!Number.isInteger(major) || !Number.isInteger(minor))
|
|
21
|
-
return false;
|
|
22
|
-
if (major > 22)
|
|
23
|
-
return true;
|
|
24
|
-
return major === 22 && minor >= 7;
|
|
25
|
-
}
|
|
26
|
-
export const defaultServiceNodeProbe = {
|
|
27
|
-
realpath: (path) => realpath(path),
|
|
28
|
-
isExecutable: (path) => isExecutable(path),
|
|
29
|
-
};
|
|
30
|
-
// Markers matched (case-insensitively) against a Node binary's resolved path.
|
|
31
|
-
// Each keeps a leading `/.<name>/` or segment anchor so a user dir like
|
|
32
|
-
// `/home/volta/` never matches `/.volta/`. macOS fnm installs under
|
|
33
|
-
// `~/Library/Application Support/fnm/`; dreamux supports launchd so cover it.
|
|
34
|
-
const VERSION_MANAGER_MARKERS = [
|
|
35
|
-
{ manager: 'nvm', markers: ['/.nvm/versions/node/'] },
|
|
36
|
-
{
|
|
37
|
-
manager: 'fnm',
|
|
38
|
-
markers: [
|
|
39
|
-
'/.fnm/',
|
|
40
|
-
'fnm_multishells',
|
|
41
|
-
'/.local/share/fnm/',
|
|
42
|
-
'/library/application support/fnm/',
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
{ manager: 'asdf', markers: ['/.asdf/installs/nodejs/', '/.asdf/shims/'] },
|
|
46
|
-
{ manager: 'volta', markers: ['/.volta/'] },
|
|
47
|
-
];
|
|
48
|
-
/** Pure marker match on a single path; returns the manager name or null. */
|
|
49
|
-
export function versionManagerOfPath(path) {
|
|
50
|
-
const needle = path.toLowerCase();
|
|
51
|
-
for (const entry of VERSION_MANAGER_MARKERS) {
|
|
52
|
-
if (entry.markers.some((marker) => needle.includes(marker))) {
|
|
53
|
-
return entry.manager;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Single async/injectable predicate selection and doctor share. Resolves
|
|
60
|
-
* symlinks first so a `/usr/local/bin/node` shim into nvm/fnm/asdf is caught;
|
|
61
|
-
* falls back to the raw path when realpath fails.
|
|
62
|
-
*/
|
|
63
|
-
export async function detectServiceNodeVersionManager(nodeBin, probe = defaultServiceNodeProbe) {
|
|
64
|
-
const raw = versionManagerOfPath(nodeBin);
|
|
65
|
-
if (raw !== null)
|
|
66
|
-
return raw;
|
|
67
|
-
let resolved;
|
|
68
|
-
try {
|
|
69
|
-
resolved = await probe.realpath(nodeBin);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
return versionManagerOfPath(resolved);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Platform-aware stable Node candidates. macOS covers Homebrew (Apple Silicon
|
|
78
|
-
* and Intel prefixes); Linux covers standard system locations.
|
|
79
|
-
*/
|
|
80
|
-
export function stableNodeCandidates(platform) {
|
|
81
|
-
if (platform === 'darwin') {
|
|
82
|
-
return [
|
|
83
|
-
'/opt/homebrew/bin/node',
|
|
84
|
-
'/opt/homebrew/opt/node/bin/node',
|
|
85
|
-
'/opt/homebrew/opt/node@24/bin/node',
|
|
86
|
-
'/opt/homebrew/opt/node@22/bin/node',
|
|
87
|
-
'/usr/local/bin/node',
|
|
88
|
-
'/usr/local/opt/node/bin/node',
|
|
89
|
-
'/usr/local/opt/node@24/bin/node',
|
|
90
|
-
'/usr/local/opt/node@22/bin/node',
|
|
91
|
-
'/usr/bin/node',
|
|
92
|
-
];
|
|
93
|
-
}
|
|
94
|
-
return ['/usr/local/bin/node', '/usr/bin/node', '/bin/node'];
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Choose the Node binary persisted into the managed-service environment.
|
|
98
|
-
* Prefers a stable system Node (exists, not version-manager-bound, satisfies
|
|
99
|
-
* MIN_SERVICE_NODE_VERSION); falls back to the current Node otherwise.
|
|
100
|
-
*/
|
|
101
|
-
export async function selectServiceNodeBin(options) {
|
|
102
|
-
const probe = options.probe ?? defaultServiceNodeProbe;
|
|
103
|
-
for (const candidate of stableNodeCandidates(options.platform)) {
|
|
104
|
-
if (!(await probe.isExecutable(candidate)))
|
|
105
|
-
continue;
|
|
106
|
-
if ((await detectServiceNodeVersionManager(candidate, probe)) !== null) {
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
let version;
|
|
110
|
-
try {
|
|
111
|
-
version = await options.runner.capture(candidate, ['--version']);
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
if (!nodeVersionSatisfies(version))
|
|
117
|
-
continue;
|
|
118
|
-
// Persist the candidate path itself (a stable symlink), never its realpath,
|
|
119
|
-
// so a Homebrew symlink keeps the volatile Cellar path out of the service.
|
|
120
|
-
return candidate;
|
|
121
|
-
}
|
|
122
|
-
return stabilizeHomebrewCellarNode(options.currentNodeBin, options.platform, probe);
|
|
123
|
-
}
|
|
124
|
-
const HOMEBREW_PREFIXES = ['/opt/homebrew', '/usr/local'];
|
|
125
|
-
function matchHomebrewCellar(path) {
|
|
126
|
-
for (const prefix of HOMEBREW_PREFIXES) {
|
|
127
|
-
const cellar = `${prefix}/Cellar/node`;
|
|
128
|
-
if (!path.startsWith(`${cellar}/`) && !path.startsWith(`${cellar}@`)) {
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
const major = path.slice(cellar.length).match(/^@(\d+)\//);
|
|
132
|
-
return { prefix, major: major === null ? null : major[1] };
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Homebrew Cellar (`<prefix>/Cellar/node[@major]/<version>/bin/node`) is a
|
|
138
|
-
* version-pinned path unfit for a persistent service. Best-effort remap to the
|
|
139
|
-
* matching stable Homebrew symlink; no match returns the input unchanged and
|
|
140
|
-
* never throws. darwin-only.
|
|
141
|
-
*/
|
|
142
|
-
export async function stabilizeHomebrewCellarNode(nodeBin, platform, probe = defaultServiceNodeProbe) {
|
|
143
|
-
if (platform !== 'darwin')
|
|
144
|
-
return nodeBin;
|
|
145
|
-
let resolved;
|
|
146
|
-
try {
|
|
147
|
-
resolved = await probe.realpath(nodeBin);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
resolved = nodeBin;
|
|
151
|
-
}
|
|
152
|
-
const cellar = matchHomebrewCellar(nodeBin) ?? matchHomebrewCellar(resolved);
|
|
153
|
-
if (cellar === null)
|
|
154
|
-
return nodeBin;
|
|
155
|
-
const links = [];
|
|
156
|
-
if (cellar.major !== null) {
|
|
157
|
-
links.push(`${cellar.prefix}/opt/node@${cellar.major}/bin/node`);
|
|
158
|
-
}
|
|
159
|
-
links.push(`${cellar.prefix}/opt/node/bin/node`, `${cellar.prefix}/bin/node`);
|
|
160
|
-
for (const link of links) {
|
|
161
|
-
if (!(await probe.isExecutable(link)))
|
|
162
|
-
continue;
|
|
163
|
-
try {
|
|
164
|
-
if ((await probe.realpath(link)) === resolved)
|
|
165
|
-
return link;
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
// ignore and try the next candidate symlink
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return nodeBin;
|
|
172
|
-
}
|
|
173
|
-
/** True when `path` is executable by the current process; never throws. */
|
|
174
|
-
export async function isExecutable(path) {
|
|
175
|
-
try {
|
|
176
|
-
await access(path, constants.X_OK);
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=service-node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-node.js","sourceRoot":"","sources":["../../src/onboard/service-node.ts"],"names":[],"mappings":"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"}
|
package/dist/onboard/service.js
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
import { pathExists } from '../platform/fs-errors.js';
|
|
2
|
-
import { rm } from 'node:fs/promises';
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
|
-
import { delimiter, dirname, isAbsolute, join, resolve } from 'node:path';
|
|
5
|
-
import { build as buildPlist } from 'plist';
|
|
6
|
-
import { expandHome } from '../config/config.js';
|
|
7
|
-
import { errorMessage } from '../platform/error-info.js';
|
|
8
|
-
import { buildServicePath, logsRoot, stateRoot, userLocalBinDirs, withServicePath, } from '../platform/paths.js';
|
|
9
|
-
import { ensureDirectory, ensureTextFile, writeTextFile, } from './ledger.js';
|
|
10
|
-
import { isExecutable, MIN_SERVICE_NODE_VERSION, nodeVersionSatisfies, } from './service-node.js';
|
|
11
|
-
export const LAUNCHD_LABEL = 'dev.excited.dreamux';
|
|
12
|
-
export const SYSTEMD_UNIT = 'dreamux.service';
|
|
13
|
-
export { defaultServiceNodeProbe, detectServiceNodeVersionManager, isExecutable, MIN_SERVICE_NODE_VERSION, nodeVersionSatisfies, selectServiceNodeBin, stabilizeHomebrewCellarNode, stableNodeCandidates, versionManagerOfPath, } from './service-node.js';
|
|
14
|
-
export function serviceUnitPath(platform = process.platform, homeDir = homedir()) {
|
|
15
|
-
if (platform === 'darwin') {
|
|
16
|
-
return {
|
|
17
|
-
platform: 'launchd',
|
|
18
|
-
path: join(homeDir, 'Library', 'LaunchAgents', `${LAUNCHD_LABEL}.plist`),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
if (platform === 'linux') {
|
|
22
|
-
return {
|
|
23
|
-
platform: 'systemd',
|
|
24
|
-
path: join(homeDir, '.config', 'systemd', 'user', SYSTEMD_UNIT),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
throw new Error(`dreamux onboard supports user-level services on macOS and Linux only (got ${platform})`);
|
|
28
|
-
}
|
|
29
|
-
export async function installUserService(options) {
|
|
30
|
-
const homeDir = options.homeDir ?? homedir();
|
|
31
|
-
const unit = serviceUnitPath(options.platform, homeDir);
|
|
32
|
-
const workingDir = stateRoot();
|
|
33
|
-
const logDir = logsRoot();
|
|
34
|
-
const stdoutLog = join(logDir, 'daemon.stdout.log');
|
|
35
|
-
const stderrLog = join(logDir, 'daemon.stderr.log');
|
|
36
|
-
await ensureDirectory(workingDir, options.ledger, 'managed service working directory', { dryRun: options.answers.dryRun });
|
|
37
|
-
await ensureDirectory(logDir, options.ledger, 'daemon log directory', {
|
|
38
|
-
dryRun: options.answers.dryRun,
|
|
39
|
-
});
|
|
40
|
-
await ensureTextFile(stdoutLog, '', options.ledger, 'daemon stdout log', {
|
|
41
|
-
mode: 0o600,
|
|
42
|
-
dryRun: options.answers.dryRun,
|
|
43
|
-
});
|
|
44
|
-
await ensureTextFile(stderrLog, '', options.ledger, 'daemon stderr log', {
|
|
45
|
-
mode: 0o600,
|
|
46
|
-
dryRun: options.answers.dryRun,
|
|
47
|
-
});
|
|
48
|
-
const content = unit.platform === 'launchd'
|
|
49
|
-
? renderLaunchdPlist(options.answers, stdoutLog, stderrLog)
|
|
50
|
-
: renderSystemdUnit(options.answers, stdoutLog, stderrLog);
|
|
51
|
-
const unitStatus = await writeTextFile(unit.path, content, options.ledger, `${unit.platform} unit`, {
|
|
52
|
-
mode: 0o600,
|
|
53
|
-
dryRun: options.answers.dryRun,
|
|
54
|
-
});
|
|
55
|
-
let lingerEnabled = null;
|
|
56
|
-
const warnings = [];
|
|
57
|
-
if (unit.platform === 'launchd') {
|
|
58
|
-
await registerLaunchd(unit.path, unitStatus, options);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
const systemd = await registerSystemd(unit.path, options);
|
|
62
|
-
lingerEnabled = systemd.lingerEnabled;
|
|
63
|
-
warnings.push(...systemd.warnings);
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
platform: unit.platform,
|
|
67
|
-
unitPath: unit.path,
|
|
68
|
-
registered: true,
|
|
69
|
-
started: options.answers.startService,
|
|
70
|
-
lingerEnabled,
|
|
71
|
-
warnings,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export function renderLaunchdPlist(answers, stdoutLog, stderrLog) {
|
|
75
|
-
return buildPlist({
|
|
76
|
-
Label: LAUNCHD_LABEL,
|
|
77
|
-
ProgramArguments: [answers.dreamuxBin, 'serve'],
|
|
78
|
-
RunAtLoad: true,
|
|
79
|
-
KeepAlive: true,
|
|
80
|
-
WorkingDirectory: stateRoot(),
|
|
81
|
-
EnvironmentVariables: managedServiceEnvironment(answers),
|
|
82
|
-
StandardOutPath: stdoutLog,
|
|
83
|
-
StandardErrorPath: stderrLog,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
export function renderSystemdUnit(answers, stdoutLog, stderrLog) {
|
|
87
|
-
return `[Unit]
|
|
88
|
-
Description=dreamux dispatcher daemon
|
|
89
|
-
|
|
90
|
-
[Service]
|
|
91
|
-
Type=simple
|
|
92
|
-
ExecStart=${systemdEscapeArg(answers.dreamuxBin)} serve
|
|
93
|
-
WorkingDirectory=${systemdEscapeArg(stateRoot())}
|
|
94
|
-
${Object.entries(managedServiceEnvironment(answers))
|
|
95
|
-
.map(([key, value]) => `Environment=${key}=${systemdEscapeEnv(value)}`)
|
|
96
|
-
.join('\n')}
|
|
97
|
-
Restart=on-failure
|
|
98
|
-
RestartSec=2s
|
|
99
|
-
StandardOutput=append:${stdoutLog}
|
|
100
|
-
StandardError=append:${stderrLog}
|
|
101
|
-
|
|
102
|
-
[Install]
|
|
103
|
-
WantedBy=default.target
|
|
104
|
-
`;
|
|
105
|
-
}
|
|
106
|
-
export function managedServiceEnvironment(answers) {
|
|
107
|
-
const home = answers.homeDir ?? homedir();
|
|
108
|
-
// Unit PATH: stable dirs → captured session PATH → fallbacks (see managedServicePath).
|
|
109
|
-
const env = {
|
|
110
|
-
DREAMUX_CONFIG_DIR: answers.configDir,
|
|
111
|
-
HOME: home,
|
|
112
|
-
DREAMUX_NODE_BIN: answers.nodeBin,
|
|
113
|
-
PATH: managedServicePath(answers),
|
|
114
|
-
};
|
|
115
|
-
return env;
|
|
116
|
-
}
|
|
117
|
-
export async function validateManagedServiceLaunch(answers, runner) {
|
|
118
|
-
const env = managedServiceEnvironment(answers);
|
|
119
|
-
const errors = [];
|
|
120
|
-
try {
|
|
121
|
-
const version = await runner.capture(answers.nodeBin, ['--version'], { env });
|
|
122
|
-
if (!nodeVersionSatisfies(version)) {
|
|
123
|
-
errors.push(`managed service Node must be >=${MIN_SERVICE_NODE_VERSION}: ${answers.nodeBin} reported ${version.trim() || '<empty>'}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch (err) {
|
|
127
|
-
errors.push(`managed service cannot execute Node at ${answers.nodeBin}: ${errorMessage(err)}`);
|
|
128
|
-
}
|
|
129
|
-
if (!(await runner.check(answers.dreamuxBin, ['--help'], { env }))) {
|
|
130
|
-
errors.push(`managed service cannot execute dreamux launcher at ${answers.dreamuxBin}`);
|
|
131
|
-
}
|
|
132
|
-
for (const check of serviceProviderBinChecks(answers)) {
|
|
133
|
-
if (!(await runner.check(check.bin, check.args, { env }))) {
|
|
134
|
-
errors.push(`managed service cannot execute provider binary '${check.name}' at ${check.bin}`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
ok: errors.length === 0,
|
|
139
|
-
errors,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
export async function resolveServiceExecutable(command, env) {
|
|
143
|
-
const trimmed = command.trim();
|
|
144
|
-
if (trimmed === '') {
|
|
145
|
-
throw new Error('managed service executable path is empty');
|
|
146
|
-
}
|
|
147
|
-
if (trimmed.includes('/') || trimmed.startsWith('~')) {
|
|
148
|
-
const candidate = resolve(expandHome(trimmed));
|
|
149
|
-
await assertExecutable(candidate, command);
|
|
150
|
-
return candidate;
|
|
151
|
-
}
|
|
152
|
-
for (const dir of (env['PATH'] ?? '').split(delimiter)) {
|
|
153
|
-
if (dir === '')
|
|
154
|
-
continue;
|
|
155
|
-
const candidate = join(dir, trimmed);
|
|
156
|
-
if (await isExecutable(candidate))
|
|
157
|
-
return candidate;
|
|
158
|
-
}
|
|
159
|
-
throw new Error(`managed service cannot resolve executable '${command}' from PATH; pass an absolute path and rerun dreamux onboard`);
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Builds the resolve-time effective PATH used to resolve bare provider/agent
|
|
163
|
-
* binaries during `onboard`/`daemon install`. Captured session PATH leads, then
|
|
164
|
-
* the caller's captured fresh-install fallback dirs.
|
|
165
|
-
* Stable Dreamux-owned dirs are added at service render time (see
|
|
166
|
-
* managedServicePath). Delegates to {@link withServicePath} in paths.ts. Never
|
|
167
|
-
* mutates env.
|
|
168
|
-
*/
|
|
169
|
-
export function withUserLocalBinPath(env, fallbackDirs) {
|
|
170
|
-
const sessionPath = env['PATH'] ?? '';
|
|
171
|
-
return withServicePath(env, { stableDirs: [], sessionPath, fallbackDirs });
|
|
172
|
-
}
|
|
173
|
-
/** Re-exported for service-level callers; canonical impl is in paths.ts. */
|
|
174
|
-
export { userLocalBinDirs };
|
|
175
|
-
function managedServicePath(answers) {
|
|
176
|
-
// Service PATH order: stable Dreamux-owned dirs (Node bin, provider bin dirs,
|
|
177
|
-
// dreamux bin) → captured session PATH (original order) → fresh-install
|
|
178
|
-
// fallback dirs from paths.ts. De-duped via buildServicePath. Never reads
|
|
179
|
-
// process.env; platform/homeDir/env passed explicitly.
|
|
180
|
-
const stableDirs = [
|
|
181
|
-
dirname(answers.nodeBin),
|
|
182
|
-
...serviceProviderBinChecks(answers).flatMap((check) => absoluteDir(check.bin)),
|
|
183
|
-
...absoluteDir(answers.dreamuxBin),
|
|
184
|
-
];
|
|
185
|
-
const sessionPath = answers.env?.['PATH'] ?? '';
|
|
186
|
-
return buildServicePath({
|
|
187
|
-
stableDirs,
|
|
188
|
-
sessionPath,
|
|
189
|
-
fallbackDirs: answers.fallbackDirs,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
function serviceProviderBinChecks(answers) {
|
|
193
|
-
const checks = new Map();
|
|
194
|
-
for (const check of answers.providerBinChecks ?? []) {
|
|
195
|
-
checks.set(`${check.name}\0${check.bin}\0${check.args.join('\0')}`, check);
|
|
196
|
-
}
|
|
197
|
-
return [...checks.values()];
|
|
198
|
-
}
|
|
199
|
-
function absoluteDir(path) {
|
|
200
|
-
return isAbsolute(path) ? [dirname(path)] : [];
|
|
201
|
-
}
|
|
202
|
-
async function assertExecutable(path, label) {
|
|
203
|
-
if (await isExecutable(path))
|
|
204
|
-
return;
|
|
205
|
-
throw new Error(`managed service executable is not runnable: ${label}`);
|
|
206
|
-
}
|
|
207
|
-
async function registerLaunchd(unitPath, unitStatus, options) {
|
|
208
|
-
const uid = options.uid ?? process.getuid?.();
|
|
209
|
-
if (uid === undefined) {
|
|
210
|
-
throw new Error('launchd user service registration requires a numeric uid');
|
|
211
|
-
}
|
|
212
|
-
const serviceTarget = `gui/${uid}/${LAUNCHD_LABEL}`;
|
|
213
|
-
const loaded = await options.runner.check('launchctl', ['print', serviceTarget], { dryRun: options.answers.dryRun });
|
|
214
|
-
if (!loaded) {
|
|
215
|
-
await options.runner.run('launchctl', ['bootstrap', `gui/${uid}`, unitPath], { dryRun: options.answers.dryRun });
|
|
216
|
-
}
|
|
217
|
-
else if (unitStatus !== 'unchanged') {
|
|
218
|
-
await options.runner.run('launchctl', ['bootout', serviceTarget], {
|
|
219
|
-
dryRun: options.answers.dryRun,
|
|
220
|
-
});
|
|
221
|
-
await options.runner.run('launchctl', ['bootstrap', `gui/${uid}`, unitPath], { dryRun: options.answers.dryRun });
|
|
222
|
-
}
|
|
223
|
-
if (options.answers.startService) {
|
|
224
|
-
await options.runner.run('launchctl', ['kickstart', '-k', serviceTarget], { dryRun: options.answers.dryRun });
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
async function registerSystemd(unitPath, options) {
|
|
228
|
-
await options.runner.run('systemctl', ['--user', 'daemon-reload'], {
|
|
229
|
-
dryRun: options.answers.dryRun,
|
|
230
|
-
});
|
|
231
|
-
const enableArgs = options.answers.startService
|
|
232
|
-
? ['--user', 'enable', '--now', SYSTEMD_UNIT]
|
|
233
|
-
: ['--user', 'enable', SYSTEMD_UNIT];
|
|
234
|
-
await options.runner.run('systemctl', enableArgs, {
|
|
235
|
-
dryRun: options.answers.dryRun,
|
|
236
|
-
});
|
|
237
|
-
options.ledger.record(unitPath, 'unchanged', 'systemd user service registered');
|
|
238
|
-
// `systemctl --user enable` only schedules the service for an active login
|
|
239
|
-
// session. `loginctl enable-linger` makes a user service boot without a login;
|
|
240
|
-
// without it "enabled" silently fails to autostart on reboot. Best-effort: a
|
|
241
|
-
// strict polkit / non-root setup may deny it, but that must not fail onboard.
|
|
242
|
-
const { lingerEnabled, warnings } = await enableSystemdLinger(options);
|
|
243
|
-
return { lingerEnabled, warnings };
|
|
244
|
-
}
|
|
245
|
-
/** Enable systemd user lingering, best-effort. Skipped (null) on dry run. */
|
|
246
|
-
export async function enableSystemdLinger(options) {
|
|
247
|
-
if (options.answers.dryRun)
|
|
248
|
-
return { lingerEnabled: null, warnings: [] };
|
|
249
|
-
const ok = await options.runner.check('loginctl', ['enable-linger']);
|
|
250
|
-
if (ok)
|
|
251
|
-
return { lingerEnabled: true, warnings: [] };
|
|
252
|
-
return {
|
|
253
|
-
lingerEnabled: false,
|
|
254
|
-
warnings: [
|
|
255
|
-
'could not enable systemd lingering (loginctl enable-linger); the service ' +
|
|
256
|
-
'will not start at boot until you log in. Enable it manually with: ' +
|
|
257
|
-
'loginctl enable-linger',
|
|
258
|
-
],
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Unregister and remove the user-level service unit only. Shared by
|
|
263
|
-
* `dreamux uninstall` (also removes config/state/logs) and
|
|
264
|
-
* `daemon uninstall` (removes nothing else). Unit-file removal is authoritative.
|
|
265
|
-
*/
|
|
266
|
-
export async function removeUserService(options) {
|
|
267
|
-
const homeDir = options.homeDir ?? homedir();
|
|
268
|
-
const unit = serviceUnitPath(options.platform, homeDir);
|
|
269
|
-
const dryRun = options.dryRun ?? false;
|
|
270
|
-
if (unit.platform === 'launchd') {
|
|
271
|
-
const uid = options.uid ?? process.getuid?.();
|
|
272
|
-
if (uid === undefined) {
|
|
273
|
-
throw new Error('launchd user service uninstall requires a numeric uid');
|
|
274
|
-
}
|
|
275
|
-
const serviceTarget = `gui/${uid}/${LAUNCHD_LABEL}`;
|
|
276
|
-
const loaded = await options.runner.check('launchctl', ['print', serviceTarget], {
|
|
277
|
-
dryRun,
|
|
278
|
-
});
|
|
279
|
-
if (loaded) {
|
|
280
|
-
await runServiceBestEffort(options.runner, 'launchctl', ['bootout', serviceTarget], dryRun);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
await runServiceBestEffort(options.runner, 'systemctl', ['--user', 'disable', '--now', SYSTEMD_UNIT], dryRun);
|
|
285
|
-
}
|
|
286
|
-
const existed = await pathExists(unit.path);
|
|
287
|
-
if (existed && !dryRun)
|
|
288
|
-
await rm(unit.path, { force: true });
|
|
289
|
-
if (unit.platform === 'systemd') {
|
|
290
|
-
await runServiceBestEffort(options.runner, 'systemctl', ['--user', 'daemon-reload'], dryRun);
|
|
291
|
-
}
|
|
292
|
-
return { platform: unit.platform, unitPath: unit.path, removed: existed };
|
|
293
|
-
}
|
|
294
|
-
async function runServiceBestEffort(runner, command, args, dryRun) {
|
|
295
|
-
try {
|
|
296
|
-
await runner.run(command, args, { dryRun });
|
|
297
|
-
}
|
|
298
|
-
catch {
|
|
299
|
-
/* The unit may already be absent or stopped; file removal is authoritative. */
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
function systemdEscapeArg(value) {
|
|
303
|
-
if (/^[A-Za-z0-9_./:@%+=,-]+$/.test(value))
|
|
304
|
-
return value;
|
|
305
|
-
return `"${value.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`;
|
|
306
|
-
}
|
|
307
|
-
function systemdEscapeEnv(value) {
|
|
308
|
-
return value.replaceAll('\\', '\\\\').replaceAll('"', '\\"').replaceAll(' ', '\\x20');
|
|
309
|
-
}
|
|
310
|
-
//# sourceMappingURL=service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/onboard/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { link, mkdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { dirname } from 'node:path';
|
|
4
|
-
/**
|
|
5
|
-
* Atomically write a file (issue #199 Slice 4). A plain `writeFile` truncates
|
|
6
|
-
* the target before writing, so a concurrent reader can observe an empty or
|
|
7
|
-
* partial file — exactly the `JSON.parse('')` race the per-name record store hit
|
|
8
|
-
* under parallel settles. Writing the full contents to a sibling temp file and
|
|
9
|
-
* `rename`-ing it into place makes the swap atomic: a reader always sees either
|
|
10
|
-
* the complete old file or the complete new one, never a torn write. The temp is
|
|
11
|
-
* created in the SAME directory so the rename stays on one filesystem.
|
|
12
|
-
*/
|
|
13
|
-
export async function writeFileAtomic(path, data, options = {}) {
|
|
14
|
-
const dir = dirname(path);
|
|
15
|
-
await mkdir(dir, { recursive: true });
|
|
16
|
-
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
17
|
-
try {
|
|
18
|
-
await writeFile(tmp, data, { mode: options.mode ?? 0o600 });
|
|
19
|
-
await rename(tmp, path);
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
await rm(tmp, { force: true }).catch(() => undefined);
|
|
23
|
-
throw err;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Publish a complete file atomically without replacing an existing target.
|
|
28
|
-
*
|
|
29
|
-
* The sibling temp file is fully written before `link()` makes the destination
|
|
30
|
-
* visible. A competing publisher wins with one atomic hard-link operation;
|
|
31
|
-
* losers observe `EEXIST` and return false. A crash before the link can leave
|
|
32
|
-
* only an unreferenced temp file, never an empty or partial destination.
|
|
33
|
-
*/
|
|
34
|
-
export async function writeFileExclusiveAtomic(path, data, options = {}) {
|
|
35
|
-
const dir = dirname(path);
|
|
36
|
-
await mkdir(dir, { recursive: true });
|
|
37
|
-
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
38
|
-
try {
|
|
39
|
-
await writeFile(tmp, data, {
|
|
40
|
-
flag: 'wx',
|
|
41
|
-
mode: options.mode ?? 0o600,
|
|
42
|
-
});
|
|
43
|
-
try {
|
|
44
|
-
await link(tmp, path);
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
if (isAlreadyExists(err))
|
|
49
|
-
return false;
|
|
50
|
-
throw err;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
await rm(tmp, { force: true }).catch(() => undefined);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function isAlreadyExists(err) {
|
|
58
|
-
return (typeof err === 'object' &&
|
|
59
|
-
err !== null &&
|
|
60
|
-
'code' in err &&
|
|
61
|
-
err.code === 'EEXIST');
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=atomic-write.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../../src/platform/atomic-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAAY,EACZ,UAA6B,EAAE;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAY,EACZ,IAAY,EACZ,UAA6B,EAAE;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;YACzB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,eAAe,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACZ,GAA0B,CAAC,IAAI,KAAK,QAAQ,CAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function errorMessage(error) {
|
|
2
|
-
return error instanceof Error ? error.message : String(error);
|
|
3
|
-
}
|
|
4
|
-
export function errorInfo(error) {
|
|
5
|
-
if (!(error instanceof Error))
|
|
6
|
-
return { message: String(error) };
|
|
7
|
-
return error.stack === undefined
|
|
8
|
-
? { message: error.message }
|
|
9
|
-
: { message: error.message, stack: error.stack };
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=error-info.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-info.js","sourceRoot":"","sources":["../../src/platform/error-info.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACjE,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS;QAC9B,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC"}
|