@phnx-labs/agents-cli 1.22.112 → 1.22.114

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 (706) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +10 -11
  3. package/dist/cli/command-registry.d.ts +0 -60
  4. package/dist/cli/command-registry.js +59 -61
  5. package/dist/commands/apply.d.ts +0 -4
  6. package/dist/commands/apply.js +3 -3
  7. package/dist/commands/browser-picker.d.ts +3 -6
  8. package/dist/commands/browser-picker.js +2 -2
  9. package/dist/commands/browser-sessions-picker.d.ts +2 -1
  10. package/dist/commands/computer-sessions-picker.d.ts +2 -1
  11. package/dist/commands/computer.d.ts +14 -19
  12. package/dist/commands/computer.js +65 -10
  13. package/dist/commands/config.js +46 -2
  14. package/dist/commands/daemon.d.ts +0 -23
  15. package/dist/commands/daemon.js +1 -1
  16. package/dist/commands/detach-core.d.ts +2 -1
  17. package/dist/commands/detach.d.ts +0 -3
  18. package/dist/commands/detach.js +3 -3
  19. package/dist/commands/feed.d.ts +3 -3
  20. package/dist/commands/feed.js +1 -1
  21. package/dist/commands/focus.d.ts +4 -4
  22. package/dist/commands/harness-hooks.d.ts +0 -7
  23. package/dist/commands/harness-hooks.js +1 -1
  24. package/dist/commands/harness-wizard.d.ts +2 -2
  25. package/dist/commands/harness.d.ts +3 -8
  26. package/dist/commands/harness.js +1 -1
  27. package/dist/commands/inspect.d.ts +2 -3
  28. package/dist/commands/inspect.js +1 -1
  29. package/dist/commands/message.d.ts +1 -1
  30. package/dist/commands/message.js +3 -3
  31. package/dist/commands/projects.d.ts +2 -18
  32. package/dist/commands/projects.js +89 -3
  33. package/dist/commands/resource-view.d.ts +3 -2
  34. package/dist/commands/resume.d.ts +0 -1
  35. package/dist/commands/resume.js +1 -1
  36. package/dist/commands/routines.d.ts +1 -3
  37. package/dist/commands/routines.js +1 -1
  38. package/dist/commands/run-account-picker.d.ts +2 -1
  39. package/dist/commands/run-broadcast.d.ts +2 -1
  40. package/dist/commands/run-device-picker.d.ts +2 -1
  41. package/dist/commands/secrets-passthrough.d.ts +14 -0
  42. package/dist/commands/secrets-passthrough.js +21 -2
  43. package/dist/commands/sessions-backfill.d.ts +2 -35
  44. package/dist/commands/sessions-backfill.js +1 -1
  45. package/dist/commands/sessions-bookmark.d.ts +0 -10
  46. package/dist/commands/sessions-bookmark.js +1 -1
  47. package/dist/commands/sessions-inject.d.ts +2 -3
  48. package/dist/commands/sessions-inject.js +8 -17
  49. package/dist/commands/sessions-picker-factory.d.ts +4 -14
  50. package/dist/commands/sessions-picker-factory.js +2 -2
  51. package/dist/commands/sessions-picker.d.ts +3 -9
  52. package/dist/commands/sessions-picker.js +2 -2
  53. package/dist/commands/sessions-resume.d.ts +2 -4
  54. package/dist/commands/sessions-resume.js +0 -5
  55. package/dist/commands/sessions-stats.d.ts +2 -1
  56. package/dist/commands/sessions-stop.d.ts +0 -3
  57. package/dist/commands/sessions-stop.js +1 -1
  58. package/dist/commands/sessions-tail.d.ts +2 -1
  59. package/dist/commands/sessions-trace.d.ts +4 -6
  60. package/dist/commands/sessions-trace.js +1 -1
  61. package/dist/commands/sessions.d.ts +14 -104
  62. package/dist/commands/sessions.js +22 -10
  63. package/dist/commands/setup-mine.d.ts +0 -6
  64. package/dist/commands/setup-mine.js +1 -1
  65. package/dist/commands/setup.d.ts +3 -4
  66. package/dist/commands/setup.js +1 -1
  67. package/dist/commands/share.d.ts +8 -8
  68. package/dist/commands/teams-picker.d.ts +2 -5
  69. package/dist/commands/teams-picker.js +2 -2
  70. package/dist/commands/teams.d.ts +1 -7
  71. package/dist/commands/teams.js +1 -1
  72. package/dist/commands/tmux.d.ts +1 -1
  73. package/dist/commands/tmux.js +1 -1
  74. package/dist/commands/upgrade.d.ts +2 -1
  75. package/dist/commands/utils.d.ts +1 -1
  76. package/dist/commands/utils.js +1 -1
  77. package/dist/lib/account-capabilities.d.ts +2 -1
  78. package/dist/lib/account-catalog.d.ts +4 -13
  79. package/dist/lib/account-catalog.js +1 -1
  80. package/dist/lib/account-registry.d.ts +3 -4
  81. package/dist/lib/account-registry.js +1 -1
  82. package/dist/lib/accounting/account-launch.d.ts +4 -3
  83. package/dist/lib/accounting/account-pool.d.ts +2 -1
  84. package/dist/lib/accounting/rotate.d.ts +3 -9
  85. package/dist/lib/accounting/rotate.js +2 -14
  86. package/dist/lib/accounting/usage-sync.d.ts +5 -4
  87. package/dist/lib/accounting/usage.d.ts +7 -31
  88. package/dist/lib/accounting/usage.js +4 -4
  89. package/dist/lib/accounts/migrate.d.ts +8 -8
  90. package/dist/lib/accounts/migrate.js +1 -1
  91. package/dist/lib/acp/client.d.ts +3 -2
  92. package/dist/lib/acp/harnesses.d.ts +2 -2
  93. package/dist/lib/acp/harnesses.js +1 -1
  94. package/dist/lib/acp/run.d.ts +2 -1
  95. package/dist/lib/actor.d.ts +3 -2
  96. package/dist/lib/add-dir.d.ts +2 -17
  97. package/dist/lib/add-dir.js +2 -6
  98. package/dist/lib/address.d.ts +56 -0
  99. package/dist/lib/address.js +143 -0
  100. package/dist/lib/agent-spec/agents.d.ts +12 -28
  101. package/dist/lib/agent-spec/agents.js +2 -6
  102. package/dist/lib/agent-spec/primitives.d.ts +0 -7
  103. package/dist/lib/agent-spec/primitives.js +0 -6
  104. package/dist/lib/agent-spec/types.d.ts +2 -1
  105. package/dist/lib/analytics/dashboard.d.ts +1 -5
  106. package/dist/lib/analytics/dashboard.js +0 -2
  107. package/dist/lib/analytics/mix-commands.d.ts +0 -7
  108. package/dist/lib/analytics/mix-commands.js +3 -3
  109. package/dist/lib/analytics/recipes.d.ts +0 -12
  110. package/dist/lib/analytics/recipes.js +7 -31
  111. package/dist/lib/analytics/usage-db.d.ts +5 -32
  112. package/dist/lib/analytics/usage-db.js +1 -70
  113. package/dist/lib/answer-router.d.ts +7 -6
  114. package/dist/lib/answer-router.js +5 -11
  115. package/dist/lib/artifact-actions.d.ts +0 -4
  116. package/dist/lib/ask-classifier.d.ts +3 -4
  117. package/dist/lib/ask-classifier.js +0 -7
  118. package/dist/lib/auth-health.d.ts +3 -46
  119. package/dist/lib/auth-health.js +3 -3
  120. package/dist/lib/auth-mint.d.ts +6 -6
  121. package/dist/lib/auth-mint.js +5 -5
  122. package/dist/lib/bench/runner.d.ts +2 -2
  123. package/dist/lib/bench/runner.js +1 -1
  124. package/dist/lib/bench/storage.d.ts +0 -1
  125. package/dist/lib/bench/storage.js +1 -1
  126. package/dist/lib/boot-profile.d.ts +0 -2
  127. package/dist/lib/boot-profile.js +0 -4
  128. package/dist/lib/brand.d.ts +0 -6
  129. package/dist/lib/brand.js +1 -1
  130. package/dist/lib/browser/arc-discovery.d.ts +4 -12
  131. package/dist/lib/browser/arc-discovery.js +1 -1
  132. package/dist/lib/browser/cdp.d.ts +1 -1
  133. package/dist/lib/browser/chrome.d.ts +2 -2
  134. package/dist/lib/browser/chrome.js +0 -4
  135. package/dist/lib/browser/chromium-discovery.d.ts +3 -2
  136. package/dist/lib/browser/drivers/arc.d.ts +3 -20
  137. package/dist/lib/browser/drivers/arc.js +2 -7
  138. package/dist/lib/browser/drivers/firefox.d.ts +2 -6
  139. package/dist/lib/browser/drivers/firefox.js +1 -1
  140. package/dist/lib/browser/drivers/local.d.ts +2 -1
  141. package/dist/lib/browser/drivers/ssh.d.ts +2 -3
  142. package/dist/lib/browser/drivers/ssh.js +0 -7
  143. package/dist/lib/browser/firefox-discovery.d.ts +4 -3
  144. package/dist/lib/browser/har.d.ts +8 -7
  145. package/dist/lib/browser/hygiene.d.ts +2 -3
  146. package/dist/lib/browser/hygiene.js +1 -1
  147. package/dist/lib/browser/ipc.d.ts +4 -3
  148. package/dist/lib/browser/ipc.js +1 -1
  149. package/dist/lib/browser/login-detection.d.ts +1 -8
  150. package/dist/lib/browser/registry.d.ts +2 -1
  151. package/dist/lib/browser/remote-control.d.ts +0 -7
  152. package/dist/lib/browser/remote-control.js +2 -2
  153. package/dist/lib/browser/resolve-target.d.ts +2 -6
  154. package/dist/lib/browser/resolve-target.js +3 -3
  155. package/dist/lib/browser/runtime-state.d.ts +4 -4
  156. package/dist/lib/browser/service.d.ts +4 -4
  157. package/dist/lib/browser/sessions-list.d.ts +0 -10
  158. package/dist/lib/browser/sessions-list.js +3 -3
  159. package/dist/lib/browser/stream.d.ts +2 -1
  160. package/dist/lib/browser/task-index.d.ts +4 -4
  161. package/dist/lib/browser/task-index.js +1 -1
  162. package/dist/lib/browser/types.d.ts +0 -20
  163. package/dist/lib/browser/types.js +1 -34
  164. package/dist/lib/browser/upload.d.ts +0 -27
  165. package/dist/lib/budget/ledger.d.ts +0 -2
  166. package/dist/lib/budget/ledger.js +1 -1
  167. package/dist/lib/budget/live-cloud.d.ts +2 -1
  168. package/dist/lib/budget/preflight.d.ts +3 -5
  169. package/dist/lib/budget/preflight.js +1 -1
  170. package/dist/lib/catchup.d.ts +2 -1
  171. package/dist/lib/channels/owner-forward.d.ts +5 -4
  172. package/dist/lib/channels/owner-sink.js +2 -2
  173. package/dist/lib/channels/providers/desktop.js +1 -1
  174. package/dist/lib/channels/providers/rush.d.ts +2 -1
  175. package/dist/lib/channels/registry.d.ts +1 -1
  176. package/dist/lib/channels/registry.js +1 -1
  177. package/dist/lib/channels/resolve.d.ts +3 -2
  178. package/dist/lib/channels/send.d.ts +5 -4
  179. package/dist/lib/cli-resources.d.ts +3 -9
  180. package/dist/lib/cli-resources.js +1 -1
  181. package/dist/lib/cloud/cursor.d.ts +1 -2
  182. package/dist/lib/cloud/cursor.js +1 -1
  183. package/dist/lib/cloud/dispatch.d.ts +2 -1
  184. package/dist/lib/cloud/factory.d.ts +0 -2
  185. package/dist/lib/cloud/factory.js +1 -1
  186. package/dist/lib/cloud/rush.d.ts +3 -11
  187. package/dist/lib/cloud/rush.js +1 -1
  188. package/dist/lib/cloud/session-index.d.ts +2 -1
  189. package/dist/lib/cloud/types.d.ts +2 -1
  190. package/dist/lib/codex-policy.d.ts +2 -1
  191. package/dist/lib/commands.d.ts +7 -7
  192. package/dist/lib/commands.js +1 -1
  193. package/dist/lib/comms-render.d.ts +1 -1
  194. package/dist/lib/computer/context.d.ts +11 -3
  195. package/dist/lib/computer/context.js +2 -2
  196. package/dist/lib/computer/policy.d.ts +0 -12
  197. package/dist/lib/computer/policy.js +1 -1
  198. package/dist/lib/computer-client.d.ts +3 -3
  199. package/dist/lib/computer-client.js +0 -1
  200. package/dist/lib/concurrency.d.ts +2 -1
  201. package/dist/lib/config-keys.d.ts +16 -3
  202. package/dist/lib/config-keys.js +47 -2
  203. package/dist/lib/convert.d.ts +0 -12
  204. package/dist/lib/convert.js +1 -12
  205. package/dist/lib/crabbox/cli.d.ts +6 -24
  206. package/dist/lib/crabbox/cli.js +2 -28
  207. package/dist/lib/crabbox/lease.d.ts +5 -6
  208. package/dist/lib/crabbox/lease.js +1 -1
  209. package/dist/lib/crabbox/progress.d.ts +2 -1
  210. package/dist/lib/crabbox/setup-copy.d.ts +2 -3
  211. package/dist/lib/crabbox/setup-copy.js +1 -1
  212. package/dist/lib/daemon/account-state-daemon-service.d.ts +1 -1
  213. package/dist/lib/daemon/attention-notify-service.d.ts +2 -1
  214. package/dist/lib/daemon/catchup-service.d.ts +2 -1
  215. package/dist/lib/daemon/daemon.d.ts +4 -12
  216. package/dist/lib/daemon/daemon.js +42 -23
  217. package/dist/lib/daemon/harness-update-service.d.ts +2 -19
  218. package/dist/lib/daemon/harness-update-service.js +3 -3
  219. package/dist/lib/daemon/runner.d.ts +3 -3
  220. package/dist/lib/daemon/self-update-service.d.ts +1 -16
  221. package/dist/lib/daemon/self-update-service.js +6 -6
  222. package/dist/lib/daemon/state-dir-check-service.d.ts +2 -1
  223. package/dist/lib/daemon/supervisor.d.ts +3 -2
  224. package/dist/lib/daemon/testdata/process-view-daemon.d.ts +1 -0
  225. package/dist/lib/daemon/testdata/process-view-daemon.js +14 -0
  226. package/dist/lib/daemon/testdata/process-view-start.d.ts +1 -0
  227. package/dist/lib/daemon/testdata/process-view-start.js +43 -0
  228. package/dist/lib/daemon-services.d.ts +2 -1
  229. package/dist/lib/daemon-webhooks.d.ts +1 -1
  230. package/dist/lib/deeplink/register.d.ts +3 -13
  231. package/dist/lib/deeplink/register.js +3 -3
  232. package/dist/lib/deeplink/url.d.ts +3 -2
  233. package/dist/lib/device-config.d.ts +4 -15
  234. package/dist/lib/device-config.js +164 -8
  235. package/dist/lib/devices/connect.d.ts +2 -1
  236. package/dist/lib/devices/discovery-policy.d.ts +3 -2
  237. package/dist/lib/devices/doctor-findings.js +1 -1
  238. package/dist/lib/devices/doctor-overview-cache.d.ts +3 -2
  239. package/dist/lib/devices/fleet-divergence.d.ts +2 -1
  240. package/dist/lib/devices/fleet.d.ts +3 -4
  241. package/dist/lib/devices/fleet.js +1 -1
  242. package/dist/lib/devices/harness-inventory.d.ts +3 -2
  243. package/dist/lib/devices/health-report.d.ts +3 -2
  244. package/dist/lib/devices/health.d.ts +1 -8
  245. package/dist/lib/devices/health.js +1 -1
  246. package/dist/lib/devices/interactive-host.d.ts +0 -2
  247. package/dist/lib/devices/interactive-host.js +1 -1
  248. package/dist/lib/devices/known-hosts.d.ts +2 -20
  249. package/dist/lib/devices/known-hosts.js +2 -2
  250. package/dist/lib/devices/pool.d.ts +2 -1
  251. package/dist/lib/devices/resolve-target.d.ts +2 -2
  252. package/dist/lib/devices/rollout-verify.d.ts +3 -2
  253. package/dist/lib/devices/stats-cache.d.ts +3 -2
  254. package/dist/lib/devices/sync.d.ts +6 -5
  255. package/dist/lib/devices/worker-pick.d.ts +3 -12
  256. package/dist/lib/devices/worker-pick.js +1 -1
  257. package/dist/lib/diff-text.d.ts +2 -1
  258. package/dist/lib/doctor-diff.d.ts +2 -1
  259. package/dist/lib/drift-sync.d.ts +3 -2
  260. package/dist/lib/drift.d.ts +3 -3
  261. package/dist/lib/drift.js +1 -1
  262. package/dist/lib/event-families.d.ts +0 -6
  263. package/dist/lib/event-families.js +3 -3
  264. package/dist/lib/event-provenance.d.ts +4 -1
  265. package/dist/lib/event-provenance.js +4 -0
  266. package/dist/lib/events-ingest.d.ts +4 -3
  267. package/dist/lib/exec-account-home.d.ts +2 -4
  268. package/dist/lib/exec-account-home.js +1 -1
  269. package/dist/lib/exec-bounded.d.ts +3 -4
  270. package/dist/lib/exec-bounded.js +1 -1
  271. package/dist/lib/exec.d.ts +6 -18
  272. package/dist/lib/exec.js +28 -8
  273. package/dist/lib/factory/snapshot.d.ts +2 -2
  274. package/dist/lib/factory/snapshot.js +1 -1
  275. package/dist/lib/feed/activity-stream.d.ts +2 -5
  276. package/dist/lib/feed/activity-stream.js +11 -2
  277. package/dist/lib/feed/activity.d.ts +16 -33
  278. package/dist/lib/feed/activity.js +69 -26
  279. package/dist/lib/feed/answer.d.ts +3 -2
  280. package/dist/lib/feed/attention.js +5 -1
  281. package/dist/lib/feed/events.d.ts +2 -47
  282. package/dist/lib/feed/events.js +1 -141
  283. package/dist/lib/feed/feed.d.ts +9 -42
  284. package/dist/lib/feed/feed.js +1 -60
  285. package/dist/lib/feed/pr-status.d.ts +0 -2
  286. package/dist/lib/feed/pr-status.js +1 -5
  287. package/dist/lib/feed/watch.d.ts +10 -2
  288. package/dist/lib/feed/watch.js +91 -4
  289. package/dist/lib/feed-broadcast.d.ts +5 -47
  290. package/dist/lib/feed-broadcast.js +9 -9
  291. package/dist/lib/feed-outcome.d.ts +3 -6
  292. package/dist/lib/feed-outcome.js +2 -2
  293. package/dist/lib/feed-policy.d.ts +5 -6
  294. package/dist/lib/feed-policy.js +2 -2
  295. package/dist/lib/feed-post.d.ts +3 -4
  296. package/dist/lib/feed-post.js +2 -2
  297. package/dist/lib/feed-ranking.d.ts +2 -2
  298. package/dist/lib/feed-ranking.js +1 -1
  299. package/dist/lib/fleet/apply.d.ts +5 -6
  300. package/dist/lib/fleet/apply.js +4 -4
  301. package/dist/lib/fleet/manifest.d.ts +2 -1
  302. package/dist/lib/fleet/remote-login.d.ts +18 -36
  303. package/dist/lib/fleet/remote-login.js +20 -19
  304. package/dist/lib/fleet/types.d.ts +0 -8
  305. package/dist/lib/fleet-cache.d.ts +1 -18
  306. package/dist/lib/fleet-cache.js +0 -5
  307. package/dist/lib/fleet-shared-repo-sync.d.ts +3 -3
  308. package/dist/lib/fleet-shared-repo-sync.js +1 -1
  309. package/dist/lib/fleet-shared-state.d.ts +3 -2
  310. package/dist/lib/format.d.ts +2 -1
  311. package/dist/lib/friction-heuristics.d.ts +2 -1
  312. package/dist/lib/fs-walk.d.ts +2 -1
  313. package/dist/lib/fuzzy.d.ts +2 -1
  314. package/dist/lib/gemini-settings.d.ts +0 -1
  315. package/dist/lib/gemini-settings.js +1 -1
  316. package/dist/lib/git.d.ts +7 -65
  317. package/dist/lib/git.js +3 -142
  318. package/dist/lib/github/gh-overload.d.ts +0 -4
  319. package/dist/lib/github/gh-overload.js +2 -2
  320. package/dist/lib/github/project-prs.d.ts +118 -0
  321. package/dist/lib/github/project-prs.js +173 -0
  322. package/dist/lib/github/rest.d.ts +2 -1
  323. package/dist/lib/harness/exec-config-version.d.ts +2 -1
  324. package/dist/lib/harness-auth-capabilities.d.ts +5 -4
  325. package/dist/lib/harness-connection-test.d.ts +2 -1
  326. package/dist/lib/heal.d.ts +3 -20
  327. package/dist/lib/heal.js +2 -39
  328. package/dist/lib/help.d.ts +3 -2
  329. package/dist/lib/helper-download.d.ts +0 -12
  330. package/dist/lib/helper-download.js +2 -2
  331. package/dist/lib/helper-versions.d.ts +2 -1
  332. package/dist/lib/helper-versions.js +1 -1
  333. package/dist/lib/hooks/install.d.ts +8 -49
  334. package/dist/lib/hooks/install.js +2 -96
  335. package/dist/lib/hooks/match.d.ts +2 -1
  336. package/dist/lib/hosts/credential-transport.d.ts +0 -2
  337. package/dist/lib/hosts/credential-transport.js +1 -1
  338. package/dist/lib/hosts/dispatch.d.ts +2 -34
  339. package/dist/lib/hosts/dispatch.js +4 -21
  340. package/dist/lib/hosts/logs.d.ts +2 -1
  341. package/dist/lib/hosts/passthrough.d.ts +1 -1
  342. package/dist/lib/hosts/passthrough.js +0 -1
  343. package/dist/lib/hosts/progress.d.ts +0 -5
  344. package/dist/lib/hosts/progress.js +1 -1
  345. package/dist/lib/hosts/ready.d.ts +3 -4
  346. package/dist/lib/hosts/ready.js +0 -8
  347. package/dist/lib/hosts/reconcile.d.ts +2 -8
  348. package/dist/lib/hosts/reconcile.js +1 -1
  349. package/dist/lib/hosts/reconnect.d.ts +4 -11
  350. package/dist/lib/hosts/reconnect.js +2 -2
  351. package/dist/lib/hosts/registry.d.ts +1 -1
  352. package/dist/lib/hosts/remote-cmd.d.ts +4 -3
  353. package/dist/lib/hosts/remote-session-id.d.ts +5 -27
  354. package/dist/lib/hosts/remote-session-id.js +18 -61
  355. package/dist/lib/hosts/session-index.d.ts +3 -2
  356. package/dist/lib/hosts/ssh-config.d.ts +2 -3
  357. package/dist/lib/hosts/ssh-config.js +0 -10
  358. package/dist/lib/humans.d.ts +0 -2
  359. package/dist/lib/humans.js +2 -2
  360. package/dist/lib/import.d.ts +4 -3
  361. package/dist/lib/installations/installation-lock.d.ts +0 -2
  362. package/dist/lib/installations/installation-lock.js +2 -2
  363. package/dist/lib/installations/launch-gate.d.ts +0 -9
  364. package/dist/lib/installations/launch-gate.js +1 -1
  365. package/dist/lib/installations/migrate.d.ts +0 -11
  366. package/dist/lib/installations/migrate.js +1 -1
  367. package/dist/lib/installations/shims.d.ts +1 -1
  368. package/dist/lib/installations/shims.js +2 -2
  369. package/dist/lib/installations/update-runtime.js +1 -1
  370. package/dist/lib/launch-identity.d.ts +10 -0
  371. package/dist/lib/launch-identity.js +31 -0
  372. package/dist/lib/linear-cache.d.ts +2 -1
  373. package/dist/lib/linux-userns.d.ts +2 -3
  374. package/dist/lib/linux-userns.js +0 -4
  375. package/dist/lib/loop.d.ts +2 -1
  376. package/dist/lib/mailbox-gc.d.ts +2 -1
  377. package/dist/lib/mailbox-target.d.ts +2 -1
  378. package/dist/lib/mailbox.d.ts +0 -6
  379. package/dist/lib/mailbox.js +1 -1
  380. package/dist/lib/manifest.d.ts +0 -14
  381. package/dist/lib/manifest.js +2 -2
  382. package/dist/lib/mcp-registry.d.ts +2 -1
  383. package/dist/lib/memory.d.ts +2 -13
  384. package/dist/lib/memory.js +4 -4
  385. package/dist/lib/menubar/download-menubar.d.ts +0 -2
  386. package/dist/lib/menubar/download-menubar.js +1 -5
  387. package/dist/lib/menubar/install-menubar.d.ts +3 -14
  388. package/dist/lib/menubar/install-menubar.js +3 -3
  389. package/dist/lib/menubar/migrate-prefs.d.ts +53 -0
  390. package/dist/lib/menubar/migrate-prefs.js +168 -0
  391. package/dist/lib/menubar/resolve-version.d.ts +1 -9
  392. package/dist/lib/menubar/resolve-version.js +4 -4
  393. package/dist/lib/menubar/snapshot.d.ts +24 -2
  394. package/dist/lib/menubar/snapshot.js +26 -0
  395. package/dist/lib/model-tier-overrides.d.ts +3 -2
  396. package/dist/lib/monitors/config.d.ts +0 -2
  397. package/dist/lib/monitors/config.js +0 -4
  398. package/dist/lib/monitors/engine.d.ts +1 -1
  399. package/dist/lib/monitors/remote.d.ts +3 -2
  400. package/dist/lib/monitors/sources/webhook.d.ts +2 -15
  401. package/dist/lib/monitors/sources/webhook.js +1 -38
  402. package/dist/lib/monitors/state.d.ts +4 -7
  403. package/dist/lib/monitors/state.js +2 -2
  404. package/dist/lib/notify.d.ts +1 -1
  405. package/dist/lib/notify.js +1 -1
  406. package/dist/lib/onepassword.d.ts +5 -14
  407. package/dist/lib/onepassword.js +0 -64
  408. package/dist/lib/open-url.d.ts +3 -2
  409. package/dist/lib/openclaw-keychain.d.ts +4 -17
  410. package/dist/lib/openclaw-keychain.js +3 -33
  411. package/dist/lib/operator.d.ts +2 -2
  412. package/dist/lib/operator.js +1 -1
  413. package/dist/lib/output/git-output.d.ts +4 -14
  414. package/dist/lib/output/git-output.js +1 -1
  415. package/dist/lib/owner-message.d.ts +3 -29
  416. package/dist/lib/owner-message.js +3 -3
  417. package/dist/lib/packages/output-home.d.ts +2 -4
  418. package/dist/lib/packages/output-home.js +2 -2
  419. package/dist/lib/perf/db.d.ts +0 -2
  420. package/dist/lib/perf/db.js +2 -7
  421. package/dist/lib/permissions-registry.d.ts +2 -3
  422. package/dist/lib/permissions-registry.js +0 -4
  423. package/dist/lib/permissions.d.ts +6 -16
  424. package/dist/lib/permissions.js +2 -15
  425. package/dist/lib/picker.d.ts +6 -5
  426. package/dist/lib/placement.d.ts +3 -6
  427. package/dist/lib/placement.js +0 -17
  428. package/dist/lib/platform/posixpath.d.ts +2 -1
  429. package/dist/lib/platform/winpath.d.ts +2 -1
  430. package/dist/lib/plugins/plugin-marketplace.d.ts +2 -2
  431. package/dist/lib/plugins/plugin-marketplace.js +1 -1
  432. package/dist/lib/pr-land-detach.d.ts +2 -1
  433. package/dist/lib/profiles-presets.d.ts +2 -1
  434. package/dist/lib/profiles.d.ts +3 -9
  435. package/dist/lib/profiles.js +1 -9
  436. package/dist/lib/project-doctor.d.ts +2 -1
  437. package/dist/lib/project-launch.d.ts +2 -2
  438. package/dist/lib/project-probe.d.ts +4 -3
  439. package/dist/lib/project-pull.d.ts +2 -1
  440. package/dist/lib/project-resources.d.ts +2 -2
  441. package/dist/lib/project-resources.js +1 -1
  442. package/dist/lib/project-root.d.ts +2 -6
  443. package/dist/lib/project-root.js +1 -1
  444. package/dist/lib/project-schedule.d.ts +2 -1
  445. package/dist/lib/project-status.d.ts +2 -16
  446. package/dist/lib/project-status.js +3 -3
  447. package/dist/lib/reconcile-and-repair.d.ts +5 -4
  448. package/dist/lib/redact.d.ts +7 -1
  449. package/dist/lib/redact.js +94 -3
  450. package/dist/lib/refresh-coordinator.d.ts +2 -1
  451. package/dist/lib/refresh.d.ts +3 -2
  452. package/dist/lib/remote-agents-json.d.ts +3 -2
  453. package/dist/lib/reserved-stores.d.ts +0 -2
  454. package/dist/lib/reserved-stores.js +3 -5
  455. package/dist/lib/resource-content-diff.d.ts +0 -2
  456. package/dist/lib/resource-content-diff.js +1 -1
  457. package/dist/lib/resource-patterns.d.ts +2 -1
  458. package/dist/lib/resource-profiles.d.ts +2 -8
  459. package/dist/lib/resource-profiles.js +3 -27
  460. package/dist/lib/resources/workflows.d.ts +1 -1
  461. package/dist/lib/resources.d.ts +4 -9
  462. package/dist/lib/resources.js +1 -1
  463. package/dist/lib/routine-context.d.ts +2 -5
  464. package/dist/lib/routine-context.js +2 -2
  465. package/dist/lib/routine-notify-owner.d.ts +8 -7
  466. package/dist/lib/routine-notify-owner.js +5 -5
  467. package/dist/lib/routine-process-cleanup.d.ts +2 -1
  468. package/dist/lib/routine-readiness.d.ts +0 -2
  469. package/dist/lib/routine-readiness.js +0 -7
  470. package/dist/lib/routines-project.d.ts +3 -4
  471. package/dist/lib/routines-project.js +1 -1
  472. package/dist/lib/rules/compile.d.ts +3 -25
  473. package/dist/lib/rules/compile.js +1 -1
  474. package/dist/lib/rules/compose.d.ts +3 -9
  475. package/dist/lib/rules/rules.d.ts +4 -15
  476. package/dist/lib/rules/rules.js +1 -64
  477. package/dist/lib/run-defaults.d.ts +1 -1
  478. package/dist/lib/run-notify.d.ts +2 -1
  479. package/dist/lib/run-trace-sync.d.ts +1 -1
  480. package/dist/lib/run-trace-sync.js +1 -1
  481. package/dist/lib/scheduler.d.ts +2 -1
  482. package/dist/lib/scheduling/routines.d.ts +9 -21
  483. package/dist/lib/scheduling/routines.js +3 -46
  484. package/dist/lib/secrets-client.d.ts +0 -17
  485. package/dist/lib/secrets-client.js +4 -26
  486. package/dist/lib/secrets-policy.d.ts +12 -17
  487. package/dist/lib/secrets-policy.js +5 -5
  488. package/dist/lib/secrets-types.d.ts +3 -2
  489. package/dist/lib/secrets-types.js +2 -1
  490. package/dist/lib/self-heal/checks/install-staging.js +1 -1
  491. package/dist/lib/self-heal/registry.d.ts +3 -2
  492. package/dist/lib/self-heal/types.d.ts +1 -1
  493. package/dist/lib/self-heal/types.js +1 -1
  494. package/dist/lib/self-update.d.ts +5 -5
  495. package/dist/lib/self-update.js +4 -4
  496. package/dist/lib/session/active.js +9 -3
  497. package/dist/lib/session/actor-sidecar.d.ts +3 -2
  498. package/dist/lib/session/artifacts.d.ts +0 -2
  499. package/dist/lib/session/artifacts.js +1 -1
  500. package/dist/lib/session/bash-command.d.ts +2 -7
  501. package/dist/lib/session/bundle.d.ts +4 -6
  502. package/dist/lib/session/bundle.js +1 -5
  503. package/dist/lib/session/cloud.d.ts +0 -4
  504. package/dist/lib/session/cloud.js +2 -15
  505. package/dist/lib/session/db.d.ts +2 -1
  506. package/dist/lib/session/db.js +39 -4
  507. package/dist/lib/session/detached.d.ts +2 -1
  508. package/dist/lib/session/detached.js +2 -2
  509. package/dist/lib/session/digest.d.ts +2 -2
  510. package/dist/lib/session/digest.js +1 -1
  511. package/dist/lib/session/discover.js +7 -2
  512. package/dist/lib/session/fork.d.ts +3 -2
  513. package/dist/lib/session/highlights.d.ts +6 -5
  514. package/dist/lib/session/hook-sessions.d.ts +12 -1
  515. package/dist/lib/session/hook-sessions.js +139 -6
  516. package/dist/lib/session/host-link.d.ts +2 -1
  517. package/dist/lib/session/inject.d.ts +1 -1
  518. package/dist/lib/session/inject.js +1 -1
  519. package/dist/lib/session/insights.d.ts +3 -15
  520. package/dist/lib/session/insights.js +2 -2
  521. package/dist/lib/session/local-tmux-attach.d.ts +2 -18
  522. package/dist/lib/session/local-tmux-attach.js +1 -1
  523. package/dist/lib/session/migrations.d.ts +0 -1
  524. package/dist/lib/session/migrations.js +1 -1
  525. package/dist/lib/session/mirror.d.ts +5 -8
  526. package/dist/lib/session/mirror.js +2 -2
  527. package/dist/lib/session/parse.d.ts +1 -32
  528. package/dist/lib/session/parse.js +4 -4
  529. package/dist/lib/session/pid-registry.d.ts +18 -5
  530. package/dist/lib/session/pid-registry.js +164 -17
  531. package/dist/lib/session/presence.d.ts +2 -1
  532. package/dist/lib/session/process-view.d.ts +25 -0
  533. package/dist/lib/session/process-view.js +176 -0
  534. package/dist/lib/session/projection.d.ts +13 -0
  535. package/dist/lib/session/projection.js +101 -0
  536. package/dist/lib/session/prompt.d.ts +3 -2
  537. package/dist/lib/session/prompt.js +38 -1
  538. package/dist/lib/session/recovery.d.ts +3 -2
  539. package/dist/lib/session/remote/peer-stream.d.ts +2 -5
  540. package/dist/lib/session/remote/peer-stream.js +2 -2
  541. package/dist/lib/session/remote/remote-bundle.d.ts +2 -1
  542. package/dist/lib/session/remote/remote-list.d.ts +5 -5
  543. package/dist/lib/session/remote/remote.d.ts +4 -3
  544. package/dist/lib/session/remote/watch.d.ts +10 -7
  545. package/dist/lib/session/remote/watch.js +10 -6
  546. package/dist/lib/session/remote-active.d.ts +2 -1
  547. package/dist/lib/session/render.d.ts +2 -2
  548. package/dist/lib/session/render.js +1 -1
  549. package/dist/lib/session/resume-owner.d.ts +1 -1
  550. package/dist/lib/session/resume-owner.js +1 -1
  551. package/dist/lib/session/run-names.d.ts +2 -1
  552. package/dist/lib/session/session-cache.d.ts +7 -26
  553. package/dist/lib/session/session-cache.js +17 -8
  554. package/dist/lib/session/share-html.d.ts +1 -21
  555. package/dist/lib/session/share-html.js +1 -1
  556. package/dist/lib/session/shell-programs.d.ts +2 -1
  557. package/dist/lib/session/state.d.ts +41 -8
  558. package/dist/lib/session/state.js +112 -11
  559. package/dist/lib/session/stream-render.d.ts +2 -1
  560. package/dist/lib/session/sync/agents.d.ts +0 -4
  561. package/dist/lib/session/sync/agents.js +0 -0
  562. package/dist/lib/session/sync/backend.d.ts +5 -5
  563. package/dist/lib/session/sync/managed-config.d.ts +0 -8
  564. package/dist/lib/session/sync/managed-key.d.ts +0 -2
  565. package/dist/lib/session/sync/managed-key.js +1 -1
  566. package/dist/lib/session/sync/r2.d.ts +4 -1
  567. package/dist/lib/session/sync/r2.js +4 -7
  568. package/dist/lib/session/sync/transcript-crypto.d.ts +2 -1
  569. package/dist/lib/session/tail.d.ts +2 -1
  570. package/dist/lib/session/team-filter.d.ts +1 -1
  571. package/dist/lib/session/testdata/pid-registry-namespace.d.ts +1 -0
  572. package/dist/lib/session/testdata/pid-registry-namespace.js +27 -0
  573. package/dist/lib/session/testdata/process-view-namespace.d.ts +1 -0
  574. package/dist/lib/session/testdata/process-view-namespace.js +56 -0
  575. package/dist/lib/session/testdata/process-view-private.d.ts +1 -0
  576. package/dist/lib/session/testdata/process-view-private.js +12 -0
  577. package/dist/lib/session/throughput.d.ts +2 -3
  578. package/dist/lib/session/throughput.js +1 -1
  579. package/dist/lib/session/timeline-pass.d.ts +3 -42
  580. package/dist/lib/session/timeline-pass.js +4 -4
  581. package/dist/lib/session/timeline.d.ts +3 -13
  582. package/dist/lib/session/timeline.js +3 -3
  583. package/dist/lib/session/tool-calls.d.ts +2 -2
  584. package/dist/lib/session/tool-calls.js +1 -1
  585. package/dist/lib/session/tool-index.d.ts +0 -8
  586. package/dist/lib/session/tool-index.js +2 -2
  587. package/dist/lib/session/tool-store.d.ts +2 -1
  588. package/dist/lib/session/trajectory-compare.d.ts +2 -1
  589. package/dist/lib/session/trajectory-lineage.d.ts +2 -1
  590. package/dist/lib/session/trajectory-text.d.ts +3 -2
  591. package/dist/lib/session/trajectory.d.ts +2 -1
  592. package/dist/lib/session/viewing-in.d.ts +2 -1
  593. package/dist/lib/settings-manifest.d.ts +2 -1
  594. package/dist/lib/share/delete.d.ts +5 -4
  595. package/dist/lib/share/html.d.ts +0 -2
  596. package/dist/lib/share/html.js +9 -9
  597. package/dist/lib/share/http-error.d.ts +3 -2
  598. package/dist/lib/share/og.d.ts +2 -1
  599. package/dist/lib/share/provision.d.ts +2 -2
  600. package/dist/lib/share/publish.d.ts +4 -13
  601. package/dist/lib/share/publish.js +2 -2
  602. package/dist/lib/shim-heal.d.ts +1 -5
  603. package/dist/lib/shim-heal.js +0 -6
  604. package/dist/lib/smart-launch.d.ts +4 -5
  605. package/dist/lib/smart-launch.js +1 -1
  606. package/dist/lib/snapshot.d.ts +3 -2
  607. package/dist/lib/ssh-exec.d.ts +5 -4
  608. package/dist/lib/ssh-tunnel.d.ts +3 -2
  609. package/dist/lib/staleness/checkers/permissions.d.ts +0 -2
  610. package/dist/lib/staleness/checkers/permissions.js +1 -1
  611. package/dist/lib/staleness/fingerprint.d.ts +0 -7
  612. package/dist/lib/staleness/fingerprint.js +1 -1
  613. package/dist/lib/staleness/prune.d.ts +3 -2
  614. package/dist/lib/staleness/registry.d.ts +1 -1
  615. package/dist/lib/staleness/writers/sources.d.ts +0 -8
  616. package/dist/lib/staleness/writers/sources.js +1 -1
  617. package/dist/lib/startup/command-registry.js +1 -1
  618. package/dist/lib/state.d.ts +1 -3
  619. package/dist/lib/state.js +1 -4
  620. package/dist/lib/subagents-registry.d.ts +4 -3
  621. package/dist/lib/subagents.d.ts +2 -1
  622. package/dist/lib/subagents.js +3 -2
  623. package/dist/lib/summarizer/pass.d.ts +3 -6
  624. package/dist/lib/summarizer/pass.js +2 -2
  625. package/dist/lib/summarizer/summarize.d.ts +4 -3
  626. package/dist/lib/sync-passphrase.d.ts +3 -2
  627. package/dist/lib/sync-status.d.ts +3 -16
  628. package/dist/lib/sync-status.js +2 -2
  629. package/dist/lib/sync-umbrella.d.ts +4 -3
  630. package/dist/lib/system-run-sync.d.ts +2 -1
  631. package/dist/lib/teams/agents.d.ts +2 -4
  632. package/dist/lib/teams/agents.js +1 -1
  633. package/dist/lib/teams/forEach.d.ts +3 -2
  634. package/dist/lib/teams/pr-watch.d.ts +4 -11
  635. package/dist/lib/teams/pr-watch.js +4 -4
  636. package/dist/lib/teams/registry.d.ts +2 -3
  637. package/dist/lib/teams/registry.js +1 -1
  638. package/dist/lib/teams/remoteWorktree.d.ts +0 -16
  639. package/dist/lib/teams/remoteWorktree.js +3 -3
  640. package/dist/lib/teams/scheduler.d.ts +6 -5
  641. package/dist/lib/teams/scheduler.js +1 -1
  642. package/dist/lib/teams/supervisor.d.ts +4 -3
  643. package/dist/lib/teams/worktree.d.ts +0 -9
  644. package/dist/lib/teams/worktree.js +0 -32
  645. package/dist/lib/term-client.d.ts +44 -0
  646. package/dist/lib/term-client.js +117 -0
  647. package/dist/lib/terminal/inject.d.ts +3 -16
  648. package/dist/lib/terminal/inject.js +1 -29
  649. package/dist/lib/terminal/resolve.d.ts +3 -9
  650. package/dist/lib/terminal/resolve.js +3 -7
  651. package/dist/lib/tmux/binary.d.ts +2 -1
  652. package/dist/lib/tmux/orphan-reap.d.ts +6 -7
  653. package/dist/lib/tmux/orphan-reap.js +1 -1
  654. package/dist/lib/tmux/session.d.ts +4 -3
  655. package/dist/lib/traces/classify.d.ts +3 -2
  656. package/dist/lib/traces/config.d.ts +0 -8
  657. package/dist/lib/traces/insights.d.ts +2 -1
  658. package/dist/lib/traces/phenotype.d.ts +3 -3
  659. package/dist/lib/traces/provision.d.ts +1 -3
  660. package/dist/lib/traces/provision.js +1 -1
  661. package/dist/lib/traces/schema2-build.d.ts +1 -1
  662. package/dist/lib/traces/schema2-danger.d.ts +2 -1
  663. package/dist/lib/traces/schema2.d.ts +5 -4
  664. package/dist/lib/traces/segments.d.ts +4 -20
  665. package/dist/lib/traces/segments.js +3 -3
  666. package/dist/lib/traces/sync.d.ts +2 -3
  667. package/dist/lib/traces/sync.js +1 -1
  668. package/dist/lib/triggers/handlers.d.ts +4 -13
  669. package/dist/lib/triggers/handlers.js +1 -1
  670. package/dist/lib/triggers/webhook.d.ts +5 -27
  671. package/dist/lib/triggers/webhook.js +4 -4
  672. package/dist/lib/types.d.ts +3 -3
  673. package/dist/lib/usage-refresh.d.ts +4 -10
  674. package/dist/lib/usage-refresh.js +3 -8
  675. package/dist/lib/verbs.d.ts +2 -1
  676. package/dist/lib/version-duplicates.d.ts +2 -3
  677. package/dist/lib/version-duplicates.js +3 -33
  678. package/dist/lib/version.d.ts +2 -1
  679. package/dist/lib/warn-unpushed.d.ts +2 -1
  680. package/dist/lib/watchdog/history.d.ts +3 -2
  681. package/dist/lib/watchdog/log.d.ts +0 -6
  682. package/dist/lib/watchdog/log.js +1 -1
  683. package/dist/lib/watchdog/rotate.d.ts +2 -26
  684. package/dist/lib/watchdog/rotate.js +4 -12
  685. package/dist/lib/watchdog/runner.d.ts +0 -7
  686. package/dist/lib/watchdog/runner.js +4 -4
  687. package/dist/lib/watchdog/service.d.ts +2 -2
  688. package/dist/lib/watchdog/service.js +1 -1
  689. package/dist/lib/watchdog/watchdog-agent.d.ts +2 -1
  690. package/dist/lib/watchdog/watchdog.d.ts +2 -1
  691. package/dist/lib/watchdog/watchdogTail.d.ts +2 -1
  692. package/dist/lib/workflows-registry.d.ts +3 -2
  693. package/dist/lib/workflows.d.ts +4 -7
  694. package/dist/lib/workflows.js +1 -1
  695. package/dist/lib/worktree/held.d.ts +4 -28
  696. package/dist/lib/worktree/held.js +3 -3
  697. package/package.json +2 -3
  698. package/scripts/postinstall.js +5 -4
  699. package/dist/commands/pty.d.ts +0 -20
  700. package/dist/commands/pty.js +0 -404
  701. package/dist/lib/config-machine-keys.d.ts +0 -14
  702. package/dist/lib/config-machine-keys.js +0 -21
  703. package/dist/lib/pty-client.d.ts +0 -49
  704. package/dist/lib/pty-client.js +0 -315
  705. package/dist/lib/pty-server.d.ts +0 -59
  706. package/dist/lib/pty-server.js +0 -653
