@getpaseo/server 0.1.58 → 0.1.60

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 (276) 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 +12 -10
  58. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  59. package/dist/server/server/agent/provider-launch-config.js +34 -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 +20 -9
  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/claude-models.d.ts.map +1 -1
  78. package/dist/server/server/agent/providers/claude/claude-models.js +21 -0
  79. package/dist/server/server/agent/providers/claude/claude-models.js.map +1 -1
  80. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  81. package/dist/server/server/agent/providers/claude-agent.d.ts +1 -1
  82. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  83. package/dist/server/server/agent/providers/claude-agent.js +15 -8
  84. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  85. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +37 -4
  86. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  87. package/dist/server/server/agent/providers/codex-app-server-agent.js +61 -31
  88. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  89. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  90. package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -2
  91. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
  92. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +64 -0
  93. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -0
  94. package/dist/server/server/agent/providers/mock-load-test-agent.js +585 -0
  95. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -0
  96. package/dist/server/server/agent/providers/opencode-agent.d.ts +19 -4
  97. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  98. package/dist/server/server/agent/providers/opencode-agent.js +227 -118
  99. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  100. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +69 -0
  101. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -0
  102. package/dist/server/server/agent/providers/pi-direct-agent.js +1177 -0
  103. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -0
  104. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -4
  105. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  106. package/dist/server/server/agent-attention-policy.d.ts +13 -13
  107. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  108. package/dist/server/server/agent-attention-policy.js +20 -36
  109. package/dist/server/server/agent-attention-policy.js.map +1 -1
  110. package/dist/server/server/bootstrap.d.ts +6 -0
  111. package/dist/server/server/bootstrap.d.ts.map +1 -1
  112. package/dist/server/server/bootstrap.js +113 -11
  113. package/dist/server/server/bootstrap.js.map +1 -1
  114. package/dist/server/server/chat/chat-rpc-schemas.d.ts +44 -44
  115. package/dist/server/server/chat/chat-types.d.ts +6 -6
  116. package/dist/server/server/checkout-diff-manager.d.ts +0 -1
  117. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  118. package/dist/server/server/checkout-diff-manager.js +6 -4
  119. package/dist/server/server/checkout-diff-manager.js.map +1 -1
  120. package/dist/server/server/config.d.ts.map +1 -1
  121. package/dist/server/server/config.js +1 -0
  122. package/dist/server/server/config.js.map +1 -1
  123. package/dist/server/server/file-explorer/service.d.ts.map +1 -1
  124. package/dist/server/server/file-explorer/service.js +2 -1
  125. package/dist/server/server/file-explorer/service.js.map +1 -1
  126. package/dist/server/server/loop/rpc-schemas.d.ts +392 -392
  127. package/dist/server/server/loop-service.d.ts +52 -52
  128. package/dist/server/server/paseo-worktree-archive-service.d.ts +41 -0
  129. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -0
  130. package/dist/server/server/paseo-worktree-archive-service.js +137 -0
  131. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -0
  132. package/dist/server/server/paseo-worktree-service.d.ts +24 -0
  133. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -0
  134. package/dist/server/server/paseo-worktree-service.js +94 -0
  135. package/dist/server/server/paseo-worktree-service.js.map +1 -0
  136. package/dist/server/server/path-utils.d.ts +1 -0
  137. package/dist/server/server/path-utils.d.ts.map +1 -1
  138. package/dist/server/server/path-utils.js +9 -0
  139. package/dist/server/server/path-utils.js.map +1 -1
  140. package/dist/server/server/persisted-config.d.ts +73 -73
  141. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  142. package/dist/server/server/persistence-hooks.js +3 -0
  143. package/dist/server/server/persistence-hooks.js.map +1 -1
  144. package/dist/server/server/resolve-worktree-creation-intent.d.ts +30 -0
  145. package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -0
  146. package/dist/server/server/resolve-worktree-creation-intent.js +163 -0
  147. package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -0
  148. package/dist/server/server/schedule/rpc-schemas.d.ts +192 -192
  149. package/dist/server/server/schedule/service.d.ts +1 -1
  150. package/dist/server/server/schedule/service.d.ts.map +1 -1
  151. package/dist/server/server/schedule/types.d.ts +44 -44
  152. package/dist/server/server/script-health-monitor.d.ts +39 -0
  153. package/dist/server/server/script-health-monitor.d.ts.map +1 -0
  154. package/dist/server/server/script-health-monitor.js +158 -0
  155. package/dist/server/server/script-health-monitor.js.map +1 -0
  156. package/dist/server/server/script-proxy.d.ts +40 -0
  157. package/dist/server/server/script-proxy.d.ts.map +1 -0
  158. package/dist/server/server/script-proxy.js +245 -0
  159. package/dist/server/server/script-proxy.js.map +1 -0
  160. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  161. package/dist/server/server/script-route-branch-handler.d.ts.map +1 -0
  162. package/dist/server/server/script-route-branch-handler.js +45 -0
  163. package/dist/server/server/script-route-branch-handler.js.map +1 -0
  164. package/dist/server/server/script-status-projection.d.ts +29 -0
  165. package/dist/server/server/script-status-projection.d.ts.map +1 -0
  166. package/dist/server/server/script-status-projection.js +133 -0
  167. package/dist/server/server/script-status-projection.js.map +1 -0
  168. package/dist/server/server/session.d.ts +77 -13
  169. package/dist/server/server/session.d.ts.map +1 -1
  170. package/dist/server/server/session.js +1290 -548
  171. package/dist/server/server/session.js.map +1 -1
  172. package/dist/server/server/websocket-server.d.ts +27 -3
  173. package/dist/server/server/websocket-server.d.ts.map +1 -1
  174. package/dist/server/server/websocket-server.js +112 -29
  175. package/dist/server/server/websocket-server.js.map +1 -1
  176. package/dist/server/server/workspace-archive-service.d.ts +8 -0
  177. package/dist/server/server/workspace-archive-service.d.ts.map +1 -0
  178. package/dist/server/server/workspace-archive-service.js +17 -0
  179. package/dist/server/server/workspace-archive-service.js.map +1 -0
  180. package/dist/server/server/workspace-git-metadata.d.ts +24 -0
  181. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -0
  182. package/dist/server/server/workspace-git-metadata.js +78 -0
  183. package/dist/server/server/workspace-git-metadata.js.map +1 -0
  184. package/dist/server/server/workspace-git-service.d.ts +104 -5
  185. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  186. package/dist/server/server/workspace-git-service.js +442 -56
  187. package/dist/server/server/workspace-git-service.js.map +1 -1
  188. package/dist/server/server/workspace-reconciliation-service.d.ts +54 -0
  189. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -0
  190. package/dist/server/server/workspace-reconciliation-service.js +176 -0
  191. package/dist/server/server/workspace-reconciliation-service.js.map +1 -0
  192. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  193. package/dist/server/server/workspace-registry-bootstrap.js +4 -3
  194. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  195. package/dist/server/server/workspace-registry.d.ts +8 -8
  196. package/dist/server/server/workspace-registry.test-helpers.d.ts +37 -0
  197. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +1 -0
  198. package/dist/server/server/workspace-registry.test-helpers.js +121 -0
  199. package/dist/server/server/workspace-registry.test-helpers.js.map +1 -0
  200. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  201. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -0
  202. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  203. package/dist/server/server/workspace-script-runtime-store.js.map +1 -0
  204. package/dist/server/server/workspace-service-env.d.ts +17 -0
  205. package/dist/server/server/workspace-service-env.d.ts.map +1 -0
  206. package/dist/server/server/workspace-service-env.js +80 -0
  207. package/dist/server/server/workspace-service-env.js.map +1 -0
  208. package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  209. package/dist/server/server/workspace-service-port-registry.d.ts.map +1 -0
  210. package/dist/server/server/workspace-service-port-registry.js +59 -0
  211. package/dist/server/server/workspace-service-port-registry.js.map +1 -0
  212. package/dist/server/server/worktree-bootstrap.d.ts +55 -10
  213. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  214. package/dist/server/server/worktree-bootstrap.js +290 -112
  215. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  216. package/dist/server/server/worktree-core.d.ts +25 -0
  217. package/dist/server/server/worktree-core.d.ts.map +1 -0
  218. package/dist/server/server/worktree-core.js +75 -0
  219. package/dist/server/server/worktree-core.js.map +1 -0
  220. package/dist/server/server/worktree-errors.d.ts +12 -0
  221. package/dist/server/server/worktree-errors.d.ts.map +1 -0
  222. package/dist/server/server/worktree-errors.js +31 -0
  223. package/dist/server/server/worktree-errors.js.map +1 -0
  224. package/dist/server/server/worktree-session.d.ts +56 -70
  225. package/dist/server/server/worktree-session.d.ts.map +1 -1
  226. package/dist/server/server/worktree-session.js +176 -251
  227. package/dist/server/server/worktree-session.js.map +1 -1
  228. package/dist/server/services/github-service.d.ts +225 -0
  229. package/dist/server/services/github-service.d.ts.map +1 -0
  230. package/dist/server/services/github-service.js +1381 -0
  231. package/dist/server/services/github-service.js.map +1 -0
  232. package/dist/server/shared/messages.d.ts +29408 -12268
  233. package/dist/server/shared/messages.d.ts.map +1 -1
  234. package/dist/server/shared/messages.js +391 -65
  235. package/dist/server/shared/messages.js.map +1 -1
  236. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  237. package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  238. package/dist/server/terminal/terminal-manager.d.ts +9 -0
  239. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  240. package/dist/server/terminal/terminal-manager.js +27 -0
  241. package/dist/server/terminal/terminal-manager.js.map +1 -1
  242. package/dist/server/terminal/terminal-output-coalescer.d.ts +30 -0
  243. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -0
  244. package/dist/server/terminal/terminal-output-coalescer.js +55 -0
  245. package/dist/server/terminal/terminal-output-coalescer.js.map +1 -0
  246. package/dist/server/terminal/terminal.d.ts +32 -1
  247. package/dist/server/terminal/terminal.d.ts.map +1 -1
  248. package/dist/server/terminal/terminal.js +397 -17
  249. package/dist/server/terminal/terminal.js.map +1 -1
  250. package/dist/server/utils/checkout-git.d.ts +63 -10
  251. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  252. package/dist/server/utils/checkout-git.js +321 -229
  253. package/dist/server/utils/checkout-git.js.map +1 -1
  254. package/dist/server/utils/promise-timeout.d.ts +9 -0
  255. package/dist/server/utils/promise-timeout.d.ts.map +1 -0
  256. package/dist/server/utils/promise-timeout.js +25 -0
  257. package/dist/server/utils/promise-timeout.js.map +1 -0
  258. package/dist/server/utils/script-hostname.d.ts +8 -0
  259. package/dist/server/utils/script-hostname.d.ts.map +1 -0
  260. package/dist/server/utils/script-hostname.js +14 -0
  261. package/dist/server/utils/script-hostname.js.map +1 -0
  262. package/dist/server/utils/string-command-shell.d.ts +10 -0
  263. package/dist/server/utils/string-command-shell.d.ts.map +1 -0
  264. package/dist/server/utils/string-command-shell.js +21 -0
  265. package/dist/server/utils/string-command-shell.js.map +1 -0
  266. package/dist/server/utils/worktree.d.ts +54 -7
  267. package/dist/server/utils/worktree.d.ts.map +1 -1
  268. package/dist/server/utils/worktree.js +434 -129
  269. package/dist/server/utils/worktree.js.map +1 -1
  270. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  271. package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  272. package/package.json +11 -14
  273. package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
  274. package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
  275. package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
  276. package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
