@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
@@ -15,11 +15,11 @@
15
15
  import chalk from 'chalk';
16
16
  import { AGENTS } from '../lib/agents.js';
17
17
  import { setHelpSections } from '../lib/help.js';
18
- import { parseConfigKey, formatAgentVersion, devicePropertyToConfigName, configKeyStorageHint, } from '../lib/config-keys.js';
18
+ import { parseConfigKey, formatConfigKey, formatAgentVersion, devicePropertyToConfigName, configKeyStorageHint, MENUBAR_MENU_PROPERTIES, } from '../lib/config-keys.js';
19
19
  import { registerBudgetCommand } from './budget.js';
20
20
  import { resolveRunDefaults, setRunDefaultModel, setRunDefaultMode, setRunDefaultEffort, unsetRunDefault, } from '../lib/run-defaults.js';
21
21
  import { resolveTierOverride, setTierOverride, clearTierOverride } from '../lib/model-tier-overrides.js';
22
- import { getConfigValue, setConfigValue, unsetConfigValue, listConfig, } from '../lib/device-config.js';
22
+ import { getConfigValue, setConfigValue, unsetConfigValue, listConfig, configKeySpec, } from '../lib/device-config.js';
23
23
  import { readMeta, updateMeta } from '../lib/state.js';
24
24
  import { MODEL_TIERS } from '../lib/model-tiers.js';
25
25
  import { machineId } from '../lib/machine-id.js';
