@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
|
@@ -1,20 +1,47 @@
|
|
|
1
|
-
import { decryptJson, encryptJson, normalizeSessionName, parseServerMessage, randomId, } from "../../shared/dist/index.js";
|
|
2
|
-
import { addControllerDevice, claimControllerInvite, createControllerInvite, createPairingCode, createScopedToken, listDevices, listScopedTokens, revokeDevice, revokeScopedToken, tokenSelf, } from "./account.js";
|
|
1
|
+
import { decryptJson, encryptJson, normalizeSessionTags, sessionTagKeys, sessionTagsMatch, normalizeSessionName, parseServerMessage, randomId, } from "../../shared/dist/index.js";
|
|
2
|
+
import { addControllerDevice, claimControllerInvite, createControllerInvite, createPairingCode, createScopedToken, deleteMemory as deleteMemoryRecord, listDevices, listEncryptedMemories, listMemorySettings, renameDevice, markSessionRecent, pinWorkspaceCwd, listScopedTokens, revokeDevice, revokeScopedToken, saveEncryptedMemory, setSessionStar, setMemorySettings, setWorkspaceProjectPreference, tokenSelf, unpinWorkspaceCwd, workspaceSyncState, } from "./account.js";
|
|
3
3
|
import { ControllerClientError, ControllerCommandError } from "./errors.js";
|
|
4
|
-
import { authenticatedJson, normalizeRelayUrl, readRelayJson, relayHttpError } from "./http.js";
|
|
5
|
-
import { parseSessionEventsResponse, } from "./parsers.js";
|
|
6
|
-
import { sendAndWaitForDirectoryListing, sendAndWaitForFilePreview, sendAndWaitForHistoricalSessions, sendAndWaitForMachineDevExecResult, sendAndWaitForMachineDiagnostics, sendCommand, subscribe, } from "./transport.js";
|
|
4
|
+
import { authenticatedJson, authenticatedJsonRaw, normalizeRelayUrl, readRelayJson, relayHttpError } from "./http.js";
|
|
5
|
+
import { parseRepairSessionHeadResult, parseSessionEventsResponse, } from "./parsers.js";
|
|
6
|
+
import { sendAndWaitForDirectoryListing, sendAndWaitForFilePreview, sendAndWaitForGatewayResult, sendAndWaitForHistoricalSessions, sendAndWaitForMachineDevExecResult, sendAndWaitForMachineDiagnostics, sendAndWaitForMemoryResult, sendAndWaitForScheduleResult, sendAndWaitForTurnReconcileResult, sendCommand, subscribe, } from "./transport.js";
|
|
7
7
|
import { DEFAULT_SESSION_CREATE_WAIT_MS, } from "./types.js";
|
|
8
8
|
import { isWaitCondition, matchesWaitCondition, parseEventCursor, parseEventLimit, parsePositiveDuration, requireNonEmpty, sleep, } from "./validation.js";
|
|
9
|
-
const DEFAULT_RUN_SETTLEMENT_WAIT_MS = 15_000;
|
|
10
9
|
const DEFAULT_BLOCKING_RUN_WAIT_MS = 30 * 60 * 1000;
|
|
10
|
+
const RESUME_COMMAND_TIMEOUT_MS = 60_000;
|
|
11
|
+
function addRuntimeSessionId(ids, value) {
|
|
12
|
+
if (typeof value === "string" && value.trim())
|
|
13
|
+
ids.add(value.trim());
|
|
14
|
+
}
|
|
15
|
+
function runtimeSessionIdsForMetadata(metadata) {
|
|
16
|
+
const ids = new Set();
|
|
17
|
+
addRuntimeSessionId(ids, metadata.importedFromRuntimeSessionId);
|
|
18
|
+
const runtime = metadata.runtime;
|
|
19
|
+
if (runtime && typeof runtime === "object" && !Array.isArray(runtime)) {
|
|
20
|
+
const record = runtime;
|
|
21
|
+
addRuntimeSessionId(ids, record.backendSessionId);
|
|
22
|
+
addRuntimeSessionId(ids, record.agentSessionId);
|
|
23
|
+
addRuntimeSessionId(ids, record.acpxRecordId);
|
|
24
|
+
const externalHandle = record.externalHandle;
|
|
25
|
+
if (externalHandle && typeof externalHandle === "object" && !Array.isArray(externalHandle)) {
|
|
26
|
+
addRuntimeSessionId(ids, externalHandle.sessionId);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return ids;
|
|
30
|
+
}
|
|
31
|
+
function isCanonicalRuntimeSessionCandidate(left, right) {
|
|
32
|
+
return left.createdAt < right.createdAt || (left.createdAt === right.createdAt && left.id < right.id);
|
|
33
|
+
}
|
|
11
34
|
function runSettlementTimeoutMs(options) {
|
|
12
35
|
if (options.waitTimeoutMs !== undefined)
|
|
13
36
|
return options.waitTimeoutMs;
|
|
14
|
-
if (options.runtimeTimeoutMs !== undefined)
|
|
15
|
-
return options.runtimeTimeoutMs + DEFAULT_RUN_SETTLEMENT_WAIT_MS;
|
|
16
37
|
return DEFAULT_BLOCKING_RUN_WAIT_MS;
|
|
17
38
|
}
|
|
39
|
+
function memoryScore(memory, query, terms) {
|
|
40
|
+
const haystack = `${memory.title ?? ""}\n${memory.text}\n${memory.tags?.join(" ") ?? ""}`.toLowerCase();
|
|
41
|
+
const exact = haystack.includes(query.toLowerCase()) ? 10 : 0;
|
|
42
|
+
const termScore = terms.reduce((score, term) => score + (haystack.includes(term) ? 1 : 0), 0);
|
|
43
|
+
return exact + termScore;
|
|
44
|
+
}
|
|
18
45
|
export class ControllerClient {
|
|
19
46
|
config;
|
|
20
47
|
constructor(config) {
|
|
@@ -65,6 +92,76 @@ export class ControllerClient {
|
|
|
65
92
|
async revokeDevice(deviceId) {
|
|
66
93
|
return await revokeDevice(this.config, deviceId);
|
|
67
94
|
}
|
|
95
|
+
async renameDevice(deviceId, name) {
|
|
96
|
+
return await renameDevice(this.config, deviceId, name);
|
|
97
|
+
}
|
|
98
|
+
async workspaceSync() {
|
|
99
|
+
return await workspaceSyncState(this.config);
|
|
100
|
+
}
|
|
101
|
+
async starSession(sessionId) {
|
|
102
|
+
return await setSessionStar(this.config, sessionId, true);
|
|
103
|
+
}
|
|
104
|
+
async unstarSession(sessionId) {
|
|
105
|
+
return await setSessionStar(this.config, sessionId, false);
|
|
106
|
+
}
|
|
107
|
+
async markSessionRecent(sessionId) {
|
|
108
|
+
return await markSessionRecent(this.config, sessionId);
|
|
109
|
+
}
|
|
110
|
+
async pinWorkspaceCwd(input) {
|
|
111
|
+
return await pinWorkspaceCwd(this.config, input);
|
|
112
|
+
}
|
|
113
|
+
async unpinWorkspaceCwd(input) {
|
|
114
|
+
return await unpinWorkspaceCwd(this.config, input);
|
|
115
|
+
}
|
|
116
|
+
async setWorkspaceProjectPreference(input) {
|
|
117
|
+
return await setWorkspaceProjectPreference(this.config, input);
|
|
118
|
+
}
|
|
119
|
+
async saveMemory(input) {
|
|
120
|
+
const id = input.id ?? randomId("mem");
|
|
121
|
+
const projectKey = requireNonEmpty(input.projectKey, "projectKey");
|
|
122
|
+
const text = requireNonEmpty(input.text, "text");
|
|
123
|
+
const payload = {
|
|
124
|
+
text,
|
|
125
|
+
...(input.title ? { title: input.title } : {}),
|
|
126
|
+
...(input.tags ? { tags: input.tags } : {}),
|
|
127
|
+
};
|
|
128
|
+
const saved = await saveEncryptedMemory(this.config, {
|
|
129
|
+
id,
|
|
130
|
+
projectKey,
|
|
131
|
+
encryptedMemory: await encryptJson(this.config.accountSecret, `memory:${projectKey}:${id}`, payload),
|
|
132
|
+
});
|
|
133
|
+
return await this.decodeMemory(saved);
|
|
134
|
+
}
|
|
135
|
+
async listMemories(projectKey) {
|
|
136
|
+
const { memories } = await listEncryptedMemories(this.config, projectKey);
|
|
137
|
+
const decoded = [];
|
|
138
|
+
for (const memory of memories) {
|
|
139
|
+
decoded.push(await this.decodeMemory(memory));
|
|
140
|
+
}
|
|
141
|
+
return decoded;
|
|
142
|
+
}
|
|
143
|
+
async searchMemories(input) {
|
|
144
|
+
const projectKey = requireNonEmpty(input.projectKey, "projectKey");
|
|
145
|
+
const query = requireNonEmpty(input.query, "query");
|
|
146
|
+
const settings = await this.memorySettings(projectKey);
|
|
147
|
+
if (settings[0]?.disabled === true)
|
|
148
|
+
return [];
|
|
149
|
+
const terms = query.toLowerCase().split(/\W+/).filter((term) => term.length >= 2);
|
|
150
|
+
const scored = (await this.listMemories(projectKey))
|
|
151
|
+
.map((memory) => ({ memory, score: memoryScore(memory, query, terms) }))
|
|
152
|
+
.filter((item) => item.score > 0)
|
|
153
|
+
.sort((left, right) => right.score - left.score || right.memory.updatedAt - left.memory.updatedAt);
|
|
154
|
+
return scored.slice(0, Math.max(1, input.limit ?? 5)).map((item) => item.memory);
|
|
155
|
+
}
|
|
156
|
+
async deleteMemory(id) {
|
|
157
|
+
return await deleteMemoryRecord(this.config, id);
|
|
158
|
+
}
|
|
159
|
+
async memorySettings(projectKey) {
|
|
160
|
+
return (await listMemorySettings(this.config, projectKey)).settings;
|
|
161
|
+
}
|
|
162
|
+
async setMemorySettings(input) {
|
|
163
|
+
return await setMemorySettings(this.config, input);
|
|
164
|
+
}
|
|
68
165
|
async tokenSelf() {
|
|
69
166
|
return await tokenSelf(this.config);
|
|
70
167
|
}
|
|
@@ -90,6 +187,8 @@ export class ControllerClient {
|
|
|
90
187
|
continue;
|
|
91
188
|
if (filter.name && (metadata.name ?? session.name) !== filter.name)
|
|
92
189
|
continue;
|
|
190
|
+
if (filter.tags && !sessionTagsMatch(metadata.tags, filter.tags))
|
|
191
|
+
continue;
|
|
93
192
|
result.push(session);
|
|
94
193
|
}
|
|
95
194
|
return result;
|
|
@@ -108,7 +207,22 @@ export class ControllerClient {
|
|
|
108
207
|
const agent = requireNonEmpty(input.agent, "agent");
|
|
109
208
|
const name = requireNonEmpty(input.name, "name");
|
|
110
209
|
const requestedRuntimeName = input.runtimeName === undefined ? undefined : normalizeSessionName(input.runtimeName);
|
|
210
|
+
const model = normalizeOptionalString(input.model);
|
|
211
|
+
const tags = normalizeSessionTags(input.tags);
|
|
111
212
|
const requestId = randomId("req");
|
|
213
|
+
const metadata = {
|
|
214
|
+
agent,
|
|
215
|
+
cwd: input.cwd,
|
|
216
|
+
name,
|
|
217
|
+
...(model ? { model } : {}),
|
|
218
|
+
...(requestedRuntimeName ? { requestedRuntimeName } : {}),
|
|
219
|
+
createdFrom: input.createdFrom ?? "cli",
|
|
220
|
+
createRequestId: requestId,
|
|
221
|
+
permissionMode: input.permissionMode,
|
|
222
|
+
...(tags.length > 0 ? { tags, tagKeys: sessionTagKeys(tags) } : {}),
|
|
223
|
+
...(input.hiddenFromWorkspace ? { hiddenFromWorkspace: true } : {}),
|
|
224
|
+
...(input.source ? { source: input.source } : {}),
|
|
225
|
+
};
|
|
112
226
|
const result = await this.sendCommand({
|
|
113
227
|
type: "controller:createSession",
|
|
114
228
|
requestId,
|
|
@@ -116,23 +230,71 @@ export class ControllerClient {
|
|
|
116
230
|
agent,
|
|
117
231
|
cwd: input.cwd,
|
|
118
232
|
name,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
cwd: input.cwd,
|
|
122
|
-
name,
|
|
123
|
-
...(requestedRuntimeName ? { requestedRuntimeName } : {}),
|
|
124
|
-
createdFrom: input.createdFrom ?? "cli",
|
|
125
|
-
createRequestId: requestId,
|
|
126
|
-
permissionMode: input.permissionMode,
|
|
127
|
-
}),
|
|
233
|
+
...(model ? { model } : {}),
|
|
234
|
+
encryptedMetadata: await encryptJson(this.config.accountSecret, `session:create:${requestId}`, metadata),
|
|
128
235
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
236
|
+
return { ...result, requestId };
|
|
237
|
+
}
|
|
238
|
+
async updateSessionMetadata(sessionId, metadata) {
|
|
239
|
+
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
240
|
+
const encryptedMetadata = await encryptJson(this.config.accountSecret, `session:${checkedSessionId}:metadata:${Date.now()}`, metadata);
|
|
241
|
+
const response = await authenticatedJsonRaw(this.config, `/api/sessions/${encodeURIComponent(checkedSessionId)}/metadata`, {
|
|
242
|
+
method: "POST",
|
|
243
|
+
headers: { "content-type": "application/json" },
|
|
244
|
+
body: JSON.stringify({ encryptedMetadata }),
|
|
245
|
+
});
|
|
246
|
+
if (!response || typeof response !== "object" || !("session" in response)) {
|
|
247
|
+
throw new ControllerClientError("Session metadata response is invalid", "RELAY_RESPONSE_INVALID");
|
|
248
|
+
}
|
|
249
|
+
const session = response.session;
|
|
250
|
+
const message = parseServerMessage({ type: "server:session", session });
|
|
251
|
+
if (message.type !== "server:session") {
|
|
252
|
+
throw new ControllerClientError("Session metadata response is invalid", "RELAY_RESPONSE_INVALID");
|
|
253
|
+
}
|
|
254
|
+
return message.session;
|
|
255
|
+
}
|
|
256
|
+
async setSessionTags(sessionId, tags) {
|
|
257
|
+
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
258
|
+
const session = await this.getSession(checkedSessionId);
|
|
259
|
+
if (!session)
|
|
260
|
+
throw new ControllerClientError(`Session not found: ${checkedSessionId}`, "SESSION_NOT_FOUND");
|
|
261
|
+
const normalized = normalizeSessionTags(tags);
|
|
262
|
+
const metadata = await this.decodeSessionMetadata(session);
|
|
263
|
+
const nextMetadata = {
|
|
264
|
+
...metadata,
|
|
265
|
+
tags: normalized,
|
|
266
|
+
tagKeys: sessionTagKeys(normalized),
|
|
267
|
+
};
|
|
268
|
+
if (normalized.length === 0) {
|
|
269
|
+
delete nextMetadata.tags;
|
|
270
|
+
delete nextMetadata.tagKeys;
|
|
271
|
+
}
|
|
272
|
+
const updated = await this.updateSessionMetadata(checkedSessionId, nextMetadata);
|
|
273
|
+
return { session: updated, tags: normalized };
|
|
274
|
+
}
|
|
275
|
+
async findLoadedRuntimeSession(input) {
|
|
276
|
+
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
277
|
+
const agent = requireNonEmpty(input.agent, "agent");
|
|
278
|
+
const runtimeSessionId = requireNonEmpty(input.runtimeSessionId, "runtimeSessionId");
|
|
279
|
+
let selected;
|
|
280
|
+
let closed;
|
|
281
|
+
for (const session of (await this.snapshot()).sessions) {
|
|
282
|
+
if (session.machineId !== machineId || session.agent !== agent)
|
|
283
|
+
continue;
|
|
284
|
+
const metadata = await this.decodeSessionMetadata(session);
|
|
285
|
+
if (!runtimeSessionIdsForMetadata(metadata).has(runtimeSessionId))
|
|
286
|
+
continue;
|
|
287
|
+
if (session.status === "closed") {
|
|
288
|
+
closed ??= session;
|
|
289
|
+
continue;
|
|
133
290
|
}
|
|
291
|
+
if (!selected || isCanonicalRuntimeSessionCandidate(session, selected))
|
|
292
|
+
selected = session;
|
|
134
293
|
}
|
|
135
|
-
|
|
294
|
+
if (!selected && closed) {
|
|
295
|
+
throw new ControllerClientError("This runtime session is archived in Happy Elves. Restore the archived session before importing it again.", "RUNTIME_SESSION_ARCHIVED", { sessionId: closed.id });
|
|
296
|
+
}
|
|
297
|
+
return selected;
|
|
136
298
|
}
|
|
137
299
|
async collect(sessionId, input = {}) {
|
|
138
300
|
return (await this.collectPage(sessionId, input)).events;
|
|
@@ -161,6 +323,29 @@ export class ControllerClient {
|
|
|
161
323
|
...(page.oldestEventId === undefined ? {} : { oldestEventId: page.oldestEventId }),
|
|
162
324
|
};
|
|
163
325
|
}
|
|
326
|
+
async repairSessionHead(sessionId, input) {
|
|
327
|
+
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
328
|
+
const currentHead = requireNonEmpty(input.currentHead, "currentHead");
|
|
329
|
+
const lastTurnId = requireNonEmpty(input.lastTurnId, "lastTurnId");
|
|
330
|
+
const status = input.status;
|
|
331
|
+
const turnId = requireNonEmpty(input.basis.turnId, "basis.turnId");
|
|
332
|
+
const eventMessageId = requireNonEmpty(input.basis.eventMessageId, "basis.eventMessageId");
|
|
333
|
+
return await authenticatedJson(this.config, `/api/sessions/${encodeURIComponent(checkedSessionId)}/head`, {
|
|
334
|
+
method: "POST",
|
|
335
|
+
headers: { "content-type": "application/json" },
|
|
336
|
+
body: JSON.stringify({
|
|
337
|
+
currentHead,
|
|
338
|
+
lastTurnId,
|
|
339
|
+
...(status ? { status } : {}),
|
|
340
|
+
basis: {
|
|
341
|
+
turnId,
|
|
342
|
+
eventMessageId,
|
|
343
|
+
turnSeq: input.basis.turnSeq,
|
|
344
|
+
...(input.basis.occurredAt === undefined ? {} : { occurredAt: input.basis.occurredAt }),
|
|
345
|
+
},
|
|
346
|
+
}),
|
|
347
|
+
}, parseRepairSessionHeadResult);
|
|
348
|
+
}
|
|
164
349
|
async wait(sessionId, input = {}) {
|
|
165
350
|
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
166
351
|
const until = input.until ?? "idle";
|
|
@@ -182,10 +367,15 @@ export class ControllerClient {
|
|
|
182
367
|
await sleep(intervalMs);
|
|
183
368
|
}
|
|
184
369
|
}
|
|
185
|
-
async resume(sessionId) {
|
|
370
|
+
async resume(sessionId, options = {}) {
|
|
186
371
|
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
187
372
|
const requestId = randomId("req");
|
|
188
|
-
return await this.sendCommand({
|
|
373
|
+
return await this.sendCommand({
|
|
374
|
+
type: "controller:resume",
|
|
375
|
+
requestId,
|
|
376
|
+
sessionId: checkedSessionId,
|
|
377
|
+
...(options.syncDirection ? { syncDirection: options.syncDirection } : {}),
|
|
378
|
+
}, false, RESUME_COMMAND_TIMEOUT_MS);
|
|
189
379
|
}
|
|
190
380
|
async listHistoricalSessionsPage(input) {
|
|
191
381
|
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
@@ -269,11 +459,69 @@ export class ControllerClient {
|
|
|
269
459
|
}, input.waitTimeoutMs);
|
|
270
460
|
return message.result;
|
|
271
461
|
}
|
|
462
|
+
async gateway(input) {
|
|
463
|
+
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
464
|
+
const requestId = randomId("req");
|
|
465
|
+
const channel = input.channel ? { ...input.channel } : undefined;
|
|
466
|
+
if (channel?.appSecret) {
|
|
467
|
+
channel.encryptedAppSecret = await encryptJson(this.config.accountSecret, `gateway:secret:${requestId}:${channel.id ?? channel.type}`, {
|
|
468
|
+
appSecret: channel.appSecret,
|
|
469
|
+
});
|
|
470
|
+
delete channel.appSecret;
|
|
471
|
+
}
|
|
472
|
+
const message = await sendAndWaitForGatewayResult(this.config, {
|
|
473
|
+
type: "controller:gateway",
|
|
474
|
+
requestId,
|
|
475
|
+
machineId,
|
|
476
|
+
action: input.action,
|
|
477
|
+
channelId: input.channelId,
|
|
478
|
+
channel,
|
|
479
|
+
externalConversationId: input.externalConversationId,
|
|
480
|
+
externalMessageId: input.externalMessageId,
|
|
481
|
+
text: input.text,
|
|
482
|
+
});
|
|
483
|
+
return message.result;
|
|
484
|
+
}
|
|
485
|
+
async schedule(input) {
|
|
486
|
+
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
487
|
+
const requestId = randomId("req");
|
|
488
|
+
const message = await sendAndWaitForScheduleResult(this.config, {
|
|
489
|
+
type: "controller:schedule",
|
|
490
|
+
requestId,
|
|
491
|
+
machineId,
|
|
492
|
+
action: input.action,
|
|
493
|
+
scheduleId: input.scheduleId,
|
|
494
|
+
occurrenceId: input.occurrenceId,
|
|
495
|
+
schedule: input.schedule,
|
|
496
|
+
});
|
|
497
|
+
return message.result;
|
|
498
|
+
}
|
|
499
|
+
async memory(input) {
|
|
500
|
+
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
501
|
+
const requestId = randomId("req");
|
|
502
|
+
const message = await sendAndWaitForMemoryResult(this.config, {
|
|
503
|
+
type: "controller:memory",
|
|
504
|
+
requestId,
|
|
505
|
+
machineId,
|
|
506
|
+
action: input.action,
|
|
507
|
+
projectKey: input.projectKey,
|
|
508
|
+
path: input.path,
|
|
509
|
+
query: input.query,
|
|
510
|
+
limit: input.limit,
|
|
511
|
+
mode: input.mode,
|
|
512
|
+
write: input.write,
|
|
513
|
+
promote: input.promote,
|
|
514
|
+
});
|
|
515
|
+
return message.result;
|
|
516
|
+
}
|
|
272
517
|
async importHistoricalSession(input) {
|
|
273
518
|
const machineId = requireNonEmpty(input.machineId, "machineId");
|
|
274
519
|
const agent = requireNonEmpty(input.agent, "agent");
|
|
275
520
|
const runtimeSessionId = requireNonEmpty(input.runtimeSessionId, "runtimeSessionId");
|
|
276
521
|
const name = requireNonEmpty(input.name, "name");
|
|
522
|
+
const existing = await this.findLoadedRuntimeSession({ machineId, agent, runtimeSessionId });
|
|
523
|
+
if (existing)
|
|
524
|
+
return { sessionId: existing.id, mode: "existing", events: [] };
|
|
277
525
|
const requestId = randomId("req");
|
|
278
526
|
const result = await this.sendCommand({
|
|
279
527
|
type: "controller:importHistoricalSession",
|
|
@@ -286,6 +534,7 @@ export class ControllerClient {
|
|
|
286
534
|
encryptedMetadata: await encryptJson(this.config.accountSecret, `session:import:${requestId}`, {
|
|
287
535
|
agent,
|
|
288
536
|
cwd: input.cwd,
|
|
537
|
+
importRequestId: requestId,
|
|
289
538
|
name,
|
|
290
539
|
...(input.providerName ? { providerName: input.providerName } : {}),
|
|
291
540
|
importedFromRuntimeSessionId: runtimeSessionId,
|
|
@@ -308,6 +557,7 @@ export class ControllerClient {
|
|
|
308
557
|
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
309
558
|
const from = requireNonEmpty(input.from, "from");
|
|
310
559
|
const name = requireNonEmpty(input.name, "name");
|
|
560
|
+
const tags = normalizeSessionTags(input.tags);
|
|
311
561
|
const requestId = randomId("req");
|
|
312
562
|
return await this.sendCommand({
|
|
313
563
|
type: "controller:fork",
|
|
@@ -319,6 +569,7 @@ export class ControllerClient {
|
|
|
319
569
|
sourceSessionId: checkedSessionId,
|
|
320
570
|
from,
|
|
321
571
|
name,
|
|
572
|
+
...(tags.length > 0 ? { tags, tagKeys: sessionTagKeys(tags) } : {}),
|
|
322
573
|
}),
|
|
323
574
|
});
|
|
324
575
|
}
|
|
@@ -344,19 +595,28 @@ export class ControllerClient {
|
|
|
344
595
|
const promptText = requireNonEmpty(text, "text");
|
|
345
596
|
const requestId = randomId("req");
|
|
346
597
|
const turnId = randomId("turn");
|
|
347
|
-
const wait = options.wait ??
|
|
598
|
+
const wait = options.wait ?? false;
|
|
348
599
|
const timeoutMs = wait ? options.waitTimeoutMs : options.ackTimeoutMs;
|
|
600
|
+
const model = normalizeOptionalString(options.model);
|
|
349
601
|
const result = await this.sendCommand({
|
|
350
602
|
type: "controller:prompt",
|
|
351
603
|
requestId,
|
|
352
604
|
sessionId: checkedSessionId,
|
|
353
605
|
turnId,
|
|
606
|
+
...(model ? { model } : {}),
|
|
354
607
|
encryptedPrompt: await encryptJson(this.config.accountSecret, `prompt:${checkedSessionId}:${turnId}`, {
|
|
355
608
|
type: "user_prompt",
|
|
356
609
|
text: promptText,
|
|
357
610
|
}),
|
|
358
611
|
permissionMode: options.permissionMode ?? "approve-reads",
|
|
359
|
-
|
|
612
|
+
encryptedMemoryOptions: options.memoryMode && options.memoryProjectKey
|
|
613
|
+
? await encryptJson(this.config.accountSecret, `prompt:${checkedSessionId}:${turnId}:memory`, {
|
|
614
|
+
mode: options.memoryMode,
|
|
615
|
+
projectKey: options.memoryProjectKey,
|
|
616
|
+
...(options.memoryTopN ? { topN: options.memoryTopN } : {}),
|
|
617
|
+
})
|
|
618
|
+
: undefined,
|
|
619
|
+
timeoutMs: options.inactivityTimeoutMs ?? options.runtimeTimeoutMs,
|
|
360
620
|
}, wait, timeoutMs);
|
|
361
621
|
if (wait) {
|
|
362
622
|
await this.waitForRunSettlement(checkedSessionId, turnId, runSettlementTimeoutMs(options));
|
|
@@ -364,6 +624,17 @@ export class ControllerClient {
|
|
|
364
624
|
}
|
|
365
625
|
return { ...result, requestId, turnId };
|
|
366
626
|
}
|
|
627
|
+
async reconcileTurn(sessionId, turnId) {
|
|
628
|
+
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
629
|
+
const requestId = randomId("req");
|
|
630
|
+
const response = await sendAndWaitForTurnReconcileResult(this.config, {
|
|
631
|
+
type: "controller:reconcileTurn",
|
|
632
|
+
requestId,
|
|
633
|
+
sessionId: checkedSessionId,
|
|
634
|
+
...(turnId ? { turnId: requireNonEmpty(turnId, "turnId") } : {}),
|
|
635
|
+
});
|
|
636
|
+
return { ...response.result, machineId: response.machineId, requestId: response.result.requestId ?? requestId };
|
|
637
|
+
}
|
|
367
638
|
async cancel(sessionId, input = {}) {
|
|
368
639
|
const checkedSessionId = requireNonEmpty(sessionId, "sessionId");
|
|
369
640
|
const turnId = input.turnId === undefined ? undefined : requireNonEmpty(input.turnId, "turnId");
|
|
@@ -423,6 +694,18 @@ export class ControllerClient {
|
|
|
423
694
|
return {};
|
|
424
695
|
}
|
|
425
696
|
}
|
|
697
|
+
async decodeMemory(memory) {
|
|
698
|
+
const payload = await decryptJson(this.config.accountSecret, memory.encryptedMemory);
|
|
699
|
+
return {
|
|
700
|
+
id: memory.id,
|
|
701
|
+
projectKey: memory.projectKey,
|
|
702
|
+
...(payload.title ? { title: payload.title } : {}),
|
|
703
|
+
text: typeof payload.text === "string" ? payload.text : JSON.stringify(payload),
|
|
704
|
+
...(Array.isArray(payload.tags) ? { tags: payload.tags.filter((tag) => typeof tag === "string") } : {}),
|
|
705
|
+
createdAt: memory.createdAt,
|
|
706
|
+
updatedAt: memory.updatedAt,
|
|
707
|
+
};
|
|
708
|
+
}
|
|
426
709
|
async sendCommand(command, waitForDone = false, timeoutMs) {
|
|
427
710
|
return await sendCommand({
|
|
428
711
|
config: this.config,
|
|
@@ -440,38 +723,6 @@ export class ControllerClient {
|
|
|
440
723
|
}
|
|
441
724
|
return session;
|
|
442
725
|
}
|
|
443
|
-
async recoverCreatedSessionName(sessionId, createRequestId, expectedName, observedName) {
|
|
444
|
-
try {
|
|
445
|
-
await this.renameSession(sessionId, expectedName);
|
|
446
|
-
const renamed = await this.waitForSessionName(sessionId, expectedName, 5_000);
|
|
447
|
-
if (renamed?.name === expectedName)
|
|
448
|
-
return;
|
|
449
|
-
throw new Error(`expected "${expectedName}", got "${renamed?.name ?? observedName}"`);
|
|
450
|
-
}
|
|
451
|
-
catch (error) {
|
|
452
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
453
|
-
let cleanupDetail = "";
|
|
454
|
-
try {
|
|
455
|
-
await this.close(sessionId, "runtime name was not confirmed after create");
|
|
456
|
-
cleanupDetail = " The created session was closed to avoid a half-named worker.";
|
|
457
|
-
}
|
|
458
|
-
catch (cleanupError) {
|
|
459
|
-
cleanupDetail = ` Cleanup close also failed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}.`;
|
|
460
|
-
}
|
|
461
|
-
throw new ControllerCommandError(`Session runtime name was not confirmed after create: expected "${expectedName}", got "${observedName}". Rename recovery failed: ${detail}.${cleanupDetail}`, "SESSION_RENAME_FAILED", undefined, createRequestId);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
async waitForSessionName(sessionId, expectedName, timeoutMs) {
|
|
465
|
-
const startedAt = Date.now();
|
|
466
|
-
let latest;
|
|
467
|
-
while (Date.now() - startedAt <= timeoutMs) {
|
|
468
|
-
latest = await this.getSession(sessionId);
|
|
469
|
-
if (latest?.name === expectedName)
|
|
470
|
-
return latest;
|
|
471
|
-
await sleep(150);
|
|
472
|
-
}
|
|
473
|
-
return latest;
|
|
474
|
-
}
|
|
475
726
|
async waitForRunSettlement(sessionId, turnId, timeoutMs) {
|
|
476
727
|
const startedAt = Date.now();
|
|
477
728
|
while (true) {
|
|
@@ -510,4 +761,7 @@ export class ControllerClient {
|
|
|
510
761
|
return await authenticatedJson(this.config, `/api/sessions/${encodeURIComponent(sessionId)}/events${suffix}`, { method: "GET" }, parseSessionEventsResponse);
|
|
511
762
|
}
|
|
512
763
|
}
|
|
764
|
+
function normalizeOptionalString(value) {
|
|
765
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
766
|
+
}
|
|
513
767
|
//# sourceMappingURL=client.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ControllerClient } from "./client.js";
|
|
2
2
|
export { ControllerClientError, ControllerCommandError } from "./errors.js";
|
|
3
|
-
export type { AddControllerDeviceInput, AddControllerDeviceResult, CancelInput, CollectInput, CommandResult, ControllerClientConfig, ControllerDevice, ControllerInviteClaimInput, ControllerInviteClaimResult, ControllerInviteCreateInput, ControllerInviteCreateResult, ControllerSnapshot, ControllerSubscriptionHandlers, CreateScopedTokenInput, CreateSessionInput, DecodedSessionEvent, DecodedSessionEventsPage, DeviceListResponse, DirectoryInput, DirectoryListResponse, FilePreviewInput, FilePreviewResponse, EventCursor, ForkInput, HistoricalSessionListPage, HistoricalSessionListResponse, HistoricalSessionsInput, ImportHistoricalSessionInput, MachineListResponse, MachineMetadata, PermissionMode, RunOptions, ScopedTokenInfo, ScopedTokenScope, ScopedTokenSelf, SessionFilter, SessionMetadata, WaitCondition, WaitInput, } from "./types.js";
|
|
3
|
+
export type { AddControllerDeviceInput, AddControllerDeviceResult, CancelInput, CollectInput, CommandResult, ControllerClientConfig, ControllerDevice, ControllerInviteClaimInput, ControllerInviteClaimResult, ControllerInviteCreateInput, ControllerInviteCreateResult, ControllerSnapshot, ControllerSubscriptionHandlers, CreateScopedTokenInput, CreateSessionInput, DecodedSessionEvent, DecodedSessionEventsPage, DeviceListResponse, DirectoryInput, DirectoryListResponse, FilePreviewInput, FilePreviewResponse, EventCursor, ForkInput, HistoricalSessionListPage, HistoricalSessionListResponse, HistoricalSessionsInput, ImportHistoricalSessionInput, MachineListResponse, MachineMetadata, DecodedMemoryRecord, EncryptedMemoryRecord, MemoryPayload, MemoryCommandInput, MemoryCommandResponse, MemorySaveInput, MemorySearchInput, MemorySettings, PermissionMode, RepairSessionHeadInput, RepairSessionHeadResult, RunOptions, ScopedTokenInfo, ScopedTokenScope, ScopedTokenSelf, SessionFilter, SessionMetadata, WaitCondition, WaitInput, WorkspaceCwdPin, WorkspaceCwdPinInput, WorkspaceProjectPreference, WorkspaceProjectPreferenceInput, WorkspaceRecentSession, WorkspaceSessionStar, WorkspaceSessionStarResult, WorkspaceSyncState, } from "./types.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type PairingStartResponse } from "
|
|
2
|
-
import type { AddControllerDeviceResult, ControllerInviteClaimResult, ControllerInviteCreateResult, DeviceListResponse, ScopedTokenInfo, ScopedTokenSelf, SessionEventsResponse } from "./types.js";
|
|
1
|
+
import { type PairingStartResponse } from "../../shared/dist/index.js";
|
|
2
|
+
import type { AddControllerDeviceResult, ControllerInviteClaimResult, ControllerInviteCreateResult, DeviceListResponse, EncryptedMemoryRecord, MemorySettings, RenameDeviceResult, ScopedTokenInfo, ScopedTokenSelf, RepairSessionHeadResult, SessionEventsResponse, WorkspaceCwdPin, WorkspaceProjectPreference, WorkspaceRecentSession, WorkspaceSessionStarResult, WorkspaceSyncState } from "./types.js";
|
|
3
3
|
export declare function parsePairingStartResponse(value: unknown): PairingStartResponse;
|
|
4
4
|
export declare function parseDevicesResponse(value: unknown): DeviceListResponse;
|
|
5
5
|
export declare function parseAddControllerDeviceResult(value: unknown): AddControllerDeviceResult;
|
|
@@ -9,6 +9,31 @@ export declare function parseRevokeDeviceResult(value: unknown): {
|
|
|
9
9
|
deviceId: string;
|
|
10
10
|
revokedAt: number;
|
|
11
11
|
};
|
|
12
|
+
export declare function parseRenameDeviceResult(value: unknown): RenameDeviceResult;
|
|
13
|
+
export declare function parseWorkspaceSyncState(value: unknown): WorkspaceSyncState;
|
|
14
|
+
export declare function parseWorkspaceSessionStarResult(value: unknown): WorkspaceSessionStarResult;
|
|
15
|
+
export declare function parseWorkspaceRecentSessionResult(value: unknown): WorkspaceRecentSession;
|
|
16
|
+
export declare function parseWorkspaceCwdPinResult(value: unknown): WorkspaceCwdPin;
|
|
17
|
+
export declare function parseWorkspaceCwdUnpinResult(value: unknown): {
|
|
18
|
+
machineId: string;
|
|
19
|
+
cwd: string;
|
|
20
|
+
removed: boolean;
|
|
21
|
+
removedAt: number;
|
|
22
|
+
};
|
|
23
|
+
export declare function parseWorkspaceProjectPreferenceResult(value: unknown): WorkspaceProjectPreference;
|
|
24
|
+
export declare function parseMemoryListResponse(value: unknown): {
|
|
25
|
+
memories: EncryptedMemoryRecord[];
|
|
26
|
+
};
|
|
27
|
+
export declare function parseMemorySaveResult(value: unknown): EncryptedMemoryRecord;
|
|
28
|
+
export declare function parseMemoryDeleteResult(value: unknown): {
|
|
29
|
+
id: string;
|
|
30
|
+
deleted: boolean;
|
|
31
|
+
deletedAt: number;
|
|
32
|
+
};
|
|
33
|
+
export declare function parseMemorySettingsList(value: unknown): {
|
|
34
|
+
settings: MemorySettings[];
|
|
35
|
+
};
|
|
36
|
+
export declare function parseMemorySettingsResult(value: unknown): MemorySettings;
|
|
12
37
|
export declare function parseScopedTokenSelf(value: unknown): ScopedTokenSelf;
|
|
13
38
|
export declare function parseScopedTokenCreate(value: unknown): {
|
|
14
39
|
token: string;
|
|
@@ -22,4 +47,5 @@ export declare function parseScopedTokenRevoke(value: unknown): {
|
|
|
22
47
|
revokedAt: number;
|
|
23
48
|
};
|
|
24
49
|
export declare function parseSessionEventsResponse(value: unknown): SessionEventsResponse;
|
|
50
|
+
export declare function parseRepairSessionHeadResult(value: unknown): RepairSessionHeadResult;
|
|
25
51
|
//# sourceMappingURL=parsers.d.ts.map
|