@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,14 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentTimelineItem } from "./agent-sdk-types.js";
|
|
2
2
|
import type { AgentTimelineRow } from "./agent-manager.js";
|
|
3
3
|
export type TimelineProjectionMode = "canonical" | "projected";
|
|
4
4
|
export interface TimelineSeqRange {
|
|
5
5
|
startSeq: number;
|
|
6
6
|
endSeq: number;
|
|
7
7
|
}
|
|
8
|
-
export type TimelineProjectionKind = "assistant_merge" | "tool_lifecycle";
|
|
8
|
+
export type TimelineProjectionKind = "assistant_merge" | "reasoning_merge" | "tool_lifecycle";
|
|
9
9
|
export type TimelineLimitDirection = "tail" | "before" | "after";
|
|
10
10
|
export interface TimelineProjectionEntry {
|
|
11
|
-
provider: AgentProvider;
|
|
12
11
|
item: AgentTimelineItem;
|
|
13
12
|
timestamp: string;
|
|
14
13
|
seqStart: number;
|
|
@@ -22,7 +21,10 @@ interface ProjectedWindowSelection {
|
|
|
22
21
|
minSeq: number | null;
|
|
23
22
|
maxSeq: number | null;
|
|
24
23
|
}
|
|
25
|
-
export declare function projectTimelineRows(
|
|
24
|
+
export declare function projectTimelineRows(input: {
|
|
25
|
+
rows: readonly AgentTimelineRow[];
|
|
26
|
+
mode: TimelineProjectionMode;
|
|
27
|
+
}): TimelineProjectionEntry[];
|
|
26
28
|
/**
|
|
27
29
|
* Select a timeline window based on projected-entry count, then map it back to
|
|
28
30
|
* contiguous canonical rows. This avoids cutting through merged assistant
|
|
@@ -30,10 +32,24 @@ export declare function projectTimelineRows(rows: readonly AgentTimelineRow[], p
|
|
|
30
32
|
*/
|
|
31
33
|
export declare function selectTimelineWindowByProjectedLimit(input: {
|
|
32
34
|
rows: readonly AgentTimelineRow[];
|
|
33
|
-
provider: AgentProvider;
|
|
34
35
|
direction: TimelineLimitDirection;
|
|
35
36
|
limit: number;
|
|
36
37
|
collapseToolLifecycle?: boolean;
|
|
37
38
|
}): ProjectedWindowSelection;
|
|
39
|
+
/**
|
|
40
|
+
* Apply a projected-count limit to a flat AgentTimelineItem[] without seq metadata.
|
|
41
|
+
* Used by callers that only have items in hand (e.g. MCP tools reading
|
|
42
|
+
* `agentManager.getTimeline`). Index position is treated as canonical seq.
|
|
43
|
+
*/
|
|
44
|
+
export interface ProjectedItemSelection {
|
|
45
|
+
items: AgentTimelineItem[];
|
|
46
|
+
totalProjected: number;
|
|
47
|
+
shownProjected: number;
|
|
48
|
+
}
|
|
49
|
+
export declare function selectItemsByProjectedLimit(input: {
|
|
50
|
+
items: readonly AgentTimelineItem[];
|
|
51
|
+
direction: TimelineLimitDirection;
|
|
52
|
+
limit: number;
|
|
53
|
+
}): ProjectedItemSelection;
|
|
38
54
|
export {};
|
|
39
55
|
//# sourceMappingURL=timeline-projection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-projection.d.ts","sourceRoot":"","sources":["../../../../src/server/agent/timeline-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"timeline-projection.d.ts","sourceRoot":"","sources":["../../../../src/server/agent/timeline-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAC9F,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,SAAS,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAGD,UAAU,wBAAwB;IAChC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;IAC5C,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA8MD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClC,IAAI,EAAE,sBAAsB,CAAC;CAC9B,GAAG,uBAAuB,EAAE,CAS5B;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,sBAAsB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,wBAAwB,CAoF3B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACpC,SAAS,EAAE,sBAAsB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,sBAAsB,CAiBzB"}
|
|
@@ -54,9 +54,8 @@ function mergeToolCallItems(existing, incoming) {
|
|
|
54
54
|
}
|
|
55
55
|
return merged;
|
|
56
56
|
}
|
|
57
|
-
function makeCanonicalEntries(rows
|
|
57
|
+
function makeCanonicalEntries(rows) {
|
|
58
58
|
return rows.map((row) => ({
|
|
59
|
-
provider,
|
|
60
59
|
item: row.item,
|
|
61
60
|
timestamp: row.timestamp,
|
|
62
61
|
seqStart: row.seq,
|
|
@@ -99,6 +98,38 @@ function collapseToolLifecycle(entries) {
|
|
|
99
98
|
}
|
|
100
99
|
return output;
|
|
101
100
|
}
|
|
101
|
+
function mergeReasoningChunks(entries) {
|
|
102
|
+
const output = [];
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const previous = output[output.length - 1];
|
|
105
|
+
const shouldMerge = previous &&
|
|
106
|
+
previous.item.type === "reasoning" &&
|
|
107
|
+
entry.item.type === "reasoning" &&
|
|
108
|
+
previous.seqEnd + 1 === entry.seqStart;
|
|
109
|
+
if (!shouldMerge || !previous) {
|
|
110
|
+
output.push(entry);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const previousReasoning = previous.item;
|
|
114
|
+
const entryReasoning = entry.item;
|
|
115
|
+
const collapsedKinds = new Set([
|
|
116
|
+
...previous.collapsed,
|
|
117
|
+
...entry.collapsed,
|
|
118
|
+
"reasoning_merge",
|
|
119
|
+
]);
|
|
120
|
+
output[output.length - 1] = {
|
|
121
|
+
...previous,
|
|
122
|
+
item: {
|
|
123
|
+
type: "reasoning",
|
|
124
|
+
text: `${previousReasoning.text}${entryReasoning.text}`,
|
|
125
|
+
},
|
|
126
|
+
seqEnd: entry.seqEnd,
|
|
127
|
+
sourceSeqRanges: mergeSeqRanges(previous.sourceSeqRanges, entry.sourceSeqRanges),
|
|
128
|
+
collapsed: Array.from(collapsedKinds),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return output;
|
|
132
|
+
}
|
|
102
133
|
function mergeAssistantChunks(entries) {
|
|
103
134
|
const output = [];
|
|
104
135
|
for (const entry of entries) {
|
|
@@ -131,13 +162,14 @@ function mergeAssistantChunks(entries) {
|
|
|
131
162
|
}
|
|
132
163
|
return output;
|
|
133
164
|
}
|
|
134
|
-
export function projectTimelineRows(
|
|
135
|
-
const canonical = makeCanonicalEntries(rows
|
|
136
|
-
if (mode === "canonical") {
|
|
165
|
+
export function projectTimelineRows(input) {
|
|
166
|
+
const canonical = makeCanonicalEntries(input.rows);
|
|
167
|
+
if (input.mode === "canonical") {
|
|
137
168
|
return canonical;
|
|
138
169
|
}
|
|
139
170
|
const toolCollapsed = collapseToolLifecycle(canonical);
|
|
140
|
-
|
|
171
|
+
const assistantMerged = mergeAssistantChunks(toolCollapsed);
|
|
172
|
+
return mergeReasoningChunks(assistantMerged);
|
|
141
173
|
}
|
|
142
174
|
/**
|
|
143
175
|
* Select a timeline window based on projected-entry count, then map it back to
|
|
@@ -145,11 +177,11 @@ export function projectTimelineRows(rows, provider, mode) {
|
|
|
145
177
|
* chunks when callers request canonical rows with a bounded limit.
|
|
146
178
|
*/
|
|
147
179
|
export function selectTimelineWindowByProjectedLimit(input) {
|
|
148
|
-
const { rows,
|
|
180
|
+
const { rows, direction } = input;
|
|
149
181
|
const limit = Math.max(0, Math.floor(input.limit));
|
|
150
182
|
const collapseTools = input.collapseToolLifecycle ?? true;
|
|
151
|
-
const canonical = makeCanonicalEntries(rows
|
|
152
|
-
const projectedAll = mergeAssistantChunks(collapseTools ? collapseToolLifecycle(canonical) : canonical);
|
|
183
|
+
const canonical = makeCanonicalEntries(rows);
|
|
184
|
+
const projectedAll = mergeReasoningChunks(mergeAssistantChunks(collapseTools ? collapseToolLifecycle(canonical) : canonical));
|
|
153
185
|
if (projectedAll.length === 0) {
|
|
154
186
|
return {
|
|
155
187
|
projectedEntries: [],
|
|
@@ -217,4 +249,22 @@ export function selectTimelineWindowByProjectedLimit(input) {
|
|
|
217
249
|
maxSeq: Number.isFinite(maxSeq) ? maxSeq : null,
|
|
218
250
|
};
|
|
219
251
|
}
|
|
252
|
+
export function selectItemsByProjectedLimit(input) {
|
|
253
|
+
const rows = input.items.map((item, index) => ({
|
|
254
|
+
seq: index + 1,
|
|
255
|
+
timestamp: "",
|
|
256
|
+
item,
|
|
257
|
+
}));
|
|
258
|
+
const projectedAll = projectTimelineRows({ rows, mode: "projected" });
|
|
259
|
+
const window = selectTimelineWindowByProjectedLimit({
|
|
260
|
+
rows,
|
|
261
|
+
direction: input.direction,
|
|
262
|
+
limit: input.limit,
|
|
263
|
+
});
|
|
264
|
+
return {
|
|
265
|
+
items: window.selectedRows.map((row) => row.item),
|
|
266
|
+
totalProjected: projectedAll.length,
|
|
267
|
+
shownProjected: window.projectedEntries.length,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
220
270
|
//# sourceMappingURL=timeline-projection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-projection.js","sourceRoot":"","sources":["../../../../src/server/agent/timeline-projection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeline-projection.js","sourceRoot":"","sources":["../../../../src/server/agent/timeline-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { RequestHandler } from "express";
|
|
2
|
+
export declare const DAEMON_PASSWORD_BCRYPT_COST = 12;
|
|
3
|
+
export interface DaemonAuthConfig {
|
|
4
|
+
password?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface BearerAuthRejectContext {
|
|
7
|
+
path: string;
|
|
8
|
+
method: string;
|
|
9
|
+
hasToken: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface BearerValidationInput {
|
|
12
|
+
password: string | undefined;
|
|
13
|
+
token: string | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function isBearerTokenValid(input: BearerValidationInput): boolean;
|
|
16
|
+
export declare function isBearerTokenValidAsync(input: BearerValidationInput): Promise<boolean>;
|
|
17
|
+
export declare function isBearerTokenValidSync(input: BearerValidationInput): boolean;
|
|
18
|
+
export declare function hashDaemonPassword(password: string): string;
|
|
19
|
+
export declare function extractHttpBearerToken(value: string | undefined): string | null;
|
|
20
|
+
export declare function extractWsBearerProtocol(value: string | undefined): string | null;
|
|
21
|
+
export declare function extractWsBearerToken(protocol: string | null): string | null;
|
|
22
|
+
export declare function createRequireBearerMiddleware(auth: DaemonAuthConfig | undefined, onReject?: (context: BearerAuthRejectContext) => void): RequestHandler;
|
|
23
|
+
export declare function shouldBypassBearerAuth(method: string, path: string): boolean;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/server/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAExE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAS5F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAS5E;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS/E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAchF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAS3E;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,GACpD,cAAc,CA2BhB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK5E"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { compare, compareSync, hashSync } from "bcryptjs";
|
|
2
|
+
export const DAEMON_PASSWORD_BCRYPT_COST = 12;
|
|
3
|
+
export function isBearerTokenValid(input) {
|
|
4
|
+
return isBearerTokenValidSync(input);
|
|
5
|
+
}
|
|
6
|
+
export async function isBearerTokenValidAsync(input) {
|
|
7
|
+
if (!input.password) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (input.token === null) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return compare(input.token, input.password);
|
|
14
|
+
}
|
|
15
|
+
export function isBearerTokenValidSync(input) {
|
|
16
|
+
if (!input.password) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (input.token === null) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return compareSync(input.token, input.password);
|
|
23
|
+
}
|
|
24
|
+
export function hashDaemonPassword(password) {
|
|
25
|
+
return hashSync(password, DAEMON_PASSWORD_BCRYPT_COST);
|
|
26
|
+
}
|
|
27
|
+
export function extractHttpBearerToken(value) {
|
|
28
|
+
if (!value) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const [scheme, ...tokenParts] = value.trim().split(/\s+/);
|
|
32
|
+
if (scheme !== "Bearer" || tokenParts.length !== 1) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return tokenParts[0] ?? null;
|
|
36
|
+
}
|
|
37
|
+
export function extractWsBearerProtocol(value) {
|
|
38
|
+
if (!value) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
for (const protocol of value.split(",")) {
|
|
42
|
+
const trimmed = protocol.trim();
|
|
43
|
+
const segments = trimmed.split(".");
|
|
44
|
+
if (segments[0] === "paseo" && segments[1] === "bearer" && segments.length >= 3) {
|
|
45
|
+
return trimmed;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function extractWsBearerToken(protocol) {
|
|
51
|
+
if (!protocol) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const segments = protocol.split(".");
|
|
55
|
+
if (segments[0] !== "paseo" || segments[1] !== "bearer" || segments.length < 3) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return segments.slice(2).join(".");
|
|
59
|
+
}
|
|
60
|
+
export function createRequireBearerMiddleware(auth, onReject) {
|
|
61
|
+
const password = auth?.password;
|
|
62
|
+
return (req, res, next) => {
|
|
63
|
+
if (!password || shouldBypassBearerAuth(req.method, req.path)) {
|
|
64
|
+
next();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
void (async () => {
|
|
68
|
+
try {
|
|
69
|
+
const token = extractHttpBearerToken(req.header("authorization"));
|
|
70
|
+
if (!(await isBearerTokenValidAsync({ password, token }))) {
|
|
71
|
+
onReject?.({
|
|
72
|
+
path: req.path,
|
|
73
|
+
method: req.method,
|
|
74
|
+
hasToken: token !== null,
|
|
75
|
+
});
|
|
76
|
+
res.status(401).json({ error: "Unauthorized" });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
next();
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
next(error);
|
|
83
|
+
}
|
|
84
|
+
})();
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function shouldBypassBearerAuth(method, path) {
|
|
88
|
+
if (method === "OPTIONS") {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return path === "/api/health";
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/server/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,13 @@ import type { LocalSpeechProviderConfig } from "./speech/providers/local/config.
|
|
|
16
16
|
import type { RequestedSpeechProviders } from "./speech/speech-types.js";
|
|
17
17
|
import { AgentManager } from "./agent/agent-manager.js";
|
|
18
18
|
import { AgentStorage } from "./agent/agent-storage.js";
|
|
19
|
-
import {
|
|
19
|
+
import type { TerminalManager } from "../terminal/terminal-manager.js";
|
|
20
20
|
import type { AgentClient, AgentProvider } from "./agent/agent-sdk-types.js";
|
|
21
21
|
import type { AgentProviderRuntimeSettingsMap, ProviderOverride } from "./agent/provider-launch-config.js";
|
|
22
22
|
import { ScriptRouteStore } from "./script-proxy.js";
|
|
23
23
|
import { WorkspaceScriptRuntimeStore } from "./workspace-script-runtime-store.js";
|
|
24
24
|
import { type HostnamesConfig } from "./hostnames.js";
|
|
25
|
+
import { type DaemonAuthConfig } from "./auth.js";
|
|
25
26
|
export type PaseoOpenAIConfig = OpenAiSpeechProviderConfig;
|
|
26
27
|
export type PaseoLocalSpeechConfig = LocalSpeechProviderConfig;
|
|
27
28
|
export interface PaseoSpeechConfig {
|
|
@@ -55,6 +56,7 @@ export interface PaseoDaemonConfig {
|
|
|
55
56
|
relayEndpoint?: string;
|
|
56
57
|
relayPublicEndpoint?: string;
|
|
57
58
|
appBaseUrl?: string;
|
|
59
|
+
auth?: DaemonAuthConfig;
|
|
58
60
|
openai?: PaseoOpenAIConfig;
|
|
59
61
|
speech?: PaseoSpeechConfig;
|
|
60
62
|
voiceLlmProvider?: AgentProvider | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/server/bootstrap.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAyBnC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAoC9D;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/server/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,8 @@ function formatListenTarget(listenTarget) {
|
|
|
72
72
|
}
|
|
73
73
|
import { VoiceAssistantWebSocketServer } from "./websocket-server.js";
|
|
74
74
|
import { createGitHubService } from "../services/github-service.js";
|
|
75
|
-
import { createPaseoWorktree } from "./paseo-worktree-service.js";
|
|
75
|
+
import { createPaseoWorktree as createRegisteredPaseoWorktree } from "./paseo-worktree-service.js";
|
|
76
|
+
import { createPaseoWorktreeWorkflow } from "./worktree-session.js";
|
|
76
77
|
import { createWorktreeCoreDeps } from "./worktree-core.js";
|
|
77
78
|
import { DownloadTokenStore } from "./file-download/token-store.js";
|
|
78
79
|
import { createSpeechService } from "./speech/speech-runtime.js";
|
|
@@ -91,7 +92,7 @@ import { DaemonConfigStore } from "./daemon-config-store.js";
|
|
|
91
92
|
import { WorkspaceGitServiceImpl } from "./workspace-git-service.js";
|
|
92
93
|
import { archivePersistedWorkspaceRecord } from "./workspace-archive-service.js";
|
|
93
94
|
import { wrapSessionMessage } from "./messages.js";
|
|
94
|
-
import {
|
|
95
|
+
import { createConfiguredTerminalManager } from "../terminal/terminal-manager-factory.js";
|
|
95
96
|
import { createConnectionOfferV2, encodeOfferToFragmentUrl } from "./connection-offer.js";
|
|
96
97
|
import { loadOrCreateDaemonKeyPair } from "./daemon-keypair.js";
|
|
97
98
|
import { startRelayTransport } from "./relay-transport.js";
|
|
@@ -102,6 +103,7 @@ import { ScriptHealthMonitor } from "./script-health-monitor.js";
|
|
|
102
103
|
import { createScriptStatusEmitter } from "./script-status-projection.js";
|
|
103
104
|
import { WorkspaceScriptRuntimeStore } from "./workspace-script-runtime-store.js";
|
|
104
105
|
import { isHostnameAllowed } from "./hostnames.js";
|
|
106
|
+
import { createRequireBearerMiddleware } from "./auth.js";
|
|
105
107
|
function formatHostForHttpUrl(host) {
|
|
106
108
|
return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
|
|
107
109
|
}
|
|
@@ -150,6 +152,7 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
150
152
|
runtimeStore: scriptRuntimeStore,
|
|
151
153
|
daemonPort: () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null),
|
|
152
154
|
resolveWorkspaceDirectory: async (workspaceId) => (await workspaceRegistry?.get(workspaceId))?.cwd ?? null,
|
|
155
|
+
logger,
|
|
153
156
|
}),
|
|
154
157
|
});
|
|
155
158
|
const handleBranchChange = createBranchChangeRouteHandler({
|
|
@@ -171,11 +174,6 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
171
174
|
next();
|
|
172
175
|
});
|
|
173
176
|
}
|
|
174
|
-
// Script proxy — intercepts requests for registered *.localhost hostnames
|
|
175
|
-
// and forwards them to the corresponding local script port. Placed after
|
|
176
|
-
// the host allowlist (*.localhost is already allowed) but before CORS and
|
|
177
|
-
// the rest of the routes so proxied requests skip unnecessary middleware.
|
|
178
|
-
app.use(createScriptProxyMiddleware({ routeStore: scriptRouteStore, logger }));
|
|
179
177
|
// CORS - allow same-origin + configured origins
|
|
180
178
|
const allowedOrigins = new Set([
|
|
181
179
|
...config.corsAllowedOrigins,
|
|
@@ -204,6 +202,13 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
204
202
|
}
|
|
205
203
|
next();
|
|
206
204
|
});
|
|
205
|
+
app.use(createRequireBearerMiddleware(config.auth, (context) => {
|
|
206
|
+
logger.warn(context, "Rejected HTTP request with invalid daemon password");
|
|
207
|
+
}));
|
|
208
|
+
// Script proxy — intercepts requests for registered *.localhost hostnames
|
|
209
|
+
// and forwards them to the corresponding local script port. Placed after
|
|
210
|
+
// host/CORS/auth checks but before the rest of the routes.
|
|
211
|
+
app.use(createScriptProxyMiddleware({ routeStore: scriptRouteStore, logger }));
|
|
207
212
|
// Serve static files from public directory
|
|
208
213
|
app.use("/public", express.static(staticDir));
|
|
209
214
|
// Middleware
|
|
@@ -283,7 +288,7 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
283
288
|
paseoHome: config.paseoHome,
|
|
284
289
|
logger,
|
|
285
290
|
});
|
|
286
|
-
const terminalManager =
|
|
291
|
+
const terminalManager = createConfiguredTerminalManager();
|
|
287
292
|
const github = createGitHubService();
|
|
288
293
|
const workspaceGitService = new WorkspaceGitServiceImpl({
|
|
289
294
|
logger,
|
|
@@ -363,9 +368,21 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
363
368
|
projectRegistry,
|
|
364
369
|
});
|
|
365
370
|
};
|
|
366
|
-
const
|
|
367
|
-
const
|
|
368
|
-
|
|
371
|
+
const markWorkspaceArchivingForMcpArchive = (workspaceIds, archivingAt) => {
|
|
372
|
+
const workspaceIdList = Array.from(workspaceIds);
|
|
373
|
+
for (const session of wsServer?.listActiveSessions() ?? []) {
|
|
374
|
+
session.markWorkspaceArchivingForExternalMutation(workspaceIdList, archivingAt);
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
const clearWorkspaceArchivingForMcpArchive = (workspaceIds) => {
|
|
378
|
+
const workspaceIdList = Array.from(workspaceIds);
|
|
379
|
+
for (const session of wsServer?.listActiveSessions() ?? []) {
|
|
380
|
+
session.clearWorkspaceArchivingForExternalMutation(workspaceIdList);
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
const emitWorkspaceUpdatesForMcpArchive = async (workspaceIds) => {
|
|
384
|
+
const workspaceIdList = Array.from(workspaceIds);
|
|
385
|
+
await Promise.all((wsServer?.listActiveSessions() ?? []).map((session) => session.emitWorkspaceUpdatesForExternalWorkspaceIds(workspaceIdList)));
|
|
369
386
|
};
|
|
370
387
|
const emitMcpArchiveSessionMessage = (message) => {
|
|
371
388
|
wsServer?.broadcast(wrapSessionMessage(message));
|
|
@@ -381,25 +398,49 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
381
398
|
github,
|
|
382
399
|
workspaceGitService,
|
|
383
400
|
archiveWorkspaceRecord: archiveWorkspaceRecordForMcp,
|
|
384
|
-
|
|
401
|
+
emitWorkspaceUpdatesForWorkspaceIds: emitWorkspaceUpdatesForMcpArchive,
|
|
402
|
+
markWorkspaceArchiving: markWorkspaceArchivingForMcpArchive,
|
|
403
|
+
clearWorkspaceArchiving: clearWorkspaceArchivingForMcpArchive,
|
|
385
404
|
emitSessionMessage: emitMcpArchiveSessionMessage,
|
|
386
405
|
createPaseoWorktree: async (input, serviceOptions) => {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
406
|
+
return createPaseoWorktreeWorkflow({
|
|
407
|
+
paseoHome: config.paseoHome,
|
|
408
|
+
createPaseoWorktree: async (workflowInput, workflowOptions) => {
|
|
409
|
+
const coreDeps = createWorktreeCoreDeps(github);
|
|
410
|
+
return createRegisteredPaseoWorktree(workflowInput, {
|
|
411
|
+
...coreDeps,
|
|
412
|
+
...(workflowOptions?.resolveDefaultBranch
|
|
413
|
+
? {
|
|
414
|
+
resolveDefaultBranch: workflowOptions.resolveDefaultBranch,
|
|
415
|
+
}
|
|
416
|
+
: {}),
|
|
417
|
+
projectRegistry,
|
|
418
|
+
workspaceRegistry,
|
|
419
|
+
workspaceGitService,
|
|
420
|
+
});
|
|
421
|
+
},
|
|
422
|
+
warmWorkspaceGitData: async (workspace) => {
|
|
423
|
+
await Promise.all(wsServer
|
|
424
|
+
?.listActiveSessions()
|
|
425
|
+
.map((session) => session.warmWorkspaceGitDataForWorkspace(workspace)) ?? []);
|
|
426
|
+
},
|
|
427
|
+
emitWorkspaceUpdateForCwd: async (cwd, emitOptions) => {
|
|
428
|
+
await Promise.all(wsServer
|
|
429
|
+
?.listActiveSessions()
|
|
430
|
+
.map((session) => session.emitWorkspaceUpdatesForExternalCwds([cwd])) ?? []);
|
|
431
|
+
void emitOptions;
|
|
432
|
+
},
|
|
433
|
+
cacheWorkspaceSetupSnapshot: () => { },
|
|
434
|
+
emit: emitMcpArchiveSessionMessage,
|
|
435
|
+
sessionLogger: logger,
|
|
436
|
+
terminalManager,
|
|
437
|
+
archiveWorkspaceRecord: archiveWorkspaceRecordForMcp,
|
|
438
|
+
scriptRouteStore,
|
|
439
|
+
scriptRuntimeStore,
|
|
440
|
+
getDaemonTcpPort: () => boundListenTarget?.type === "tcp" ? boundListenTarget.port : null,
|
|
441
|
+
getDaemonTcpHost: () => boundListenTarget?.type === "tcp" ? boundListenTarget.host : null,
|
|
442
|
+
onScriptsChanged: null,
|
|
443
|
+
}, input, serviceOptions);
|
|
403
444
|
},
|
|
404
445
|
paseoHome: config.paseoHome,
|
|
405
446
|
callerAgentId,
|
|
@@ -540,13 +581,21 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
540
581
|
logger.info({
|
|
541
582
|
host: boundListenTarget.host,
|
|
542
583
|
port: boundListenTarget.port,
|
|
584
|
+
authRequired: !!config.auth?.password,
|
|
543
585
|
elapsed: elapsed(),
|
|
544
586
|
}, `Server listening on http://${boundListenTarget.host}:${boundListenTarget.port}`);
|
|
545
587
|
}
|
|
546
588
|
else {
|
|
547
|
-
logger.info({
|
|
589
|
+
logger.info({
|
|
590
|
+
path: boundListenTarget.path,
|
|
591
|
+
authRequired: !!config.auth?.password,
|
|
592
|
+
elapsed: elapsed(),
|
|
593
|
+
}, `Server listening on ${boundListenTarget.path}`);
|
|
594
|
+
}
|
|
595
|
+
if (config.auth?.password) {
|
|
596
|
+
logger.info("Daemon password authentication enabled");
|
|
548
597
|
}
|
|
549
|
-
wsServer = new VoiceAssistantWebSocketServer(httpServer, logger, serverId, agentManager, agentStorage, downloadTokenStore, config.paseoHome, daemonConfigStore, mcpBaseUrl, { allowedOrigins, hostnames: configuredHostnames }, speechService, terminalManager, {
|
|
598
|
+
wsServer = new VoiceAssistantWebSocketServer(httpServer, logger, serverId, agentManager, agentStorage, downloadTokenStore, config.paseoHome, daemonConfigStore, mcpBaseUrl, { allowedOrigins, hostnames: configuredHostnames }, config.auth, speechService, terminalManager, {
|
|
550
599
|
finalTimeoutMs: config.dictationFinalTimeoutMs,
|
|
551
600
|
}, config.agentProviderSettings, config.providerOverrides, config.isDev === true, daemonVersion, (intent) => {
|
|
552
601
|
try {
|
|
@@ -622,6 +671,14 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
622
671
|
if (wsServer) {
|
|
623
672
|
await wsServer.close();
|
|
624
673
|
}
|
|
674
|
+
// Force-drop remaining sockets so httpServer.close() resolves promptly.
|
|
675
|
+
// We've already closed wsServer (which sent ws-layer close frames) and
|
|
676
|
+
// stopped every other service, so anything still attached is a TCP
|
|
677
|
+
// socket whose higher-level shutdown hasn't fully released it (e.g.
|
|
678
|
+
// upgraded WS sockets in the closing handshake, or HTTP keep-alive
|
|
679
|
+
// sockets in CLOSE_WAIT). closeIdleConnections() does not catch
|
|
680
|
+
// upgraded sockets, so we use closeAllConnections() here.
|
|
681
|
+
httpServer.closeAllConnections();
|
|
625
682
|
await new Promise((resolve) => {
|
|
626
683
|
httpServer.close(() => resolve());
|
|
627
684
|
});
|