@@ -51,6 +51,20 @@ function parseValue(key, parsed, raw) {
51
51
  return parsed.property === 'enabled' ? parseBool(raw, key) : raw.trim();
52
52
  case 'updates':
53
53
  return parseBool(raw, key);
54
+ case 'menubar': {
55
+ // The type (and enum validation) live in the device-config spec; parse the
56
+ // raw string to that type here so setConfigValue's assertion passes.
57
+ const spec = configKeySpec(formatConfigKey(parsed));
58
+ if (spec.type === 'bool')
59
+ return parseBool(raw, key);
60
+ if (spec.type === 'int') {
61
+ if (!/^\d+$/.test(raw.trim())) {
62
+ throw new Error(`Config key '${key}' expects an integer, got '${raw}'.`);
63
+ }
64
+ return Number.parseInt(raw.trim(), 10);
65
+ }
66
+ return raw.trim();
67
+ }
54
68
  case 'device': {
55
69
  const property = parsed.property;
56
70
  switch (property) {
@@ -74,8 +88,11 @@ function parseValue(key, parsed, raw) {
74
88
  return Number.parseInt(raw.trim(), 10);
75
89
  case 'notes':
76
90
  return raw.trim();
91
+ case 'formFactor':
92
+ return raw.trim();
77
93
  case 'browser.profile':
78
94
  case 'browser.viewer':
95
+ case 'computer.host':
79
96
  return raw.trim();
80
97
  }
81
98
  // A device property with no arm above used to fall out of the switch and
@@ -143,6 +160,10 @@ function setConfig(parsed, value) {
143
160
  setGlobalAutoUpdateEnabled(value);
144
161
  return;
145
162
  }
163
+ case 'menubar': {
164
+ setConfigValue(formatConfigKey(parsed), value);
165
+ return;
166
+ }
146
167
  case 'device': {
147
168
  const configName = devicePropertyToConfigName(parsed.property);
148
169
  if (parsed.property === 'notes') {
@@ -217,6 +238,12 @@ function unsetConfig(parsed) {
217
238
  unsetGlobalAutoUpdateEnabled();
218
239
  return had;
219
240
  }
241
+ case 'menubar': {
242
+ const name = formatConfigKey(parsed);
243
+ const had = getConfigValue(name).value !== undefined;
244
+ unsetConfigValue(name);
245
+ return had;
246
+ }
220
247
  case 'device': {
221
248
  const configName = devicePropertyToConfigName(parsed.property);
222
249
  const had = getConfigValue(configName, { device: parsed.device }).value !== undefined;
@@ -251,6 +278,8 @@ function getConfig(parsed) {
251
278
  return getConfigValue(`summarizer.${parsed.property}`).value;
252
279
  case 'updates':
253
280
  return parsed.agent ? rawAgentAutoUpdateSetting(parsed.agent) : rawGlobalAutoUpdateSetting();
281
+ case 'menubar':
282
+ return getConfigValue(formatConfigKey(parsed)).value;
254
283
  case 'device': {
255
284
  const configName = devicePropertyToConfigName(parsed.property);
256
285
  return getConfigValue(configName, { device: parsed.device }).value;
@@ -345,6 +374,15 @@ function* listCentralConfigEntries() {
345
374
  yield { key, value, hint: configKeyStorageHint(parseConfigKey(key)) };
346
375
  }
347
376
  }
377
+ // AGI Menu preferences (PHNX-3999) — user scope, syncs fleet-wide. Only set
378
+ // keys are listed; the native menu falls back to its own defaults for the rest.
379
+ for (const prop of MENUBAR_MENU_PROPERTIES) {
380
+ const key = `menubar.menu.${prop}`;
381
+ const value = getConfigValue(key).value;
382
+ if (value !== undefined) {
383
+ yield { key, value, hint: configKeyStorageHint(parseConfigKey(key)) };
384
+ }
385
+ }
348
386
  }
349
387
  /** Collect device-scope config entries. */
350
388
  function* listDeviceConfigEntries(device) {
@@ -378,6 +416,9 @@ function* listDeviceConfigEntries(device) {
378
416
  case 'notes':
379
417
  key = `${prefix}notes`;
380
418
  break;
419
+ case 'formFactor':
420
+ key = `${prefix}formFactor`;
421
+ break;
381
422
  case 'browser.profile':
382
423
  // The self device's default browser profile is already surfaced as the
383
424
  // top-level `browser.profile` key; skip it here to avoid duplication.
@@ -391,6 +432,9 @@ function* listDeviceConfigEntries(device) {
391
432
  continue;
392
433
  key = `${prefix}browser.viewer`;
393
434
  break;
435
+ case 'computer.host':
436
+ key = `${prefix}computer.host`;
437
+ break;
394
438
  default:
395
439
  // A `default: continue` here silently drops any device property with no
396
440
  // arm — which is how browser.viewer was invisible to `config list` after
@@ -17,29 +17,6 @@
17
17
  * duplicating it.
18
18
  */
19
19
  import type { Command } from 'commander';
20
- import { type DaemonServiceId } from '../lib/daemon-services.js';
21
- /** Parse a `ps -o etime=` value (`[[dd-]hh:]mm:ss`) into elapsed seconds. */
22
- export declare function parseEtimeToSeconds(raw: string): number | null;
23
20
  /** Elapsed wall-clock seconds since `pid` started, or null if unavailable (best-effort, POSIX only). */
24
21
  export declare function uptimeSeconds(pid: number): number | null;
25
- /** One row of the roster every registered daemon service — supervisor-managed or legacy — renders in `agents daemon services`. */
26
- export interface DaemonServiceRow {
27
- id: DaemonServiceId;
28
- title: string;
29
- description: string;
30
- enabled: boolean;
31
- /**
32
- * `ServiceSupervisor`'s real lifecycle state when `supervised` is true
33
- * (`idle`/`running`/`parked`/`stopped`, written cross-process via
34
- * `recordSubsystemState`). A legacy `setInterval`-driven service has no such
35
- * record, so its state is inferred from `enabled` + whether the daemon
36
- * process is up — labelled distinctly so a reader can't mistake it for a
37
- * measured value.
38
- */
39
- state: string;
40
- supervised: boolean;
41
- lastRunMs: number | null;
42
- lastError: string | null;
43
- consecutiveFailures: number;
44
- }
45
22
  export declare function registerDaemonCommand(program: Command): void;
@@ -254,7 +254,7 @@ function registryScopedDuplicates(processes, ownerPid) {
254
254
  return processes.filter((p) => registered.has(p.pid));
255
255
  }
256
256
  /** Parse a `ps -o etime=` value (`[[dd-]hh:]mm:ss`) into elapsed seconds. */
257
- export function parseEtimeToSeconds(raw) {
257
+ function parseEtimeToSeconds(raw) {
258
258
  const m = raw.match(/^(?:(\d+)-)?(?:(\d+):)?(\d+):(\d+)$/);
259
259
  if (!m)
260
260
  return null;
@@ -18,7 +18,7 @@ export declare const BACKGROUND_NUDGE: string;
18
18
  */
19
19
  export declare function buildBackgroundArgv(agent: string, sessionId: string, cwd?: string): string[];
20
20
  /** What to do with a resolved session, given which machine we're on. */
21
- export type DetachTarget = {
21
+ type DetachTarget = {
22
22
  kind: 'local';
23
23
  sessionId: string;
24
24
  } | {
@@ -44,3 +44,4 @@ export declare function resolveDetachTarget(s: ActiveSession, self: string): Det
44
44
  export declare function resolveOne(activeById: Map<string, ActiveSession>, id: string): ActiveSession | {
45
45
  error: string;
46
46
  };
47
+ export {};
@@ -13,6 +13,3 @@ export declare function registerDetachCommand(program: Command): void;
13
13
  * socket; it is a parameter only so a test can drive an isolated tmux server.
14
14
  */
15
15
  export declare function stopInteractive(s: ActiveSession, socket?: string): Promise<void>;
16
- export declare function detachAction(id: string, opts?: {
17
- local?: boolean;
18
- }): Promise<void>;
@@ -2,7 +2,7 @@
2
2
  * `agents sessions detach <id>` — send a live agent session to the background:
3
3
  * stop its interactive process and continue it headless, unattended, so it drives
4
4
  * its task to completion without holding a terminal. Bring it back with
5
- * `agents sessions attach`. A sibling of `sessions focus`/`resume` on the session
5
+ * `agents sessions resume`. A sibling of `sessions focus` on the session
6
6
  * lifecycle axis.
7
7
  *
8
8
  * Agent-agnostic and version-pinned by construction: it re-invokes
@@ -18,7 +18,7 @@ import { gatherLiveTargets } from './go.js';
18
18
  import { killSession } from '../lib/tmux/index.js';
19
19
  import { getDefaultSocketPath } from '../lib/tmux/paths.js';
20
20
  import { getAgentsInvocation } from '../lib/daemon/daemon.js';
21
- import { captureProcessStartTime } from '../lib/pty-server.js';
21
+ import { captureProcessStartTime } from '../lib/platform/process.js';
22
22
  import { writeDetachRecord } from '../lib/session/detached.js';
23
23
  import { getLogsDir } from '../lib/state.js';
24
24
  import { runOnPeer } from '../lib/session/remote-list.js';
@@ -122,7 +122,7 @@ function spawnHeadless(command, args, logFile) {
122
122
  });
123
123
  });
124
124
  }
125
- export async function detachAction(id, opts = {}) {
125
+ async function detachAction(id, opts = {}) {
126
126
  const { self, activeById } = await gatherLiveTargets(!!opts.local, { includeCloud: true, selector: id });
127
127
  const resolved = resolveOne(activeById, id);
128
128
  if ('error' in resolved) {
@@ -21,7 +21,6 @@ import { type OutcomeGroup, type SessionOutcomeHint } from '../lib/feed-outcome.
21
21
  import { filterBlocksForFeed } from '../lib/ask-classifier.js';
22
22
  import { type FeedSessionSignal } from '../lib/feed-ranking.js';
23
23
  export declare const FEED_POST_HELP = "\nExamples:\n # Title (subject) + body. Phone broadcasts put title first, body after a\n # blank line, then a \"Sent from agent/session on host\" footer.\n agents feed post --title \"CHANGELOG pushed\" \"Watching CI and mac-mini E2E\"\n agents feed post --title \"Cover ready\" \"render at ./out/cover.png\" --attach ./out/cover.png\n agents feed post --title \"Ready for review\" \"PR opened, waiting on prix-cloud\" --json\n\n # Worth interrupting someone over - reaches sinks gated on minLevel: important:\n agents feed post --title \"npm token expired\" \"Cannot publish the release\" --level important\n\n # Also raise a local desktop banner on THIS machine (same notifier as run\n # --notify), on top of any configured broadcast - useful when you are at the box:\n agents feed post --title \"Build green\" \"all checks passed\" --notify\n\n # Stuck: opens a needs-you block and always broadcasts at important:\n agents feed post --title \"Force-push denied\" \"git-guard blocked PR #1749\" --blocked\n agents feed post --title \"Publish or wait?\" \"npm publish now or after review\" --blocked --option publish --option wait\n agents feed post --title \"Delete preview env?\" \"stale preview still running\" --blocked --default \"leave it\"\n\n # Exhaust self-serve FIRST. A block is for what you genuinely cannot do:\n # a credential only the user holds, a decision only they can make, an\n # approval only they can give. Not \"should I do the obvious next step?\".\n\n # Outside a run, pass the session explicitly:\n agents feed post --title \"Manual note\" \"context for the next agent\" --session 00998b0e-2d15-4d2f-a58b-974a886c9b47\n\nIdentity (session, agent, host, runtime, pid, launchId) is stamped automatically\nand rides the phone footer of feed.broadcast {message}. Domain facts (tickets,\nPRs) are not CLI flags - the ticket is joined from the session index at post\ntime. No em-dashes in title/body - they are scrubbed on the way out.\n\nConfigure where a post is mirrored under feed.broadcast in agents.yaml - see\ndocs/observability.md. A channel sink may set message: with placeholders such\nas {message} and {ticket}; a missing placeholder skips that sink. A milestone is always recorded, but it does not text\nthe owner when the sink has minLevel: important. Add --level important for a\nphone-worthy successful update. Use --blocked only when work cannot continue.\nThe owner destination comes from humans.yaml; do not duplicate it in agents.yaml.\n";
24
- export declare const FEED_NO_FANOUT_ENV = "AGENTS_FEED_LOCAL";
25
24
  /** Right-hand masthead summary: `N blocks · M agents`. */
26
25
  export declare function formatFeedMastheadRight(blocks: OpenBlock[]): string;
27
26
  /** Reply hint matching the shared fleet-comms reply line. */
@@ -29,7 +28,7 @@ export declare function formatFeedReplyHint(mailboxId: string): string;
29
28
  export declare function parseRemoteFeed(stdout: string, machine: string): OpenBlock[];
30
29
  /** Merge local and remote rows, keeping the first copy of a host/session block. */
31
30
  export declare function mergeFeedBlocks(...groups: OpenBlock[][]): OpenBlock[];
32
- export type FeedControlAction = 'pause' | 'kill';
31
+ type FeedControlAction = 'pause' | 'kill';
33
32
  export declare function controlFeedSession(action: FeedControlAction, target: string, signals: FeedSessionSignal[]): Promise<string>;
34
33
  export declare function shouldIncludeLocalFeed(hosts: string[] | undefined, self: string): boolean;
35
34
  export declare function remoteFeedHostsToDial(hosts: string[] | undefined, self: string): string[] | undefined;
@@ -85,6 +84,7 @@ export declare function loadSessionMetasForFeedEnrichment<T>(load: () => Promise
85
84
  }>;
86
85
  export declare function registerFeedCommand(program: Command): void;
87
86
  /** Feed view selector (RUSH-2015): decisions, progress, or both. */
88
- export type FeedFilter = 'needs' | 'updates' | 'all';
87
+ type FeedFilter = 'needs' | 'updates' | 'all';
89
88
  /** Normalize a raw --filter value; unknown/empty falls back to the default. */
90
89
  export declare function resolveFeedFilter(raw: string | undefined): FeedFilter;
90
+ export {};
@@ -65,7 +65,7 @@ the owner when the sink has minLevel: important. Add --level important for a
65
65
  phone-worthy successful update. Use --blocked only when work cannot continue.
66
66
  The owner destination comes from humans.yaml; do not duplicate it in agents.yaml.
67
67
  `;
68
- export const FEED_NO_FANOUT_ENV = 'AGENTS_FEED_LOCAL';
68
+ const FEED_NO_FANOUT_ENV = 'AGENTS_FEED_LOCAL';
69
69
  /** Right-hand masthead summary: `N blocks · M agents`. */
70
70
  export function formatFeedMastheadRight(blocks) {
71
71
  const agents = new Set(blocks.map((b) => b.mailboxId)).size;
@@ -20,7 +20,7 @@ export { looksLikeTmuxAlias, resolveTmuxAliasState, shouldAttachLocalTmuxAliasBe
20
20
  import { type LiveStatusFilter } from './sessions.js';
21
21
  import { openSurfaces, type Backend } from '../lib/terminal/index.js';
22
22
  /** Options for `sessions focus` — device scope + the `--active` live-state filters. */
23
- export interface FocusOptions {
23
+ interface FocusOptions {
24
24
  /**
25
25
  * Resolve the target from the launcher's AGENT_LAUNCH_ID instead of a session
26
26
  * id (RUSH-3125).
@@ -123,7 +123,7 @@ export declare function focusSelectedSession(meta: SessionMeta, active: ActiveSe
123
123
  * running); never a silent drop.
124
124
  * - `skip` — not resumable AND no rail: reported, not dropped.
125
125
  */
126
- export type FocusSurfacePlan = {
126
+ type FocusSurfacePlan = {
127
127
  kind: 'attach';
128
128
  command: string[];
129
129
  note: string;
@@ -152,9 +152,9 @@ export declare function tmuxAttachScript(mux: {
152
152
  */
153
153
  export declare function planFocusSurface(s: ActiveSession, self: string, resumeCommandFor: (s: ActiveSession) => string[] | null, rail?: AttachRailLiveness): FocusSurfacePlan;
154
154
  /** The engine seam — real `openSurfaces`, overridable in tests to assert the tab requests. */
155
- export type OpenSurfacesFn = typeof openSurfaces;
155
+ type OpenSurfacesFn = typeof openSurfaces;
156
156
  /** Test seams for `openFocusTabs`: inject the engine boundary + force a backend. */
157
- export interface OpenFocusTabsDeps {
157
+ interface OpenFocusTabsDeps {
158
158
  open?: OpenSurfacesFn;
159
159
  /** Skip `resolveBackend` (which needs a live terminal) when set — tests pass 'tmux'. */
160
160
  backend?: Backend | 'inplace';
@@ -18,13 +18,6 @@
18
18
  import type { AgentId } from '../lib/types.js';
19
19
  import { type ModelInfo } from '../lib/models.js';
20
20
  import { type WizardHooks, type WizardIO, type WizardChoice } from './harness-wizard.js';
21
- /**
22
- * The installed version whose model catalog to read for a host. The wizard has
23
- * no version in hand for a fresh create, so it reads the host's default (or its
24
- * sole installed) version — the same version a bare `agents run <host>` uses.
25
- * Null when the host has no installed version to probe (→ free-text model).
26
- */
27
- export declare function catalogVersionFor(host: AgentId): string | null;
28
21
  /**
29
22
  * Build the model `select` choices from a catalog. Pure, so the labelling +
30
23
  * escape-hatch rows are unit-tested with no catalog probe. Every list ends with
@@ -29,7 +29,7 @@ const KEEP_MODEL = '__keep_model__';
29
29
  * sole installed) version — the same version a bare `agents run <host>` uses.
30
30
  * Null when the host has no installed version to probe (→ free-text model).
31
31
  */
32
- export function catalogVersionFor(host) {
32
+ function catalogVersionFor(host) {
33
33
  return getGlobalDefault(host) || listInstalledVersions(host)[0] || null;
34
34
  }
35
35
  /**
@@ -132,13 +132,13 @@ export interface HarnessEditable {
132
132
  fallback: boolean;
133
133
  }
134
134
  /** One field's editability plus, when disabled, the one-line reason to surface. */
135
- export interface EditableField {
135
+ interface EditableField {
136
136
  enabled: boolean;
137
137
  /** Set only when `enabled` is false — the greyed field's stated reason. */
138
138
  reason?: string;
139
139
  }
140
140
  /** Per-host editability with a reason attached to every disabled field. */
141
- export interface HarnessEditability {
141
+ interface HarnessEditability {
142
142
  model: EditableField;
143
143
  baseUrl: EditableField;
144
144
  auth: EditableField;
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { Command } from 'commander';
14
14
  import { type AddProfileOptions } from './profiles.js';
15
- import { type Profile, type ForkProfileOptions } from '../lib/profiles.js';
15
+ import { type Profile } from '../lib/profiles.js';
16
16
  import { type HarnessDraft } from './harness-wizard.js';
17
17
  /**
18
18
  * Print one custom harness. Shared by `agents harness view <name>` and by
@@ -62,12 +62,6 @@ export interface EditOptions {
62
62
  * copy a model from.
63
63
  */
64
64
  export declare function buildFork(source: string, name: string, opts: ForkOptions): Profile;
65
- /** Map `agents harness edit` flags onto {@link ForkProfileOptions} — the same
66
- * override shape `editProfile`/`forkProfile` apply. `--version ''` (unpin) is
67
- * handled by the caller ({@link buildEdit}), not here: `forkProfile`'s own
68
- * ternary treats an empty string as "no override" and would otherwise inherit
69
- * the source's version instead of clearing it. */
70
- export declare function buildEditOverrides(opts: EditOptions): ForkProfileOptions;
71
65
  /** True when at least one recognized edit flag was given. */
72
66
  export declare function hasEditFlags(opts: EditOptions): boolean;
73
67
  /**
@@ -85,7 +79,7 @@ export declare function forkNeedsWizard(source: string | undefined, name: string
85
79
  * fallback instead of being routed into the wizard. */
86
80
  export declare function addNeedsWizard(name: string | undefined, opts: AddProfileOptions): boolean;
87
81
  /** Whether the pre-save connection test runs, or must be asked for on a TTY. */
88
- export type ConnectionTestGate = 'on' | 'off' | 'ask';
82
+ type ConnectionTestGate = 'on' | 'off' | 'ask';
89
83
  /**
90
84
  * Resolve the tri-state connection-test gate (RUSH-2221), pure so the branching
91
85
  * is unit-tested with no prompt or spawn. `--test` forces it on, `--no-test`
@@ -106,3 +100,4 @@ export declare function connectionTestGate(testFlag: boolean | undefined, intera
106
100
  */
107
101
  export declare function draftToEditOptions(draft: HarnessDraft, original: Profile): EditOptions;
108
102
  export declare function registerHarnessCommands(program: Command): void;
103
+ export {};
@@ -122,7 +122,7 @@ function authEnvKeyForHostOrThrow(host) {
122
122
  * handled by the caller ({@link buildEdit}), not here: `forkProfile`'s own
123
123
  * ternary treats an empty string as "no override" and would otherwise inherit
124
124
  * the source's version instead of clearing it. */
125
- export function buildEditOverrides(opts) {
125
+ function buildEditOverrides(opts) {
126
126
  const overrides = {};
127
127
  if (opts.model !== undefined)
128
128
  overrides.model = opts.model;
@@ -62,7 +62,6 @@ export interface InspectOptions {
62
62
  routine?: string;
63
63
  }
64
64
  export declare function registerInspectCommand(program: Command): void;
65
- export declare function inspectAction(target: string, options: InspectOptions): Promise<void>;
66
65
  export interface RepoTarget {
67
66
  /** Display label: 'user' | 'system' | 'project', an extra-repo alias, or a path-derived name. */
68
67
  label: string;
@@ -134,7 +133,7 @@ export declare function pathSize(p: string): {
134
133
  files: number;
135
134
  };
136
135
  /** Human byte size: "84 KB", "3.1 MB". */
137
- export interface ManifestSummary {
136
+ interface ManifestSummary {
138
137
  /** `run.<agent>.strategy` pairs from agents.yaml. */
139
138
  strategies: Array<{
140
139
  agent: string;
@@ -148,7 +147,7 @@ export interface ManifestSummary {
148
147
  }
149
148
  /** Parse the repo's own agents.yaml into the version pins + run strategies it declares. */
150
149
  export declare function repoManifestSummary(root: string): ManifestSummary | null;
151
- export interface RepoGitInfo {
150
+ interface RepoGitInfo {
152
151
  branch: string;
153
152
  dirty: number;
154
153
  dirtyFiles: string[];
@@ -139,7 +139,7 @@ export function registerInspectCommand(program) {
139
139
  });
140
140
  }
141
141
  // ─── Main dispatcher ─────────────────────────────────────────────────────────
142
- export async function inspectAction(target, options) {
142
+ async function inspectAction(target, options) {
143
143
  const agentKey = target.split('@')[0].toLowerCase();
144
144
  if (!(agentKey in AGENTS)) {
145
145
  const repo = resolveRepoTarget(target);
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Delivery is routed by agent state (RUSH-1474):
5
5
  * - running, between tool calls → mailbox spool (PreToolUse inject)
6
- * - parked on AskUserQuestion with a tmux/iterm/pty rail → keystroke inject
6
+ * - parked on AskUserQuestion with a tmux/iterm rail → keystroke inject
7
7
  * - parked headless (no rail) → `agents run --resume <id> -- <answer>`
8
8
  * - cloud task → provider.message()
9
9
  *
@@ -157,7 +157,7 @@ async function deliverViaHostReroute(route, text, opts) {
157
157
  */
158
158
  const CONTROL_PLANE_NOTES = `
159
159
  Planes (do not mix them up):
160
- message / sessions inject - CONTROL a running agent (mailbox answer, PTY keystroke, or resume by runtime)
160
+ message / sessions inject - CONTROL a running agent (mailbox answer, terminal keystroke, or resume by runtime)
161
161
  send / notify - DELIVER a message to a human recipient over a channel provider
162
162
  feed post - RECORD progress / milestones (optional broadcast may call send/notify)
163
163
 
@@ -169,7 +169,7 @@ const CONTROL_PLANE_NOTES = `
169
169
  export function registerMessageCommand(program) {
170
170
  const messageCmd = program
171
171
  .command('message <target> <text>')
172
- .description('Send a message to a running or parked agent (mailbox / PTY-select / resume by runtime).')
172
+ .description('Send a message to a running or parked agent (mailbox / terminal-select / resume by runtime).')
173
173
  .option('--from <who>', 'Label recorded as the sender of this message')
174
174
  .option('--as <operator>', 'Verified operator id answering a high-consequence block')
175
175
  .option('--surface <surface>', 'Surface that is sending this answer (feed, terminal, etc.)', 'cli')
@@ -222,7 +222,7 @@ export function registerMessageCommand(program) {
222
222
  await deliverViaMailbox(res.id, text, block, { from: opts.from, ttlSeconds });
223
223
  return;
224
224
  }
225
- if (route.kind === 'tmux' || route.kind === 'iterm' || route.kind === 'pty') {
225
+ if (route.kind === 'tmux' || route.kind === 'iterm') {
226
226
  await deliverViaInject(route, res.id);
227
227
  if (block) {
228
228
  recordMessageReceipt(block.blockId, {
@@ -10,8 +10,6 @@
10
10
  import type { Command } from 'commander';
11
11
  import { type ProjectDef, type ProjectRepo } from '../lib/projects.js';
12
12
  import { type LinearMilestone } from '../lib/linear-project-counts.js';
13
- /** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
14
- export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
15
13
  /**
16
14
  * A path-shaped `agents projects view` argument — `.`, `..`, a `~`-prefixed
17
15
  * value, or anything containing a path separator — means "auto-detect the
@@ -20,7 +18,7 @@ export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
20
18
  */
21
19
  export declare function looksLikePath(token: string): boolean;
22
20
  /** Machine-readable shape of `agents projects view <path> --json`. */
23
- export interface ViewDetection {
21
+ interface ViewDetection {
24
22
  /** Detected project name, or null when no definition contains the path. */
25
23
  name: string | null;
26
24
  /** The detected project's Linear binding; fields are null when unbound. */
@@ -121,19 +119,5 @@ export declare function formatMilestoneDue(targetDate: string, nowMs: number): s
121
119
  export declare function formatMilestoneLines(milestones: LinearMilestone[], next: LinearMilestone | undefined, nowMs: number, limit: number): string[];
122
120
  /** The `next` card line: what this project is due to hit, and how far along it is. */
123
121
  export declare function formatNextMilestone(ms: LinearMilestone, nowMs: number): string;
124
- /** Options shared by `status` and `view`. */
125
- export type ProjectCardOpts = {
126
- json?: boolean;
127
- window?: string;
128
- remote?: boolean;
129
- /** Scope the fleet fan-out to specific devices; undefined = the whole fleet. */
130
- deviceFilter?: string[];
131
- };
132
- /**
133
- * Merge `--device a b` (variadic) and `--devices a,b,c` (comma list) into one
134
- * deduped device filter; undefined when neither was given (= whole fleet).
135
- */
136
- export declare function resolveDeviceFilter(device?: string[], devices?: string): string[] | undefined;
137
- /** Print the YAML-side fields that sit under the shared card in `view` mode. */
138
- export declare function printProjectDefinition(def: ProjectDef, name: string): void;
139
122
  export declare function registerProjectsCommands(program: Command): void;
123
+ export {};
@@ -30,8 +30,9 @@ import { checkRepoSlug } from '../lib/project-doctor.js';
30
30
  import { formatFocusAreas, readFocusAreas } from '../lib/project-focus.js';
31
31
  import { formatVerdict, scheduleVerdict } from '../lib/project-schedule.js';
32
32
  import { buildLinearImportCandidates, validateImportOpts, } from '../lib/project-import.js';
33
+ import { buildProjectPrs } from '../lib/github/project-prs.js';
33
34
  /** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
34
- export const PROJECTS_NO_FANOUT_ENV = 'AGENTS_PROJECTS_LOCAL';
35
+ const PROJECTS_NO_FANOUT_ENV = 'AGENTS_PROJECTS_LOCAL';
35
36
  /** Max peers named in the skipped note before the rest collapse to `+N`. */
36
37
  const SKIPPED_NAME_LIMIT = 4;
37
38
  /**
@@ -482,7 +483,7 @@ warnWorkspaces = []) {
482
483
  * Merge `--device a b` (variadic) and `--devices a,b,c` (comma list) into one
483
484
  * deduped device filter; undefined when neither was given (= whole fleet).
484
485
  */
485
- export function resolveDeviceFilter(device, devices) {
486
+ function resolveDeviceFilter(device, devices) {
486
487
  const merged = [
487
488
  ...(device ?? []),
488
489
  ...(devices ? devices.split(',').map((s) => s.trim()).filter(Boolean) : []),
@@ -490,7 +491,7 @@ export function resolveDeviceFilter(device, devices) {
490
491
  return merged.length ? [...new Set(merged)] : undefined;
491
492
  }
492
493
  /** Print the YAML-side fields that sit under the shared card in `view` mode. */
493
- export function printProjectDefinition(def, name) {
494
+ function printProjectDefinition(def, name) {
494
495
  console.log();
495
496
  if (def.root)
496
497
  console.log(` ${chalk.dim('root')} ${def.root}`);
@@ -818,6 +819,91 @@ export function registerProjectsCommands(program) {
818
819
  const mode = name ? 'view' : 'status';
819
820
  await runProjectCard(name, opts, mode);
820
821
  });
822
+ // ---- prs ----
823
+ const prsCmd = projects
824
+ .command('prs <name>')
825
+ .description('Every OPEN pull request across a project\'s attached repos (drafts included, no author filter).')
826
+ .option('--json', 'Machine-readable output (the AGI Menu contract shape)')
827
+ .option('--repo <owner/repo>', 'Restrict to one of the project\'s attached repos')
828
+ .option('--number <n>', 'Lazy detail: enrich exactly this PR with checks + reviewDecision (requires --repo)')
829
+ .action(async (name, opts) => {
830
+ const def = loadProjectDef(name);
831
+ if (!def) {
832
+ console.error(chalk.red(`No project named "${name}". List them: agents projects list`));
833
+ process.exit(1);
834
+ }
835
+ let number;
836
+ if (opts.number !== undefined) {
837
+ if (!opts.repo) {
838
+ console.error(chalk.red('--number names one PR in one repo; pass --repo <owner/repo> with it.'));
839
+ process.exit(1);
840
+ }
841
+ // Require the WHOLE token to be digits — Number.parseInt would accept
842
+ // "12junk" / "12.9" as 12 and silently query the wrong PR.
843
+ const raw = opts.number.trim();
844
+ number = /^\d+$/.test(raw) ? Number.parseInt(raw, 10) : NaN;
845
+ if (!Number.isSafeInteger(number) || number <= 0) {
846
+ console.error(chalk.red(`--number expects a positive integer, got "${opts.number}".`));
847
+ process.exit(1);
848
+ }
849
+ }
850
+ let envelope;
851
+ try {
852
+ envelope = await buildProjectPrs(def, { repo: opts.repo, number }, undefined);
853
+ }
854
+ catch (e) {
855
+ // A restriction error (repo not attached) is a hard, up-front failure —
856
+ // distinct from a per-repo fetch failure, which rides in the envelope.
857
+ console.error(chalk.red(e instanceof Error ? e.message : String(e)));
858
+ process.exit(1);
859
+ }
860
+ if (opts.json) {
861
+ // A machine caller reads the envelope from stdout regardless of exit
862
+ // code: `partial` + per-repo `error` ARE the failure signal, and the
863
+ // successful repositories ride alongside them. So --json always exits 0
864
+ // (the envelope is authoritative); a native consumer must not discard
865
+ // stdout on a non-zero exit. Only the human path below exits non-zero.
866
+ console.log(JSON.stringify(envelope, null, 2));
867
+ return;
868
+ }
869
+ else {
870
+ for (const r of envelope.repositories) {
871
+ if (r.error) {
872
+ console.log(`${chalk.bold(r.slug)} ${chalk.red(`— fetch failed: ${r.error}`)}`);
873
+ continue;
874
+ }
875
+ console.log(`${chalk.bold(r.slug)} ${chalk.dim(`${r.pullRequests.length} open`)}`);
876
+ for (const pr of r.pullRequests) {
877
+ const draft = pr.isDraft ? chalk.gray(' [draft]') : '';
878
+ console.log(` #${pr.number}${draft} ${pr.title} ${chalk.gray(`@${pr.author.login} · ${pr.headRefName}`)}`);
879
+ }
880
+ }
881
+ if (envelope.partial) {
882
+ console.log(chalk.yellow('\nSome repositories could not be fetched — the list above is incomplete.'));
883
+ }
884
+ }
885
+ // A partial result (any repo fetch failed) is not a clean success.
886
+ if (envelope.partial)
887
+ process.exit(1);
888
+ });
889
+ setHelpSections(prsCmd, {
890
+ examples: `
891
+ agents projects prs rush --json # every open PR across rush's repos
892
+ agents projects prs rush --json --repo phnx-labs/agi-cli
893
+ agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # one PR, with checks + review
894
+ `,
895
+ notes: `
896
+ Repos come from the project definition's attached repos only (repo + repos[].slug);
897
+ --repo is refused unless it is one of them.
898
+
899
+ The list is read from GitHub over REST and paginated in full, drafts included,
900
+ with no author filter. checks and reviewDecision are null in the list; --number
901
+ enriches exactly that one PR against its live head SHA.
902
+
903
+ A repository whose fetch fails is reported with an error and marks the result
904
+ partial (JSON reports errors per repository; text mode exits non-zero).
905
+ `,
906
+ });
821
907
  // ---- edit ----
822
908
  projects
823
909
  .command('edit <name>')
@@ -22,7 +22,7 @@ export interface ResourceRow {
22
22
  targets: SyncTarget[];
23
23
  buildDetail: () => string;
24
24
  }
25
- export interface ResourceViewOptions {
25
+ interface ResourceViewOptions {
26
26
  resourcePlural: string;
27
27
  resourceSingular: string;
28
28
  extraLabel?: string;
@@ -55,7 +55,7 @@ export interface ResourceViewOptions {
55
55
  }
56
56
  /** Display a resource list: interactive picker in TTY mode, plain table otherwise. */
57
57
  export declare function showResourceList(opts: ResourceViewOptions): Promise<void>;
58
- export interface ResourceLayout {
58
+ interface ResourceLayout {
59
59
  mode: 'table' | 'cards';
60
60
  nameW: number;
61
61
  extraW: number;
@@ -77,4 +77,5 @@ export declare function resourceLayout(cols: number, o: {
77
77
  }): ResourceLayout;
78
78
  /** Build the sync targets section showing version pills grouped by agent. */
79
79
  export declare function buildTargetsSection(targets: SyncTarget[]): string;
80
+ export {};
80
81
  /** Pad a string to a fixed width, accounting for ANSI escape codes in length calculation. */
@@ -1,5 +1,4 @@
1
1
  import type { SessionMeta } from '../lib/session/types.js';
2
- export declare const RESUME_SOURCE_ENV = "AGENTS_RESUME_SOURCE_JSON";
3
2
  /** Inspect local archived context after the owner hop fails. Recovery still
4
3
  * requires readable content and explicit replay consent before starting a run. */
5
4
  export declare function resumeLocalFallbackSource(session: SessionMeta, self?: string): SessionMeta;
@@ -8,7 +8,7 @@ import chalk from 'chalk';
8
8
  import { resolveSessionMetadataValue } from './sessions.js';
9
9
  import { sessionOwnerDevice, consumeResumePinned, RESUME_PINNED_ENV } from '../lib/session/resume-owner.js';
10
10
  import { machineId } from '../lib/machine-id.js';
11
- export const RESUME_SOURCE_ENV = 'AGENTS_RESUME_SOURCE_JSON';
11
+ const RESUME_SOURCE_ENV = 'AGENTS_RESUME_SOURCE_JSON';
12
12
  /** Inspect local archived context after the owner hop fails. Recovery still
13
13
  * requires readable content and explicit replay consent before starting a run. */
14
14
  export function resumeLocalFallbackSource(session, self = machineId()) {