@getpaseo/server 0.1.59 → 0.1.61
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/scripts/dev-runner.js +26 -7
- package/dist/scripts/dev-runner.js.map +1 -1
- package/dist/server/client/daemon-client-runtime-metrics.d.ts +39 -0
- package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -0
- package/dist/server/client/daemon-client-runtime-metrics.js +173 -0
- package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -0
- package/dist/server/client/daemon-client.d.ts +58 -9
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +151 -10
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +55 -48
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +541 -331
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +3 -2
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +31 -16
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts +2 -1
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +29 -1
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +9 -5
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +76 -69
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.js +13 -6
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
- package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store-types.js.map +1 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +32 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -0
- package/dist/server/server/agent/agent-timeline-store.js +245 -0
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +12 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +276 -65
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +196 -152
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +40 -42
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
- package/dist/server/server/agent/model-resolver.js +3 -1
- package/dist/server/server/agent/model-resolver.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts +6 -0
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -0
- package/dist/server/server/agent/prompt-attachments.js +31 -0
- package/dist/server/server/agent/prompt-attachments.js.map +1 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +78 -8
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +35 -0
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +1 -0
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +22 -1
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts +5 -2
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +61 -17
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +17 -5
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +150 -61
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +8 -4
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +73 -8
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
- package/dist/server/server/agent/providers/claude-agent.d.ts +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +8 -7
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +37 -4
- 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 +61 -31
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -2
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +64 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +585 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +19 -4
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +227 -118
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts +69 -0
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/pi-direct-agent.js +1171 -0
- package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -4
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent-attention-policy.d.ts +13 -13
- package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
- package/dist/server/server/agent-attention-policy.js +20 -36
- package/dist/server/server/agent-attention-policy.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts +6 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +113 -11
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/chat/chat-rpc-schemas.d.ts +44 -44
- package/dist/server/server/chat/chat-types.d.ts +6 -6
- package/dist/server/server/checkout-diff-manager.d.ts +0 -1
- package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
- package/dist/server/server/checkout-diff-manager.js +6 -4
- package/dist/server/server/checkout-diff-manager.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +1 -0
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/file-explorer/service.d.ts.map +1 -1
- package/dist/server/server/file-explorer/service.js +2 -1
- package/dist/server/server/file-explorer/service.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +392 -392
- package/dist/server/server/loop-service.d.ts +52 -52
- package/dist/server/server/paseo-worktree-archive-service.d.ts +41 -0
- package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -0
- package/dist/server/server/paseo-worktree-archive-service.js +137 -0
- package/dist/server/server/paseo-worktree-archive-service.js.map +1 -0
- package/dist/server/server/paseo-worktree-service.d.ts +24 -0
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -0
- package/dist/server/server/paseo-worktree-service.js +94 -0
- package/dist/server/server/paseo-worktree-service.js.map +1 -0
- package/dist/server/server/path-utils.d.ts +1 -0
- package/dist/server/server/path-utils.d.ts.map +1 -1
- package/dist/server/server/path-utils.js +9 -0
- package/dist/server/server/path-utils.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +195 -67
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persistence-hooks.d.ts.map +1 -1
- package/dist/server/server/persistence-hooks.js +3 -0
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +30 -0
- package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +163 -0
- package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts +192 -192
- package/dist/server/server/schedule/service.d.ts +1 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/types.d.ts +44 -44
- package/dist/server/server/script-health-monitor.d.ts +39 -0
- package/dist/server/server/script-health-monitor.d.ts.map +1 -0
- package/dist/server/server/script-health-monitor.js +158 -0
- package/dist/server/server/script-health-monitor.js.map +1 -0
- package/dist/server/server/script-proxy.d.ts +40 -0
- package/dist/server/server/script-proxy.d.ts.map +1 -0
- package/dist/server/server/script-proxy.js +245 -0
- package/dist/server/server/script-proxy.js.map +1 -0
- package/dist/server/server/script-route-branch-handler.d.ts +10 -0
- package/dist/server/server/script-route-branch-handler.d.ts.map +1 -0
- package/dist/server/server/script-route-branch-handler.js +45 -0
- package/dist/server/server/script-route-branch-handler.js.map +1 -0
- package/dist/server/server/script-status-projection.d.ts +29 -0
- package/dist/server/server/script-status-projection.d.ts.map +1 -0
- package/dist/server/server/script-status-projection.js +133 -0
- package/dist/server/server/script-status-projection.js.map +1 -0
- package/dist/server/server/session.d.ts +77 -13
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +1290 -548
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +27 -3
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +112 -29
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-archive-service.d.ts +8 -0
- package/dist/server/server/workspace-archive-service.d.ts.map +1 -0
- package/dist/server/server/workspace-archive-service.js +17 -0
- package/dist/server/server/workspace-archive-service.js.map +1 -0
- package/dist/server/server/workspace-git-metadata.d.ts +24 -0
- package/dist/server/server/workspace-git-metadata.d.ts.map +1 -0
- package/dist/server/server/workspace-git-metadata.js +78 -0
- package/dist/server/server/workspace-git-metadata.js.map +1 -0
- package/dist/server/server/workspace-git-service.d.ts +104 -5
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +442 -56
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.d.ts +54 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -0
- package/dist/server/server/workspace-reconciliation-service.js +176 -0
- package/dist/server/server/workspace-reconciliation-service.js.map +1 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-bootstrap.js +4 -3
- package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
- package/dist/server/server/workspace-registry.d.ts +8 -8
- package/dist/server/server/workspace-registry.test-helpers.d.ts +37 -0
- package/dist/server/server/workspace-registry.test-helpers.d.ts.map +1 -0
- package/dist/server/server/workspace-registry.test-helpers.js +121 -0
- package/dist/server/server/workspace-registry.test-helpers.js.map +1 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -0
- package/dist/server/server/workspace-script-runtime-store.js +78 -0
- package/dist/server/server/workspace-script-runtime-store.js.map +1 -0
- package/dist/server/server/workspace-service-env.d.ts +17 -0
- package/dist/server/server/workspace-service-env.d.ts.map +1 -0
- package/dist/server/server/workspace-service-env.js +80 -0
- package/dist/server/server/workspace-service-env.js.map +1 -0
- package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
- package/dist/server/server/workspace-service-port-registry.d.ts.map +1 -0
- package/dist/server/server/workspace-service-port-registry.js +59 -0
- package/dist/server/server/workspace-service-port-registry.js.map +1 -0
- package/dist/server/server/worktree-bootstrap.d.ts +55 -10
- package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
- package/dist/server/server/worktree-bootstrap.js +290 -112
- package/dist/server/server/worktree-bootstrap.js.map +1 -1
- package/dist/server/server/worktree-core.d.ts +25 -0
- package/dist/server/server/worktree-core.d.ts.map +1 -0
- package/dist/server/server/worktree-core.js +75 -0
- package/dist/server/server/worktree-core.js.map +1 -0
- package/dist/server/server/worktree-errors.d.ts +12 -0
- package/dist/server/server/worktree-errors.d.ts.map +1 -0
- package/dist/server/server/worktree-errors.js +31 -0
- package/dist/server/server/worktree-errors.js.map +1 -0
- package/dist/server/server/worktree-session.d.ts +56 -70
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +176 -251
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +225 -0
- package/dist/server/services/github-service.d.ts.map +1 -0
- package/dist/server/services/github-service.js +1381 -0
- package/dist/server/services/github-service.js.map +1 -0
- package/dist/server/shared/messages.d.ts +29408 -12268
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +391 -65
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/server/terminal/terminal-manager.d.ts +9 -0
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +27 -0
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-output-coalescer.d.ts +30 -0
- package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -0
- package/dist/server/terminal/terminal-output-coalescer.js +55 -0
- package/dist/server/terminal/terminal-output-coalescer.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +32 -1
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +397 -17
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +63 -10
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +321 -229
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/promise-timeout.d.ts +9 -0
- package/dist/server/utils/promise-timeout.d.ts.map +1 -0
- package/dist/server/utils/promise-timeout.js +25 -0
- package/dist/server/utils/promise-timeout.js.map +1 -0
- package/dist/server/utils/script-hostname.d.ts +8 -0
- package/dist/server/utils/script-hostname.d.ts.map +1 -0
- package/dist/server/utils/script-hostname.js +14 -0
- package/dist/server/utils/script-hostname.js.map +1 -0
- package/dist/server/utils/string-command-shell.d.ts +10 -0
- package/dist/server/utils/string-command-shell.d.ts.map +1 -0
- package/dist/server/utils/string-command-shell.js +21 -0
- package/dist/server/utils/string-command-shell.js.map +1 -0
- package/dist/server/utils/worktree.d.ts +54 -7
- package/dist/server/utils/worktree.d.ts.map +1 -1
- package/dist/server/utils/worktree.js +434 -129
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/package.json +11 -14
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
- package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
|
@@ -12,11 +12,15 @@ import type { CheckoutDiffManager } from "./checkout-diff-manager.js";
|
|
|
12
12
|
import type { DaemonConfigStore } from "./daemon-config-store.js";
|
|
13
13
|
import { type ServerCapabilities, type WSOutboundMessage } from "./messages.js";
|
|
14
14
|
import type { HostnamesConfig } from "./hostnames.js";
|
|
15
|
-
import { type SessionLifecycleIntent } from "./session.js";
|
|
15
|
+
import { Session, type SessionLifecycleIntent } from "./session.js";
|
|
16
16
|
import type { AgentProviderRuntimeSettingsMap, ProviderOverride } from "./agent/provider-launch-config.js";
|
|
17
17
|
import { WorkspaceGitServiceImpl } from "./workspace-git-service.js";
|
|
18
|
+
import type { ScriptHealthState } from "./script-health-monitor.js";
|
|
19
|
+
import type { ScriptRouteStore } from "./script-proxy.js";
|
|
20
|
+
import type { WorkspaceScriptRuntimeStore } from "./workspace-script-runtime-store.js";
|
|
18
21
|
import type { SpeechReadinessSnapshot, SpeechService } from "./speech/speech-runtime.js";
|
|
19
22
|
import type { VoiceCallerContext, VoiceSpeakHandler } from "./voice-types.js";
|
|
23
|
+
import { type GitHubService } from "../services/github-service.js";
|
|
20
24
|
export type ExternalSocketMetadata = {
|
|
21
25
|
transport: "relay";
|
|
22
26
|
externalSessionKey?: string;
|
|
@@ -55,6 +59,7 @@ export declare class VoiceAssistantWebSocketServer {
|
|
|
55
59
|
private readonly loopService;
|
|
56
60
|
private readonly scheduleService;
|
|
57
61
|
private readonly checkoutDiffManager;
|
|
62
|
+
private readonly github;
|
|
58
63
|
private readonly workspaceGitService;
|
|
59
64
|
private readonly downloadTokenStore;
|
|
60
65
|
private readonly paseoHome;
|
|
@@ -64,26 +69,41 @@ export declare class VoiceAssistantWebSocketServer {
|
|
|
64
69
|
private readonly mcpBaseUrl;
|
|
65
70
|
private readonly speech;
|
|
66
71
|
private readonly terminalManager;
|
|
72
|
+
private readonly scriptRouteStore;
|
|
73
|
+
private readonly scriptRuntimeStore;
|
|
74
|
+
private readonly getDaemonTcpPort;
|
|
75
|
+
private readonly getDaemonTcpHost;
|
|
76
|
+
private readonly resolveScriptHealth;
|
|
67
77
|
private readonly dictation;
|
|
68
78
|
private readonly voiceSpeakHandlers;
|
|
69
79
|
private readonly voiceCallerContexts;
|
|
80
|
+
private readonly workspaceSetupSnapshots;
|
|
70
81
|
private readonly agentProviderRuntimeSettings;
|
|
71
82
|
private readonly providerOverrides;
|
|
83
|
+
private readonly isDev;
|
|
72
84
|
private readonly providerSnapshotManager;
|
|
73
85
|
private readonly onLifecycleIntent;
|
|
86
|
+
private readonly onBranchChanged;
|
|
74
87
|
private serverCapabilities;
|
|
75
88
|
private runtimeWindowStartedAt;
|
|
76
89
|
private readonly runtimeCounters;
|
|
77
90
|
private readonly inboundMessageCounts;
|
|
78
91
|
private readonly inboundSessionRequestCounts;
|
|
92
|
+
private readonly outboundMessageCounts;
|
|
93
|
+
private readonly outboundSessionMessageCounts;
|
|
94
|
+
private readonly outboundAgentStreamCounts;
|
|
95
|
+
private readonly outboundAgentStreamByAgentCounts;
|
|
96
|
+
private readonly outboundBinaryFrameCounts;
|
|
97
|
+
private readonly bufferedAmountSamples;
|
|
79
98
|
private readonly requestLatencies;
|
|
80
99
|
private runtimeMetricsInterval;
|
|
81
100
|
private unsubscribeSpeechReadiness;
|
|
82
101
|
private unsubscribeDaemonConfigChange;
|
|
83
102
|
constructor(server: HTTPServer, logger: pino.Logger, serverId: string, agentManager: AgentManager, agentStorage: AgentStorage, downloadTokenStore: DownloadTokenStore, paseoHome: string, daemonConfigStore: DaemonConfigStore, mcpBaseUrl: string | null, wsConfig: WebSocketServerConfig, speech?: SpeechService | null, terminalManager?: TerminalManager | null, dictation?: {
|
|
84
103
|
finalTimeoutMs?: number;
|
|
85
|
-
}, agentProviderRuntimeSettings?: AgentProviderRuntimeSettingsMap, providerOverrides?: Record<string, ProviderOverride>, daemonVersion?: string, onLifecycleIntent?: (intent: SessionLifecycleIntent) => void, projectRegistry?: ProjectRegistry, workspaceRegistry?: WorkspaceRegistry, chatService?: FileBackedChatService, loopService?: LoopService, scheduleService?: ScheduleService, checkoutDiffManager?: CheckoutDiffManager, workspaceGitService?: WorkspaceGitServiceImpl);
|
|
104
|
+
}, agentProviderRuntimeSettings?: AgentProviderRuntimeSettingsMap, providerOverrides?: Record<string, ProviderOverride>, isDev?: boolean, daemonVersion?: string, onLifecycleIntent?: (intent: SessionLifecycleIntent) => void, projectRegistry?: ProjectRegistry, workspaceRegistry?: WorkspaceRegistry, chatService?: FileBackedChatService, loopService?: LoopService, scheduleService?: ScheduleService, checkoutDiffManager?: CheckoutDiffManager, scriptRouteStore?: ScriptRouteStore | null, scriptRuntimeStore?: WorkspaceScriptRuntimeStore | null, onBranchChanged?: (workspaceId: string, oldBranch: string | null, newBranch: string | null) => void, getDaemonTcpPort?: () => number | null, getDaemonTcpHost?: () => string | null, resolveScriptHealth?: (hostname: string) => ScriptHealthState | null, workspaceGitService?: WorkspaceGitServiceImpl, github?: GitHubService);
|
|
86
105
|
broadcast(message: WSOutboundMessage): void;
|
|
106
|
+
listActiveSessions(): Session[];
|
|
87
107
|
publishSpeechReadiness(readiness: SpeechReadinessSnapshot | null): void;
|
|
88
108
|
updateServerCapabilities(capabilities: ServerCapabilities | null | undefined): void;
|
|
89
109
|
attachExternalSocket(ws: WebSocketLike, metadata?: ExternalSocketMetadata): Promise<void>;
|
|
@@ -107,14 +127,18 @@ export declare class VoiceAssistantWebSocketServer {
|
|
|
107
127
|
private detachSocket;
|
|
108
128
|
private cleanupConnection;
|
|
109
129
|
private handleRawMessage;
|
|
110
|
-
private readonly ACTIVITY_THRESHOLD_MS;
|
|
111
130
|
private incrementRuntimeCounter;
|
|
112
131
|
private incrementCount;
|
|
113
132
|
private recordInboundMessageType;
|
|
114
133
|
private recordInboundSessionRequestType;
|
|
134
|
+
private recordOutboundMessage;
|
|
135
|
+
private recordOutboundAgentStreamMessage;
|
|
136
|
+
private recordOutboundBinaryFrame;
|
|
137
|
+
private recordBufferedAmount;
|
|
115
138
|
private recordRequestLatency;
|
|
116
139
|
private getTopCounts;
|
|
117
140
|
private computeLatencyStats;
|
|
141
|
+
private computeBufferedAmountStats;
|
|
118
142
|
private collectSessionRuntimeMetrics;
|
|
119
143
|
private flushRuntimeMetrics;
|
|
120
144
|
private getClientActivityState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../../src/server/websocket-server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,0BAA0B,CAAC;AACvF,OAAO,
|
|
1
|
+
{"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../../src/server/websocket-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,9 @@ import { ProviderSnapshotManager } from "./agent/provider-snapshot-manager.js";
|
|
|
9
9
|
import { buildProviderRegistry } from "./agent/provider-registry.js";
|
|
10
10
|
import { PushTokenStore } from "./push/token-store.js";
|
|
11
11
|
import { PushService } from "./push/push-service.js";
|
|
12
|
-
import {
|
|
13
|
-
import { buildAgentAttentionNotificationPayload,
|
|
12
|
+
import { computeNotificationPlan } from "./agent-attention-policy.js";
|
|
13
|
+
import { buildAgentAttentionNotificationPayload, findLatestPermissionRequest, } from "../shared/agent-attention-notification.js";
|
|
14
|
+
import { createGitHubService } from "../services/github-service.js";
|
|
14
15
|
function createFallbackWorkspaceGitService() {
|
|
15
16
|
return {
|
|
16
17
|
subscribe: async ({ cwd }) => ({
|
|
@@ -33,7 +34,6 @@ function createFallbackWorkspaceGitService() {
|
|
|
33
34
|
featuresEnabled: false,
|
|
34
35
|
pullRequest: null,
|
|
35
36
|
error: null,
|
|
36
|
-
refreshedAt: null,
|
|
37
37
|
},
|
|
38
38
|
},
|
|
39
39
|
unsubscribe: () => { },
|
|
@@ -58,7 +58,6 @@ function createFallbackWorkspaceGitService() {
|
|
|
58
58
|
featuresEnabled: false,
|
|
59
59
|
pullRequest: null,
|
|
60
60
|
error: null,
|
|
61
|
-
refreshedAt: null,
|
|
62
61
|
},
|
|
63
62
|
}),
|
|
64
63
|
refresh: async () => { },
|
|
@@ -168,12 +167,13 @@ export class MissingDaemonVersionError extends Error {
|
|
|
168
167
|
* WebSocket server that only accepts sockets + parses/forwards messages to the session layer.
|
|
169
168
|
*/
|
|
170
169
|
export class VoiceAssistantWebSocketServer {
|
|
171
|
-
constructor(server, logger, serverId, agentManager, agentStorage, downloadTokenStore, paseoHome, daemonConfigStore, mcpBaseUrl, wsConfig, speech, terminalManager, dictation, agentProviderRuntimeSettings, providerOverrides, daemonVersion, onLifecycleIntent, projectRegistry, workspaceRegistry, chatService, loopService, scheduleService, checkoutDiffManager, workspaceGitService) {
|
|
170
|
+
constructor(server, logger, serverId, agentManager, agentStorage, downloadTokenStore, paseoHome, daemonConfigStore, mcpBaseUrl, wsConfig, speech, terminalManager, dictation, agentProviderRuntimeSettings, providerOverrides, isDev, daemonVersion, onLifecycleIntent, projectRegistry, workspaceRegistry, chatService, loopService, scheduleService, checkoutDiffManager, scriptRouteStore, scriptRuntimeStore, onBranchChanged, getDaemonTcpPort, getDaemonTcpHost, resolveScriptHealth, workspaceGitService, github) {
|
|
172
171
|
this.pendingConnections = new Map();
|
|
173
172
|
this.sessions = new Map();
|
|
174
173
|
this.externalSessionsByKey = new Map();
|
|
175
174
|
this.voiceSpeakHandlers = new Map();
|
|
176
175
|
this.voiceCallerContexts = new Map();
|
|
176
|
+
this.workspaceSetupSnapshots = new Map();
|
|
177
177
|
this.runtimeWindowStartedAt = Date.now();
|
|
178
178
|
this.runtimeCounters = {
|
|
179
179
|
connectedAwaitingHello: 0,
|
|
@@ -194,11 +194,16 @@ export class VoiceAssistantWebSocketServer {
|
|
|
194
194
|
};
|
|
195
195
|
this.inboundMessageCounts = new Map();
|
|
196
196
|
this.inboundSessionRequestCounts = new Map();
|
|
197
|
+
this.outboundMessageCounts = new Map();
|
|
198
|
+
this.outboundSessionMessageCounts = new Map();
|
|
199
|
+
this.outboundAgentStreamCounts = new Map();
|
|
200
|
+
this.outboundAgentStreamByAgentCounts = new Map();
|
|
201
|
+
this.outboundBinaryFrameCounts = new Map();
|
|
202
|
+
this.bufferedAmountSamples = [];
|
|
197
203
|
this.requestLatencies = new Map();
|
|
198
204
|
this.runtimeMetricsInterval = null;
|
|
199
205
|
this.unsubscribeSpeechReadiness = null;
|
|
200
206
|
this.unsubscribeDaemonConfigChange = null;
|
|
201
|
-
this.ACTIVITY_THRESHOLD_MS = 120000;
|
|
202
207
|
this.logger = logger.child({ module: "websocket-server" });
|
|
203
208
|
this.serverId = serverId;
|
|
204
209
|
if (typeof daemonVersion !== "string" || daemonVersion.trim().length === 0) {
|
|
@@ -225,6 +230,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
225
230
|
throw new Error("VoiceAssistantWebSocketServer requires a checkout diff manager.");
|
|
226
231
|
}
|
|
227
232
|
this.checkoutDiffManager = checkoutDiffManager;
|
|
233
|
+
this.github = github ?? createGitHubService();
|
|
228
234
|
this.workspaceGitService = workspaceGitService ?? createFallbackWorkspaceGitService();
|
|
229
235
|
this.downloadTokenStore = downloadTokenStore;
|
|
230
236
|
this.paseoHome = paseoHome;
|
|
@@ -235,12 +241,20 @@ export class VoiceAssistantWebSocketServer {
|
|
|
235
241
|
this.dictation = dictation ?? null;
|
|
236
242
|
this.agentProviderRuntimeSettings = agentProviderRuntimeSettings;
|
|
237
243
|
this.providerOverrides = providerOverrides;
|
|
244
|
+
this.isDev = isDev === true;
|
|
238
245
|
const providerSnapshotLogger = this.logger.child({ module: "provider-snapshot-manager" });
|
|
239
246
|
this.providerSnapshotManager = new ProviderSnapshotManager(buildProviderRegistry(providerSnapshotLogger, {
|
|
240
247
|
runtimeSettings: this.agentProviderRuntimeSettings,
|
|
241
248
|
providerOverrides: this.providerOverrides,
|
|
249
|
+
isDev: this.isDev,
|
|
242
250
|
}), providerSnapshotLogger);
|
|
243
251
|
this.onLifecycleIntent = onLifecycleIntent ?? null;
|
|
252
|
+
this.scriptRouteStore = scriptRouteStore ?? null;
|
|
253
|
+
this.scriptRuntimeStore = scriptRuntimeStore ?? null;
|
|
254
|
+
this.onBranchChanged = onBranchChanged ?? null;
|
|
255
|
+
this.getDaemonTcpPort = getDaemonTcpPort ?? null;
|
|
256
|
+
this.getDaemonTcpHost = getDaemonTcpHost ?? null;
|
|
257
|
+
this.resolveScriptHealth = resolveScriptHealth ?? null;
|
|
244
258
|
this.serverCapabilities = buildServerCapabilities({
|
|
245
259
|
readiness: this.speech?.getReadiness() ?? null,
|
|
246
260
|
});
|
|
@@ -255,7 +269,9 @@ export class VoiceAssistantWebSocketServer {
|
|
|
255
269
|
this.pushTokenStore = new PushTokenStore(pushLogger, join(paseoHome, "push-tokens.json"));
|
|
256
270
|
this.pushService = new PushService(pushLogger, this.pushTokenStore);
|
|
257
271
|
this.agentManager.setAgentAttentionCallback((params) => {
|
|
258
|
-
this.broadcastAgentAttention(params)
|
|
272
|
+
void this.broadcastAgentAttention(params).catch((err) => {
|
|
273
|
+
this.logger.warn({ err, agentId: params.agentId }, "Failed to broadcast agent attention");
|
|
274
|
+
});
|
|
259
275
|
});
|
|
260
276
|
const { allowedOrigins, hostnames } = wsConfig;
|
|
261
277
|
this.wss = new WebSocketServer({
|
|
@@ -300,9 +316,13 @@ export class VoiceAssistantWebSocketServer {
|
|
|
300
316
|
// WebSocket.OPEN = 1
|
|
301
317
|
if (ws.readyState === 1) {
|
|
302
318
|
ws.send(payload);
|
|
319
|
+
this.recordOutboundMessage(message, ws);
|
|
303
320
|
}
|
|
304
321
|
}
|
|
305
322
|
}
|
|
323
|
+
listActiveSessions() {
|
|
324
|
+
return Array.from(new Set([...this.sessions.values(), ...this.externalSessionsByKey.values()].map((connection) => connection.session)));
|
|
325
|
+
}
|
|
306
326
|
publishSpeechReadiness(readiness) {
|
|
307
327
|
this.updateServerCapabilities(buildServerCapabilities({ readiness }));
|
|
308
328
|
}
|
|
@@ -383,6 +403,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
383
403
|
// WebSocket.OPEN = 1
|
|
384
404
|
if (ws.readyState === 1) {
|
|
385
405
|
ws.send(JSON.stringify(message));
|
|
406
|
+
this.recordOutboundMessage(message, ws);
|
|
386
407
|
}
|
|
387
408
|
}
|
|
388
409
|
sendBinaryToClient(ws, frame) {
|
|
@@ -390,6 +411,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
390
411
|
return;
|
|
391
412
|
}
|
|
392
413
|
ws.send(frame);
|
|
414
|
+
this.recordOutboundBinaryFrame(ws);
|
|
393
415
|
}
|
|
394
416
|
sendToConnection(connection, message) {
|
|
395
417
|
for (const ws of connection.sockets) {
|
|
@@ -479,6 +501,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
479
501
|
loopService: this.loopService,
|
|
480
502
|
scheduleService: this.scheduleService,
|
|
481
503
|
checkoutDiffManager: this.checkoutDiffManager,
|
|
504
|
+
github: this.github,
|
|
482
505
|
workspaceGitService: this.workspaceGitService,
|
|
483
506
|
daemonConfigStore: this.daemonConfigStore,
|
|
484
507
|
mcpBaseUrl: this.mcpBaseUrl,
|
|
@@ -486,6 +509,13 @@ export class VoiceAssistantWebSocketServer {
|
|
|
486
509
|
tts: () => this.speech?.resolveTts() ?? null,
|
|
487
510
|
terminalManager: this.terminalManager,
|
|
488
511
|
providerSnapshotManager: this.providerSnapshotManager,
|
|
512
|
+
scriptRouteStore: this.scriptRouteStore ?? undefined,
|
|
513
|
+
scriptRuntimeStore: this.scriptRuntimeStore ?? undefined,
|
|
514
|
+
workspaceSetupSnapshots: this.workspaceSetupSnapshots,
|
|
515
|
+
onBranchChanged: this.onBranchChanged ?? undefined,
|
|
516
|
+
getDaemonTcpPort: this.getDaemonTcpPort ?? undefined,
|
|
517
|
+
getDaemonTcpHost: this.getDaemonTcpHost ?? undefined,
|
|
518
|
+
resolveScriptHealth: this.resolveScriptHealth ?? undefined,
|
|
489
519
|
voice: {
|
|
490
520
|
turnDetection: () => this.speech?.resolveTurnDetection() ?? null,
|
|
491
521
|
},
|
|
@@ -512,6 +542,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
512
542
|
: undefined,
|
|
513
543
|
agentProviderRuntimeSettings: this.agentProviderRuntimeSettings,
|
|
514
544
|
providerOverrides: this.providerOverrides,
|
|
545
|
+
isDev: this.isDev,
|
|
515
546
|
});
|
|
516
547
|
connection = {
|
|
517
548
|
session,
|
|
@@ -937,6 +968,35 @@ export class VoiceAssistantWebSocketServer {
|
|
|
937
968
|
recordInboundSessionRequestType(type) {
|
|
938
969
|
this.incrementCount(this.inboundSessionRequestCounts, type);
|
|
939
970
|
}
|
|
971
|
+
recordOutboundMessage(message, ws) {
|
|
972
|
+
if (message.type !== "session") {
|
|
973
|
+
this.incrementCount(this.outboundMessageCounts, message.type);
|
|
974
|
+
this.recordBufferedAmount(ws);
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
this.incrementCount(this.outboundMessageCounts, "session_message");
|
|
978
|
+
this.incrementCount(this.outboundSessionMessageCounts, message.message.type);
|
|
979
|
+
if (message.message.type === "agent_stream") {
|
|
980
|
+
this.recordOutboundAgentStreamMessage(message.message.payload);
|
|
981
|
+
}
|
|
982
|
+
this.recordBufferedAmount(ws);
|
|
983
|
+
}
|
|
984
|
+
recordOutboundAgentStreamMessage(payload) {
|
|
985
|
+
const { agentId, event } = payload;
|
|
986
|
+
const eventType = event.type === "timeline" ? `timeline:${event.item.type}` : event.type;
|
|
987
|
+
this.incrementCount(this.outboundAgentStreamCounts, eventType);
|
|
988
|
+
this.incrementCount(this.outboundAgentStreamByAgentCounts, agentId);
|
|
989
|
+
}
|
|
990
|
+
recordOutboundBinaryFrame(ws) {
|
|
991
|
+
this.incrementCount(this.outboundBinaryFrameCounts, "binary");
|
|
992
|
+
this.recordBufferedAmount(ws);
|
|
993
|
+
}
|
|
994
|
+
recordBufferedAmount(ws) {
|
|
995
|
+
if (typeof ws.bufferedAmount !== "number") {
|
|
996
|
+
return;
|
|
997
|
+
}
|
|
998
|
+
this.bufferedAmountSamples.push(ws.bufferedAmount);
|
|
999
|
+
}
|
|
940
1000
|
recordRequestLatency(type, durationMs) {
|
|
941
1001
|
let latencies = this.requestLatencies.get(type);
|
|
942
1002
|
if (!latencies) {
|
|
@@ -964,6 +1024,17 @@ export class VoiceAssistantWebSocketServer {
|
|
|
964
1024
|
stats.sort((a, b) => b.totalMs - a.totalMs);
|
|
965
1025
|
return stats.slice(0, 15);
|
|
966
1026
|
}
|
|
1027
|
+
computeBufferedAmountStats() {
|
|
1028
|
+
if (this.bufferedAmountSamples.length === 0) {
|
|
1029
|
+
return { p95: 0, max: 0 };
|
|
1030
|
+
}
|
|
1031
|
+
const samples = [...this.bufferedAmountSamples].sort((a, b) => a - b);
|
|
1032
|
+
const p95Index = Math.ceil(samples.length * 0.95) - 1;
|
|
1033
|
+
return {
|
|
1034
|
+
p95: samples[p95Index] ?? 0,
|
|
1035
|
+
max: samples[samples.length - 1] ?? 0,
|
|
1036
|
+
};
|
|
1037
|
+
}
|
|
967
1038
|
collectSessionRuntimeMetrics() {
|
|
968
1039
|
const uniqueConnections = new Set(this.externalSessionsByKey.values());
|
|
969
1040
|
let terminalDirectorySubscriptionCount = 0;
|
|
@@ -995,6 +1066,7 @@ export class VoiceAssistantWebSocketServer {
|
|
|
995
1066
|
const reconnectGraceSessions = [...this.externalSessionsByKey.values()].filter((connection) => connection.sockets.size === 0 && connection.externalDisconnectCleanupTimeout !== null).length;
|
|
996
1067
|
const sessionMetrics = this.collectSessionRuntimeMetrics();
|
|
997
1068
|
const latencyStats = this.computeLatencyStats();
|
|
1069
|
+
const bufferedAmountStats = this.computeBufferedAmountStats();
|
|
998
1070
|
const agentSnapshot = this.agentManager.getMetricsSnapshot();
|
|
999
1071
|
this.logger.info({
|
|
1000
1072
|
windowMs,
|
|
@@ -1011,6 +1083,12 @@ export class VoiceAssistantWebSocketServer {
|
|
|
1011
1083
|
counters: { ...this.runtimeCounters },
|
|
1012
1084
|
inboundMessageTypesTop: this.getTopCounts(this.inboundMessageCounts, 12),
|
|
1013
1085
|
inboundSessionRequestTypesTop: this.getTopCounts(this.inboundSessionRequestCounts, 20),
|
|
1086
|
+
outboundMessageTypesTop: this.getTopCounts(this.outboundMessageCounts, 12),
|
|
1087
|
+
outboundSessionMessageTypesTop: this.getTopCounts(this.outboundSessionMessageCounts, 20),
|
|
1088
|
+
outboundAgentStreamTypesTop: this.getTopCounts(this.outboundAgentStreamCounts, 20),
|
|
1089
|
+
outboundAgentStreamAgentsTop: this.getTopCounts(this.outboundAgentStreamByAgentCounts, 20),
|
|
1090
|
+
outboundBinaryFrameTypesTop: this.getTopCounts(this.outboundBinaryFrameCounts, 12),
|
|
1091
|
+
bufferedAmount: bufferedAmountStats,
|
|
1014
1092
|
runtime: sessionMetrics,
|
|
1015
1093
|
latency: latencyStats,
|
|
1016
1094
|
agents: agentSnapshot,
|
|
@@ -1020,25 +1098,31 @@ export class VoiceAssistantWebSocketServer {
|
|
|
1020
1098
|
}
|
|
1021
1099
|
this.inboundMessageCounts.clear();
|
|
1022
1100
|
this.inboundSessionRequestCounts.clear();
|
|
1101
|
+
this.outboundMessageCounts.clear();
|
|
1102
|
+
this.outboundSessionMessageCounts.clear();
|
|
1103
|
+
this.outboundAgentStreamCounts.clear();
|
|
1104
|
+
this.outboundAgentStreamByAgentCounts.clear();
|
|
1105
|
+
this.outboundBinaryFrameCounts.clear();
|
|
1106
|
+
this.bufferedAmountSamples.length = 0;
|
|
1023
1107
|
this.requestLatencies.clear();
|
|
1024
1108
|
this.runtimeWindowStartedAt = now;
|
|
1025
1109
|
}
|
|
1026
1110
|
getClientActivityState(session) {
|
|
1027
1111
|
const activity = session.getClientActivity();
|
|
1028
1112
|
if (!activity) {
|
|
1029
|
-
return {
|
|
1113
|
+
return {
|
|
1114
|
+
appVisible: false,
|
|
1115
|
+
focusedAgentId: null,
|
|
1116
|
+
lastActivityAtMs: null,
|
|
1117
|
+
};
|
|
1030
1118
|
}
|
|
1031
|
-
const now = Date.now();
|
|
1032
|
-
const ageMs = now - activity.lastActivityAt.getTime();
|
|
1033
|
-
const isStale = ageMs >= this.ACTIVITY_THRESHOLD_MS;
|
|
1034
1119
|
return {
|
|
1035
|
-
deviceType: activity.deviceType,
|
|
1036
|
-
focusedAgentId: activity.focusedAgentId,
|
|
1037
|
-
isStale,
|
|
1038
1120
|
appVisible: activity.appVisible,
|
|
1121
|
+
focusedAgentId: activity.focusedAgentId,
|
|
1122
|
+
lastActivityAtMs: activity.lastActivityAt.getTime(),
|
|
1039
1123
|
};
|
|
1040
1124
|
}
|
|
1041
|
-
broadcastAgentAttention(params) {
|
|
1125
|
+
async broadcastAgentAttention(params) {
|
|
1042
1126
|
const clientEntries = [];
|
|
1043
1127
|
for (const [ws, connection] of this.sessions) {
|
|
1044
1128
|
clientEntries.push({
|
|
@@ -1047,33 +1131,32 @@ export class VoiceAssistantWebSocketServer {
|
|
|
1047
1131
|
});
|
|
1048
1132
|
}
|
|
1049
1133
|
const allStates = clientEntries.map((e) => e.state);
|
|
1134
|
+
const nowMs = Date.now();
|
|
1050
1135
|
const agent = this.agentManager.getAgent(params.agentId);
|
|
1136
|
+
const assistantMessage = await this.agentManager.getLastAssistantMessage(params.agentId);
|
|
1051
1137
|
const notification = buildAgentAttentionNotificationPayload({
|
|
1052
1138
|
reason: params.reason,
|
|
1053
1139
|
serverId: this.serverId,
|
|
1054
1140
|
agentId: params.agentId,
|
|
1055
|
-
assistantMessage
|
|
1141
|
+
assistantMessage,
|
|
1056
1142
|
permissionRequest: agent ? findLatestPermissionRequest(agent.pendingPermissions) : null,
|
|
1057
1143
|
});
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1144
|
+
const plan = computeNotificationPlan({
|
|
1145
|
+
allStates,
|
|
1146
|
+
agentId: params.agentId,
|
|
1061
1147
|
reason: params.reason,
|
|
1062
|
-
|
|
1148
|
+
nowMs,
|
|
1063
1149
|
});
|
|
1064
|
-
if (
|
|
1150
|
+
if (plan.shouldPush) {
|
|
1065
1151
|
const tokens = this.pushTokenStore.getAllTokens();
|
|
1066
1152
|
this.logger.info({ tokenCount: tokens.length }, "Sending push notification");
|
|
1067
1153
|
if (tokens.length > 0) {
|
|
1068
1154
|
void this.pushService.sendPush(tokens, notification);
|
|
1069
1155
|
}
|
|
1070
1156
|
}
|
|
1071
|
-
for (const { ws
|
|
1072
|
-
const shouldNotify =
|
|
1073
|
-
|
|
1074
|
-
allClientStates: allStates,
|
|
1075
|
-
agentId: params.agentId,
|
|
1076
|
-
});
|
|
1157
|
+
for (const [clientIndex, { ws }] of clientEntries.entries()) {
|
|
1158
|
+
const shouldNotify = clientIndex === plan.inAppRecipientIndex;
|
|
1159
|
+
const timestamp = new Date().toISOString();
|
|
1077
1160
|
const message = wrapSessionMessage({
|
|
1078
1161
|
type: "agent_stream",
|
|
1079
1162
|
payload: {
|
|
@@ -1082,11 +1165,11 @@ export class VoiceAssistantWebSocketServer {
|
|
|
1082
1165
|
type: "attention_required",
|
|
1083
1166
|
provider: params.provider,
|
|
1084
1167
|
reason: params.reason,
|
|
1085
|
-
timestamp
|
|
1168
|
+
timestamp,
|
|
1086
1169
|
shouldNotify,
|
|
1087
1170
|
notification,
|
|
1088
1171
|
},
|
|
1089
|
-
timestamp
|
|
1172
|
+
timestamp,
|
|
1090
1173
|
},
|
|
1091
1174
|
});
|
|
1092
1175
|
this.sendToClient(ws, message);
|