@@ -0,0 +1,101 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { normalizeHost } from '../machine-id.js';
3
+ /** Device observations are not sessions: a launcher may observe a peer's run.
4
+ * Keep those observations separately and publish execution-owned state once. */
5
+ export class SessionProjection {
6
+ observations = new Map();
7
+ projected = new Map();
8
+ selected = new Map();
9
+ sequence = 0;
10
+ streamId = randomUUID();
11
+ /** Only the selected observation may publish execution-owned attention. */
12
+ rowForObservation(scope, rowKey) {
13
+ const key = this.selected.get(`${normalizeHost(scope)}\0${rowKey}`);
14
+ return key ? this.projected.get(key) : undefined;
15
+ }
16
+ apply(event) {
17
+ const scope = normalizeHost(event.scope);
18
+ if (event.type === 'reset')
19
+ this.observations.set(scope, new Map(event.rows.map(row => [row.rowKey, row])));
20
+ if (event.type === 'upsert') {
21
+ if (!this.observations.has(scope))
22
+ this.observations.set(scope, new Map());
23
+ this.observations.get(scope).set(event.rowKey, event.row);
24
+ }
25
+ if (event.type === 'remove')
26
+ this.observations.get(scope)?.delete(event.rowKey);
27
+ const stamp = () => ({ version: 1, streamId: this.streamId, sequence: ++this.sequence, capturedAt: event.capturedAt });
28
+ if (event.type === 'scope' || event.type === 'heartbeat') {
29
+ // An unavailable owner retains its last observation until its next reset.
30
+ return [{ ...event, ...stamp(), scope }];
31
+ }
32
+ // A launch exists before a non-Claude harness mints its session id. Join an
33
+ // id-less placeholder only through an exact, unambiguous durable launch id.
34
+ const launchSessions = new Map();
35
+ for (const [observer, rows] of this.observations)
36
+ for (const row of rows.values()) {
37
+ if (!row.launchId || !row.sessionId)
38
+ continue;
39
+ const owner = normalizeHost(row.machine || row.sourceDevice || observer);
40
+ const launch = `${owner}\0${row.kind}\0${row.launchId}`;
41
+ const ids = launchSessions.get(launch) ?? new Set();
42
+ ids.add(row.sessionId);
43
+ launchSessions.set(launch, ids);
44
+ }
45
+ const groups = new Map();
46
+ for (const [observer, rows] of this.observations)
47
+ for (const row of rows.values()) {
48
+ const owner = normalizeHost(row.machine || row.sourceDevice || observer);
49
+ const launchIds = row.launchId ? launchSessions.get(`${owner}\0${row.kind}\0${row.launchId}`) : undefined;
50
+ const sessionId = row.sessionId || (launchIds?.size === 1 ? [...launchIds][0] : undefined);
51
+ const identity = sessionId ? `${row.kind}\0${sessionId}` : `${observer}\0${row.rowKey}`;
52
+ const key = createHash('sha256').update(`${owner}\0${identity}`).digest('base64url').slice(0, 22);
53
+ const group = groups.get(key) ?? [];
54
+ group.push({ scope: observer, row });
55
+ groups.set(key, group);
56
+ }
57
+ const next = new Map();
58
+ const selected = new Map();
59
+ for (const [rowKey, observations] of groups) {
60
+ const owner = normalizeHost(observations[0].row.machine || observations[0].row.sourceDevice || observations[0].scope);
61
+ const authoritative = observations.filter(item => item.scope === owner);
62
+ // Once the owner has answered, its absence is authoritative too. A stale
63
+ // launcher/history mirror cannot resurrect a removed execution.
64
+ const candidates = authoritative.length ? authoritative : this.observations.has(owner) ? [] : observations;
65
+ candidates.sort((a, b) => Number(a.row.previous) - Number(b.row.previous)
66
+ || (b.row.lastActivityMs ?? b.row.startedAtMs ?? 0) - (a.row.lastActivityMs ?? a.row.startedAtMs ?? 0)
67
+ || a.row.rowKey.localeCompare(b.row.rowKey));
68
+ const candidate = candidates[0];
69
+ const chosen = candidate?.row;
70
+ if (!chosen)
71
+ continue;
72
+ selected.set(`${candidate.scope}\0${chosen.rowKey}`, rowKey);
73
+ const observerTerminals = observations.filter(item => !item.row.previous && (item.row.terminalId || item.row.viewingIn || item.row.provenance?.reply))
74
+ .map(({ scope: device, row }) => ({ device, terminalId: row.terminalId, launchId: row.launchId, viewingIn: row.viewingIn, provenance: row.provenance }))
75
+ .sort((a, b) => a.device.localeCompare(b.device) || (a.terminalId ?? '').localeCompare(b.terminalId ?? ''));
76
+ next.set(rowKey, {
77
+ ...chosen, rowKey, sourceDevice: owner, machine: owner,
78
+ observerTerminals,
79
+ recovery: chosen.resumable && chosen.sessionId
80
+ ? { command: 'agents', args: ['sessions', 'resume', chosen.sessionId, '--device', owner], ...(chosen.cwd ? { cwd: chosen.cwd } : {}) }
81
+ : null,
82
+ });
83
+ }
84
+ const result = [];
85
+ // A reset still replaces only its source scope. Cross-scope migrations are
86
+ // explicit removes/upserts, so existing clients converge without a new API.
87
+ if (event.type === 'reset')
88
+ result.push({ ...stamp(), type: 'reset', scope, rows: [...next.values()].filter(row => row.sourceDevice === scope) });
89
+ for (const [key, row] of this.projected)
90
+ if (!next.has(key) && !(event.type === 'reset' && row.sourceDevice === scope)) {
91
+ result.push({ ...stamp(), type: 'remove', scope: row.sourceDevice, rowKey: key });
92
+ }
93
+ for (const [key, row] of next)
94
+ if (!(event.type === 'reset' && row.sourceDevice === scope) && JSON.stringify(this.projected.get(key)) !== JSON.stringify(row)) {
95
+ result.push({ ...stamp(), type: 'upsert', scope: row.sourceDevice, rowKey: key, row });
96
+ }
97
+ this.projected = next;
98
+ this.selected = selected;
99
+ return result;
100
+ }
101
+ }
@@ -66,7 +66,7 @@ export declare function cleanSessionPrompt(raw: string): string;
66
66
  * path, a pasted shell line, or a skill's install directory.
