@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.
Files changed (274) hide show
  1. package/dist/scripts/dev-runner.js +26 -7
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/server/client/daemon-client-runtime-metrics.d.ts +39 -0
  4. package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -0
  5. package/dist/server/client/daemon-client-runtime-metrics.js +173 -0
  6. package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -0
  7. package/dist/server/client/daemon-client.d.ts +58 -9
  8. package/dist/server/client/daemon-client.d.ts.map +1 -1
  9. package/dist/server/client/daemon-client.js +151 -10
  10. package/dist/server/client/daemon-client.js.map +1 -1
  11. package/dist/server/server/agent/agent-manager.d.ts +55 -48
  12. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  13. package/dist/server/server/agent/agent-manager.js +541 -331
  14. package/dist/server/server/agent/agent-manager.js.map +1 -1
  15. package/dist/server/server/agent/agent-metadata-generator.d.ts +3 -2
  16. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  17. package/dist/server/server/agent/agent-metadata-generator.js +31 -16
  18. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  19. package/dist/server/server/agent/agent-projections.d.ts +2 -1
  20. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  21. package/dist/server/server/agent/agent-projections.js +29 -1
  22. package/dist/server/server/agent/agent-projections.js.map +1 -1
  23. package/dist/server/server/agent/agent-sdk-types.d.ts +9 -5
  24. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  25. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  26. package/dist/server/server/agent/agent-storage.d.ts +76 -69
  27. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  28. package/dist/server/server/agent/agent-storage.js +13 -6
  29. package/dist/server/server/agent/agent-storage.js.map +1 -1
  30. package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
  31. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -0
  32. package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
  33. package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -0
  34. package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
  35. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -0
  36. package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  37. package/dist/server/server/agent/agent-timeline-store-types.js.map +1 -0
  38. package/dist/server/server/agent/agent-timeline-store.d.ts +32 -0
  39. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -0
  40. package/dist/server/server/agent/agent-timeline-store.js +245 -0
  41. package/dist/server/server/agent/agent-timeline-store.js.map +1 -0
  42. package/dist/server/server/agent/mcp-server.d.ts +12 -1
  43. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  44. package/dist/server/server/agent/mcp-server.js +276 -65
  45. package/dist/server/server/agent/mcp-server.js.map +1 -1
  46. package/dist/server/server/agent/mcp-shared.d.ts +196 -152
  47. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  48. package/dist/server/server/agent/mcp-shared.js +40 -42
  49. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  50. package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
  51. package/dist/server/server/agent/model-resolver.js +3 -1
  52. package/dist/server/server/agent/model-resolver.js.map +1 -1
  53. package/dist/server/server/agent/prompt-attachments.d.ts +6 -0
  54. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -0
  55. package/dist/server/server/agent/prompt-attachments.js +31 -0
  56. package/dist/server/server/agent/prompt-attachments.js.map +1 -0
  57. package/dist/server/server/agent/provider-launch-config.d.ts +78 -8
  58. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  59. package/dist/server/server/agent/provider-launch-config.js +35 -0
  60. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  61. package/dist/server/server/agent/provider-manifest.d.ts +1 -0
  62. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  63. package/dist/server/server/agent/provider-manifest.js +22 -1
  64. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  65. package/dist/server/server/agent/provider-registry.d.ts +5 -2
  66. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  67. package/dist/server/server/agent/provider-registry.js +61 -17
  68. package/dist/server/server/agent/provider-registry.js.map +1 -1
  69. package/dist/server/server/agent/provider-snapshot-manager.d.ts +17 -5
  70. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  71. package/dist/server/server/agent/provider-snapshot-manager.js +150 -61
  72. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  73. package/dist/server/server/agent/providers/acp-agent.d.ts +8 -4
  74. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  75. package/dist/server/server/agent/providers/acp-agent.js +73 -8
  76. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  77. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  78. package/dist/server/server/agent/providers/claude-agent.d.ts +1 -1
  79. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  80. package/dist/server/server/agent/providers/claude-agent.js +8 -7
  81. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  82. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +37 -4
  83. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  84. package/dist/server/server/agent/providers/codex-app-server-agent.js +61 -31
  85. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  86. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  87. package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -2
  88. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
  89. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +64 -0
  90. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -0
  91. package/dist/server/server/agent/providers/mock-load-test-agent.js +585 -0
  92. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -0
  93. package/dist/server/server/agent/providers/opencode-agent.d.ts +19 -4
  94. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  95. package/dist/server/server/agent/providers/opencode-agent.js +227 -118
  96. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  97. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +69 -0
  98. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -0
  99. package/dist/server/server/agent/providers/pi-direct-agent.js +1171 -0
  100. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -0
  101. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -4
  102. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  103. package/dist/server/server/agent-attention-policy.d.ts +13 -13
  104. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  105. package/dist/server/server/agent-attention-policy.js +20 -36
  106. package/dist/server/server/agent-attention-policy.js.map +1 -1
  107. package/dist/server/server/bootstrap.d.ts +6 -0
  108. package/dist/server/server/bootstrap.d.ts.map +1 -1
  109. package/dist/server/server/bootstrap.js +113 -11
  110. package/dist/server/server/bootstrap.js.map +1 -1
  111. package/dist/server/server/chat/chat-rpc-schemas.d.ts +44 -44
  112. package/dist/server/server/chat/chat-types.d.ts +6 -6
  113. package/dist/server/server/checkout-diff-manager.d.ts +0 -1
  114. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  115. package/dist/server/server/checkout-diff-manager.js +6 -4
  116. package/dist/server/server/checkout-diff-manager.js.map +1 -1
  117. package/dist/server/server/config.d.ts.map +1 -1
  118. package/dist/server/server/config.js +1 -0
  119. package/dist/server/server/config.js.map +1 -1
  120. package/dist/server/server/file-explorer/service.d.ts.map +1 -1
  121. package/dist/server/server/file-explorer/service.js +2 -1
  122. package/dist/server/server/file-explorer/service.js.map +1 -1
  123. package/dist/server/server/loop/rpc-schemas.d.ts +392 -392
  124. package/dist/server/server/loop-service.d.ts +52 -52
  125. package/dist/server/server/paseo-worktree-archive-service.d.ts +41 -0
  126. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -0
  127. package/dist/server/server/paseo-worktree-archive-service.js +137 -0
  128. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -0
  129. package/dist/server/server/paseo-worktree-service.d.ts +24 -0
  130. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -0
  131. package/dist/server/server/paseo-worktree-service.js +94 -0
  132. package/dist/server/server/paseo-worktree-service.js.map +1 -0
  133. package/dist/server/server/path-utils.d.ts +1 -0
  134. package/dist/server/server/path-utils.d.ts.map +1 -1
  135. package/dist/server/server/path-utils.js +9 -0
  136. package/dist/server/server/path-utils.js.map +1 -1
  137. package/dist/server/server/persisted-config.d.ts +195 -67
  138. package/dist/server/server/persisted-config.d.ts.map +1 -1
  139. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  140. package/dist/server/server/persistence-hooks.js +3 -0
  141. package/dist/server/server/persistence-hooks.js.map +1 -1
  142. package/dist/server/server/resolve-worktree-creation-intent.d.ts +30 -0
  143. package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -0
  144. package/dist/server/server/resolve-worktree-creation-intent.js +163 -0
  145. package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -0
  146. package/dist/server/server/schedule/rpc-schemas.d.ts +192 -192
  147. package/dist/server/server/schedule/service.d.ts +1 -1
  148. package/dist/server/server/schedule/service.d.ts.map +1 -1
  149. package/dist/server/server/schedule/types.d.ts +44 -44
  150. package/dist/server/server/script-health-monitor.d.ts +39 -0
  151. package/dist/server/server/script-health-monitor.d.ts.map +1 -0
  152. package/dist/server/server/script-health-monitor.js +158 -0
  153. package/dist/server/server/script-health-monitor.js.map +1 -0
  154. package/dist/server/server/script-proxy.d.ts +40 -0
  155. package/dist/server/server/script-proxy.d.ts.map +1 -0
  156. package/dist/server/server/script-proxy.js +245 -0
  157. package/dist/server/server/script-proxy.js.map +1 -0
  158. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  159. package/dist/server/server/script-route-branch-handler.d.ts.map +1 -0
  160. package/dist/server/server/script-route-branch-handler.js +45 -0
  161. package/dist/server/server/script-route-branch-handler.js.map +1 -0
  162. package/dist/server/server/script-status-projection.d.ts +29 -0
  163. package/dist/server/server/script-status-projection.d.ts.map +1 -0
  164. package/dist/server/server/script-status-projection.js +133 -0
  165. package/dist/server/server/script-status-projection.js.map +1 -0
  166. package/dist/server/server/session.d.ts +77 -13
  167. package/dist/server/server/session.d.ts.map +1 -1
  168. package/dist/server/server/session.js +1290 -548
  169. package/dist/server/server/session.js.map +1 -1
  170. package/dist/server/server/websocket-server.d.ts +27 -3
  171. package/dist/server/server/websocket-server.d.ts.map +1 -1
  172. package/dist/server/server/websocket-server.js +112 -29
  173. package/dist/server/server/websocket-server.js.map +1 -1
  174. package/dist/server/server/workspace-archive-service.d.ts +8 -0
  175. package/dist/server/server/workspace-archive-service.d.ts.map +1 -0
  176. package/dist/server/server/workspace-archive-service.js +17 -0
  177. package/dist/server/server/workspace-archive-service.js.map +1 -0
  178. package/dist/server/server/workspace-git-metadata.d.ts +24 -0
  179. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -0
  180. package/dist/server/server/workspace-git-metadata.js +78 -0
  181. package/dist/server/server/workspace-git-metadata.js.map +1 -0
  182. package/dist/server/server/workspace-git-service.d.ts +104 -5
  183. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  184. package/dist/server/server/workspace-git-service.js +442 -56
  185. package/dist/server/server/workspace-git-service.js.map +1 -1
  186. package/dist/server/server/workspace-reconciliation-service.d.ts +54 -0
  187. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -0
  188. package/dist/server/server/workspace-reconciliation-service.js +176 -0
  189. package/dist/server/server/workspace-reconciliation-service.js.map +1 -0
  190. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  191. package/dist/server/server/workspace-registry-bootstrap.js +4 -3
  192. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  193. package/dist/server/server/workspace-registry.d.ts +8 -8
  194. package/dist/server/server/workspace-registry.test-helpers.d.ts +37 -0
  195. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +1 -0
  196. package/dist/server/server/workspace-registry.test-helpers.js +121 -0
  197. package/dist/server/server/workspace-registry.test-helpers.js.map +1 -0
  198. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  199. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -0
  200. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  201. package/dist/server/server/workspace-script-runtime-store.js.map +1 -0
  202. package/dist/server/server/workspace-service-env.d.ts +17 -0
  203. package/dist/server/server/workspace-service-env.d.ts.map +1 -0
  204. package/dist/server/server/workspace-service-env.js +80 -0
  205. package/dist/server/server/workspace-service-env.js.map +1 -0
  206. package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  207. package/dist/server/server/workspace-service-port-registry.d.ts.map +1 -0
  208. package/dist/server/server/workspace-service-port-registry.js +59 -0
  209. package/dist/server/server/workspace-service-port-registry.js.map +1 -0
  210. package/dist/server/server/worktree-bootstrap.d.ts +55 -10
  211. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  212. package/dist/server/server/worktree-bootstrap.js +290 -112
  213. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  214. package/dist/server/server/worktree-core.d.ts +25 -0
  215. package/dist/server/server/worktree-core.d.ts.map +1 -0
  216. package/dist/server/server/worktree-core.js +75 -0
  217. package/dist/server/server/worktree-core.js.map +1 -0
  218. package/dist/server/server/worktree-errors.d.ts +12 -0
  219. package/dist/server/server/worktree-errors.d.ts.map +1 -0
  220. package/dist/server/server/worktree-errors.js +31 -0
  221. package/dist/server/server/worktree-errors.js.map +1 -0
  222. package/dist/server/server/worktree-session.d.ts +56 -70
  223. package/dist/server/server/worktree-session.d.ts.map +1 -1
  224. package/dist/server/server/worktree-session.js +176 -251
  225. package/dist/server/server/worktree-session.js.map +1 -1
  226. package/dist/server/services/github-service.d.ts +225 -0
  227. package/dist/server/services/github-service.d.ts.map +1 -0
  228. package/dist/server/services/github-service.js +1381 -0
  229. package/dist/server/services/github-service.js.map +1 -0
  230. package/dist/server/shared/messages.d.ts +29408 -12268
  231. package/dist/server/shared/messages.d.ts.map +1 -1
  232. package/dist/server/shared/messages.js +391 -65
  233. package/dist/server/shared/messages.js.map +1 -1
  234. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  235. package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  236. package/dist/server/terminal/terminal-manager.d.ts +9 -0
  237. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  238. package/dist/server/terminal/terminal-manager.js +27 -0
  239. package/dist/server/terminal/terminal-manager.js.map +1 -1
  240. package/dist/server/terminal/terminal-output-coalescer.d.ts +30 -0
  241. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -0
  242. package/dist/server/terminal/terminal-output-coalescer.js +55 -0
  243. package/dist/server/terminal/terminal-output-coalescer.js.map +1 -0
  244. package/dist/server/terminal/terminal.d.ts +32 -1
  245. package/dist/server/terminal/terminal.d.ts.map +1 -1
  246. package/dist/server/terminal/terminal.js +397 -17
  247. package/dist/server/terminal/terminal.js.map +1 -1
  248. package/dist/server/utils/checkout-git.d.ts +63 -10
  249. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  250. package/dist/server/utils/checkout-git.js +321 -229
  251. package/dist/server/utils/checkout-git.js.map +1 -1
  252. package/dist/server/utils/promise-timeout.d.ts +9 -0
  253. package/dist/server/utils/promise-timeout.d.ts.map +1 -0
  254. package/dist/server/utils/promise-timeout.js +25 -0
  255. package/dist/server/utils/promise-timeout.js.map +1 -0
  256. package/dist/server/utils/script-hostname.d.ts +8 -0
  257. package/dist/server/utils/script-hostname.d.ts.map +1 -0
  258. package/dist/server/utils/script-hostname.js +14 -0
  259. package/dist/server/utils/script-hostname.js.map +1 -0
  260. package/dist/server/utils/string-command-shell.d.ts +10 -0
  261. package/dist/server/utils/string-command-shell.d.ts.map +1 -0
  262. package/dist/server/utils/string-command-shell.js +21 -0
  263. package/dist/server/utils/string-command-shell.js.map +1 -0
  264. package/dist/server/utils/worktree.d.ts +54 -7
  265. package/dist/server/utils/worktree.d.ts.map +1 -1
  266. package/dist/server/utils/worktree.js +434 -129
  267. package/dist/server/utils/worktree.js.map +1 -1
  268. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  269. package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  270. package/package.json +11 -14
  271. package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
  272. package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
  273. package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
  274. 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":"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"}
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 { computeShouldNotifyClient, computeShouldSendPush, } from "./agent-attention-policy.js";
13
- import { buildAgentAttentionNotificationPayload, findLatestAssistantMessageFromTimeline, findLatestPermissionRequest, } from "../shared/agent-attention-notification.js";
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 { deviceType: null, focusedAgentId: null, isStale: true, appVisible: false };
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: agent ? findLatestAssistantMessageFromTimeline(agent.timeline) : null,
1141
+ assistantMessage,
1056
1142
  permissionRequest: agent ? findLatestPermissionRequest(agent.pendingPermissions) : null,
1057
1143
  });
1058
- // Push is only a fallback when the user is away from desktop/web.
1059
- // Also suppress push if they're actively using the mobile app.
1060
- const shouldSendPush = computeShouldSendPush({
1144
+ const plan = computeNotificationPlan({
1145
+ allStates,
1146
+ agentId: params.agentId,
1061
1147
  reason: params.reason,
1062
- allClientStates: allStates,
1148
+ nowMs,
1063
1149
  });
1064
- if (shouldSendPush) {
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, state } of clientEntries) {
1072
- const shouldNotify = computeShouldNotifyClient({
1073
- clientState: state,
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: new Date().toISOString(),
1168
+ timestamp,
1086
1169
  shouldNotify,
1087
1170
  notification,
1088
1171
  },
1089
- timestamp: new Date().toISOString(),
1172
+ timestamp,
1090
1173
  },
1091
1174
  });
1092
1175
  this.sendToClient(ws, message);