@getpaseo/server 0.1.63 → 0.1.66
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/dist/server/client/daemon-client-transport-types.d.ts +2 -0
- package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.d.ts +2 -1
- package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.js +4 -4
- package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +30 -20
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +206 -98
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/client/terminal-stream-router.d.ts +24 -0
- package/dist/server/client/terminal-stream-router.d.ts.map +1 -0
- package/dist/server/client/terminal-stream-router.js +100 -0
- package/dist/server/client/terminal-stream-router.js.map +1 -0
- package/dist/server/server/agent/activity-curator.d.ts +6 -3
- package/dist/server/server/agent/activity-curator.d.ts.map +1 -1
- package/dist/server/server/agent/activity-curator.js +45 -138
- package/dist/server/server/agent/activity-curator.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +3 -14
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +75 -140
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +0 -5
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +3 -93
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +15 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.js +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.js +29 -32
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
- package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -0
- package/dist/server/server/agent/foreground-run-state.js +162 -0
- package/dist/server/server/agent/foreground-run-state.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +5 -3
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +110 -99
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +7 -1
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts +4 -3
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
- package/dist/server/server/agent/prompt-attachments.js +43 -4
- package/dist/server/server/agent/prompt-attachments.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +7 -0
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +38 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +257 -140
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +1 -1
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +68 -198
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +52 -102
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +125 -141
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +36 -6
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +374 -219
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +6 -2
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.js +294 -113
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +94 -2
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +24 -115
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +102 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +416 -158
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.js +80 -0
- package/dist/server/server/agent/providers/provider-runner.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +6 -3
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +2 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +31 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
- package/dist/server/server/agent/timeline-projection.d.ts +21 -5
- package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
- package/dist/server/server/agent/timeline-projection.js +59 -9
- package/dist/server/server/agent/timeline-projection.js.map +1 -1
- package/dist/server/server/auth.d.ts +25 -0
- package/dist/server/server/auth.d.ts.map +1 -0
- package/dist/server/server/auth.js +93 -0
- package/dist/server/server/auth.js.map +1 -0
- package/dist/server/server/bootstrap.d.ts +3 -1
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +87 -30
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +11 -0
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/exports.d.ts +7 -1
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +6 -1
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/file-explorer/service.d.ts +10 -0
- package/dist/server/server/file-explorer/service.d.ts.map +1 -1
- package/dist/server/server/file-explorer/service.js +38 -4
- package/dist/server/server/file-explorer/service.js.map +1 -1
- package/dist/server/server/index.js +9 -6
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/logger.d.ts.map +1 -1
- package/dist/server/server/logger.js +15 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/pagination/cursor.d.ts +16 -0
- package/dist/server/server/pagination/cursor.d.ts.map +1 -0
- package/dist/server/server/pagination/cursor.js +62 -0
- package/dist/server/server/pagination/cursor.js.map +1 -0
- package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
- package/dist/server/server/pagination/sortable-pager.d.ts.map +1 -0
- package/dist/server/server/pagination/sortable-pager.js +68 -0
- package/dist/server/server/pagination/sortable-pager.js.map +1 -0
- package/dist/server/server/paseo-worktree-archive-service.d.ts +3 -1
- package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-archive-service.js +61 -53
- package/dist/server/server/paseo-worktree-archive-service.js.map +1 -1
- package/dist/server/server/paseo-worktree-service.d.ts +13 -0
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-service.js +72 -3
- package/dist/server/server/paseo-worktree-service.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +25 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +9 -0
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/relay-transport.d.ts.map +1 -1
- package/dist/server/server/relay-transport.js +16 -4
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +0 -10
- package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.js +1 -45
- package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -1
- package/dist/server/server/script-status-projection.d.ts +6 -1
- package/dist/server/server/script-status-projection.d.ts.map +1 -1
- package/dist/server/server/script-status-projection.js +12 -3
- package/dist/server/server/script-status-projection.js.map +1 -1
- package/dist/server/server/session.d.ts +19 -51
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +354 -1069
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +4 -2
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +65 -12
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-directory.d.ts +69 -0
- package/dist/server/server/workspace-directory.d.ts.map +1 -0
- package/dist/server/server/workspace-directory.js +229 -0
- package/dist/server/server/workspace-directory.js.map +1 -0
- package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
- package/dist/server/server/worktree-bootstrap.js +6 -2
- package/dist/server/server/worktree-bootstrap.js.map +1 -1
- package/dist/server/server/worktree-core.d.ts +2 -0
- package/dist/server/server/worktree-core.d.ts.map +1 -1
- package/dist/server/server/worktree-core.js.map +1 -1
- package/dist/server/server/worktree-errors.d.ts +1 -1
- package/dist/server/server/worktree-errors.d.ts.map +1 -1
- package/dist/server/server/worktree-errors.js +1 -4
- package/dist/server/server/worktree-errors.js.map +1 -1
- package/dist/server/server/worktree-session.d.ts +47 -20
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +68 -25
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/shared/binary-frames/file-transfer.d.ts +56 -0
- package/dist/server/shared/binary-frames/file-transfer.d.ts.map +1 -0
- package/dist/server/shared/binary-frames/file-transfer.js +108 -0
- package/dist/server/shared/binary-frames/file-transfer.js.map +1 -0
- package/dist/server/shared/binary-frames/index.d.ts +3 -0
- package/dist/server/shared/binary-frames/index.d.ts.map +1 -0
- package/dist/server/shared/binary-frames/index.js +3 -0
- package/dist/server/shared/binary-frames/index.js.map +1 -0
- package/dist/server/shared/{terminal-stream-protocol.d.ts → binary-frames/terminal.d.ts} +2 -2
- package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -0
- package/dist/server/shared/{terminal-stream-protocol.js → binary-frames/terminal.js} +2 -2
- package/dist/server/shared/binary-frames/terminal.js.map +1 -0
- package/dist/server/shared/client-capabilities.d.ts +5 -0
- package/dist/server/shared/client-capabilities.d.ts.map +1 -0
- package/dist/server/shared/client-capabilities.js +4 -0
- package/dist/server/shared/client-capabilities.js.map +1 -0
- package/dist/server/shared/connection-offer.d.ts +8 -0
- package/dist/server/shared/connection-offer.d.ts.map +1 -1
- package/dist/server/shared/connection-offer.js +35 -0
- package/dist/server/shared/connection-offer.js.map +1 -1
- package/dist/server/shared/daemon-endpoints.d.ts +16 -1
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
- package/dist/server/shared/daemon-endpoints.js +65 -6
- package/dist/server/shared/daemon-endpoints.js.map +1 -1
- package/dist/server/shared/host-connection-schema.d.ts +23 -0
- package/dist/server/shared/host-connection-schema.d.ts.map +1 -0
- package/dist/server/shared/host-connection-schema.js +9 -0
- package/dist/server/shared/host-connection-schema.js.map +1 -0
- package/dist/server/shared/messages.d.ts +3242 -535
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +73 -34
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/terminal/terminal-manager-factory.d.ts +7 -0
- package/dist/server/terminal/terminal-manager-factory.d.ts.map +1 -0
- package/dist/server/terminal/terminal-manager-factory.js +13 -0
- package/dist/server/terminal/terminal-manager-factory.js.map +1 -0
- package/dist/server/terminal/terminal-manager.d.ts +7 -1
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +14 -1
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-session-controller.d.ts +63 -0
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -0
- package/dist/server/terminal/terminal-session-controller.js +615 -0
- package/dist/server/terminal/terminal-session-controller.js.map +1 -0
- package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
- package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
- package/dist/server/terminal/terminal-worker-process.d.ts.map +1 -0
- package/dist/server/terminal/terminal-worker-process.js +221 -0
- package/dist/server/terminal/terminal-worker-process.js.map +1 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +113 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -0
- package/dist/server/terminal/terminal-worker-protocol.js +2 -0
- package/dist/server/terminal/terminal-worker-protocol.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +7 -0
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +45 -9
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.d.ts +19 -0
- package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -0
- package/dist/server/terminal/worker-terminal-manager.js +466 -0
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -0
- package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
- package/dist/server/utils/directory-suggestions.js +10 -1
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/process-tree.d.ts +25 -0
- package/dist/server/utils/process-tree.d.ts.map +1 -0
- package/dist/server/utils/process-tree.js +96 -0
- package/dist/server/utils/process-tree.js.map +1 -0
- package/dist/server/utils/windows-command.d.ts.map +1 -1
- package/dist/server/utils/windows-command.js +5 -1
- package/dist/server/utils/windows-command.js.map +1 -1
- package/dist/server/utils/worktree-metadata.d.ts +44 -0
- package/dist/server/utils/worktree-metadata.d.ts.map +1 -1
- package/dist/server/utils/worktree-metadata.js +58 -0
- package/dist/server/utils/worktree-metadata.js.map +1 -1
- package/dist/server/utils/worktree.d.ts +14 -2
- package/dist/server/utils/worktree.d.ts.map +1 -1
- package/dist/server/utils/worktree.js +22 -13
- package/dist/server/utils/worktree.js.map +1 -1
- package/package.json +5 -4
- package/dist/server/shared/terminal-stream-protocol.d.ts.map +0 -1
- package/dist/server/shared/terminal-stream-protocol.js.map +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { CLIENT_CAPS } from "../shared/client-capabilities.js";
|
|
1
2
|
import { AgentCreateFailedStatusPayloadSchema, AgentCreatedStatusPayloadSchema, AgentRefreshedStatusPayloadSchema, AgentResumedStatusPayloadSchema, parseServerInfoStatusPayload, RestartRequestedStatusPayloadSchema, ShutdownRequestedStatusPayloadSchema, SessionInboundMessageSchema, WSOutboundMessageSchema, } from "../shared/messages.js";
|
|
2
3
|
import { isRelayClientWebSocketUrl } from "../shared/daemon-endpoints.js";
|
|
3
|
-
import { asUint8Array,
|
|
4
|
-
import { createRelayE2eeTransportFactory, createWebSocketTransportFactory, decodeMessageData, defaultWebSocketFactory, describeTransportClose, describeTransportError,
|
|
4
|
+
import { asUint8Array, decodeFileTransferFrame, decodeTerminalStreamFrame, FileTransferOpcode, TerminalStreamOpcode, } from "../shared/binary-frames/index.js";
|
|
5
|
+
import { createRelayE2eeTransportFactory, createWebSocketTransportFactory, decodeMessageData, defaultWebSocketFactory, describeTransportClose, describeTransportError, } from "./daemon-client-transport.js";
|
|
5
6
|
import { DaemonClientRuntimeMetrics } from "./daemon-client-runtime-metrics.js";
|
|
7
|
+
import { TerminalStreamRouter } from "./terminal-stream-router.js";
|
|
6
8
|
const consoleLogger = {
|
|
7
9
|
debug: () => { },
|
|
8
10
|
info: (obj, msg) => console.log(msg, obj),
|
|
@@ -12,6 +14,12 @@ const consoleLogger = {
|
|
|
12
14
|
const perfNow = typeof performance !== "undefined" && typeof performance.now === "function"
|
|
13
15
|
? () => performance.now()
|
|
14
16
|
: () => Date.now();
|
|
17
|
+
function normalizePassword(value) {
|
|
18
|
+
if (typeof value !== "string") {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return value.length > 0 ? value : null;
|
|
22
|
+
}
|
|
15
23
|
class DaemonRpcError extends Error {
|
|
16
24
|
constructor(params) {
|
|
17
25
|
const parts = [params.error];
|
|
@@ -44,6 +52,52 @@ function normalizeClientId(value) {
|
|
|
44
52
|
const trimmed = value.trim();
|
|
45
53
|
return trimmed.length > 0 ? trimmed : null;
|
|
46
54
|
}
|
|
55
|
+
function decodeBase64ToBytes(base64) {
|
|
56
|
+
const binary = globalThis.atob(base64);
|
|
57
|
+
const bytes = new Uint8Array(binary.length);
|
|
58
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
59
|
+
bytes[index] = binary.charCodeAt(index);
|
|
60
|
+
}
|
|
61
|
+
return bytes;
|
|
62
|
+
}
|
|
63
|
+
function legacyExplorerFileToBytes(file) {
|
|
64
|
+
let bytes;
|
|
65
|
+
if (file.encoding === "base64" && file.content) {
|
|
66
|
+
bytes = decodeBase64ToBytes(file.content);
|
|
67
|
+
}
|
|
68
|
+
else if (file.encoding === "utf-8" && file.content) {
|
|
69
|
+
bytes = new TextEncoder().encode(file.content);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
bytes = new Uint8Array();
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
bytes,
|
|
76
|
+
mime: file.mimeType ?? "application/octet-stream",
|
|
77
|
+
size: file.size,
|
|
78
|
+
path: file.path,
|
|
79
|
+
kind: file.kind,
|
|
80
|
+
modifiedAt: file.modifiedAt,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function binaryFileKind(mime, encoding) {
|
|
84
|
+
if (mime.startsWith("image/")) {
|
|
85
|
+
return "image";
|
|
86
|
+
}
|
|
87
|
+
if (encoding === "utf-8" || mime.startsWith("text/") || mime === "application/json") {
|
|
88
|
+
return "text";
|
|
89
|
+
}
|
|
90
|
+
return "binary";
|
|
91
|
+
}
|
|
92
|
+
function concatByteChunks(chunks, size) {
|
|
93
|
+
const bytes = new Uint8Array(size);
|
|
94
|
+
let offset = 0;
|
|
95
|
+
for (const chunk of chunks) {
|
|
96
|
+
bytes.set(chunk, offset);
|
|
97
|
+
offset += chunk.byteLength;
|
|
98
|
+
}
|
|
99
|
+
return bytes;
|
|
100
|
+
}
|
|
47
101
|
function hashForLog(value) {
|
|
48
102
|
let hash = 0;
|
|
49
103
|
for (let index = 0; index < value.length; index += 1) {
|
|
@@ -96,9 +150,10 @@ export class DaemonClient {
|
|
|
96
150
|
this.connectionState = { status: "idle" };
|
|
97
151
|
this.checkoutDiffSubscriptions = new Map();
|
|
98
152
|
this.terminalDirectorySubscriptions = new Set();
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
153
|
+
this.terminalStreams = new TerminalStreamRouter();
|
|
154
|
+
this.pendingBinaryFileReads = new Map();
|
|
155
|
+
this.activeBinaryFileTransfers = new Map();
|
|
156
|
+
this.completedBinaryFileReads = new Map();
|
|
102
157
|
this.pendingSendQueue = [];
|
|
103
158
|
this.lastServerInfoMessage = null;
|
|
104
159
|
this.runtimeMetricsInterval = null;
|
|
@@ -176,9 +231,14 @@ export class DaemonClient {
|
|
|
176
231
|
return;
|
|
177
232
|
}
|
|
178
233
|
const headers = {};
|
|
179
|
-
|
|
180
|
-
|
|
234
|
+
const password = normalizePassword(this.config.password);
|
|
235
|
+
if (password) {
|
|
236
|
+
headers.Authorization = `Bearer ${password}`;
|
|
181
237
|
}
|
|
238
|
+
else if (this.config.authHeader) {
|
|
239
|
+
headers.Authorization = this.config.authHeader;
|
|
240
|
+
}
|
|
241
|
+
const protocols = password ? [`paseo.bearer.${password}`] : undefined;
|
|
182
242
|
try {
|
|
183
243
|
// Reconnect can overlap with browser close/error delivery ordering.
|
|
184
244
|
// Always dispose previous transport before constructing the next one.
|
|
@@ -199,7 +259,11 @@ export class DaemonClient {
|
|
|
199
259
|
});
|
|
200
260
|
}
|
|
201
261
|
const transportUrl = this.resolveTransportUrlForAttempt();
|
|
202
|
-
const transport = transportFactory({
|
|
262
|
+
const transport = transportFactory({
|
|
263
|
+
url: transportUrl,
|
|
264
|
+
headers,
|
|
265
|
+
...(protocols ? { protocols } : {}),
|
|
266
|
+
});
|
|
203
267
|
this.transport = transport;
|
|
204
268
|
this.lastServerInfoMessage = null;
|
|
205
269
|
this.updateConnectionState({
|
|
@@ -328,7 +392,7 @@ export class DaemonClient {
|
|
|
328
392
|
this.disposeTransport(1000, "Client closed");
|
|
329
393
|
this.clearWaiters(new Error("Daemon client closed"));
|
|
330
394
|
this.rejectPendingSendQueue(new Error("Daemon client closed"));
|
|
331
|
-
this.
|
|
395
|
+
this.terminalStreams.clearSlots();
|
|
332
396
|
this.lastServerInfoMessage = null;
|
|
333
397
|
if (this.runtimeMetricsInterval) {
|
|
334
398
|
clearInterval(this.runtimeMetricsInterval);
|
|
@@ -1017,6 +1081,41 @@ export class DaemonClient {
|
|
|
1017
1081
|
});
|
|
1018
1082
|
return status.agent;
|
|
1019
1083
|
}
|
|
1084
|
+
async importAgent(input) {
|
|
1085
|
+
const requestId = this.createRequestId();
|
|
1086
|
+
const message = SessionInboundMessageSchema.parse({
|
|
1087
|
+
type: "import_agent_request",
|
|
1088
|
+
requestId,
|
|
1089
|
+
provider: input.provider,
|
|
1090
|
+
sessionId: input.sessionId,
|
|
1091
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
1092
|
+
...(input.labels && Object.keys(input.labels).length > 0 ? { labels: input.labels } : {}),
|
|
1093
|
+
});
|
|
1094
|
+
const status = await this.sendRequest({
|
|
1095
|
+
requestId,
|
|
1096
|
+
message,
|
|
1097
|
+
timeout: 15000,
|
|
1098
|
+
options: { skipQueue: true },
|
|
1099
|
+
select: (msg) => {
|
|
1100
|
+
if (msg.type !== "status") {
|
|
1101
|
+
return null;
|
|
1102
|
+
}
|
|
1103
|
+
const resumed = AgentResumedStatusPayloadSchema.safeParse(msg.payload);
|
|
1104
|
+
if (resumed.success && resumed.data.requestId === requestId) {
|
|
1105
|
+
return resumed.data;
|
|
1106
|
+
}
|
|
1107
|
+
const failed = AgentCreateFailedStatusPayloadSchema.safeParse(msg.payload);
|
|
1108
|
+
if (failed.success && failed.data.requestId === requestId) {
|
|
1109
|
+
return failed.data;
|
|
1110
|
+
}
|
|
1111
|
+
return null;
|
|
1112
|
+
},
|
|
1113
|
+
});
|
|
1114
|
+
if (status.status === "agent_create_failed") {
|
|
1115
|
+
throw new Error(status.error);
|
|
1116
|
+
}
|
|
1117
|
+
return status.agent;
|
|
1118
|
+
}
|
|
1020
1119
|
async refreshAgent(agentId, requestId) {
|
|
1021
1120
|
const resolvedRequestId = this.createRequestId(requestId);
|
|
1022
1121
|
const message = SessionInboundMessageSchema.parse({
|
|
@@ -1797,7 +1896,7 @@ export class DaemonClient {
|
|
|
1797
1896
|
branchName: input.branchName,
|
|
1798
1897
|
},
|
|
1799
1898
|
responseType: "paseo_worktree_archive_response",
|
|
1800
|
-
timeout:
|
|
1899
|
+
timeout: 60000,
|
|
1801
1900
|
});
|
|
1802
1901
|
}
|
|
1803
1902
|
async createPaseoWorktree(input, requestId) {
|
|
@@ -1807,8 +1906,8 @@ export class DaemonClient {
|
|
|
1807
1906
|
type: "create_paseo_worktree_request",
|
|
1808
1907
|
cwd: input.cwd,
|
|
1809
1908
|
worktreeSlug: input.worktreeSlug,
|
|
1810
|
-
...(input.
|
|
1811
|
-
? {
|
|
1909
|
+
...(input.firstAgentContext !== undefined
|
|
1910
|
+
? { firstAgentContext: input.firstAgentContext }
|
|
1812
1911
|
: {}),
|
|
1813
1912
|
...(input.refName !== undefined ? { refName: input.refName } : {}),
|
|
1814
1913
|
...(input.action !== undefined ? { action: input.action } : {}),
|
|
@@ -1875,7 +1974,7 @@ export class DaemonClient {
|
|
|
1875
1974
|
// ============================================================================
|
|
1876
1975
|
// File Explorer
|
|
1877
1976
|
// ============================================================================
|
|
1878
|
-
async
|
|
1977
|
+
async requestFileExplorer(cwd, path, mode, requestId, acceptBinary = false) {
|
|
1879
1978
|
return this.sendCorrelatedSessionRequest({
|
|
1880
1979
|
requestId,
|
|
1881
1980
|
message: {
|
|
@@ -1883,11 +1982,45 @@ export class DaemonClient {
|
|
|
1883
1982
|
cwd,
|
|
1884
1983
|
path,
|
|
1885
1984
|
mode,
|
|
1985
|
+
...(acceptBinary ? { acceptBinary: true } : {}),
|
|
1886
1986
|
},
|
|
1887
1987
|
responseType: "file_explorer_response",
|
|
1888
1988
|
timeout: 10000,
|
|
1889
1989
|
});
|
|
1890
1990
|
}
|
|
1991
|
+
async listDirectory(cwd, path, requestId) {
|
|
1992
|
+
const payload = await this.requestFileExplorer(cwd, path, "list", requestId);
|
|
1993
|
+
if (payload.error) {
|
|
1994
|
+
throw new Error(payload.error);
|
|
1995
|
+
}
|
|
1996
|
+
if (!payload.directory) {
|
|
1997
|
+
throw new Error("Directory listing unavailable.");
|
|
1998
|
+
}
|
|
1999
|
+
return payload.directory;
|
|
2000
|
+
}
|
|
2001
|
+
async readFile(cwd, path, requestId) {
|
|
2002
|
+
const resolvedRequestId = this.createRequestId(requestId);
|
|
2003
|
+
this.pendingBinaryFileReads.set(resolvedRequestId, { cwd, path });
|
|
2004
|
+
try {
|
|
2005
|
+
const payload = await this.requestFileExplorer(cwd, path, "file", resolvedRequestId, true);
|
|
2006
|
+
if (payload.error) {
|
|
2007
|
+
throw new Error(payload.error);
|
|
2008
|
+
}
|
|
2009
|
+
const binaryResult = this.completedBinaryFileReads.get(resolvedRequestId);
|
|
2010
|
+
if (binaryResult) {
|
|
2011
|
+
this.completedBinaryFileReads.delete(resolvedRequestId);
|
|
2012
|
+
return binaryResult;
|
|
2013
|
+
}
|
|
2014
|
+
if (!payload.file) {
|
|
2015
|
+
throw new Error("File unavailable.");
|
|
2016
|
+
}
|
|
2017
|
+
return legacyExplorerFileToBytes(payload.file);
|
|
2018
|
+
}
|
|
2019
|
+
finally {
|
|
2020
|
+
this.pendingBinaryFileReads.delete(resolvedRequestId);
|
|
2021
|
+
this.activeBinaryFileTransfers.delete(resolvedRequestId);
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
1891
2024
|
async requestDownloadToken(cwd, path, requestId) {
|
|
1892
2025
|
return this.sendCorrelatedSessionRequest({
|
|
1893
2026
|
requestId,
|
|
@@ -2272,39 +2405,22 @@ export class DaemonClient {
|
|
|
2272
2405
|
options: { skipQueue: true },
|
|
2273
2406
|
});
|
|
2274
2407
|
if (payload.error === null) {
|
|
2275
|
-
this.
|
|
2408
|
+
this.terminalStreams.setSlot(terminalId, payload.slot);
|
|
2276
2409
|
}
|
|
2277
2410
|
return payload;
|
|
2278
2411
|
}
|
|
2279
2412
|
unsubscribeTerminal(terminalId) {
|
|
2280
|
-
this.
|
|
2413
|
+
this.terminalStreams.removeTerminal(terminalId);
|
|
2281
2414
|
this.sendSessionMessage({
|
|
2282
2415
|
type: "unsubscribe_terminal_request",
|
|
2283
2416
|
terminalId,
|
|
2284
2417
|
});
|
|
2285
2418
|
}
|
|
2286
2419
|
sendTerminalInput(terminalId, message) {
|
|
2287
|
-
const
|
|
2288
|
-
if (
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
opcode: TerminalStreamOpcode.Input,
|
|
2292
|
-
slot,
|
|
2293
|
-
payload: encodeUtf8String(message.data),
|
|
2294
|
-
}));
|
|
2295
|
-
return;
|
|
2296
|
-
}
|
|
2297
|
-
if (message.type === "resize") {
|
|
2298
|
-
this.sendBinaryFrame(encodeTerminalStreamFrame({
|
|
2299
|
-
opcode: TerminalStreamOpcode.Resize,
|
|
2300
|
-
slot,
|
|
2301
|
-
payload: encodeTerminalResizePayload({
|
|
2302
|
-
rows: message.rows,
|
|
2303
|
-
cols: message.cols,
|
|
2304
|
-
}),
|
|
2305
|
-
}));
|
|
2306
|
-
return;
|
|
2307
|
-
}
|
|
2420
|
+
const frame = this.terminalStreams.encodeInput(terminalId, message);
|
|
2421
|
+
if (frame) {
|
|
2422
|
+
this.sendBinaryFrame(frame);
|
|
2423
|
+
return;
|
|
2308
2424
|
}
|
|
2309
2425
|
this.sendSessionMessage({
|
|
2310
2426
|
type: "terminal_input",
|
|
@@ -2601,10 +2717,7 @@ export class DaemonClient {
|
|
|
2601
2717
|
});
|
|
2602
2718
|
}
|
|
2603
2719
|
onTerminalStreamEvent(handler) {
|
|
2604
|
-
this.
|
|
2605
|
-
return () => {
|
|
2606
|
-
this.terminalStreamListeners.delete(handler);
|
|
2607
|
-
};
|
|
2720
|
+
return this.terminalStreams.onEvent(handler);
|
|
2608
2721
|
}
|
|
2609
2722
|
async waitForTerminalStreamEvent(predicate, timeout = 5000) {
|
|
2610
2723
|
return new Promise((resolve, reject) => {
|
|
@@ -2628,32 +2741,6 @@ export class DaemonClient {
|
|
|
2628
2741
|
createRequestId(requestId) {
|
|
2629
2742
|
return requestId ?? crypto.randomUUID();
|
|
2630
2743
|
}
|
|
2631
|
-
setTerminalSlot(terminalId, slot) {
|
|
2632
|
-
const existingTerminalId = this.slotTerminals.get(slot);
|
|
2633
|
-
if (existingTerminalId && existingTerminalId !== terminalId) {
|
|
2634
|
-
this.terminalSlots.delete(existingTerminalId);
|
|
2635
|
-
}
|
|
2636
|
-
const existingSlot = this.terminalSlots.get(terminalId);
|
|
2637
|
-
if (typeof existingSlot === "number" && existingSlot !== slot) {
|
|
2638
|
-
this.slotTerminals.delete(existingSlot);
|
|
2639
|
-
}
|
|
2640
|
-
this.terminalSlots.set(terminalId, slot);
|
|
2641
|
-
this.slotTerminals.set(slot, terminalId);
|
|
2642
|
-
}
|
|
2643
|
-
removeTerminalSlot(terminalId) {
|
|
2644
|
-
const slot = this.terminalSlots.get(terminalId);
|
|
2645
|
-
if (typeof slot !== "number") {
|
|
2646
|
-
return;
|
|
2647
|
-
}
|
|
2648
|
-
this.terminalSlots.delete(terminalId);
|
|
2649
|
-
if (this.slotTerminals.get(slot) === terminalId) {
|
|
2650
|
-
this.slotTerminals.delete(slot);
|
|
2651
|
-
}
|
|
2652
|
-
}
|
|
2653
|
-
clearTerminalSlots() {
|
|
2654
|
-
this.terminalSlots.clear();
|
|
2655
|
-
this.slotTerminals.clear();
|
|
2656
|
-
}
|
|
2657
2744
|
getLastServerInfoMessage() {
|
|
2658
2745
|
return this.lastServerInfoMessage;
|
|
2659
2746
|
}
|
|
@@ -2675,6 +2762,9 @@ export class DaemonClient {
|
|
|
2675
2762
|
clientId: this.config.clientId,
|
|
2676
2763
|
clientType: this.config.clientType ?? "cli",
|
|
2677
2764
|
protocolVersion: 1,
|
|
2765
|
+
capabilities: {
|
|
2766
|
+
[CLIENT_CAPS.reasoningMergeEnum]: true,
|
|
2767
|
+
},
|
|
2678
2768
|
...(this.config.appVersion ? { appVersion: this.config.appVersion } : {}),
|
|
2679
2769
|
}));
|
|
2680
2770
|
}
|
|
@@ -2777,12 +2867,18 @@ export class DaemonClient {
|
|
|
2777
2867
|
}
|
|
2778
2868
|
}
|
|
2779
2869
|
tryHandleBinaryFrame(rawBytes) {
|
|
2870
|
+
const fileFrame = decodeFileTransferFrame(rawBytes);
|
|
2871
|
+
if (fileFrame) {
|
|
2872
|
+
this.handleFileTransferFrame(fileFrame);
|
|
2873
|
+
this.runtimeMetrics?.recordBinaryFrame("other", rawBytes.byteLength, 0);
|
|
2874
|
+
return true;
|
|
2875
|
+
}
|
|
2780
2876
|
const frame = decodeTerminalStreamFrame(rawBytes);
|
|
2781
2877
|
if (!frame) {
|
|
2782
2878
|
return false;
|
|
2783
2879
|
}
|
|
2784
2880
|
const binaryStartMs = perfNow();
|
|
2785
|
-
this.
|
|
2881
|
+
this.terminalStreams.handleFrame(frame);
|
|
2786
2882
|
let frameKind = "other";
|
|
2787
2883
|
if (frame.opcode === TerminalStreamOpcode.Output) {
|
|
2788
2884
|
frameKind = "output";
|
|
@@ -2793,40 +2889,52 @@ export class DaemonClient {
|
|
|
2793
2889
|
this.runtimeMetrics?.recordBinaryFrame(frameKind, rawBytes.byteLength, perfNow() - binaryStartMs);
|
|
2794
2890
|
return true;
|
|
2795
2891
|
}
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
}
|
|
2801
|
-
if (frame.opcode === TerminalStreamOpcode.Output) {
|
|
2802
|
-
this.emitTerminalStreamEvent({
|
|
2803
|
-
terminalId,
|
|
2804
|
-
type: "output",
|
|
2805
|
-
data: frame.payload,
|
|
2806
|
-
});
|
|
2807
|
-
return;
|
|
2808
|
-
}
|
|
2809
|
-
if (frame.opcode === TerminalStreamOpcode.Snapshot) {
|
|
2810
|
-
const state = decodeTerminalSnapshotPayload(frame.payload);
|
|
2811
|
-
if (!state) {
|
|
2892
|
+
handleFileTransferFrame(frame) {
|
|
2893
|
+
if (frame.opcode === FileTransferOpcode.FileBegin) {
|
|
2894
|
+
const pending = this.pendingBinaryFileReads.get(frame.requestId);
|
|
2895
|
+
if (!pending) {
|
|
2812
2896
|
return;
|
|
2813
2897
|
}
|
|
2814
|
-
this.
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2898
|
+
this.activeBinaryFileTransfers.set(frame.requestId, {
|
|
2899
|
+
...pending,
|
|
2900
|
+
mime: frame.metadata.mime,
|
|
2901
|
+
size: frame.metadata.size,
|
|
2902
|
+
encoding: frame.metadata.encoding,
|
|
2903
|
+
modifiedAt: frame.metadata.modifiedAt,
|
|
2904
|
+
chunks: [],
|
|
2818
2905
|
});
|
|
2906
|
+
return;
|
|
2819
2907
|
}
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
// no-op
|
|
2828
|
-
}
|
|
2908
|
+
const transfer = this.activeBinaryFileTransfers.get(frame.requestId);
|
|
2909
|
+
if (!transfer) {
|
|
2910
|
+
return;
|
|
2911
|
+
}
|
|
2912
|
+
if (frame.opcode === FileTransferOpcode.FileChunk) {
|
|
2913
|
+
transfer.chunks.push(frame.payload);
|
|
2914
|
+
return;
|
|
2829
2915
|
}
|
|
2916
|
+
const bytes = concatByteChunks(transfer.chunks, transfer.size);
|
|
2917
|
+
this.activeBinaryFileTransfers.delete(frame.requestId);
|
|
2918
|
+
this.completedBinaryFileReads.set(frame.requestId, {
|
|
2919
|
+
bytes,
|
|
2920
|
+
mime: transfer.mime,
|
|
2921
|
+
size: transfer.size,
|
|
2922
|
+
path: transfer.path,
|
|
2923
|
+
kind: binaryFileKind(transfer.mime, transfer.encoding),
|
|
2924
|
+
modifiedAt: transfer.modifiedAt,
|
|
2925
|
+
});
|
|
2926
|
+
this.handleSessionMessage({
|
|
2927
|
+
type: "file_explorer_response",
|
|
2928
|
+
payload: {
|
|
2929
|
+
cwd: transfer.cwd,
|
|
2930
|
+
path: transfer.path,
|
|
2931
|
+
mode: "file",
|
|
2932
|
+
directory: null,
|
|
2933
|
+
file: null,
|
|
2934
|
+
error: null,
|
|
2935
|
+
requestId: frame.requestId,
|
|
2936
|
+
},
|
|
2937
|
+
});
|
|
2830
2938
|
}
|
|
2831
2939
|
updateConnectionState(next, metadata) {
|
|
2832
2940
|
const previous = this.connectionState;
|
|
@@ -2871,7 +2979,7 @@ export class DaemonClient {
|
|
|
2871
2979
|
// and responses from the previous connection will never arrive.
|
|
2872
2980
|
this.clearWaiters(new Error(reason ?? "Connection lost"));
|
|
2873
2981
|
this.rejectPendingSendQueue(new Error(reason ?? "Connection lost"));
|
|
2874
|
-
this.
|
|
2982
|
+
this.terminalStreams.clearSlots();
|
|
2875
2983
|
this.lastServerInfoMessage = null;
|
|
2876
2984
|
if (wasDisposed) {
|
|
2877
2985
|
this.rejectConnect(new Error(reason ?? "Daemon client is disposed"));
|
|
@@ -2925,7 +3033,7 @@ export class DaemonClient {
|
|
|
2925
3033
|
}
|
|
2926
3034
|
}
|
|
2927
3035
|
if (msg.type === "terminal_stream_exit") {
|
|
2928
|
-
this.
|
|
3036
|
+
this.terminalStreams.removeTerminal(msg.payload.terminalId);
|
|
2929
3037
|
}
|
|
2930
3038
|
if (this.rawMessageListeners.size > 0) {
|
|
2931
3039
|
for (const handler of this.rawMessageListeners) {
|