@@ -2,12 +2,16 @@ import { AgentCreateFailedStatusPayloadSchema, AgentCreatedStatusPayloadSchema,
2
2
  import { isRelayClientWebSocketUrl } from "../shared/daemon-endpoints.js";
3
3
  import { asUint8Array, decodeTerminalSnapshotPayload, decodeTerminalStreamFrame, encodeTerminalResizePayload, encodeTerminalStreamFrame, TerminalStreamOpcode, } from "../shared/terminal-stream-protocol.js";
4
4
  import { createRelayE2eeTransportFactory, createWebSocketTransportFactory, decodeMessageData, defaultWebSocketFactory, describeTransportClose, describeTransportError, encodeUtf8String, } from "./daemon-client-transport.js";
5
+ import { DaemonClientRuntimeMetrics } from "./daemon-client-runtime-metrics.js";
5
6
  const consoleLogger = {
6
7
  debug: () => { },
7
- info: (obj, msg) => console.info(msg, obj),
8
+ info: (obj, msg) => console.log(msg, obj),
8
9
  warn: (obj, msg) => console.warn(msg, obj),
9
10
  error: (obj, msg) => console.error(msg, obj),
10
11
  };
12
+ const perfNow = typeof performance !== "undefined" && typeof performance.now === "function"
13
+ ? () => performance.now()
14
+ : () => Date.now();
11
15
  class DaemonRpcError extends Error {
12
16
  constructor(params) {
13
17
  const parts = [params.error];
@@ -97,6 +101,8 @@ export class DaemonClient {
97
101
  this.terminalStreamListeners = new Set();
98
102
  this.pendingSendQueue = [];
99
103
  this.lastServerInfoMessage = null;
104
+ this.runtimeMetricsInterval = null;
105
+ this.runtimeMetrics = null;
100
106
  this.logger = config.logger ?? consoleLogger;
101
107
  this.logConnectionPath = isRelayClientWebSocketUrl(this.config.url) ? "relay" : "direct";
102
108
  let parsedUrlForLog = null;
@@ -119,6 +125,22 @@ export class DaemonClient {
119
125
  Number.isFinite(this.config.runtimeGeneration)
120
126
  ? this.config.runtimeGeneration
121
127
  : null;
128
+ const runtimeMetricsIntervalMs = typeof config.runtimeMetricsIntervalMs === "number" && config.runtimeMetricsIntervalMs > 0
129
+ ? config.runtimeMetricsIntervalMs
130
+ : 0;
131
+ if (runtimeMetricsIntervalMs > 0) {
132
+ const runtimeMetricsWindowMs = typeof config.runtimeMetricsWindowMs === "number" && config.runtimeMetricsWindowMs > 0
133
+ ? Math.max(config.runtimeMetricsWindowMs, runtimeMetricsIntervalMs)
134
+ : undefined;
135
+ this.runtimeMetrics = new DaemonClientRuntimeMetrics(this.logger, {
136
+ connectionPath: this.logConnectionPath,
137
+ serverId: this.logServerId,
138
+ getConnectionStatus: () => this.connectionState.status,
139
+ }, runtimeMetricsWindowMs ? { windowMs: runtimeMetricsWindowMs } : undefined);
140
+ this.runtimeMetricsInterval = setInterval(() => {
141
+ this.runtimeMetrics?.flush();
142
+ }, runtimeMetricsIntervalMs);
143
+ }
122
144
  }
123
145
  // ============================================================================
124
146
  // Connection
@@ -308,6 +330,12 @@ export class DaemonClient {
308
330
  this.rejectPendingSendQueue(new Error("Daemon client closed"));
309
331
  this.clearTerminalSlots();
310
332
  this.lastServerInfoMessage = null;
333
+ if (this.runtimeMetricsInterval) {
334
+ clearInterval(this.runtimeMetricsInterval);
335
+ this.runtimeMetricsInterval = null;
336
+ this.runtimeMetrics?.flush({ final: true });
337
+ this.runtimeMetrics = null;
338
+ }
311
339
  this.updateConnectionState({ status: "disposed" }, { event: "DISPOSE", reason: "Client closed", reasonCode: "disposed" });
312
340
  }
313
341
  ensureConnected() {
@@ -641,6 +669,7 @@ export class DaemonClient {
641
669
  const message = SessionInboundMessageSchema.parse({
642
670
  type: "fetch_agents_request",
643
671
  requestId: resolvedRequestId,
672
+ ...(options?.scope ? { scope: options.scope } : {}),
644
673
  ...(options?.filter ? { filter: options.filter } : {}),
645
674
  ...(options?.sort ? { sort: options.sort } : {}),
646
675
  ...(options?.page ? { page: options.page } : {}),
@@ -662,6 +691,31 @@ export class DaemonClient {
662
691
  },
663
692
  });
664
693
  }
694
+ async fetchAgentHistory(options) {
695
+ const resolvedRequestId = this.createRequestId(options?.requestId);
696
+ const message = SessionInboundMessageSchema.parse({
697
+ type: "fetch_agent_history_request",
698
+ requestId: resolvedRequestId,
699
+ ...(options?.filter ? { filter: options.filter } : {}),
700
+ ...(options?.sort ? { sort: options.sort } : {}),
701
+ ...(options?.page ? { page: options.page } : {}),
702
+ });
703
+ return this.sendRequest({
704
+ requestId: resolvedRequestId,
705
+ message,
706
+ timeout: 10000,
707
+ options: { skipQueue: true },
708
+ select: (msg) => {
709
+ if (msg.type !== "fetch_agent_history_response") {
710
+ return null;
711
+ }
712
+ if (msg.payload.requestId !== resolvedRequestId) {
713
+ return null;
714
+ }
715
+ return msg.payload;
716
+ },
717
+ });
718
+ }
665
719
  async fetchWorkspaces(options) {
666
720
  const resolvedRequestId = this.createRequestId(options?.requestId);
667
721
  const message = SessionInboundMessageSchema.parse({
@@ -699,6 +753,18 @@ export class DaemonClient {
699
753
  timeout: 10000,
700
754
  });
701
755
  }
756
+ async startWorkspaceScript(workspaceId, scriptName, requestId) {
757
+ return this.sendCorrelatedSessionRequest({
758
+ requestId,
759
+ message: {
760
+ type: "start_workspace_script_request",
761
+ workspaceId,
762
+ scriptName,
763
+ },
764
+ responseType: "start_workspace_script_response",
765
+ timeout: 10000,
766
+ });
767
+ }
702
768
  async listAvailableEditors(requestId) {
703
769
  return this.sendCorrelatedSessionRequest({
704
770
  requestId,
@@ -732,6 +798,17 @@ export class DaemonClient {
732
798
  timeout: 10000,
733
799
  });
734
800
  }
801
+ async fetchWorkspaceSetupStatus(workspaceId, requestId) {
802
+ return this.sendCorrelatedSessionRequest({
803
+ requestId,
804
+ message: {
805
+ type: "workspace_setup_status_request",
806
+ workspaceId,
807
+ },
808
+ responseType: "workspace_setup_status_response",
809
+ timeout: 10000,
810
+ });
811
+ }
735
812
  async fetchAgent(agentId, requestId) {
736
813
  const resolvedRequestId = this.createRequestId(requestId);
737
814
  const message = SessionInboundMessageSchema.parse({
@@ -798,10 +875,14 @@ export class DaemonClient {
798
875
  type: "create_agent_request",
799
876
  requestId,
800
877
  config,
878
+ ...(options.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
801
879
  ...(options.initialPrompt ? { initialPrompt: options.initialPrompt } : {}),
802
880
  ...(options.clientMessageId ? { clientMessageId: options.clientMessageId } : {}),
803
881
  ...(options.outputSchema ? { outputSchema: options.outputSchema } : {}),
804
882
  ...(options.images && options.images.length > 0 ? { images: options.images } : {}),
883
+ ...(options.attachments && options.attachments.length > 0
884
+ ? { attachments: options.attachments }
885
+ : {}),
805
886
  ...(options.git ? { git: options.git } : {}),
806
887
  ...(options.worktreeName ? { worktreeName: options.worktreeName } : {}),
807
888
  ...(options.labels && Object.keys(options.labels).length > 0
@@ -1004,6 +1085,7 @@ export class DaemonClient {
1004
1085
  text,
1005
1086
  ...(messageId ? { messageId } : {}),
1006
1087
  ...(options?.images ? { images: options.images } : {}),
1088
+ ...(options?.attachments ? { attachments: options.attachments } : {}),
1007
1089
  });
1008
1090
  const payload = await this.sendRequest({
1009
1091
  requestId,
@@ -1458,15 +1540,20 @@ export class DaemonClient {
1458
1540
  return responsePromise;
1459
1541
  }
1460
1542
  normalizeCheckoutDiffCompare(compare) {
1461
- const ignoreWhitespace = compare.ignoreWhitespace === true;
1462
1543
  if (compare.mode === "uncommitted") {
1463
- return { mode: "uncommitted", ignoreWhitespace };
1544
+ return compare.ignoreWhitespace === true
1545
+ ? { mode: "uncommitted", ignoreWhitespace: true }
1546
+ : { mode: "uncommitted" };
1464
1547
  }
1465
1548
  const trimmedBaseRef = compare.baseRef?.trim();
1466
1549
  if (!trimmedBaseRef) {
1467
- return { mode: "base", ignoreWhitespace };
1550
+ return compare.ignoreWhitespace === true
1551
+ ? { mode: "base", ignoreWhitespace: true }
1552
+ : { mode: "base" };
1468
1553
  }
1469
- return { mode: "base", baseRef: trimmedBaseRef, ignoreWhitespace };
1554
+ return compare.ignoreWhitespace === true
1555
+ ? { mode: "base", baseRef: trimmedBaseRef, ignoreWhitespace: true }
1556
+ : { mode: "base", baseRef: trimmedBaseRef };
1470
1557
  }
1471
1558
  async getCheckoutDiff(cwd, compare, requestId) {
1472
1559
  const oneShotSubscriptionId = `oneshot-checkout-diff:${crypto.randomUUID()}`;
@@ -1626,6 +1713,20 @@ export class DaemonClient {
1626
1713
  timeout: 60000,
1627
1714
  });
1628
1715
  }
1716
+ async pullRequestTimeline(input, requestId) {
1717
+ return this.sendCorrelatedSessionRequest({
1718
+ requestId,
1719
+ message: {
1720
+ type: "pull_request_timeline_request",
1721
+ cwd: input.cwd,
1722
+ prNumber: input.prNumber,
1723
+ repoOwner: input.repoOwner,
1724
+ repoName: input.repoName,
1725
+ },
1726
+ responseType: "pull_request_timeline_response",
1727
+ timeout: 60000,
1728
+ });
1729
+ }
1629
1730
  async checkoutSwitchBranch(cwd, branch, requestId) {
1630
1731
  return this.sendCorrelatedSessionRequest({
1631
1732
  requestId,
@@ -1706,6 +1807,12 @@ export class DaemonClient {
1706
1807
  type: "create_paseo_worktree_request",
1707
1808
  cwd: input.cwd,
1708
1809
  worktreeSlug: input.worktreeSlug,
1810
+ ...(input.attachments && input.attachments.length > 0
1811
+ ? { attachments: input.attachments }
1812
+ : {}),
1813
+ ...(input.refName !== undefined ? { refName: input.refName } : {}),
1814
+ ...(input.action !== undefined ? { action: input.action } : {}),
1815
+ ...(input.githubPrNumber !== undefined ? { githubPrNumber: input.githubPrNumber } : {}),
1709
1816
  },
1710
1817
  responseType: "create_paseo_worktree_response",
1711
1818
  timeout: 60000,
@@ -1736,6 +1843,20 @@ export class DaemonClient {
1736
1843
  timeout: 10000,
1737
1844
  });
1738
1845
  }
1846
+ async searchGitHub(options, requestId) {
1847
+ return this.sendCorrelatedSessionRequest({
1848
+ requestId,
1849
+ message: {
1850
+ type: "github_search_request",
1851
+ cwd: options.cwd,
1852
+ query: options.query,
1853
+ limit: options.limit,
1854
+ kinds: options.kinds,
1855
+ },
1856
+ responseType: "github_search_response",
1857
+ timeout: 15000,
1858
+ });
1859
+ }
1739
1860
  async getDirectorySuggestions(options, requestId) {
1740
1861
  return this.sendCorrelatedSessionRequest({
1741
1862
  requestId,
@@ -2010,9 +2131,6 @@ export class DaemonClient {
2010
2131
  if (settled) {
2011
2132
  return;
2012
2133
  }
2013
- if (message.type !== "agent_update") {
2014
- return;
2015
- }
2016
2134
  if (message.payload.kind !== "upsert") {
2017
2135
  return;
2018
2136
  }
@@ -2096,12 +2214,15 @@ export class DaemonClient {
2096
2214
  options: { skipQueue: true },
2097
2215
  });
2098
2216
  }
2099
- async createTerminal(cwd, name, requestId) {
2217
+ async createTerminal(cwd, name, requestId, options) {
2100
2218
  const resolvedRequestId = this.createRequestId(requestId);
2101
2219
  const message = SessionInboundMessageSchema.parse({
2102
2220
  type: "create_terminal_request",
2103
2221
  cwd,
2104
2222
  name,
2223
+ agentId: options?.agentId,
2224
+ command: options?.command,
2225
+ args: options?.args,
2105
2226
  requestId: resolvedRequestId,
2106
2227
  });
2107
2228
  return this.sendCorrelatedRequest({
@@ -2593,7 +2714,13 @@ export class DaemonClient {
2593
2714
  if (rawBytes) {
2594
2715
  const frame = decodeTerminalStreamFrame(rawBytes);
2595
2716
  if (frame) {
2717
+ const binaryStartMs = perfNow();
2596
2718
  this.handleBinaryFrame(frame);
2719
+ this.runtimeMetrics?.recordBinaryFrame(frame.opcode === TerminalStreamOpcode.Output
2720
+ ? "output"
2721
+ : frame.opcode === TerminalStreamOpcode.Snapshot
2722
+ ? "snapshot"
2723
+ : "other", rawBytes.byteLength, perfNow() - binaryStartMs);
2597
2724
  return;
2598
2725
  }
2599
2726
  }
@@ -2601,6 +2728,8 @@ export class DaemonClient {
2601
2728
  if (!payload) {
2602
2729
  return;
2603
2730
  }
2731
+ const bytes = rawBytes?.byteLength ?? payload.length;
2732
+ const startMs = perfNow();
2604
2733
  let parsedJson;
2605
2734
  try {
2606
2735
  parsedJson = JSON.parse(payload);
@@ -2615,9 +2744,15 @@ export class DaemonClient {
2615
2744
  return;
2616
2745
  }
2617
2746
  if (parsed.data.type === "pong") {
2747
+ this.runtimeMetrics?.recordMessage("pong", bytes, perfNow() - startMs);
2618
2748
  return;
2619
2749
  }
2620
2750
  this.handleSessionMessage(parsed.data.message);
2751
+ const msgType = parsed.data.message.type;
2752
+ this.runtimeMetrics?.recordMessage(msgType, bytes, perfNow() - startMs);
2753
+ if (parsed.data.message.type === "agent_stream") {
2754
+ this.runtimeMetrics?.recordAgentStream(parsed.data.message.payload);
2755
+ }
2621
2756
  }
2622
2757
  handleBinaryFrame(frame) {
2623
2758
  const terminalId = this.slotTerminals.get(frame.slot);
@@ -2811,6 +2946,12 @@ export class DaemonClient {
2811
2946
  workspaceId: msg.payload.kind === "upsert" ? msg.payload.workspace.id : msg.payload.id,
2812
2947
  payload: msg.payload,
2813
2948
  };
2949
+ case "workspace_setup_progress":
2950
+ return {
2951
+ type: "workspace_setup_progress",
2952
+ workspaceId: msg.payload.workspaceId,
2953
+ payload: msg.payload,
2954
+ };
2814
2955
  case "agent_stream":
2815
2956
  return {
2816
2957
  type: "agent_stream",
@@ -2907,7 +3048,7 @@ export class DaemonClient {
2907
3048
  }
2908
3049
  }
2909
3050
  function resolveAgentConfig(options) {
2910
- const { config, provider, cwd, initialPrompt: _initialPrompt, images: _images, git: _git, worktreeName: _worktreeName, requestId: _requestId, labels: _labels, ...overrides } = options;
3051
+ const { config, provider, cwd, workspaceId: _workspaceId, initialPrompt: _initialPrompt, images: _images, git: _git, worktreeName: _worktreeName, requestId: _requestId, labels: _labels, ...overrides } = options;
2911
3052
  const baseConfig = {
2912
3053
  ...(provider ? { provider } : {}),
2913
3054
  ...(cwd ? { cwd } : {}),