@cydm/happy-elves 0.1.0-beta.31 → 0.1.0-beta.310
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/apps/cli/dist/commands/app.js +10 -0
- package/apps/cli/dist/commands/daemon.js +92 -4
- package/apps/cli/dist/commands/gateway.d.ts +2 -0
- package/apps/cli/dist/commands/gateway.js +429 -0
- package/apps/cli/dist/commands/lib/args.js +49 -0
- package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +2 -2
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js +2 -2
- package/apps/cli/dist/commands/lib/doctor.d.ts +11 -0
- package/apps/cli/dist/commands/lib/doctor.js +276 -11
- package/apps/cli/dist/commands/lib/gateway-store.d.ts +38 -0
- package/apps/cli/dist/commands/lib/gateway-store.js +33 -0
- package/apps/cli/dist/commands/lib/index.d.ts +4 -2
- package/apps/cli/dist/commands/lib/index.js +2 -0
- package/apps/cli/dist/commands/lib/json.d.ts +2 -2
- package/apps/cli/dist/commands/lib/json.js +5 -2
- package/apps/cli/dist/commands/lib/local-daemon.d.ts +1 -0
- package/apps/cli/dist/commands/lib/local-daemon.js +14 -0
- package/apps/cli/dist/commands/lib/paths.d.ts +2 -0
- package/apps/cli/dist/commands/lib/paths.js +2 -0
- package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
- package/apps/cli/dist/commands/lib/relay-db-audit.js +300 -0
- package/apps/cli/dist/commands/lib/relay-http.d.ts +1 -1
- package/apps/cli/dist/commands/lib/scope.d.ts +1 -1
- package/apps/cli/dist/commands/lib/session-output.d.ts +15 -1
- package/apps/cli/dist/commands/lib/session-output.js +214 -6
- package/apps/cli/dist/commands/lib/session-view.d.ts +2 -2
- package/apps/cli/dist/commands/lib/status.js +5 -1
- package/apps/cli/dist/commands/lib/types.d.ts +4 -2
- package/apps/cli/dist/commands/lib/usage.js +123 -10
- package/apps/cli/dist/commands/lib/workspace.d.ts +2 -2
- package/apps/cli/dist/commands/lib/workspace.js +63 -10
- package/apps/cli/dist/commands/machine.js +50 -9
- package/apps/cli/dist/commands/memory.d.ts +2 -0
- package/apps/cli/dist/commands/memory.js +179 -0
- package/apps/cli/dist/commands/relay.js +29 -2
- package/apps/cli/dist/commands/release.d.ts +2 -0
- package/apps/cli/dist/commands/release.js +197 -0
- package/apps/cli/dist/commands/remote.js +10 -2
- package/apps/cli/dist/commands/schedule.d.ts +2 -0
- package/apps/cli/dist/commands/schedule.js +273 -0
- package/apps/cli/dist/commands/session.js +517 -5
- package/apps/cli/dist/commands/turn.js +225 -9
- package/apps/cli/dist/commands/workspace.d.ts +2 -0
- package/apps/cli/dist/commands/workspace.js +68 -0
- package/apps/cli/package.json +6 -0
- package/apps/daemon/dist/gateway/adapters.d.ts +38 -0
- package/apps/daemon/dist/gateway/adapters.js +2 -0
- package/apps/daemon/dist/gateway/feishu.d.ts +65 -0
- package/apps/daemon/dist/gateway/feishu.js +493 -0
- package/apps/daemon/dist/gateway/format.d.ts +2 -0
- package/apps/daemon/dist/gateway/format.js +19 -0
- package/apps/daemon/dist/gateway/handler.d.ts +7 -0
- package/apps/daemon/dist/gateway/handler.js +151 -0
- package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
- package/apps/daemon/dist/gateway/runtime.js +850 -0
- package/apps/daemon/dist/gateway/store.d.ts +92 -0
- package/apps/daemon/dist/gateway/store.js +268 -0
- package/apps/daemon/dist/memory/handler.d.ts +7 -0
- package/apps/daemon/dist/memory/handler.js +105 -0
- package/apps/daemon/dist/memory/manager.d.ts +44 -0
- package/apps/daemon/dist/memory/manager.js +359 -0
- package/apps/daemon/dist/paths.d.ts +3 -0
- package/apps/daemon/dist/paths.js +3 -0
- package/apps/daemon/dist/relay/admission.d.ts +30 -0
- package/apps/daemon/dist/relay/admission.js +31 -0
- package/apps/daemon/dist/relay/connection.js +37 -1
- package/apps/daemon/dist/relay/devtools.d.ts +1 -1
- package/apps/daemon/dist/relay/register.js +2 -0
- package/apps/daemon/dist/relay/send.d.ts +2 -2
- package/apps/daemon/dist/relay/send.js +2 -0
- package/apps/daemon/dist/relay-http.d.ts +1 -1
- package/apps/daemon/dist/runtime/external-provider.d.ts +1 -1
- package/apps/daemon/dist/runtime/external-provider.js +187 -17
- package/apps/daemon/dist/runtime.d.ts +1 -2
- package/apps/daemon/dist/runtime.js +0 -3
- package/apps/daemon/dist/schedule/handler.d.ts +9 -0
- package/apps/daemon/dist/schedule/handler.js +148 -0
- package/apps/daemon/dist/schedule/runner.d.ts +21 -0
- package/apps/daemon/dist/schedule/runner.js +547 -0
- package/apps/daemon/dist/schedule/store.d.ts +9 -0
- package/apps/daemon/dist/schedule/store.js +143 -0
- package/apps/daemon/dist/session/create-session.d.ts +1 -1
- package/apps/daemon/dist/session/directory.d.ts +1 -1
- package/apps/daemon/dist/session/events.d.ts +15 -2
- package/apps/daemon/dist/session/events.js +76 -24
- package/apps/daemon/dist/session/file-preview.d.ts +1 -1
- package/apps/daemon/dist/session/lifecycle.d.ts +26 -3
- package/apps/daemon/dist/session/lifecycle.js +161 -22
- package/apps/daemon/dist/session/metadata.d.ts +2 -2
- package/apps/daemon/dist/session/metadata.js +42 -1
- package/apps/daemon/dist/session/primitives.d.ts +1 -1
- package/apps/daemon/dist/session/primitives.js +37 -6
- package/apps/daemon/dist/session/prompt.d.ts +28 -1
- package/apps/daemon/dist/session/prompt.js +340 -5
- package/apps/daemon/dist/session/reconcile.d.ts +3 -0
- package/apps/daemon/dist/session/reconcile.js +235 -0
- package/apps/daemon/dist/session/runtime-handle.d.ts +1 -1
- package/apps/daemon/dist/start.js +5 -1
- package/apps/daemon/dist/state.d.ts +2 -2
- package/apps/daemon/dist/turn-coordinator.d.ts +1 -0
- package/apps/daemon/dist/turn-coordinator.js +4 -0
- package/apps/daemon/dist/types.d.ts +16 -1
- package/apps/daemon/package.json +3 -25
- package/apps/relay/dist/connections.d.ts +2 -0
- package/apps/relay/dist/controller-handlers.d.ts +42 -2
- package/apps/relay/dist/controller-handlers.js +349 -37
- package/apps/relay/dist/db.js +296 -2
- package/apps/relay/dist/errors.d.ts +2 -1
- package/apps/relay/dist/errors.js +3 -1
- package/apps/relay/dist/http-routes.js +659 -33
- package/apps/relay/dist/http-schemas.d.ts +156 -0
- package/apps/relay/dist/http-schemas.js +85 -0
- package/apps/relay/dist/index.js +31 -1
- package/apps/relay/dist/machine-handlers.d.ts +15 -7
- package/apps/relay/dist/machine-handlers.js +567 -27
- package/apps/relay/dist/projections.d.ts +1 -1
- package/apps/relay/dist/projections.js +13 -0
- package/apps/relay/dist/relay-context.d.ts +41 -3
- package/apps/relay/dist/relay-context.js +244 -19
- package/apps/relay/dist/repositories.d.ts +2 -2
- package/apps/relay/dist/repositories.js +28 -1
- package/apps/relay/dist/runtime-bindings.d.ts +25 -0
- package/apps/relay/dist/runtime-bindings.js +49 -0
- package/apps/relay/dist/scope.d.ts +1 -1
- package/apps/relay/dist/types.d.ts +71 -1
- package/apps/relay/dist/websocket.js +2 -0
- package/package.json +5 -11
- package/packages/agent-sdk/dist/index.d.ts +80 -0
- package/packages/agent-sdk/dist/index.js +16 -0
- package/packages/client/dist/account.d.ts +35 -2
- package/packages/client/dist/account.js +98 -1
- package/packages/client/dist/client.d.ts +59 -6
- package/packages/client/dist/client.js +312 -58
- package/packages/client/dist/index.d.ts +1 -1
- package/packages/client/dist/parsers.d.ts +28 -2
- package/packages/client/dist/parsers.js +167 -0
- package/packages/client/dist/transport.d.ts +21 -1
- package/packages/client/dist/transport.js +69 -6
- package/packages/client/dist/types.d.ts +177 -1
- package/packages/client/dist/validation.d.ts +1 -1
- package/packages/runtime/dist/index.d.ts +66 -0
- package/packages/runtime-acpx/dist/index.d.ts +1 -1
- package/packages/runtime-acpx/dist/index.js +8 -0
- package/packages/runtime-cli/dist/claude-history.d.ts +1 -2
- package/packages/runtime-cli/dist/claude-history.js +0 -3
- package/packages/runtime-cli/dist/claude-session-store.d.ts +0 -1
- package/packages/runtime-cli/dist/claude-session-store.js +1 -1
- package/packages/runtime-cli/dist/claude-turn.d.ts +2 -1
- package/packages/runtime-cli/dist/claude-turn.js +29 -9
- package/packages/runtime-cli/dist/codex-app-server.d.ts +8 -3
- package/packages/runtime-cli/dist/codex-app-server.js +122 -25
- package/packages/runtime-cli/dist/codex-history.d.ts +1 -2
- package/packages/runtime-cli/dist/codex-history.js +11 -5
- package/packages/runtime-cli/dist/codex-protocol.d.ts +2 -2
- package/packages/runtime-cli/dist/codex-protocol.js +4 -4
- package/packages/runtime-cli/dist/history-merge.d.ts +1 -1
- package/packages/runtime-cli/dist/index.d.ts +1 -1
- package/packages/runtime-cli/dist/index.js +108 -2
- package/packages/runtime-cli/dist/permissions.d.ts +1 -1
- package/packages/runtime-cli/dist/session-store.d.ts +2 -1
- package/packages/runtime-cli/dist/session-store.js +9 -8
- package/packages/shared/dist/index.d.ts +2 -0
- package/packages/shared/dist/index.js +2 -0
- package/packages/shared/dist/protocol-schemas.d.ts +1077 -0
- package/packages/shared/dist/protocol-schemas.js +273 -0
- package/packages/shared/dist/protocol-types.d.ts +371 -3
- package/packages/shared/dist/protocol.d.ts +181 -2
- package/packages/shared/dist/protocol.js +197 -1
- package/packages/shared/dist/session-tags.d.ts +12 -0
- package/packages/shared/dist/session-tags.js +50 -0
- package/apps/cli/dist/commands/account.js.map +0 -1
- package/apps/cli/dist/commands/app.js.map +0 -1
- package/apps/cli/dist/commands/collect.js.map +0 -1
- package/apps/cli/dist/commands/command.js.map +0 -1
- package/apps/cli/dist/commands/config.js.map +0 -1
- package/apps/cli/dist/commands/daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/args.js.map +0 -1
- package/apps/cli/dist/commands/lib/audit.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-config.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap.js.map +0 -1
- package/apps/cli/dist/commands/lib/config.js.map +0 -1
- package/apps/cli/dist/commands/lib/doctor.js.map +0 -1
- package/apps/cli/dist/commands/lib/exit.js.map +0 -1
- package/apps/cli/dist/commands/lib/index.js.map +0 -1
- package/apps/cli/dist/commands/lib/json.js.map +0 -1
- package/apps/cli/dist/commands/lib/local-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/loop-store.js.map +0 -1
- package/apps/cli/dist/commands/lib/paths.js.map +0 -1
- package/apps/cli/dist/commands/lib/relay-http.js.map +0 -1
- package/apps/cli/dist/commands/lib/scope.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-view.js.map +0 -1
- package/apps/cli/dist/commands/lib/status.js.map +0 -1
- package/apps/cli/dist/commands/lib/types.js.map +0 -1
- package/apps/cli/dist/commands/lib/usage.js.map +0 -1
- package/apps/cli/dist/commands/lib/workspace.js.map +0 -1
- package/apps/cli/dist/commands/loop.js.map +0 -1
- package/apps/cli/dist/commands/machine.js.map +0 -1
- package/apps/cli/dist/commands/relay.js.map +0 -1
- package/apps/cli/dist/commands/remote.js.map +0 -1
- package/apps/cli/dist/commands/session.js.map +0 -1
- package/apps/cli/dist/commands/token.js.map +0 -1
- package/apps/cli/dist/commands/turn.js.map +0 -1
- package/apps/cli/dist/errors.js.map +0 -1
- package/apps/cli/dist/index.js.map +0 -1
- package/apps/daemon/dist/app.js.map +0 -1
- package/apps/daemon/dist/args.js.map +0 -1
- package/apps/daemon/dist/audit.js.map +0 -1
- package/apps/daemon/dist/cli.js.map +0 -1
- package/apps/daemon/dist/config.js.map +0 -1
- package/apps/daemon/dist/errors.js.map +0 -1
- package/apps/daemon/dist/loop/runner.js.map +0 -1
- package/apps/daemon/dist/loop/store.js.map +0 -1
- package/apps/daemon/dist/pair.js.map +0 -1
- package/apps/daemon/dist/paths.js.map +0 -1
- package/apps/daemon/dist/process.js.map +0 -1
- package/apps/daemon/dist/relay/connection.js.map +0 -1
- package/apps/daemon/dist/relay/devtools.js.map +0 -1
- package/apps/daemon/dist/relay/register.js.map +0 -1
- package/apps/daemon/dist/relay/send.js.map +0 -1
- package/apps/daemon/dist/relay-http.js.map +0 -1
- package/apps/daemon/dist/runtime/external-provider.js.map +0 -1
- package/apps/daemon/dist/runtime.js.map +0 -1
- package/apps/daemon/dist/session/create-session.js.map +0 -1
- package/apps/daemon/dist/session/directory.js.map +0 -1
- package/apps/daemon/dist/session/events.js.map +0 -1
- package/apps/daemon/dist/session/file-preview.js.map +0 -1
- package/apps/daemon/dist/session/lifecycle.js.map +0 -1
- package/apps/daemon/dist/session/metadata.js.map +0 -1
- package/apps/daemon/dist/session/primitives.js.map +0 -1
- package/apps/daemon/dist/session/prompt.js.map +0 -1
- package/apps/daemon/dist/session/runtime-handle.js.map +0 -1
- package/apps/daemon/dist/start.js.map +0 -1
- package/apps/daemon/dist/state.js.map +0 -1
- package/apps/daemon/dist/turn-coordinator.js.map +0 -1
- package/apps/daemon/dist/types.js.map +0 -1
- package/apps/daemon/dist/utils.js.map +0 -1
- package/apps/relay/dist/auth.js.map +0 -1
- package/apps/relay/dist/connections.js.map +0 -1
- package/apps/relay/dist/controller-handlers.js.map +0 -1
- package/apps/relay/dist/db.js.map +0 -1
- package/apps/relay/dist/errors.js.map +0 -1
- package/apps/relay/dist/http-routes.js.map +0 -1
- package/apps/relay/dist/http-schemas.js.map +0 -1
- package/apps/relay/dist/index.js.map +0 -1
- package/apps/relay/dist/machine-handlers.js.map +0 -1
- package/apps/relay/dist/projections.js.map +0 -1
- package/apps/relay/dist/relay-context.js.map +0 -1
- package/apps/relay/dist/repositories.js.map +0 -1
- package/apps/relay/dist/retention.js.map +0 -1
- package/apps/relay/dist/scope.js.map +0 -1
- package/apps/relay/dist/security.js.map +0 -1
- package/apps/relay/dist/types.js.map +0 -1
- package/apps/relay/dist/websocket.js.map +0 -1
- package/apps/relay/package.json +0 -29
- package/packages/agent-sdk/dist/index.d.ts.map +0 -1
- package/packages/agent-sdk/dist/index.js.map +0 -1
- package/packages/agent-sdk/package.json +0 -20
- package/packages/client/dist/account.d.ts.map +0 -1
- package/packages/client/dist/account.js.map +0 -1
- package/packages/client/dist/client.d.ts.map +0 -1
- package/packages/client/dist/client.js.map +0 -1
- package/packages/client/dist/errors.d.ts.map +0 -1
- package/packages/client/dist/errors.js.map +0 -1
- package/packages/client/dist/http.d.ts.map +0 -1
- package/packages/client/dist/http.js.map +0 -1
- package/packages/client/dist/index.d.ts.map +0 -1
- package/packages/client/dist/index.js.map +0 -1
- package/packages/client/dist/parsers.d.ts.map +0 -1
- package/packages/client/dist/parsers.js.map +0 -1
- package/packages/client/dist/transport.d.ts.map +0 -1
- package/packages/client/dist/transport.js.map +0 -1
- package/packages/client/dist/types.d.ts.map +0 -1
- package/packages/client/dist/types.js.map +0 -1
- package/packages/client/dist/validation.d.ts.map +0 -1
- package/packages/client/dist/validation.js.map +0 -1
- package/packages/client/package.json +0 -22
- package/packages/pie-provider/dist/index.d.ts.map +0 -1
- package/packages/pie-provider/dist/index.js.map +0 -1
- package/packages/pie-provider/package.json +0 -26
- package/packages/runtime/dist/index.d.ts.map +0 -1
- package/packages/runtime/dist/index.js.map +0 -1
- package/packages/runtime/package.json +0 -19
- package/packages/runtime-acpx/dist/index.d.ts.map +0 -1
- package/packages/runtime-acpx/dist/index.js.map +0 -1
- package/packages/runtime-acpx/package.json +0 -23
- package/packages/runtime-cli/dist/async-queue.d.ts.map +0 -1
- package/packages/runtime-cli/dist/async-queue.js.map +0 -1
- package/packages/runtime-cli/dist/claude-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-history.js.map +0 -1
- package/packages/runtime-cli/dist/claude-json.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-json.js.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.js.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.js.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.js.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.js.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.js.map +0 -1
- package/packages/runtime-cli/dist/codex-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-history.js.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.js.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.js.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.js.map +0 -1
- package/packages/runtime-cli/dist/command-resolver.d.ts.map +0 -1
- package/packages/runtime-cli/dist/command-resolver.js.map +0 -1
- package/packages/runtime-cli/dist/history-merge.d.ts.map +0 -1
- package/packages/runtime-cli/dist/history-merge.js.map +0 -1
- package/packages/runtime-cli/dist/index.d.ts.map +0 -1
- package/packages/runtime-cli/dist/index.js.map +0 -1
- package/packages/runtime-cli/dist/permissions.d.ts.map +0 -1
- package/packages/runtime-cli/dist/permissions.js.map +0 -1
- package/packages/runtime-cli/dist/session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/session-store.js.map +0 -1
- package/packages/runtime-cli/package.json +0 -22
- package/packages/shared/dist/args.d.ts.map +0 -1
- package/packages/shared/dist/args.js.map +0 -1
- package/packages/shared/dist/crypto.d.ts.map +0 -1
- package/packages/shared/dist/crypto.js.map +0 -1
- package/packages/shared/dist/ids.d.ts.map +0 -1
- package/packages/shared/dist/ids.js.map +0 -1
- package/packages/shared/dist/index.d.ts.map +0 -1
- package/packages/shared/dist/index.js.map +0 -1
- package/packages/shared/dist/protocol-schemas.d.ts.map +0 -1
- package/packages/shared/dist/protocol-schemas.js.map +0 -1
- package/packages/shared/dist/protocol-types.d.ts.map +0 -1
- package/packages/shared/dist/protocol-types.js.map +0 -1
- package/packages/shared/dist/protocol.d.ts.map +0 -1
- package/packages/shared/dist/protocol.js.map +0 -1
- package/packages/shared/dist/session-name.d.ts.map +0 -1
- package/packages/shared/dist/session-name.js.map +0 -1
- package/packages/shared/dist/session-state.d.ts.map +0 -1
- package/packages/shared/dist/session-state.js.map +0 -1
- package/packages/shared/package.json +0 -24
|
@@ -2,68 +2,117 @@ import { parseFlags as parseSharedFlags } from "../../../../../packages/shared/d
|
|
|
2
2
|
import { CliError } from "../../errors.js";
|
|
3
3
|
const valueFlags = new Set([
|
|
4
4
|
"agent",
|
|
5
|
+
"app-id",
|
|
6
|
+
"at",
|
|
7
|
+
"channel",
|
|
5
8
|
"code",
|
|
9
|
+
"conversation",
|
|
10
|
+
"cron",
|
|
6
11
|
"controller",
|
|
7
12
|
"cwd",
|
|
13
|
+
"date",
|
|
8
14
|
"device-id",
|
|
9
15
|
"device-name",
|
|
16
|
+
"every-ms",
|
|
17
|
+
"execution",
|
|
10
18
|
"from",
|
|
11
19
|
"host",
|
|
20
|
+
"domain",
|
|
12
21
|
"invite-secret",
|
|
22
|
+
"inbound",
|
|
13
23
|
"join-url-base",
|
|
24
|
+
"label",
|
|
25
|
+
"layer",
|
|
14
26
|
"limit",
|
|
15
27
|
"machine",
|
|
16
28
|
"machine-id",
|
|
29
|
+
"memory",
|
|
30
|
+
"memory-mode",
|
|
31
|
+
"message-id",
|
|
32
|
+
"memory-project",
|
|
33
|
+
"memory-top-n",
|
|
17
34
|
"name",
|
|
35
|
+
"model",
|
|
18
36
|
"mode",
|
|
19
37
|
"output",
|
|
20
38
|
"path",
|
|
21
39
|
"port",
|
|
22
40
|
"permission",
|
|
23
41
|
"permission-mode",
|
|
42
|
+
"profile",
|
|
43
|
+
"project",
|
|
44
|
+
"query",
|
|
24
45
|
"prompt",
|
|
25
46
|
"prompt-file",
|
|
26
47
|
"every",
|
|
27
48
|
"reason",
|
|
49
|
+
"release-tag",
|
|
50
|
+
"reaction-emoji",
|
|
28
51
|
"relay",
|
|
29
52
|
"root",
|
|
53
|
+
"runtime-limit",
|
|
54
|
+
"runtime-session",
|
|
30
55
|
"shell",
|
|
31
56
|
"actions",
|
|
57
|
+
"ack-timeout",
|
|
58
|
+
"allow-chat",
|
|
59
|
+
"allow-sender",
|
|
32
60
|
"expires-in",
|
|
33
61
|
"format",
|
|
34
62
|
"loops",
|
|
35
63
|
"machines",
|
|
36
64
|
"sessions",
|
|
65
|
+
"session",
|
|
37
66
|
"secret",
|
|
38
67
|
"since",
|
|
68
|
+
"source",
|
|
39
69
|
"stop-on",
|
|
40
70
|
"tail",
|
|
71
|
+
"tag",
|
|
72
|
+
"tags",
|
|
41
73
|
"text",
|
|
42
74
|
"text-file",
|
|
43
75
|
"timeout",
|
|
44
76
|
"timeout-ms",
|
|
77
|
+
"timezone",
|
|
45
78
|
"wait-timeout-ms",
|
|
79
|
+
"inactivity-timeout",
|
|
46
80
|
"runtime-timeout",
|
|
47
81
|
"to",
|
|
48
82
|
"token",
|
|
49
83
|
"ttl",
|
|
84
|
+
"title",
|
|
50
85
|
"url",
|
|
51
86
|
"turn",
|
|
52
87
|
"until",
|
|
88
|
+
"reviewer-tag",
|
|
89
|
+
"dogfood-tag",
|
|
53
90
|
]);
|
|
54
91
|
const booleanFlags = new Set([
|
|
55
92
|
"all",
|
|
93
|
+
"allow-any-sender",
|
|
94
|
+
"app-secret-stdin",
|
|
95
|
+
"confirm-risk",
|
|
96
|
+
"copy-tags",
|
|
56
97
|
"detach",
|
|
98
|
+
"disable-reaction",
|
|
57
99
|
"help",
|
|
100
|
+
"hidden",
|
|
58
101
|
"h",
|
|
59
102
|
"include-archived",
|
|
103
|
+
"include-debug",
|
|
60
104
|
"json",
|
|
105
|
+
"keep-source",
|
|
61
106
|
"local",
|
|
62
107
|
"no-open",
|
|
108
|
+
"no-start",
|
|
63
109
|
"no-wait",
|
|
110
|
+
"repair-head",
|
|
111
|
+
"strict",
|
|
64
112
|
"summary",
|
|
65
113
|
"verbose",
|
|
66
114
|
"wait",
|
|
115
|
+
"manual",
|
|
67
116
|
]);
|
|
68
117
|
const knownFlags = new Set([...valueFlags, ...booleanFlags]);
|
|
69
118
|
const dashPrefixedValueFlags = new Set(["secret"]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ControllerClient } from "
|
|
2
|
-
import type { MachineSnapshot } from "
|
|
1
|
+
import type { ControllerClient } from "../../../../../packages/client/dist/index.js";
|
|
2
|
+
import type { MachineSnapshot } from "../../../../../packages/shared/dist/index.js";
|
|
3
3
|
import { localDaemonStatus, stopLocalDaemon } from "./local-daemon.js";
|
|
4
4
|
export declare function ensureDaemonRunning(relayUrl: string, cwd?: string): Promise<{
|
|
5
5
|
local: Awaited<ReturnType<typeof localDaemonStatus>>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { CliError } from "../../errors.js";
|
|
2
2
|
import { startDaemonTimeoutMs } from "./paths.js";
|
|
3
3
|
import { readDaemonConfig } from "./config.js";
|
|
4
|
-
import { daemonBinaryUpdatedAfterStart, localDaemonStatus, spawnDaemonStart, stopLocalDaemon } from "./local-daemon.js";
|
|
4
|
+
import { daemonBinaryUpdatedAfterStart, daemonConfigUpdatedAfterStart, localDaemonStatus, spawnDaemonStart, stopLocalDaemon } from "./local-daemon.js";
|
|
5
5
|
export async function ensureDaemonRunning(relayUrl, cwd = process.cwd()) {
|
|
6
6
|
const current = await localDaemonStatus();
|
|
7
7
|
if (current.running) {
|
|
8
|
-
if (await daemonBinaryUpdatedAfterStart(current)) {
|
|
8
|
+
if ((await daemonBinaryUpdatedAfterStart(current)) || (await daemonConfigUpdatedAfterStart(current))) {
|
|
9
9
|
return await restartDaemonForNewConfig(relayUrl, cwd);
|
|
10
10
|
}
|
|
11
11
|
return { local: current, started: false };
|
|
@@ -1 +1,12 @@
|
|
|
1
|
+
type DoctorCheck = {
|
|
2
|
+
name: string;
|
|
3
|
+
ok: boolean;
|
|
4
|
+
severity: "error" | "warning" | "info";
|
|
5
|
+
layer: "compatible" | "aligned";
|
|
6
|
+
message: string;
|
|
7
|
+
details?: unknown;
|
|
8
|
+
};
|
|
9
|
+
export declare function comparePackageVersions(left: string, right: string): number;
|
|
10
|
+
export declare function publishedCliVersionCheck(currentVersion: string, env?: NodeJS.ProcessEnv | Record<string, string | undefined>): Promise<DoctorCheck>;
|
|
1
11
|
export declare function topLevelDoctor(flags: Record<string, string | boolean>): Promise<void>;
|
|
12
|
+
export {};
|
|
@@ -1,49 +1,314 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import cliPackage from "../../../package.json" with { type: "json" };
|
|
3
|
+
import { ControllerClient } from "../../../../../packages/client/dist/index.js";
|
|
2
4
|
import { configDir, configPath } from "./paths.js";
|
|
3
5
|
import { redactedControllerConfig, redactedDaemonConfig } from "./config.js";
|
|
4
6
|
import { ok, wantsJson } from "./json.js";
|
|
5
|
-
import { localDaemonStatus } from "./local-daemon.js";
|
|
7
|
+
import { daemonBinaryUpdatedAfterStart, localDaemonStatus } from "./local-daemon.js";
|
|
6
8
|
import { readExistingControllerConfig, readExistingDaemonConfig, relayHealth } from "./relay-http.js";
|
|
7
9
|
import { startRelayUrl } from "./bootstrap-config.js";
|
|
10
|
+
const publicPackageName = "@cydm/happy-elves";
|
|
11
|
+
const npmLatestUrl = "https://registry.npmjs.org/@cydm%2Fhappy-elves/latest";
|
|
12
|
+
const latestVersionEnv = "HAPPY_ELVES_DOCTOR_LATEST_VERSION";
|
|
13
|
+
const latestVersionTimeoutEnv = "HAPPY_ELVES_DOCTOR_LATEST_TIMEOUT_MS";
|
|
14
|
+
function parsedPackageVersion(value) {
|
|
15
|
+
const normalized = value.trim().replace(/^v/, "").split("+", 1)[0] ?? "";
|
|
16
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(normalized);
|
|
17
|
+
if (!match)
|
|
18
|
+
return undefined;
|
|
19
|
+
return {
|
|
20
|
+
major: Number(match[1]),
|
|
21
|
+
minor: Number(match[2]),
|
|
22
|
+
patch: Number(match[3]),
|
|
23
|
+
prerelease: match[4]?.split(".") ?? [],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function comparePrerelease(left, right) {
|
|
27
|
+
if (left.length === 0 && right.length === 0)
|
|
28
|
+
return 0;
|
|
29
|
+
if (left.length === 0)
|
|
30
|
+
return 1;
|
|
31
|
+
if (right.length === 0)
|
|
32
|
+
return -1;
|
|
33
|
+
const length = Math.max(left.length, right.length);
|
|
34
|
+
for (let index = 0; index < length; index += 1) {
|
|
35
|
+
const leftPart = left[index];
|
|
36
|
+
const rightPart = right[index];
|
|
37
|
+
if (leftPart === undefined)
|
|
38
|
+
return -1;
|
|
39
|
+
if (rightPart === undefined)
|
|
40
|
+
return 1;
|
|
41
|
+
if (leftPart === rightPart)
|
|
42
|
+
continue;
|
|
43
|
+
const leftNumeric = /^\d+$/.test(leftPart);
|
|
44
|
+
const rightNumeric = /^\d+$/.test(rightPart);
|
|
45
|
+
if (leftNumeric && rightNumeric)
|
|
46
|
+
return Number(leftPart) < Number(rightPart) ? -1 : 1;
|
|
47
|
+
if (leftNumeric)
|
|
48
|
+
return -1;
|
|
49
|
+
if (rightNumeric)
|
|
50
|
+
return 1;
|
|
51
|
+
return leftPart < rightPart ? -1 : 1;
|
|
52
|
+
}
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
export function comparePackageVersions(left, right) {
|
|
56
|
+
const leftParsed = parsedPackageVersion(left);
|
|
57
|
+
const rightParsed = parsedPackageVersion(right);
|
|
58
|
+
if (!leftParsed || !rightParsed)
|
|
59
|
+
return left.localeCompare(right);
|
|
60
|
+
for (const key of ["major", "minor", "patch"]) {
|
|
61
|
+
if (leftParsed[key] < rightParsed[key])
|
|
62
|
+
return -1;
|
|
63
|
+
if (leftParsed[key] > rightParsed[key])
|
|
64
|
+
return 1;
|
|
65
|
+
}
|
|
66
|
+
return comparePrerelease(leftParsed.prerelease, rightParsed.prerelease);
|
|
67
|
+
}
|
|
68
|
+
function latestVersionTimeoutMs(env) {
|
|
69
|
+
const raw = env[latestVersionTimeoutEnv];
|
|
70
|
+
if (!raw)
|
|
71
|
+
return 2_500;
|
|
72
|
+
const parsed = Number(raw);
|
|
73
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 2_500;
|
|
74
|
+
}
|
|
75
|
+
async function readLatestPackageVersion(env) {
|
|
76
|
+
const override = env[latestVersionEnv]?.trim();
|
|
77
|
+
if (override) {
|
|
78
|
+
if (override === "skip")
|
|
79
|
+
return undefined;
|
|
80
|
+
return { version: override, source: latestVersionEnv };
|
|
81
|
+
}
|
|
82
|
+
const controller = new AbortController();
|
|
83
|
+
const timeout = setTimeout(() => controller.abort(), latestVersionTimeoutMs(env));
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(npmLatestUrl, {
|
|
86
|
+
signal: controller.signal,
|
|
87
|
+
headers: { accept: "application/json" },
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok)
|
|
90
|
+
throw new Error(`npm registry HTTP ${response.status}`);
|
|
91
|
+
const body = await response.json();
|
|
92
|
+
if (typeof body.version !== "string" || !body.version.trim())
|
|
93
|
+
throw new Error("npm registry response did not include a version");
|
|
94
|
+
return { version: body.version.trim(), source: npmLatestUrl };
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
clearTimeout(timeout);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function publishedCliVersionCheck(currentVersion, env = process.env) {
|
|
101
|
+
try {
|
|
102
|
+
const latest = await readLatestPackageVersion(env);
|
|
103
|
+
if (!latest) {
|
|
104
|
+
return {
|
|
105
|
+
name: "cli-published-version",
|
|
106
|
+
ok: true,
|
|
107
|
+
severity: "info",
|
|
108
|
+
layer: "aligned",
|
|
109
|
+
message: "latest published CLI version check skipped",
|
|
110
|
+
details: { cliVersion: currentVersion, packageName: publicPackageName, source: latestVersionEnv },
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const behind = comparePackageVersions(currentVersion, latest.version) < 0;
|
|
114
|
+
return {
|
|
115
|
+
name: "cli-published-version",
|
|
116
|
+
ok: !behind,
|
|
117
|
+
severity: behind ? "warning" : "info",
|
|
118
|
+
layer: "aligned",
|
|
119
|
+
message: behind
|
|
120
|
+
? `CLI ${currentVersion} is older than published ${publicPackageName} ${latest.version}; upgrade this installation`
|
|
121
|
+
: `CLI ${currentVersion} is aligned with published ${publicPackageName} ${latest.version}`,
|
|
122
|
+
details: { cliVersion: currentVersion, latestVersion: latest.version, packageName: publicPackageName, source: latest.source },
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
return {
|
|
127
|
+
name: "cli-published-version",
|
|
128
|
+
ok: true,
|
|
129
|
+
severity: "info",
|
|
130
|
+
layer: "aligned",
|
|
131
|
+
message: "latest published CLI version check unavailable",
|
|
132
|
+
details: { cliVersion: currentVersion, packageName: publicPackageName, error: error instanceof Error ? error.message : String(error) },
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
8
136
|
export async function topLevelDoctor(flags) {
|
|
137
|
+
const strict = flags.strict === true;
|
|
9
138
|
const checks = [];
|
|
10
139
|
const existingController = await readExistingControllerConfig().catch((error) => {
|
|
11
|
-
checks.push({
|
|
140
|
+
checks.push({
|
|
141
|
+
name: "controller-config",
|
|
142
|
+
ok: false,
|
|
143
|
+
severity: "error",
|
|
144
|
+
layer: "compatible",
|
|
145
|
+
message: error instanceof Error ? error.message : String(error),
|
|
146
|
+
});
|
|
12
147
|
return undefined;
|
|
13
148
|
});
|
|
14
149
|
if (existingController) {
|
|
15
|
-
checks.push({
|
|
150
|
+
checks.push({
|
|
151
|
+
name: "controller-config",
|
|
152
|
+
ok: true,
|
|
153
|
+
severity: "info",
|
|
154
|
+
layer: "compatible",
|
|
155
|
+
message: configPath,
|
|
156
|
+
details: redactedControllerConfig(existingController),
|
|
157
|
+
});
|
|
16
158
|
}
|
|
17
159
|
const relay = startRelayUrl(flags, existingController);
|
|
160
|
+
let relayReachable = false;
|
|
18
161
|
try {
|
|
19
162
|
const health = await relayHealth(relay.relayUrl);
|
|
163
|
+
relayReachable = health.ok;
|
|
20
164
|
checks.push({
|
|
21
165
|
name: "relay",
|
|
22
166
|
ok: health.ok,
|
|
167
|
+
severity: health.ok ? "info" : "error",
|
|
168
|
+
layer: "compatible",
|
|
23
169
|
message: health.ok ? "reachable" : `HTTP ${health.status}`,
|
|
24
170
|
details: { relayUrl: relay.relayUrl, body: health.body },
|
|
25
171
|
});
|
|
26
172
|
}
|
|
27
173
|
catch (error) {
|
|
28
|
-
checks.push({
|
|
174
|
+
checks.push({
|
|
175
|
+
name: "relay",
|
|
176
|
+
ok: false,
|
|
177
|
+
severity: "error",
|
|
178
|
+
layer: "compatible",
|
|
179
|
+
message: error instanceof Error ? error.message : String(error),
|
|
180
|
+
details: { relayUrl: relay.relayUrl },
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
let snapshot;
|
|
184
|
+
if (existingController && relayReachable) {
|
|
185
|
+
try {
|
|
186
|
+
snapshot = await new ControllerClient({ ...existingController, relayUrl: relay.relayUrl }).snapshot();
|
|
187
|
+
checks.push({
|
|
188
|
+
name: "controller-snapshot",
|
|
189
|
+
ok: true,
|
|
190
|
+
severity: "info",
|
|
191
|
+
layer: "compatible",
|
|
192
|
+
message: "controller token accepted",
|
|
193
|
+
details: { machines: snapshot.machines.length, sessions: snapshot.sessions.length },
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
checks.push({
|
|
198
|
+
name: "controller-snapshot",
|
|
199
|
+
ok: false,
|
|
200
|
+
severity: "error",
|
|
201
|
+
layer: "compatible",
|
|
202
|
+
message: error instanceof Error ? error.message : String(error),
|
|
203
|
+
details: { relayUrl: relay.relayUrl },
|
|
204
|
+
});
|
|
205
|
+
}
|
|
29
206
|
}
|
|
30
207
|
const existingDaemon = await readExistingDaemonConfig().catch((error) => {
|
|
31
|
-
checks.push({
|
|
208
|
+
checks.push({
|
|
209
|
+
name: "daemon-config",
|
|
210
|
+
ok: false,
|
|
211
|
+
severity: "error",
|
|
212
|
+
layer: "compatible",
|
|
213
|
+
message: error instanceof Error ? error.message : String(error),
|
|
214
|
+
});
|
|
32
215
|
return undefined;
|
|
33
216
|
});
|
|
34
217
|
if (existingDaemon) {
|
|
35
|
-
checks.push({
|
|
218
|
+
checks.push({
|
|
219
|
+
name: "daemon-config",
|
|
220
|
+
ok: true,
|
|
221
|
+
severity: "info",
|
|
222
|
+
layer: "compatible",
|
|
223
|
+
message: path.join(configDir, "daemon.json"),
|
|
224
|
+
details: redactedDaemonConfig(existingDaemon),
|
|
225
|
+
});
|
|
36
226
|
}
|
|
37
227
|
const local = await localDaemonStatus();
|
|
38
|
-
checks.push({
|
|
228
|
+
checks.push({
|
|
229
|
+
name: "daemon-process",
|
|
230
|
+
ok: local.running,
|
|
231
|
+
severity: local.running ? "info" : "error",
|
|
232
|
+
layer: "compatible",
|
|
233
|
+
message: local.running ? "running" : "not running",
|
|
234
|
+
details: local,
|
|
235
|
+
});
|
|
236
|
+
const binaryStale = await daemonBinaryUpdatedAfterStart(local);
|
|
237
|
+
checks.push({
|
|
238
|
+
name: "daemon-binary-alignment",
|
|
239
|
+
ok: !binaryStale,
|
|
240
|
+
severity: binaryStale ? "warning" : "info",
|
|
241
|
+
layer: "aligned",
|
|
242
|
+
message: binaryStale ? "daemon binary changed after daemon start; restart daemon to align" : "daemon binary is not newer than running daemon",
|
|
243
|
+
});
|
|
244
|
+
checks.push(await publishedCliVersionCheck(cliPackage.version));
|
|
245
|
+
if (existingDaemon && snapshot) {
|
|
246
|
+
const daemonMachine = snapshot.machines.find((machine) => machine.id === existingDaemon.machineId);
|
|
247
|
+
checks.push({
|
|
248
|
+
name: "daemon-projection",
|
|
249
|
+
ok: daemonMachine?.online === true,
|
|
250
|
+
severity: daemonMachine?.online === true ? "info" : "error",
|
|
251
|
+
layer: "compatible",
|
|
252
|
+
message: !daemonMachine
|
|
253
|
+
? "daemon machine is not visible to this controller; daemon may be paired to a different account"
|
|
254
|
+
: daemonMachine.online
|
|
255
|
+
? "daemon machine is online in the controller account"
|
|
256
|
+
: "daemon machine exists in the controller account but is offline",
|
|
257
|
+
details: {
|
|
258
|
+
machineId: existingDaemon.machineId,
|
|
259
|
+
controllerMachineCount: snapshot.machines.length,
|
|
260
|
+
...(daemonMachine ? { online: daemonMachine.online, lastSeen: daemonMachine.lastSeen } : {}),
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
const daemonVersion = daemonMachine?.capabilities.daemonVersion;
|
|
264
|
+
const aligned = !daemonVersion || daemonVersion === cliPackage.version;
|
|
265
|
+
checks.push({
|
|
266
|
+
name: "cli-daemon-version-alignment",
|
|
267
|
+
ok: aligned,
|
|
268
|
+
severity: aligned ? "info" : "warning",
|
|
269
|
+
layer: "aligned",
|
|
270
|
+
message: aligned
|
|
271
|
+
? "CLI and daemon package versions are aligned or daemon version is unavailable"
|
|
272
|
+
: `CLI ${cliPackage.version} differs from daemon ${daemonVersion}`,
|
|
273
|
+
details: { cliVersion: cliPackage.version, daemonVersion, machineId: existingDaemon.machineId },
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
const compatible = checks.filter((check) => check.layer === "compatible" && check.severity === "error").every((check) => check.ok);
|
|
277
|
+
const aligned = checks.filter((check) => check.layer === "aligned" && check.severity === "warning").every((check) => check.ok);
|
|
278
|
+
const warnings = checks.filter((check) => !check.ok && check.severity === "warning").map((check) => ({
|
|
279
|
+
name: check.name,
|
|
280
|
+
message: check.message,
|
|
281
|
+
details: check.details,
|
|
282
|
+
}));
|
|
283
|
+
const healthy = compatible && (strict ? aligned : true);
|
|
39
284
|
if (wantsJson(flags)) {
|
|
40
|
-
|
|
285
|
+
if (!healthy)
|
|
286
|
+
process.exitCode = 1;
|
|
287
|
+
ok("doctor", { ok: healthy, compatible, aligned, strict, warnings, checks }, {}, healthy);
|
|
41
288
|
return;
|
|
42
289
|
}
|
|
43
|
-
|
|
44
|
-
console.log(`
|
|
290
|
+
console.log(`Happy Elves doctor: ${healthy ? "ok" : "issues found"}`);
|
|
291
|
+
console.log(`compatible: ${compatible ? "yes" : "no"}`);
|
|
292
|
+
console.log(`aligned: ${aligned ? "yes" : "no"}${strict ? " (strict)" : ""}`);
|
|
293
|
+
const failures = checks.filter((check) => !check.ok && check.severity === "error");
|
|
294
|
+
if (failures.length > 0)
|
|
295
|
+
console.log("Failures:");
|
|
296
|
+
for (const check of failures) {
|
|
297
|
+
console.log(`fail ${check.name}: ${check.message}`);
|
|
298
|
+
}
|
|
299
|
+
const warningChecks = checks.filter((check) => !check.ok && check.severity === "warning");
|
|
300
|
+
if (warningChecks.length > 0)
|
|
301
|
+
console.log("Warnings:");
|
|
302
|
+
for (const check of warningChecks) {
|
|
303
|
+
console.log(`warn ${check.name}: ${check.message}`);
|
|
304
|
+
}
|
|
305
|
+
if (failures.length === 0 && warningChecks.length === 0)
|
|
306
|
+
console.log("Checks:");
|
|
45
307
|
for (const check of checks) {
|
|
46
|
-
|
|
308
|
+
if (check.ok)
|
|
309
|
+
console.log(`ok ${check.name}: ${check.message}`);
|
|
47
310
|
}
|
|
311
|
+
if (!healthy)
|
|
312
|
+
process.exitCode = 1;
|
|
48
313
|
}
|
|
49
314
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type GatewayChannelType = "fake" | "lark";
|
|
2
|
+
export type GatewayChannelConfig = {
|
|
3
|
+
id: string;
|
|
4
|
+
type: GatewayChannelType;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
targetMachineId: string;
|
|
7
|
+
targetCwd: string;
|
|
8
|
+
defaultAgent: string;
|
|
9
|
+
defaultModel?: string;
|
|
10
|
+
localToken?: string;
|
|
11
|
+
localSecret?: string;
|
|
12
|
+
lastError?: string;
|
|
13
|
+
lastDeliveredMessage?: {
|
|
14
|
+
externalConversationId: string;
|
|
15
|
+
externalMessageId: string;
|
|
16
|
+
requestId: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
turnId: string;
|
|
19
|
+
deliveredAt: string;
|
|
20
|
+
};
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
};
|
|
24
|
+
export type GatewayConversationMapping = {
|
|
25
|
+
channelId: string;
|
|
26
|
+
externalConversationId: string;
|
|
27
|
+
sessionId: string;
|
|
28
|
+
createRequestId: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
};
|
|
32
|
+
export type GatewayStore = {
|
|
33
|
+
version: 1;
|
|
34
|
+
channels: GatewayChannelConfig[];
|
|
35
|
+
mappings: GatewayConversationMapping[];
|
|
36
|
+
};
|
|
37
|
+
export declare function readGatewayStore(): Promise<GatewayStore>;
|
|
38
|
+
export declare function updateGatewayStore(update: (store: GatewayStore) => GatewayStore | Promise<GatewayStore>): Promise<GatewayStore>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { configDir, gatewayStorePath } from "./paths.js";
|
|
3
|
+
function emptyGatewayStore() {
|
|
4
|
+
return { version: 1, channels: [], mappings: [] };
|
|
5
|
+
}
|
|
6
|
+
export async function readGatewayStore() {
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(await fs.readFile(gatewayStorePath, "utf8"));
|
|
9
|
+
if (parsed.version !== 1 || !Array.isArray(parsed.channels) || !Array.isArray(parsed.mappings)) {
|
|
10
|
+
return emptyGatewayStore();
|
|
11
|
+
}
|
|
12
|
+
return { version: 1, channels: parsed.channels, mappings: parsed.mappings };
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error.code === "ENOENT")
|
|
16
|
+
return emptyGatewayStore();
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function writeGatewayStore(store) {
|
|
21
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
22
|
+
const tmpPath = `${gatewayStorePath}.${process.pid}.${Date.now()}.tmp`;
|
|
23
|
+
await fs.writeFile(tmpPath, JSON.stringify(store, null, 2) + "\n", { mode: 0o600 });
|
|
24
|
+
await fs.rename(tmpPath, gatewayStorePath);
|
|
25
|
+
await fs.chmod(gatewayStorePath, 0o600);
|
|
26
|
+
}
|
|
27
|
+
export async function updateGatewayStore(update) {
|
|
28
|
+
const current = await readGatewayStore();
|
|
29
|
+
const next = await update(current);
|
|
30
|
+
await writeGatewayStore(next);
|
|
31
|
+
return next;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=gateway-store.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ControllerClient, type ScopedTokenScope } from "
|
|
2
|
-
export { generateAccountSecret, randomId } from "
|
|
1
|
+
export { ControllerClient, type ScopedTokenScope } from "../../../../../packages/client/dist/index.js";
|
|
2
|
+
export { generateAccountSecret, randomId } from "../../../../../packages/shared/dist/index.js";
|
|
3
3
|
export { CliError } from "../../errors.js";
|
|
4
4
|
export * from "./args.js";
|
|
5
5
|
export * from "./audit.js";
|
|
@@ -10,10 +10,12 @@ export * from "./bootstrap-output.js";
|
|
|
10
10
|
export * from "./config.js";
|
|
11
11
|
export * from "./doctor.js";
|
|
12
12
|
export * from "./exit.js";
|
|
13
|
+
export * from "./gateway-store.js";
|
|
13
14
|
export * from "./json.js";
|
|
14
15
|
export * from "./local-daemon.js";
|
|
15
16
|
export * from "./loop-store.js";
|
|
16
17
|
export * from "./paths.js";
|
|
18
|
+
export * from "./relay-db-audit.js";
|
|
17
19
|
export * from "./relay-http.js";
|
|
18
20
|
export * from "./scope.js";
|
|
19
21
|
export * from "./session-output.js";
|
|
@@ -10,10 +10,12 @@ export * from "./bootstrap-output.js";
|
|
|
10
10
|
export * from "./config.js";
|
|
11
11
|
export * from "./doctor.js";
|
|
12
12
|
export * from "./exit.js";
|
|
13
|
+
export * from "./gateway-store.js";
|
|
13
14
|
export * from "./json.js";
|
|
14
15
|
export * from "./local-daemon.js";
|
|
15
16
|
export * from "./loop-store.js";
|
|
16
17
|
export * from "./paths.js";
|
|
18
|
+
export * from "./relay-db-audit.js";
|
|
17
19
|
export * from "./relay-http.js";
|
|
18
20
|
export * from "./scope.js";
|
|
19
21
|
export * from "./session-output.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { JsonEnvelope } from "
|
|
2
|
-
export declare function ok<T>(type: string, data: T, meta?: JsonEnvelope["meta"]): void;
|
|
1
|
+
import type { JsonEnvelope } from "../../../../../packages/shared/dist/index.js";
|
|
2
|
+
export declare function ok<T>(type: string, data: T, meta?: JsonEnvelope["meta"], success?: boolean): void;
|
|
3
3
|
export declare function writeError(code: string, message: string, meta?: JsonEnvelope["meta"], capability?: string): void;
|
|
4
4
|
export declare function wantsJson(flags: Record<string, string | boolean>): boolean;
|
|
5
5
|
export declare function wantsVerbose(flags: Record<string, string | boolean>): boolean;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
export function ok(type, data, meta = {}) {
|
|
2
|
-
|
|
1
|
+
export function ok(type, data, meta = {}, success = true) {
|
|
2
|
+
const envelope = success
|
|
3
|
+
? { ok: true, type, data, meta }
|
|
4
|
+
: { ok: false, type, data, meta };
|
|
5
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
3
6
|
}
|
|
4
7
|
export function writeError(code, message, meta = {}, capability) {
|
|
5
8
|
console.error(JSON.stringify({
|
|
@@ -4,6 +4,7 @@ export declare function localDaemonStatus(): Promise<{
|
|
|
4
4
|
running: boolean;
|
|
5
5
|
}>;
|
|
6
6
|
export declare function daemonBinaryUpdatedAfterStart(status: Awaited<ReturnType<typeof localDaemonStatus>>): Promise<boolean>;
|
|
7
|
+
export declare function daemonConfigUpdatedAfterStart(status: Awaited<ReturnType<typeof localDaemonStatus>>): Promise<boolean>;
|
|
7
8
|
export declare function spawnDaemonStart(args: string[], cwd?: string): number;
|
|
8
9
|
export declare function stopLocalDaemon(timeoutMs?: number): Promise<{
|
|
9
10
|
pidPath: string;
|
|
@@ -102,6 +102,20 @@ export async function daemonBinaryUpdatedAfterStart(status) {
|
|
|
102
102
|
return false;
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
export async function daemonConfigUpdatedAfterStart(status) {
|
|
106
|
+
if (!status.running || !status.pid)
|
|
107
|
+
return false;
|
|
108
|
+
const startedAt = readProcessStartedAtMs(status.pid);
|
|
109
|
+
if (!startedAt)
|
|
110
|
+
return false;
|
|
111
|
+
try {
|
|
112
|
+
const config = await fs.stat(path.join(configDir, "daemon.json"));
|
|
113
|
+
return config.mtimeMs > startedAt + 1000;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
105
119
|
export function spawnDaemonStart(args, cwd = process.cwd()) {
|
|
106
120
|
const child = spawn(process.execPath, [daemonCliPath(), "start", ...args], {
|
|
107
121
|
cwd,
|
|
@@ -7,3 +7,5 @@ export declare const startDaemonTimeoutMs = 10000;
|
|
|
7
7
|
export declare const daemonPidPath: string;
|
|
8
8
|
export declare const loopStorePath: string;
|
|
9
9
|
export declare const loopStoreLockPath: string;
|
|
10
|
+
export declare const gatewayStorePath: string;
|
|
11
|
+
export declare const releaseProfilesPath: string;
|
|
@@ -11,4 +11,6 @@ export const startDaemonTimeoutMs = 10_000;
|
|
|
11
11
|
export const daemonPidPath = path.join(configDir, "daemon.pid");
|
|
12
12
|
export const loopStorePath = path.join(configDir, "loops.json");
|
|
13
13
|
export const loopStoreLockPath = path.join(configDir, "loops.json.lock");
|
|
14
|
+
export const gatewayStorePath = path.join(configDir, "gateway.json");
|
|
15
|
+
export const releaseProfilesPath = path.join(configDir, "release-profiles.json");
|
|
14
16
|
//# sourceMappingURL=paths.js.map
|