67
67
  */
68
68
  export type UserPromptKind = 'text' | 'image' | 'command' | 'skill';
69
- export interface ClassifiedPrompt {
69
+ interface ClassifiedPrompt {
70
70
  /**
71
71
  * The one-line, display-ready form of the prompt — never a bare path. NOT
72
72
  * length-capped: the recap card shows it in full; row consumers cap it
@@ -132,7 +132,7 @@ export declare function extractSessionTopic(raw: string): string | undefined;
132
132
  * dropped in, or an `@path` directory reference. `name` is the basename (or the
133
133
  * `@ref` verbatim) — the sidebar renders these as chips beside the request text.
134
134
  */
135
- export interface RequestAttachmentRef {
135
+ interface RequestAttachmentRef {
136
136
  kind: 'image' | 'file' | 'dir';
137
137
  name: string;
138
138
  }
@@ -194,3 +194,4 @@ export declare function firstSentence(text: string, cap?: number): string;
194
194
  export declare function tidyRequest(raw: string | undefined, opts?: {
195
195
  attachments?: SessionAttachment[];
196
196
  }, depth?: number): TidyRequest | undefined;
197
+ export {};
@@ -193,7 +193,7 @@ export function cleanSessionPrompt(raw) {
193
193
  let text = stripTeamWrappers(raw).replace(/\r/g, '').trim();
194
194
  if (!text)
195
195
  return '';
196
- text = text.replace(/<\/?[a-z_][a-z0-9_-]*>/gi, '');
196
+ text = stripXmlLikeTags(text);
197
197
  const meaningful = text
198
198
  .split('\n')
199
199
  .map(line => line.trim())
@@ -201,6 +201,43 @@ export function cleanSessionPrompt(raw) {
201
201
  .filter(line => !NOISE_LINE_PATTERNS.some(pattern => pattern.test(line)));
202
202
  return meaningful.join('\n').trim();
203
203
  }
204
+ /**
205
+ * Remove XML-like tags in one pass, including nested fragments such as
206
+ * `<scr<b>ipt>`. A candidate starts only with a valid tag-name prefix, so
207
+ * ordinary comparisons such as `1 < 2 > 0` remain prose.
208
+ */
209
+ function stripXmlLikeTags(text) {
210
+ const chunks = [];
211
+ let plainStart = 0;
212
+ let tagStart = -1;
213
+ let depth = 0;
214
+ for (let index = 0; index < text.length; index += 1) {
215
+ const char = text[index];
216
+ if (depth === 0) {
217
+ if (char !== '<')
218
+ continue;
219
+ const firstNameIndex = text[index + 1] === '/' ? index + 2 : index + 1;
220
+ if (!/[a-z_]/i.test(text[firstNameIndex] ?? ''))
221
+ continue;
222
+ chunks.push(text.slice(plainStart, index));
223
+ tagStart = index;
224
+ depth = 1;
225
+ continue;
226
+ }
227
+ if (char === '<') {
228
+ depth += 1;
229
+ }
230
+ else if (char === '>' && --depth === 0) {
231
+ plainStart = index + 1;
232
+ tagStart = -1;
233
+ }
234
+ }
235
+ if (tagStart !== -1)
236
+ chunks.push(text.slice(tagStart));
237
+ else
238
+ chunks.push(text.slice(plainStart));
239
+ return chunks.join('');
240
+ }
204
241
  /**
205
242
  * A skill invocation injects a system line naming the skill's install directory:
206
243
  * "Base directory for this skill: /home/.../skills/<name>"
@@ -10,7 +10,7 @@ export interface RecoveryAccount {
10
10
  label: string;
11
11
  email: string | null;
12
12
  }
13
- export interface SessionRecoverySelection {
13
+ interface SessionRecoverySelection {
14
14
  /** Installed binary only; account homes retain their own context label. */
15
15
  executableVersion?: string;
16
16
  /** Explicit account selector resolved against the local candidate pool. */
@@ -38,7 +38,7 @@ export type SessionRecoveryTarget = {
38
38
  account?: RecoveryAccount;
39
39
  reason: string;
40
40
  };
41
- export type NativeResumeInspection = {
41
+ type NativeResumeInspection = {
42
42
  available: true;
43
43
  cwd?: string;
44
44
  } | {
@@ -92,3 +92,4 @@ export declare function resolveSessionRecovery(session: SessionMeta, collect?: (
92
92
  * the recovery resolver above; callers must not native-resume another version's
93
93
  * isolated home themselves. */
94
94
  export declare function sessionRecoveryRunArgs(session: Pick<SessionMeta, 'id'>): string[];
95
+ export {};
@@ -5,16 +5,12 @@ export declare const PEER_BACKOFF_BASE_MS = 2000;
5
5
  export declare const PEER_BACKOFF_CAP_MS = 60000;
6
6
  /** Consecutive failed spawns before the peer is parked. */
7
7
  export declare const PEER_PARK_AFTER_FAILURES = 3;
8
- /** Bytes of a peer's stderr retained for the `unavailable` reason. */
9
- export declare const PEER_STDERR_BYTES = 2048;
10
- /** How often a parked peer re-checks the device registry for a refresh. */
11
- export declare const PEER_REGISTRY_POLL_MS = 5000;
12
8
  /**
13
9
  * Reconnect delay for `failures` consecutive failed spawns: 0 for a healthy
14
10
  * peer, then {@link PEER_BACKOFF_BASE_MS} doubling to {@link PEER_BACKOFF_CAP_MS}.
15
11
  */
16
12
  export declare function peerBackoffDelayMs(failures: number, base?: number, cap?: number): number;
17
- export interface PeerStreamOptions {
13
+ interface PeerStreamOptions {
18
14
  /** The device to subscribe to. */
19
15
  device: DeviceProfile;
20
16
  /** Remote command to run over ssh, already shell-quoted for the peer's OS. */
@@ -45,3 +41,4 @@ export interface PeerStreamOptions {
45
41
  * backoff. Resolves when the signal aborts or the peer cannot be addressed.
46
42
  */
47
43
  export declare function streamFromPeer(options: PeerStreamOptions): Promise<void>;
44
+ export {};
@@ -35,9 +35,9 @@ export const PEER_BACKOFF_CAP_MS = 60_000;
35
35
  /** Consecutive failed spawns before the peer is parked. */
36
36
  export const PEER_PARK_AFTER_FAILURES = 3;
37
37
  /** Bytes of a peer's stderr retained for the `unavailable` reason. */
38
- export const PEER_STDERR_BYTES = 2_048;
38
+ const PEER_STDERR_BYTES = 2_048;
39
39
  /** How often a parked peer re-checks the device registry for a refresh. */
40
- export const PEER_REGISTRY_POLL_MS = 5_000;
40
+ const PEER_REGISTRY_POLL_MS = 5_000;
41
41
  /**
42
42
  * Reconnect delay for `failures` consecutive failed spawns: 0 for a healthy
43
43
  * peer, then {@link PEER_BACKOFF_BASE_MS} doubling to {@link PEER_BACKOFF_CAP_MS}.
@@ -1,5 +1,5 @@
1
1
  import { type ParsedBundle } from '../bundle.js';
2
- export interface RemotePullResult {
2
+ interface RemotePullResult {
3
3
  bundles: ParsedBundle[];
4
4
  errors: string[];
5
5
  }
@@ -10,3 +10,4 @@ export interface RemotePullResult {
10
10
  * `exportArgs` must NOT contain --device (the remote export runs for itself only).
11
11
  */
12
12
  export declare function pullBundlesFromHosts(hosts: string[], exportArgs: string[]): Promise<RemotePullResult>;
13
+ export {};
@@ -4,7 +4,7 @@ import type { SessionMeta } from '../types.js';
4
4
  import { type ToolProgramCountEnvelope, type ToolSearchEnvelope } from '../tool-index.js';
5
5
  export { REMOTE_STDOUT_MAX_BYTES, RemoteUtf8Accumulator } from '../../ssh-exec.js';
6
6
  export declare const REMOTE_TOOL_AGGREGATE_MAX_BYTES: number;
7
- export interface RemoteToolByteBudget {
7
+ interface RemoteToolByteBudget {
8
8
  remainingBytes: number;
9
9
  exhausted: boolean;
10
10
  }
@@ -44,7 +44,7 @@ export declare function sshCapture(target: string, remoteCmd: string, timeoutMs:
44
44
  stdout: string;
45
45
  aggregateBudgetExceeded?: boolean;
46
46
  }>;
47
- export interface RemoteListResult {
47
+ interface RemoteListResult {
48
48
  sessions: SessionMeta[];
49
49
  /** How many peer machines we attempted to reach (drives the empty-fleet tip). */
50
50
  deviceCount: number;
@@ -65,7 +65,7 @@ export declare function isAutomaticSessionPeer(d: DeviceProfile, self: string):
65
65
  * address. `forwardedArgs` are the caller's own sessions args (query + filters,
66
66
  * already `--json`) so every peer returns the same slice this machine asked for.
67
67
  */
68
- export interface GatherRemoteListOptions {
68
+ interface GatherRemoteListOptions {
69
69
  /**
70
70
  * Opt-in early-exit for a globally-unique id lookup (a full UUID): the first
71
71
  * peer to return the matching row resolves the fan-out and cancels the rest.
@@ -77,7 +77,7 @@ export interface GatherRemoteListOptions {
77
77
  timeoutMs?: number;
78
78
  }
79
79
  export declare function gatherRemoteList(forwardedArgs: string[], hosts?: string[], opts?: GatherRemoteListOptions): Promise<RemoteListResult>;
80
- export interface RemoteToolSearchResult {
80
+ interface RemoteToolSearchResult {
81
81
  envelopes: Array<{
82
82
  machine: string;
83
83
  envelope: ToolSearchEnvelope;
@@ -86,7 +86,7 @@ export interface RemoteToolSearchResult {
86
86
  unreachable: string[];
87
87
  truncated: string[];
88
88
  }
89
- export interface RemoteToolProgramCountResult {
89
+ interface RemoteToolProgramCountResult {
90
90
  envelopes: Array<{
91
91
  machine: string;
92
92
  envelope: ToolProgramCountEnvelope;
@@ -42,7 +42,7 @@ export declare function ensureWholeIndex(forwardedArgs: string[]): string[];
42
42
  */
43
43
  export declare function buildRemoteCommand(forwardedArgs: string[], columns?: number, os?: string): string;
44
44
  /** The four outcomes of one `ssh <host> agents sessions …` invocation. */
45
- export type SshOutcome = 'ok' | 'unreachable' | 'query-failed' | 'spawn-error';
45
+ type SshOutcome = 'ok' | 'unreachable' | 'query-failed' | 'spawn-error';
46
46
  /**
47
47
  * Classify an ssh `spawnSync` result. ssh(1) reserves exit 255 for its own
48
48
  * connection-layer failures (host down, timeout, refused, auth, changed host
@@ -71,7 +71,7 @@ export declare function remoteCachePath(host: string, forwardedArgs: string[]):
71
71
  * skips SSH only while this returns true; unreachable fallback ignores age.
72
72
  */
73
73
  export declare function isRemoteCacheFresh(mtimeMs: number, nowMs: number, maxAgeMs?: number): boolean;
74
- export interface RemoteCacheHit {
74
+ interface RemoteCacheHit {
75
75
  output: string;
76
76
  mtimeMs: number;
77
77
  }
@@ -105,7 +105,7 @@ export declare function serveWarmRemoteCache(host: string, forwardedArgs: string
105
105
  * stderr (so a piped stdout stays exactly the cached rows); returns false when
106
106
  * nothing is cached for this exact (host, query). */
107
107
  export declare function replayRemoteCache(host: string, forwardedArgs: string[]): boolean;
108
- export interface RunRemoteSessionsOptions {
108
+ interface RunRemoteSessionsOptions {
109
109
  /** Skip warm cache and SSH every host (force-refresh). */
110
110
  forceRefresh?: boolean;
111
111
  /** Override freshness window for the warm path. */
@@ -130,3 +130,4 @@ export interface RunRemoteSessionsOptions {
130
130
  * imperceptible; `maxBuffer` is generous for the rare large `--markdown <id>` dump.
131
131
  */
132
132
  export declare function runRemoteSessions(hosts: string[], argv?: string[], opts?: RunRemoteSessionsOptions): void;
133
+ export {};
@@ -1,9 +1,7 @@
1
1
  import { type ActiveSession } from '../active.js';
2
2
  import { type SessionMeta } from '../types.js';
3
3
  import { readActiveSessionsCache } from '../session-cache.js';
4
- export declare const SESSION_WATCH_VERSION: 1;
5
4
  export declare const SESSION_WATCH_HEARTBEAT_MS = 15000;
6
- export declare const SESSION_WATCH_PREVIOUS_LIMIT = 50;
7
5
  export type SessionWatchScopeStatus = 'available' | 'unavailable';
8
6
  export type SessionWatchEnvelope = {
9
7
  version: 1;
@@ -49,6 +47,14 @@ export type SessionWatchEnvelope = {
49
47
  };
50
48
  export interface SessionWatchRow extends Omit<ActiveSession, 'viewingIn' | 'context'> {
51
49
  context: ActiveSession['context'] | 'recent';
50
+ /** Observer-local terminal/reply facts; never overwrite execution-owner state. */
51
+ observerTerminals?: {
52
+ device: string;
53
+ terminalId?: string;
54
+ launchId?: string;
55
+ viewingIn: string | null;
56
+ provenance?: ActiveSession['provenance'];
57
+ }[];
52
58
  /** Flat durable branch for history rows that are not currently in a worktree. */
53
59
  branch?: string;
54
60
  rowKey: string;
@@ -68,10 +74,6 @@ export interface SessionWatchRow extends Omit<ActiveSession, 'viewingIn' | 'cont
68
74
  /** Stable, opaque identity for one row within one device scope. */
69
75
  export declare function sessionWatchRowKey(scope: string, row: ActiveSession): string;
70
76
  export declare function toSessionWatchRow(scope: string, row: ActiveSession): SessionWatchRow;
71
- /** Stable identity for a durable Previous row. It is deliberately distinct
72
- * from the live row key for the same session id: both may coexist on the one
73
- * stream, and the presentation layer lets the live row win while it exists. */
74
- export declare function previousSessionWatchRowKey(scope: string, sessionId: string): string;
75
77
  /** Project one durable indexed session into the same canonical watch contract
76
78
  * as live sessions. This is the only history backfill consumed by AGI EXT. */
77
79
  export declare function toPreviousSessionWatchRow(scope: string, session: SessionMeta): SessionWatchRow;
@@ -111,7 +113,7 @@ export declare function readPreviousSessionsForWatch(scope: string): SessionMeta
111
113
  * steady state tails the canonical writer journal and never invokes a gather.
112
114
  */
113
115
  export declare function watchLocalSessions(options: WatchLocalOptions): Promise<void>;
114
- export interface WatchFleetOptions {
116
+ interface WatchFleetOptions {
115
117
  signal: AbortSignal;
116
118
  emit: (event: SessionWatchEnvelope) => void;
117
119
  reconnectMs?: number;
@@ -122,3 +124,4 @@ export interface WatchFleetOptions {
122
124
  * peer resets only its own scope. There is no recurring fleet list command.
123
125
  */
124
126
  export declare function watchFleetSessions(options: WatchFleetOptions): Promise<void>;
127
+ export {};
@@ -1,3 +1,4 @@
1
+ import { SessionProjection } from '../projection.js';
1
2
  import { createHash, randomUUID } from 'node:crypto';
2
3
  import * as fs from 'node:fs';
3
4
  import * as path from 'node:path';
@@ -12,9 +13,9 @@ import { linearIssueUrl } from '../linear.js';
12
13
  import { sessionAgentSupportsResume } from '../recovery.js';
13
14
  import { SESSION_AGENTS } from '../types.js';
14
15
  import { activeSessionsJournalPath, activeSessionJournalIdentity, readActiveSessionsCache, noteActiveSessionsJournalReader, resolveStreamSummaryState, } from '../session-cache.js';
15
- export const SESSION_WATCH_VERSION = 1;
16
+ const SESSION_WATCH_VERSION = 1;
16
17
  export const SESSION_WATCH_HEARTBEAT_MS = 15_000;
17
- export const SESSION_WATCH_PREVIOUS_LIMIT = 50;
18
+ const SESSION_WATCH_PREVIOUS_LIMIT = 50;
18
19
  /** Stable, opaque identity for one row within one device scope. */
19
20
  export function sessionWatchRowKey(scope, row) {
20
21
  const identity = activeSessionJournalIdentity(row);
@@ -57,7 +58,7 @@ function epochMs(value) {
57
58
  /** Stable identity for a durable Previous row. It is deliberately distinct
58
59
  * from the live row key for the same session id: both may coexist on the one
59
60
  * stream, and the presentation layer lets the live row win while it exists. */
60
- export function previousSessionWatchRowKey(scope, sessionId) {
61
+ function previousSessionWatchRowKey(scope, sessionId) {
61
62
  return createHash('sha256').update(`${scope}\0previous\0${sessionId}`).digest('base64url').slice(0, 22);
62
63
  }
63
64
  /**
@@ -421,7 +422,10 @@ function remoteWatchCommand(os) {
421
422
  * peer resets only its own scope. There is no recurring fleet list command.
422
423
  */
423
424
  export async function watchFleetSessions(options) {
424
- const local = watchLocalSessions({ scope: machineId(), signal: options.signal, emit: options.emit });
425
+ const projection = new SessionProjection();
426
+ const emit = (event) => { for (const projected of projection.apply(event))
427
+ options.emit(projected); };
428
+ const local = watchLocalSessions({ scope: machineId(), signal: options.signal, emit });
425
429
  let devices;
426
430
  try {
427
431
  devices = await loadDevices();
@@ -447,14 +451,14 @@ export async function watchFleetSessions(options) {
447
451
  const event = JSON.parse(line);
448
452
  if (event.version !== SESSION_WATCH_VERSION || typeof event.sequence !== 'number')
449
453
  return false;
450
- options.emit(event);
454
+ emit(event);
451
455
  return true;
452
456
  }
453
457
  catch {
454
458
  return false; /* incomplete/non-protocol peer output is not state */
455
459
  }
456
460
  },
457
- onUnavailable: (reason) => options.emit(state.scope(scope, 'unavailable', reason)),
461
+ onUnavailable: (reason) => emit(state.scope(scope, 'unavailable', reason)),
458
462
  });
459
463
  });
460
464
  await Promise.all([local, ...peerTasks]);
@@ -15,7 +15,7 @@ export declare const NO_FANOUT_ENV = "AGENTS_SESSIONS_LOCAL";
15
15
  * Exported for unit testing without a live tailnet.
16
16
  */
17
17
  export declare function parseRemoteActive(stdout: string, machine: string): ActiveSession[];
18
- export interface RemoteActiveResult {
18
+ interface RemoteActiveResult {
19
19
  sessions: ActiveSession[];
20
20
  /** How many peer machines we attempted to reach (drives the empty-fleet tip). */
21
21
  deviceCount: number;
@@ -48,3 +48,4 @@ export declare function gatherRemoteActive(hosts?: string[], opts?: {
48
48
  isDefinitive: (item: ActiveSession, machine: string) => boolean;
49
49
  };
50
50
  }): Promise<RemoteActiveResult>;
51
+ export {};
@@ -82,7 +82,7 @@ export declare function renderSummaryHeader(stats: SessionStats): string;
82
82
  */
83
83
  export declare function renderSummary(events: SessionEvent[], cwd?: string): string;
84
84
  /** Allowed values for --include/--exclude role filters. */
85
- export declare const VALID_ROLE_VALUES: readonly ["user", "assistant", "thinking", "tools"];
85
+ declare const VALID_ROLE_VALUES: readonly ["user", "assistant", "thinking", "tools"];
86
86
  /** A single role filter value derived from VALID_ROLE_VALUES. */
87
87
  export type RoleFilter = typeof VALID_ROLE_VALUES[number];
88
88
  /** Options for filtering session events by role and turn range. */
@@ -108,7 +108,7 @@ export declare function filterEvents(events: SessionEvent[], opts: FilterOptions
108
108
  * order so reasoning sits where it actually occurred relative to the assistant
109
109
  * reply.
110
110
  */
111
- export interface RenderConversationMarkdownOptions {
111
+ interface RenderConversationMarkdownOptions {
112
112
  redact?: boolean;
113
113
  knownSecrets?: readonly string[];
114
114
  reasoning?: 'omit' | 'fold' | 'include';
@@ -809,7 +809,7 @@ export function renderSummary(events, cwd) {
809
809
  }
810
810
  // ── Event filters ─────────────────────────────────────────────────────────────
811
811
  /** Allowed values for --include/--exclude role filters. */
812
- export const VALID_ROLE_VALUES = ['user', 'assistant', 'thinking', 'tools'];
812
+ const VALID_ROLE_VALUES = ['user', 'assistant', 'thinking', 'tools'];
813
813
  /**
814
814
  * Parse a comma-separated role list (e.g. "user,assistant") into typed values.
815
815
  * Throws with a clear message listing valid values on any unknown entry.
@@ -20,7 +20,7 @@
20
20
  * remote session resumed in whatever directory the user happened to be in.
21
21
  *
22
22
  * Callers act on the answer differently, and the difference is deliberate:
23
- * `agents sessions resume` and `agents sessions attach` HOP to the owner over SSH, while
23
+ * `agents sessions resume` HOPS to the owner over SSH, while
24
24
  * `resumeSessionInPlace` — the local takeover every routed caller reaches only
25
25
  * after deciding — REFUSES. The batch `sessions resume` needs no check of its
26
26
  * own: each of its tabs runs the canonical `agents sessions resume <id>`
@@ -20,7 +20,7 @@
20
20
  * remote session resumed in whatever directory the user happened to be in.
21
21
  *
22
22
  * Callers act on the answer differently, and the difference is deliberate:
23
- * `agents sessions resume` and `agents sessions attach` HOP to the owner over SSH, while
23
+ * `agents sessions resume` HOPS to the owner over SSH, while
24
24
  * `resumeSessionInPlace` — the local takeover every routed caller reaches only
25
25
  * after deciding — REFUSES. The batch `sessions resume` needs no check of its
26
26
  * own: each of its tabs runs the canonical `agents sessions resume <id>`
@@ -13,7 +13,7 @@
13
13
  * Mirrors the host-task sidecar convention (`~/.agents/.cache/hosts/<id>.json`),
14
14
  * one small JSON per run under `~/.agents/.cache/run-names/`.
15
15
  */
16
- export interface RunNameRecord {
16
+ interface RunNameRecord {
17
17
  sessionId: string;
18
18
  name: string;
19
19
  agent: string;
@@ -32,3 +32,4 @@ export declare function recordRunName(rec: Omit<RunNameRecord, 'ts'>): void;
32
32
  * map when the dir doesn't exist yet.
33
33
  */
34
34
  export declare function buildRunNameMap(): Map<string, string | null>;
35
+ export {};
@@ -8,7 +8,7 @@ import { type ActiveSession } from './active.js';
8
8
  export declare const DEFAULT_ACTIVE_CACHE_MAX_AGE_MS = 15000;
9
9
  /** Snapshot scope: this host only, or a fleet-wide merge written by a reader. */
10
10
  export type ActiveCacheScope = 'local' | 'fleet';
11
- export interface ActiveSessionsSnapshot {
11
+ interface ActiveSessionsSnapshot {
12
12
  version: 1;
13
13
  scope: ActiveCacheScope;
14
14
  /** Epoch ms the sessions array was captured. */
@@ -30,7 +30,7 @@ export declare function activeSessionJournalIdentity(row: ActiveSession): string
30
30
  * transcript mtime so a rewrite invalidates them. Live status is intentionally
31
31
  * absent — see {@link LIVE_STATUS_KEYS}.
32
32
  */
33
- export interface ImmutableSessionFields {
33
+ interface ImmutableSessionFields {
34
34
  topic?: string;
35
35
  firstUserMessage?: string;
36
36
  label?: string;
@@ -76,8 +76,6 @@ export declare function setActiveSessionsSnapshotPathForTest(p: string | null):
76
76
  export declare function clearActiveSnapshotMemoryForTest(): void;
77
77
  /** Test seam: redirect the immutable-memo file. Returns the previous override. */
78
78
  export declare function setImmutableMemoPathForTest(p: string | null): string | null;
79
- /** Test seam: redirect the append-only live-state journal. */
80
- export declare function setActiveSessionsJournalPathForTest(p: string | null): string | null;
81
79
  /** Test seam: redirect the reader-presence file. Returns the previous override. */
82
80
  export declare function setActiveSessionsReaderPresencePathForTest(p: string | null): string | null;
83
81
  export declare function activeSessionsJournalPath(): string;
@@ -99,8 +97,6 @@ export declare function noteActiveSessionsJournalReader(nowMs?: number): void;
99
97
  * {@link noteActiveSessionsJournalReader} and the following tick gathers.
100
98
  */
101
99
  export declare function isActiveSessionsJournalReaderRecent(nowMs?: number, idleWindowMs?: number): boolean;
102
- /** Default poll cadence for {@link watchActiveSessionsReaderPresence}. */
103
- export declare const ACTIVE_SESSIONS_READER_TRANSITION_POLL_MS = 1000;
104
100
  /**
105
101
  * Watch for a reader going from absent/idle to present and fire `onConnect`
106
102
  * out of band, instead of waiting for the next scheduled warm tick (RUSH-2484).
@@ -166,22 +162,6 @@ export declare function assertNoLiveStatusFields(fields: Record<string, unknown>
166
162
  * refill identity fields without re-deriving them.
167
163
  */
168
164
  export declare function updateImmutableMemos(sessions: ReadonlyArray<ActiveSession>, nowMs?: number): void;
169
- /**
170
- * Fill missing immutable fields on a live row from the memo when the transcript
171
- * mtime matches. Never overwrites a field the live gather already set, and
172
- * never copies live-status keys.
173
- */
174
- /**
175
- * Merge the daemon-computed session summary (PHNX-3939) onto a live row from the
176
- * transcript-keyed `session_summaries` cache. This is the low-cost display merge:
177
- * one indexed by-id read, NEVER a model call — the background
178
- * SessionSummarizerService is the only producer. It fills only what the cache
179
- * holds; the `pending`/`skipped` default for a row with no summary yet is applied
180
- * at the watch-stream boundary ({@link resolveStreamSummaryState}), so a
181
- * non-stream ActiveSession consumer is unaffected. Best-effort: a DB error leaves
182
- * the row untouched.
183
- */
184
- export declare function mergeSessionSummary(s: ActiveSession): ActiveSession;
185
165
  /**
186
166
  * The `summaryState` a watch-stream row carries when the merge left it unset:
187
167
  * `pending` while the summarizer is READY (enabled AND has an endpoint, so a
@@ -200,7 +180,7 @@ export declare function resolveStreamSummaryState(current: import('./types.js').
200
180
  */
201
181
  export declare function mergeSessionTimeline(s: ActiveSession): ActiveSession;
202
182
  export declare function applyImmutableMemo(s: ActiveSession): ActiveSession;
203
- export interface LoadLocalActiveSessionsOptions {
183
+ interface LoadLocalActiveSessionsOptions {
204
184
  /** Skip the cache and re-gather (the force-refresh path). */
205
185
  forceRefresh?: boolean;
206
186
  /** Freshness window; defaults to {@link DEFAULT_ACTIVE_CACHE_MAX_AGE_MS}. */
@@ -216,7 +196,7 @@ export interface LoadLocalActiveSessionsOptions {
216
196
  readCache?: typeof readActiveSessionsCache;
217
197
  writeCache?: typeof writeActiveSessionsCache;
218
198
  }
219
- export interface LoadLocalActiveSessionsResult {
199
+ interface LoadLocalActiveSessionsResult {
220
200
  sessions: ActiveSession[];
221
201
  /** True when the row set came from the warm snapshot, not a live gather. */
222
202
  servedFromCache: boolean;
@@ -228,7 +208,7 @@ export interface LoadLocalActiveSessionsResult {
228
208
  * re-gathers and rewrites the cache.
229
209
  */
230
210
  export declare function loadLocalActiveSessions(opts?: LoadLocalActiveSessionsOptions): Promise<LoadLocalActiveSessionsResult>;
231
- export interface LoadFleetActiveSessionsOptions {
211
+ interface LoadFleetActiveSessionsOptions {
232
212
  forceRefresh?: boolean;
233
213
  maxAgeMs?: number;
234
214
  nowMs?: number;
@@ -244,7 +224,7 @@ export interface LoadFleetActiveSessionsOptions {
244
224
  readCache?: typeof readActiveSessionsCache;
245
225
  writeCache?: typeof writeActiveSessionsCache;
246
226
  }
247
- export interface LoadFleetActiveSessionsResult {
227
+ interface LoadFleetActiveSessionsResult {
248
228
  sessions: ActiveSession[];
249
229
  remoteDeviceCount: number;
250
230
  servedFromCache: boolean;
@@ -275,3 +255,4 @@ export declare function publishLocalActiveSessions(opts?: {
275
255
  sessions: ActiveSession[];
276
256
  capturedAt: number;
277
257
  }>;
258
+ export {};