@songsid/agend 2.3.5-alpha.4 → 2.3.5-alpha.5

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 (838) hide show
  1. package/THIRD_PARTY_NOTICES.md +52 -0
  2. package/dist/accounts-view.d.ts +97 -0
  3. package/dist/accounts-view.js +116 -0
  4. package/dist/accounts-view.js.map +1 -0
  5. package/dist/agent-cli-instructions.md +1 -1
  6. package/dist/agent-credentials.d.ts +24 -0
  7. package/dist/agent-credentials.js +66 -0
  8. package/dist/agent-credentials.js.map +1 -0
  9. package/dist/agent-endpoint.d.ts +3 -1
  10. package/dist/agent-endpoint.js +13 -0
  11. package/dist/agent-endpoint.js.map +1 -1
  12. package/dist/agent-file-read.js +1 -1
  13. package/dist/agent-file-read.js.map +1 -1
  14. package/dist/agent-runtime-change.d.ts +3 -1
  15. package/dist/agent-runtime-change.js +15 -3
  16. package/dist/agent-runtime-change.js.map +1 -1
  17. package/dist/agent-workspace.d.ts +93 -0
  18. package/dist/agent-workspace.js +353 -0
  19. package/dist/agent-workspace.js.map +1 -0
  20. package/dist/auth-api.d.ts +27 -0
  21. package/dist/auth-api.js +164 -3
  22. package/dist/auth-api.js.map +1 -1
  23. package/dist/authority/session-authorizations.d.ts +28 -4
  24. package/dist/authority/session-authorizations.js +63 -17
  25. package/dist/authority/session-authorizations.js.map +1 -1
  26. package/dist/backend/antigravity.js +3 -1
  27. package/dist/backend/antigravity.js.map +1 -1
  28. package/dist/backend/codex-footer-hints.d.ts +3 -0
  29. package/dist/backend/codex-footer-hints.js +14 -0
  30. package/dist/backend/codex-footer-hints.js.map +1 -1
  31. package/dist/backend/codex-metadata.d.ts +14 -0
  32. package/dist/backend/codex-metadata.js +45 -0
  33. package/dist/backend/codex-metadata.js.map +1 -1
  34. package/dist/backend/codex-quota-history.d.ts +7 -0
  35. package/dist/backend/codex-quota-history.js +57 -0
  36. package/dist/backend/codex-quota-history.js.map +1 -0
  37. package/dist/backend/codex-session-lookup.d.ts +6 -0
  38. package/dist/backend/codex-session-lookup.js +1 -1
  39. package/dist/backend/codex-session-lookup.js.map +1 -1
  40. package/dist/backend/codex-speed.d.ts +14 -0
  41. package/dist/backend/codex-speed.js +35 -0
  42. package/dist/backend/codex-speed.js.map +1 -0
  43. package/dist/backend/codex.d.ts +7 -0
  44. package/dist/backend/codex.js +78 -15
  45. package/dist/backend/codex.js.map +1 -1
  46. package/dist/backend/grok-weekly-reset.d.ts +24 -0
  47. package/dist/backend/grok-weekly-reset.js +95 -0
  48. package/dist/backend/grok-weekly-reset.js.map +1 -0
  49. package/dist/backend/grok.d.ts +30 -1
  50. package/dist/backend/grok.js +301 -54
  51. package/dist/backend/grok.js.map +1 -1
  52. package/dist/backend/kiro.d.ts +3 -0
  53. package/dist/backend/kiro.js +50 -2
  54. package/dist/backend/kiro.js.map +1 -1
  55. package/dist/backend/muse.js +5 -3
  56. package/dist/backend/muse.js.map +1 -1
  57. package/dist/backend/native-pane.d.ts +3 -1
  58. package/dist/backend/native-pane.js +2 -2
  59. package/dist/backend/native-pane.js.map +1 -1
  60. package/dist/backend/types.d.ts +13 -1
  61. package/dist/backend/types.js +3 -0
  62. package/dist/backend/types.js.map +1 -1
  63. package/dist/build-provenance-cli.d.ts +3 -0
  64. package/dist/build-provenance-cli.js +11 -0
  65. package/dist/build-provenance-cli.js.map +1 -0
  66. package/dist/build-provenance.d.ts +20 -0
  67. package/dist/build-provenance.js +67 -0
  68. package/dist/build-provenance.js.map +1 -0
  69. package/dist/build-provenance.json +1 -0
  70. package/dist/cache-ledger.d.ts +95 -0
  71. package/dist/cache-ledger.js +276 -4
  72. package/dist/cache-ledger.js.map +1 -1
  73. package/dist/cache-service.d.ts +5 -0
  74. package/dist/cache-service.js +16 -4
  75. package/dist/cache-service.js.map +1 -1
  76. package/dist/channel/adapters/discord.js +11 -3
  77. package/dist/channel/adapters/discord.js.map +1 -1
  78. package/dist/channel/adapters/telegram.d.ts +51 -0
  79. package/dist/channel/adapters/telegram.js +235 -17
  80. package/dist/channel/adapters/telegram.js.map +1 -1
  81. package/dist/channel/mcp-tools.js +3 -3
  82. package/dist/channel/mcp-tools.js.map +1 -1
  83. package/dist/channel/types.d.ts +2 -0
  84. package/dist/claude-auth-status.d.ts +48 -0
  85. package/dist/claude-auth-status.js +149 -0
  86. package/dist/claude-auth-status.js.map +1 -0
  87. package/dist/cli.js +138 -37
  88. package/dist/cli.js.map +1 -1
  89. package/dist/config-validator.js +21 -1
  90. package/dist/config-validator.js.map +1 -1
  91. package/dist/cross-instance-notice.d.ts +10 -0
  92. package/dist/cross-instance-notice.js +67 -5
  93. package/dist/cross-instance-notice.js.map +1 -1
  94. package/dist/daemon.d.ts +70 -1
  95. package/dist/daemon.js +547 -25
  96. package/dist/daemon.js.map +1 -1
  97. package/dist/dashboard-permissions.d.ts +8 -0
  98. package/dist/dashboard-permissions.js +16 -0
  99. package/dist/dashboard-permissions.js.map +1 -1
  100. package/dist/delivery-consumed-watch.d.ts +23 -1
  101. package/dist/delivery-consumed-watch.js +30 -3
  102. package/dist/delivery-consumed-watch.js.map +1 -1
  103. package/dist/delivery-reconciliation.d.ts +1 -1
  104. package/dist/delivery-reconciliation.js +1 -1
  105. package/dist/delivery-reconciliation.js.map +1 -1
  106. package/dist/doctor.js +20 -9
  107. package/dist/doctor.js.map +1 -1
  108. package/dist/export-import.d.ts +7 -0
  109. package/dist/export-import.js +44 -10
  110. package/dist/export-import.js.map +1 -1
  111. package/dist/fleet-context.d.ts +2 -0
  112. package/dist/fleet-manager.d.ts +359 -7
  113. package/dist/fleet-manager.js +1365 -90
  114. package/dist/fleet-manager.js.map +1 -1
  115. package/dist/fleet-windows-runtime.d.ts +2 -1
  116. package/dist/fleet-windows-runtime.js +25 -7
  117. package/dist/fleet-windows-runtime.js.map +1 -1
  118. package/dist/general-knowledge/skills/concepts/SKILL.md +425 -0
  119. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
  120. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  121. package/dist/general-knowledge/skills/fleet-health/SKILL.md +2 -2
  122. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
  123. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
  124. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
  125. package/dist/general-knowledge/skills/tui-effort/SKILL.md +10 -10
  126. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +31 -15
  127. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  128. package/dist/general-role.d.ts +1 -1
  129. package/dist/general-role.js +1 -0
  130. package/dist/general-role.js.map +1 -1
  131. package/dist/hub/admission.d.ts +28 -0
  132. package/dist/hub/admission.js +62 -0
  133. package/dist/hub/admission.js.map +1 -0
  134. package/dist/hub/attachments/limits.d.ts +20 -0
  135. package/dist/hub/attachments/limits.js +48 -0
  136. package/dist/hub/attachments/limits.js.map +1 -0
  137. package/dist/hub/attachments/store.d.ts +116 -0
  138. package/dist/hub/attachments/store.js +246 -0
  139. package/dist/hub/attachments/store.js.map +1 -0
  140. package/dist/hub/audit/index.d.ts +62 -0
  141. package/dist/hub/audit/index.js +344 -0
  142. package/dist/hub/audit/index.js.map +1 -0
  143. package/dist/hub/browser-certificate.d.ts +38 -0
  144. package/dist/hub/browser-certificate.js +247 -0
  145. package/dist/hub/browser-certificate.js.map +1 -0
  146. package/dist/hub/buttons-model.d.ts +9 -0
  147. package/dist/hub/buttons-model.js +42 -0
  148. package/dist/hub/buttons-model.js.map +1 -0
  149. package/dist/hub/buttons.d.ts +54 -0
  150. package/dist/hub/buttons.js +346 -0
  151. package/dist/hub/buttons.js.map +1 -0
  152. package/dist/hub/catalog.d.ts +74 -0
  153. package/dist/hub/catalog.js +195 -0
  154. package/dist/hub/catalog.js.map +1 -0
  155. package/dist/hub/client.d.ts +69 -0
  156. package/dist/hub/client.js +300 -0
  157. package/dist/hub/client.js.map +1 -0
  158. package/dist/hub/compose/member.d.ts +139 -0
  159. package/dist/hub/compose/member.js +450 -0
  160. package/dist/hub/compose/member.js.map +1 -0
  161. package/dist/hub/compose/server.d.ts +77 -0
  162. package/dist/hub/compose/server.js +349 -0
  163. package/dist/hub/compose/server.js.map +1 -0
  164. package/dist/hub/compose/views.d.ts +12 -0
  165. package/dist/hub/compose/views.js +4 -0
  166. package/dist/hub/compose/views.js.map +1 -0
  167. package/dist/hub/db.d.ts +56 -0
  168. package/dist/hub/db.js +188 -0
  169. package/dist/hub/db.js.map +1 -0
  170. package/dist/hub/directory/config.d.ts +39 -0
  171. package/dist/hub/directory/config.js +108 -0
  172. package/dist/hub/directory/config.js.map +1 -0
  173. package/dist/hub/directory/directory.d.ts +18 -0
  174. package/dist/hub/directory/directory.js +320 -0
  175. package/dist/hub/directory/directory.js.map +1 -0
  176. package/dist/hub/directory/index.d.ts +7 -0
  177. package/dist/hub/directory/index.js +4 -0
  178. package/dist/hub/directory/index.js.map +1 -0
  179. package/dist/hub/directory/profiles.d.ts +41 -0
  180. package/dist/hub/directory/profiles.js +90 -0
  181. package/dist/hub/directory/profiles.js.map +1 -0
  182. package/dist/hub/directory/types.d.ts +71 -0
  183. package/dist/hub/directory/types.js +14 -0
  184. package/dist/hub/directory/types.js.map +1 -0
  185. package/dist/hub/execution/cli-provider.d.ts +23 -0
  186. package/dist/hub/execution/cli-provider.js +341 -0
  187. package/dist/hub/execution/cli-provider.js.map +1 -0
  188. package/dist/hub/execution/index.d.ts +13 -0
  189. package/dist/hub/execution/index.js +8 -0
  190. package/dist/hub/execution/index.js.map +1 -0
  191. package/dist/hub/execution/model-broker.d.ts +24 -0
  192. package/dist/hub/execution/model-broker.js +208 -0
  193. package/dist/hub/execution/model-broker.js.map +1 -0
  194. package/dist/hub/execution/provider-setup.d.ts +11 -0
  195. package/dist/hub/execution/provider-setup.js +21 -0
  196. package/dist/hub/execution/provider-setup.js.map +1 -0
  197. package/dist/hub/execution/sandbox-runner.d.ts +1 -0
  198. package/dist/hub/execution/sandbox-runner.js +221 -0
  199. package/dist/hub/execution/sandbox-runner.js.map +1 -0
  200. package/dist/hub/execution/service.d.ts +136 -0
  201. package/dist/hub/execution/service.js +459 -0
  202. package/dist/hub/execution/service.js.map +1 -0
  203. package/dist/hub/execution/store.d.ts +61 -0
  204. package/dist/hub/execution/store.js +182 -0
  205. package/dist/hub/execution/store.js.map +1 -0
  206. package/dist/hub/execution/views.d.ts +20 -0
  207. package/dist/hub/execution/views.js +48 -0
  208. package/dist/hub/execution/views.js.map +1 -0
  209. package/dist/hub/http/compose.d.ts +20 -0
  210. package/dist/hub/http/compose.js +518 -0
  211. package/dist/hub/http/compose.js.map +1 -0
  212. package/dist/hub/http/core.d.ts +49 -0
  213. package/dist/hub/http/core.js +124 -0
  214. package/dist/hub/http/core.js.map +1 -0
  215. package/dist/hub/http/deps.d.ts +61 -0
  216. package/dist/hub/http/deps.js +2 -0
  217. package/dist/hub/http/deps.js.map +1 -0
  218. package/dist/hub/http/schema.d.ts +14 -0
  219. package/dist/hub/http/schema.js +80 -0
  220. package/dist/hub/http/schema.js.map +1 -0
  221. package/dist/hub/identity.d.ts +32 -0
  222. package/dist/hub/identity.js +80 -0
  223. package/dist/hub/identity.js.map +1 -0
  224. package/dist/hub/init/browser-certificate.d.ts +9 -0
  225. package/dist/hub/init/browser-certificate.js +78 -0
  226. package/dist/hub/init/browser-certificate.js.map +1 -0
  227. package/dist/hub/init/browser-tls.d.ts +18 -0
  228. package/dist/hub/init/browser-tls.js +62 -0
  229. package/dist/hub/init/browser-tls.js.map +1 -0
  230. package/dist/hub/init/cli.d.ts +3 -0
  231. package/dist/hub/init/cli.js +83 -0
  232. package/dist/hub/init/cli.js.map +1 -0
  233. package/dist/hub/init/directory-certificate.d.ts +24 -0
  234. package/dist/hub/init/directory-certificate.js +222 -0
  235. package/dist/hub/init/directory-certificate.js.map +1 -0
  236. package/dist/hub/init/existing-fleet.d.ts +6 -0
  237. package/dist/hub/init/existing-fleet.js +58 -0
  238. package/dist/hub/init/existing-fleet.js.map +1 -0
  239. package/dist/hub/init/handoff.d.ts +8 -0
  240. package/dist/hub/init/handoff.js +36 -0
  241. package/dist/hub/init/handoff.js.map +1 -0
  242. package/dist/hub/init/identity.d.ts +5 -0
  243. package/dist/hub/init/identity.js +24 -0
  244. package/dist/hub/init/identity.js.map +1 -0
  245. package/dist/hub/init/initializer.d.ts +24 -0
  246. package/dist/hub/init/initializer.js +385 -0
  247. package/dist/hub/init/initializer.js.map +1 -0
  248. package/dist/hub/init/inventory.d.ts +17 -0
  249. package/dist/hub/init/inventory.js +33 -0
  250. package/dist/hub/init/inventory.js.map +1 -0
  251. package/dist/hub/init/layout.d.ts +32 -0
  252. package/dist/hub/init/layout.js +53 -0
  253. package/dist/hub/init/layout.js.map +1 -0
  254. package/dist/hub/init/network.d.ts +18 -0
  255. package/dist/hub/init/network.js +104 -0
  256. package/dist/hub/init/network.js.map +1 -0
  257. package/dist/hub/init/plan-digest.d.ts +5 -0
  258. package/dist/hub/init/plan-digest.js +47 -0
  259. package/dist/hub/init/plan-digest.js.map +1 -0
  260. package/dist/hub/init/prompt.d.ts +26 -0
  261. package/dist/hub/init/prompt.js +110 -0
  262. package/dist/hub/init/prompt.js.map +1 -0
  263. package/dist/hub/init/secret-file.d.ts +1 -0
  264. package/dist/hub/init/secret-file.js +59 -0
  265. package/dist/hub/init/secret-file.js.map +1 -0
  266. package/dist/hub/init/text.d.ts +127 -0
  267. package/dist/hub/init/text.js +247 -0
  268. package/dist/hub/init/text.js.map +1 -0
  269. package/dist/hub/init/types.d.ts +114 -0
  270. package/dist/hub/init/types.js +9 -0
  271. package/dist/hub/init/types.js.map +1 -0
  272. package/dist/hub/init/wizard.d.ts +34 -0
  273. package/dist/hub/init/wizard.js +554 -0
  274. package/dist/hub/init/wizard.js.map +1 -0
  275. package/dist/hub/initialization.d.ts +23 -0
  276. package/dist/hub/initialization.js +28 -0
  277. package/dist/hub/initialization.js.map +1 -0
  278. package/dist/hub/member/agent-mode.d.ts +6 -0
  279. package/dist/hub/member/agent-mode.js +23 -0
  280. package/dist/hub/member/agent-mode.js.map +1 -0
  281. package/dist/hub/member/attachments.d.ts +29 -0
  282. package/dist/hub/member/attachments.js +107 -0
  283. package/dist/hub/member/attachments.js.map +1 -0
  284. package/dist/hub/member/exposure-api.d.ts +87 -0
  285. package/dist/hub/member/exposure-api.js +64 -0
  286. package/dist/hub/member/exposure-api.js.map +1 -0
  287. package/dist/hub/member/exposures.d.ts +123 -0
  288. package/dist/hub/member/exposures.js +282 -0
  289. package/dist/hub/member/exposures.js.map +1 -0
  290. package/dist/hub/member/pairing-api.d.ts +85 -0
  291. package/dist/hub/member/pairing-api.js +385 -0
  292. package/dist/hub/member/pairing-api.js.map +1 -0
  293. package/dist/hub/member/quota.d.ts +20 -0
  294. package/dist/hub/member/quota.js +98 -0
  295. package/dist/hub/member/quota.js.map +1 -0
  296. package/dist/hub/member-journal.d.ts +104 -0
  297. package/dist/hub/member-journal.js +336 -0
  298. package/dist/hub/member-journal.js.map +1 -0
  299. package/dist/hub/member-reconciliation.d.ts +14 -0
  300. package/dist/hub/member-reconciliation.js +97 -0
  301. package/dist/hub/member-reconciliation.js.map +1 -0
  302. package/dist/hub/mount.d.ts +39 -0
  303. package/dist/hub/mount.js +123 -0
  304. package/dist/hub/mount.js.map +1 -0
  305. package/dist/hub/pairing-client.d.ts +17 -0
  306. package/dist/hub/pairing-client.js +108 -0
  307. package/dist/hub/pairing-client.js.map +1 -0
  308. package/dist/hub/pairing.d.ts +65 -0
  309. package/dist/hub/pairing.js +211 -0
  310. package/dist/hub/pairing.js.map +1 -0
  311. package/dist/hub/policy.d.ts +63 -0
  312. package/dist/hub/policy.js +147 -0
  313. package/dist/hub/policy.js.map +1 -0
  314. package/dist/hub/preview.d.ts +32 -0
  315. package/dist/hub/preview.js +64 -0
  316. package/dist/hub/preview.js.map +1 -0
  317. package/dist/hub/private-files.d.ts +5 -0
  318. package/dist/hub/private-files.js +44 -0
  319. package/dist/hub/private-files.js.map +1 -0
  320. package/dist/hub/profile.d.ts +59 -0
  321. package/dist/hub/profile.js +73 -0
  322. package/dist/hub/profile.js.map +1 -0
  323. package/dist/hub/protocol.d.ts +779 -0
  324. package/dist/hub/protocol.js +93 -0
  325. package/dist/hub/protocol.js.map +1 -0
  326. package/dist/hub/quota.d.ts +24 -0
  327. package/dist/hub/quota.js +112 -0
  328. package/dist/hub/quota.js.map +1 -0
  329. package/dist/hub/representative.d.ts +141 -0
  330. package/dist/hub/representative.js +528 -0
  331. package/dist/hub/representative.js.map +1 -0
  332. package/dist/hub/retention.d.ts +17 -0
  333. package/dist/hub/retention.js +45 -0
  334. package/dist/hub/retention.js.map +1 -0
  335. package/dist/hub/rooms.d.ts +120 -0
  336. package/dist/hub/rooms.js +535 -0
  337. package/dist/hub/rooms.js.map +1 -0
  338. package/dist/hub/runtime.d.ts +106 -0
  339. package/dist/hub/runtime.js +298 -0
  340. package/dist/hub/runtime.js.map +1 -0
  341. package/dist/hub/server.d.ts +56 -0
  342. package/dist/hub/server.js +202 -0
  343. package/dist/hub/server.js.map +1 -0
  344. package/dist/hub/service-start.d.ts +17 -0
  345. package/dist/hub/service-start.js +109 -0
  346. package/dist/hub/service-start.js.map +1 -0
  347. package/dist/hub/sessions.d.ts +53 -0
  348. package/dist/hub/sessions.js +196 -0
  349. package/dist/hub/sessions.js.map +1 -0
  350. package/dist/hub/socket.d.ts +24 -0
  351. package/dist/hub/socket.js +79 -0
  352. package/dist/hub/socket.js.map +1 -0
  353. package/dist/hub/store.d.ts +77 -0
  354. package/dist/hub/store.js +88 -0
  355. package/dist/hub/store.js.map +1 -0
  356. package/dist/hub/tls.d.ts +31 -0
  357. package/dist/hub/tls.js +135 -0
  358. package/dist/hub/tls.js.map +1 -0
  359. package/dist/hub/types.d.ts +401 -0
  360. package/dist/hub/types.js +2 -0
  361. package/dist/hub/types.js.map +1 -0
  362. package/dist/hub/validation.d.ts +33 -0
  363. package/dist/hub/validation.js +136 -0
  364. package/dist/hub/validation.js.map +1 -0
  365. package/dist/hub/version-floor.d.ts +10 -0
  366. package/dist/hub/version-floor.js +45 -0
  367. package/dist/hub/version-floor.js.map +1 -0
  368. package/dist/hub-browser-certificate-policy.d.ts +31 -0
  369. package/dist/hub-browser-certificate-policy.js +25 -0
  370. package/dist/hub-browser-certificate-policy.js.map +1 -0
  371. package/dist/hub-membership-settings.d.ts +6 -0
  372. package/dist/hub-membership-settings.js +21 -0
  373. package/dist/hub-membership-settings.js.map +1 -0
  374. package/dist/hub-mode.d.ts +15 -0
  375. package/dist/hub-mode.js +17 -0
  376. package/dist/hub-mode.js.map +1 -0
  377. package/dist/hub-pairing-summary.d.ts +48 -0
  378. package/dist/hub-pairing-summary.js +36 -0
  379. package/dist/hub-pairing-summary.js.map +1 -0
  380. package/dist/hub-report-target.d.ts +32 -0
  381. package/dist/hub-report-target.js +33 -0
  382. package/dist/hub-report-target.js.map +1 -0
  383. package/dist/hub-retention-policy.d.ts +14 -0
  384. package/dist/hub-retention-policy.js +15 -0
  385. package/dist/hub-retention-policy.js.map +1 -0
  386. package/dist/instance-config-impact.js +3 -0
  387. package/dist/instance-config-impact.js.map +1 -1
  388. package/dist/instance-lifecycle.d.ts +17 -2
  389. package/dist/instance-lifecycle.js +58 -8
  390. package/dist/instance-lifecycle.js.map +1 -1
  391. package/dist/instance-topic-delete.d.ts +77 -0
  392. package/dist/instance-topic-delete.js +123 -0
  393. package/dist/instance-topic-delete.js.map +1 -0
  394. package/dist/instructions.d.ts +1 -1
  395. package/dist/instructions.js +1 -1
  396. package/dist/instructions.js.map +1 -1
  397. package/dist/kiro-engine-status.d.ts +11 -0
  398. package/dist/kiro-engine-status.js +6 -0
  399. package/dist/kiro-engine-status.js.map +1 -1
  400. package/dist/launchd-service-domain.d.ts +5 -0
  401. package/dist/launchd-service-domain.js +21 -0
  402. package/dist/launchd-service-domain.js.map +1 -0
  403. package/dist/locale.js +125 -3
  404. package/dist/locale.js.map +1 -1
  405. package/dist/log-service.d.ts +28 -0
  406. package/dist/log-service.js +29 -0
  407. package/dist/log-service.js.map +1 -1
  408. package/dist/log-steps.d.ts +4 -3
  409. package/dist/log-steps.js +32 -7
  410. package/dist/log-steps.js.map +1 -1
  411. package/dist/logger.d.ts +16 -2
  412. package/dist/logger.js +346 -66
  413. package/dist/logger.js.map +1 -1
  414. package/dist/login-flows.d.ts +15 -7
  415. package/dist/login-flows.js +29 -3
  416. package/dist/login-flows.js.map +1 -1
  417. package/dist/login-manager.js +25 -4
  418. package/dist/login-manager.js.map +1 -1
  419. package/dist/ls-rows.js +3 -4
  420. package/dist/ls-rows.js.map +1 -1
  421. package/dist/missed-offline.d.ts +25 -0
  422. package/dist/missed-offline.js +79 -0
  423. package/dist/missed-offline.js.map +1 -0
  424. package/dist/native-instance-api.d.ts +0 -1
  425. package/dist/native-instance-api.js +15 -3
  426. package/dist/native-instance-api.js.map +1 -1
  427. package/dist/native-instance-input.d.ts +3 -0
  428. package/dist/native-instance-input.js +6 -1
  429. package/dist/native-instance-input.js.map +1 -1
  430. package/dist/native-instance-registry.d.ts +6 -0
  431. package/dist/native-instance-registry.js +24 -0
  432. package/dist/native-instance-registry.js.map +1 -1
  433. package/dist/native-mcp.d.ts +3 -0
  434. package/dist/native-mcp.js +15 -2
  435. package/dist/native-mcp.js.map +1 -1
  436. package/dist/native-pane-lifecycle.d.ts +8 -0
  437. package/dist/native-pane-lifecycle.js +13 -4
  438. package/dist/native-pane-lifecycle.js.map +1 -1
  439. package/dist/native-pane-manager.js +17 -9
  440. package/dist/native-pane-manager.js.map +1 -1
  441. package/dist/needs-you-hub.d.ts +9 -1
  442. package/dist/needs-you-hub.js +46 -8
  443. package/dist/needs-you-hub.js.map +1 -1
  444. package/dist/needs-you.d.ts +47 -2
  445. package/dist/needs-you.js +31 -3
  446. package/dist/needs-you.js.map +1 -1
  447. package/dist/office-share-page.js +2 -2
  448. package/dist/office-share-page.js.map +1 -1
  449. package/dist/office-share.d.ts +11 -0
  450. package/dist/office-share.js +14 -0
  451. package/dist/office-share.js.map +1 -1
  452. package/dist/office-talk.d.ts +26 -0
  453. package/dist/office-talk.js +50 -0
  454. package/dist/office-talk.js.map +1 -0
  455. package/dist/outbound-handlers.d.ts +14 -0
  456. package/dist/outbound-handlers.js +49 -6
  457. package/dist/outbound-handlers.js.map +1 -1
  458. package/dist/outbound-schemas.d.ts +33 -1
  459. package/dist/outbound-schemas.js +29 -16
  460. package/dist/outbound-schemas.js.map +1 -1
  461. package/dist/pane-quota-history.d.ts +9 -0
  462. package/dist/pane-quota-history.js +67 -0
  463. package/dist/pane-quota-history.js.map +1 -0
  464. package/dist/pause-marker.d.ts +1 -1
  465. package/dist/pause-marker.js +1 -1
  466. package/dist/pause-marker.js.map +1 -1
  467. package/dist/platform-general.d.ts +46 -0
  468. package/dist/platform-general.js +91 -0
  469. package/dist/platform-general.js.map +1 -0
  470. package/dist/public-web-gateway.js +7 -0
  471. package/dist/public-web-gateway.js.map +1 -1
  472. package/dist/queued-handoffs.d.ts +33 -0
  473. package/dist/queued-handoffs.js +75 -0
  474. package/dist/queued-handoffs.js.map +1 -0
  475. package/dist/quickstart.d.ts +13 -0
  476. package/dist/quickstart.js +81 -5
  477. package/dist/quickstart.js.map +1 -1
  478. package/dist/quota-notice.d.ts +7 -0
  479. package/dist/quota-notice.js +40 -0
  480. package/dist/quota-notice.js.map +1 -1
  481. package/dist/reply-buttons-controller.js +10 -6
  482. package/dist/reply-buttons-controller.js.map +1 -1
  483. package/dist/reply-polls.d.ts +2 -2
  484. package/dist/reply-polls.js +3 -3
  485. package/dist/reply-polls.js.map +1 -1
  486. package/dist/runtime-api.d.ts +2 -0
  487. package/dist/runtime-api.js +25 -7
  488. package/dist/runtime-api.js.map +1 -1
  489. package/dist/runtime-build-info.js +5 -3
  490. package/dist/runtime-build-info.js.map +1 -1
  491. package/dist/runtime-bundle.d.ts +3 -0
  492. package/dist/runtime-bundle.js +3 -1
  493. package/dist/runtime-bundle.js.map +1 -1
  494. package/dist/runtime-cli.d.ts +8 -1
  495. package/dist/runtime-cli.js +127 -8
  496. package/dist/runtime-cli.js.map +1 -1
  497. package/dist/runtime-client-store.d.ts +7 -0
  498. package/dist/runtime-client-store.js +30 -2
  499. package/dist/runtime-client-store.js.map +1 -1
  500. package/dist/runtime-client.d.ts +63 -1
  501. package/dist/runtime-client.js +295 -21
  502. package/dist/runtime-client.js.map +1 -1
  503. package/dist/runtime-coordinator.d.ts +7 -0
  504. package/dist/runtime-coordinator.js +213 -35
  505. package/dist/runtime-coordinator.js.map +1 -1
  506. package/dist/runtime-credential-profiles.d.ts +78 -0
  507. package/dist/runtime-credential-profiles.js +280 -0
  508. package/dist/runtime-credential-profiles.js.map +1 -0
  509. package/dist/runtime-install.d.ts +50 -0
  510. package/dist/runtime-install.js +186 -0
  511. package/dist/runtime-install.js.map +1 -0
  512. package/dist/runtime-pane-assets.d.ts +1 -1
  513. package/dist/runtime-pane-assets.js +1 -1
  514. package/dist/runtime-pane-assets.js.map +1 -1
  515. package/dist/runtime-pane-codex-index.d.ts +10 -1
  516. package/dist/runtime-pane-codex-index.js +131 -27
  517. package/dist/runtime-pane-codex-index.js.map +1 -1
  518. package/dist/runtime-pane-host.d.ts +19 -0
  519. package/dist/runtime-pane-host.js +50 -7
  520. package/dist/runtime-pane-host.js.map +1 -1
  521. package/dist/runtime-pane-link.d.ts +7 -0
  522. package/dist/runtime-pane-link.js +93 -2
  523. package/dist/runtime-pane-link.js.map +1 -1
  524. package/dist/runtime-pane-mcp-relay.d.ts +1 -0
  525. package/dist/runtime-pane-mcp-relay.js +10 -0
  526. package/dist/runtime-pane-mcp-relay.js.map +1 -1
  527. package/dist/runtime-pane-mcp.d.ts +4 -0
  528. package/dist/runtime-pane-mcp.js +6 -3
  529. package/dist/runtime-pane-mcp.js.map +1 -1
  530. package/dist/runtime-pane-native.d.ts +32 -2
  531. package/dist/runtime-pane-native.js +55 -6
  532. package/dist/runtime-pane-native.js.map +1 -1
  533. package/dist/runtime-pane-port.d.ts +5 -0
  534. package/dist/runtime-pane-port.js +17 -1
  535. package/dist/runtime-pane-port.js.map +1 -1
  536. package/dist/runtime-pane-process.d.ts +1 -1
  537. package/dist/runtime-pane-process.js +11 -2
  538. package/dist/runtime-pane-process.js.map +1 -1
  539. package/dist/runtime-pane-protocol.d.ts +11 -1
  540. package/dist/runtime-pane-protocol.js +27 -5
  541. package/dist/runtime-pane-protocol.js.map +1 -1
  542. package/dist/runtime-pane-quota-history.d.ts +6 -0
  543. package/dist/runtime-pane-quota-history.js +44 -0
  544. package/dist/runtime-pane-quota-history.js.map +1 -0
  545. package/dist/runtime-pane-service.d.ts +5 -0
  546. package/dist/runtime-pane-service.js +47 -12
  547. package/dist/runtime-pane-service.js.map +1 -1
  548. package/dist/runtime-pane-transcript.d.ts +5 -0
  549. package/dist/runtime-pane-transcript.js +66 -5
  550. package/dist/runtime-pane-transcript.js.map +1 -1
  551. package/dist/runtime-pane-worker.js +19 -6
  552. package/dist/runtime-pane-worker.js.map +1 -1
  553. package/dist/runtime-protocol.d.ts +17 -2
  554. package/dist/runtime-protocol.js +12 -0
  555. package/dist/runtime-protocol.js.map +1 -1
  556. package/dist/runtime-update-activity.d.ts +21 -0
  557. package/dist/runtime-update-activity.js +51 -0
  558. package/dist/runtime-update-activity.js.map +1 -0
  559. package/dist/runtime-update-artifact.d.ts +31 -0
  560. package/dist/runtime-update-artifact.js +252 -0
  561. package/dist/runtime-update-artifact.js.map +1 -0
  562. package/dist/runtime-update-install.d.ts +31 -0
  563. package/dist/runtime-update-install.js +205 -0
  564. package/dist/runtime-update-install.js.map +1 -0
  565. package/dist/runtime-update-journal.d.ts +44 -0
  566. package/dist/runtime-update-journal.js +121 -0
  567. package/dist/runtime-update-journal.js.map +1 -0
  568. package/dist/runtime-update-lock.d.ts +48 -0
  569. package/dist/runtime-update-lock.js +217 -0
  570. package/dist/runtime-update-lock.js.map +1 -0
  571. package/dist/runtime-update-owners.d.ts +29 -0
  572. package/dist/runtime-update-owners.js +240 -0
  573. package/dist/runtime-update-owners.js.map +1 -0
  574. package/dist/runtime-update-protocol.d.ts +15 -0
  575. package/dist/runtime-update-protocol.js +13 -0
  576. package/dist/runtime-update-protocol.js.map +1 -0
  577. package/dist/runtime-windows-bridge.d.ts +2 -1
  578. package/dist/runtime-windows-bridge.js +11 -1
  579. package/dist/runtime-windows-bridge.js.map +1 -1
  580. package/dist/scheduler/db.d.ts +2 -1
  581. package/dist/scheduler/db.js +23 -9
  582. package/dist/scheduler/db.js.map +1 -1
  583. package/dist/scheduler/task-board-text.js +1 -1
  584. package/dist/scheduler/task-board-text.js.map +1 -1
  585. package/dist/scheduler/task-board.d.ts +13 -0
  586. package/dist/scheduler/task-board.js +28 -3
  587. package/dist/scheduler/task-board.js.map +1 -1
  588. package/dist/service-drain.d.ts +19 -0
  589. package/dist/service-drain.js +64 -0
  590. package/dist/service-drain.js.map +1 -0
  591. package/dist/service-installer.d.ts +7 -2
  592. package/dist/service-installer.js +13 -10
  593. package/dist/service-installer.js.map +1 -1
  594. package/dist/settings-api.d.ts +20 -0
  595. package/dist/settings-api.js +414 -4
  596. package/dist/settings-api.js.map +1 -1
  597. package/dist/settings-baseline.d.ts +6 -0
  598. package/dist/settings-baseline.js +3 -1
  599. package/dist/settings-baseline.js.map +1 -1
  600. package/dist/settings-change.js +29 -6
  601. package/dist/settings-change.js.map +1 -1
  602. package/dist/settings-effect.d.ts +13 -0
  603. package/dist/settings-effect.js +97 -0
  604. package/dist/settings-effect.js.map +1 -1
  605. package/dist/settings-http-confirmation.js +13 -1
  606. package/dist/settings-http-confirmation.js.map +1 -1
  607. package/dist/settings-instance-patch.js +27 -0
  608. package/dist/settings-instance-patch.js.map +1 -1
  609. package/dist/setup-wizard.js +6 -2
  610. package/dist/setup-wizard.js.map +1 -1
  611. package/dist/task-board-tool.d.ts +13 -1
  612. package/dist/task-board-tool.js +104 -4
  613. package/dist/task-board-tool.js.map +1 -1
  614. package/dist/task-board-waker.d.ts +6 -0
  615. package/dist/task-board-waker.js +4 -0
  616. package/dist/task-board-waker.js.map +1 -1
  617. package/dist/tmux-binary.d.ts +59 -0
  618. package/dist/tmux-binary.js +200 -0
  619. package/dist/tmux-binary.js.map +1 -0
  620. package/dist/tmux-control.js +4 -4
  621. package/dist/tmux-control.js.map +1 -1
  622. package/dist/tmux-exec-helper.js +32 -1
  623. package/dist/tmux-exec-helper.js.map +1 -1
  624. package/dist/tmux-manager.d.ts +1 -1
  625. package/dist/tmux-manager.js +45 -36
  626. package/dist/tmux-manager.js.map +1 -1
  627. package/dist/tmux-read.js +4 -3
  628. package/dist/tmux-read.js.map +1 -1
  629. package/dist/tool-permissions.d.ts +5 -2
  630. package/dist/tool-permissions.js +6 -5
  631. package/dist/tool-permissions.js.map +1 -1
  632. package/dist/tool-progress.d.ts +2 -0
  633. package/dist/tool-progress.js +19 -3
  634. package/dist/tool-progress.js.map +1 -1
  635. package/dist/topic-commands.js +10 -5
  636. package/dist/topic-commands.js.map +1 -1
  637. package/dist/transcript-monitor.d.ts +20 -0
  638. package/dist/transcript-monitor.js +47 -3
  639. package/dist/transcript-monitor.js.map +1 -1
  640. package/dist/transcript-needles.d.ts +7 -0
  641. package/dist/transcript-needles.js +9 -1
  642. package/dist/transcript-needles.js.map +1 -1
  643. package/dist/transcript-records.d.ts +1 -1
  644. package/dist/transcript-records.js +2 -1
  645. package/dist/transcript-records.js.map +1 -1
  646. package/dist/types.d.ts +6 -0
  647. package/dist/ui/account-identity.js +27 -0
  648. package/dist/ui/accounts-view.js +214 -0
  649. package/dist/ui/agent-runtime-settings.js +9 -8
  650. package/dist/ui/backend-signin.js +4 -1
  651. package/dist/ui/chat-ambient.js +1 -1
  652. package/dist/ui/chat-md-strings.js +3 -0
  653. package/dist/ui/chat-render.js +3 -670
  654. package/dist/ui/chat-store.js +1 -1
  655. package/dist/ui/chat-strings.js +3 -333
  656. package/dist/ui/chat-thread.js +3 -919
  657. package/dist/ui/chat-time.js +3 -80
  658. package/dist/ui/chat-tour.js +1 -1
  659. package/dist/ui/credential-profile-select.js +54 -0
  660. package/dist/ui/fleet-office-dialogue.d.ts +30 -0
  661. package/dist/ui/fleet-office-dialogue.js +382 -0
  662. package/dist/ui/fleet-office-pack.d.ts +9 -0
  663. package/dist/ui/fleet-office-pack.js +76 -4
  664. package/dist/ui/fleet-office-skin.js +23 -5
  665. package/dist/ui/fleet-office-store.js +5 -0
  666. package/dist/ui/fleet-office.js +173 -6
  667. package/dist/ui/fleet-task-card.js +10 -6
  668. package/dist/ui/fleet-task-common.js +12 -2
  669. package/dist/ui/fleet-task-menu.js +188 -0
  670. package/dist/ui/fleet-task-stats.js +124 -0
  671. package/dist/ui/fleet-task-view.js +340 -0
  672. package/dist/ui/fleet-tasks.js +131 -43
  673. package/dist/ui/fleet-usage.js +90 -27
  674. package/dist/ui/html-attachment.js +3 -40
  675. package/dist/ui/hub-agent-copy.js +23 -0
  676. package/dist/ui/hub-button-actions.js +65 -0
  677. package/dist/ui/hub-chat-store.js +158 -0
  678. package/dist/ui/hub-chat-strings.js +77 -0
  679. package/dist/ui/hub-client.js +329 -0
  680. package/dist/ui/hub-owner-strings.js +51 -0
  681. package/dist/ui/hub-provider-guidance.js +31 -0
  682. package/dist/ui/hub-quota.js +85 -0
  683. package/dist/ui/hub-strings.js +162 -0
  684. package/dist/ui/hub-switcher.js +27 -0
  685. package/dist/ui/native-pane-recovery.js +1 -1
  686. package/dist/ui/office-share-page.js +4 -2
  687. package/dist/ui/panel-chat.js +34 -48
  688. package/dist/ui/panel-details.js +1 -1
  689. package/dist/ui/panel-fleet.js +78 -10
  690. package/dist/ui/panel-hub.js +619 -0
  691. package/dist/ui/panel-log.js +2 -2
  692. package/dist/ui/panel-needs.js +24 -8
  693. package/dist/ui/panel-runtimes.js +114 -23
  694. package/dist/ui/panel-settings.js +69 -80
  695. package/dist/ui/panel-windows-cli.js +12 -2
  696. package/dist/ui/preview-pages.js +1 -1
  697. package/dist/ui/preview-panel.js +92 -6
  698. package/dist/ui/preview-versions.js +1 -1
  699. package/dist/ui/preview.js +3 -476
  700. package/dist/ui/runtime-commands.d.ts +4 -0
  701. package/dist/ui/runtime-commands.js +59 -0
  702. package/dist/ui/search-dialog.js +2 -0
  703. package/dist/ui/settings-access-strings.js +42 -0
  704. package/dist/ui/settings-build-version.js +35 -0
  705. package/dist/ui/settings-codex-copy.js +19 -0
  706. package/dist/ui/settings-devices.js +253 -0
  707. package/dist/ui/settings-dialogs.js +28 -7
  708. package/dist/ui/settings-hub-browser-certificate.js +74 -0
  709. package/dist/ui/settings-hub-membership.js +72 -0
  710. package/dist/ui/settings-hub-retention.js +52 -0
  711. package/dist/ui/settings-hub.js +196 -0
  712. package/dist/ui/settings-layout.js +8 -11
  713. package/dist/ui/settings-model.js +16 -2
  714. package/dist/ui/settings-outside.js +104 -38
  715. package/dist/ui/settings-registry.js +4 -1
  716. package/dist/ui/settings-shared-strings.js +143 -0
  717. package/dist/ui/settings-shared.js +345 -0
  718. package/dist/ui/settings-strings.js +10 -46
  719. package/dist/ui/settings-web-authority.js +5 -2
  720. package/dist/ui/shared/accounts.css +15 -0
  721. package/dist/ui/shared/app-i18n.js +2 -2
  722. package/dist/ui/shared/app-needs.js +1 -1
  723. package/dist/ui/shared/app-route.js +6 -1
  724. package/dist/ui/shared/app-session.js +6 -2
  725. package/dist/ui/shared/app-shell.js +64 -8
  726. package/dist/ui/shared/app.css +121 -30
  727. package/dist/ui/shared/app.js +12 -3
  728. package/dist/ui/shared/chat-composer.js +68 -0
  729. package/dist/ui/shared/chat-md-strings.js +9 -0
  730. package/dist/ui/shared/chat-render.js +682 -0
  731. package/dist/ui/shared/chat-strings.js +333 -0
  732. package/dist/ui/shared/chat-thread.js +969 -0
  733. package/dist/ui/shared/chat-time.js +80 -0
  734. package/dist/ui/shared/header-tools.js +3 -5
  735. package/dist/ui/shared/html-attachment.js +42 -0
  736. package/dist/ui/shared/hub-chat.css +85 -0
  737. package/dist/ui/shared/hub-owner.css +33 -0
  738. package/dist/ui/shared/hub-quota.css +8 -0
  739. package/dist/ui/shared/hub.css +71 -0
  740. package/dist/ui/shared/page-head.js +8 -0
  741. package/dist/ui/shared/panel-view.js +77 -4
  742. package/dist/ui/shared/preview.js +476 -0
  743. package/dist/ui/shared/runtime-install.css +26 -0
  744. package/dist/ui/shared/side-rail.js +15 -0
  745. package/dist/ui/shared/signin.js +172 -0
  746. package/dist/ui/shared/task-board.css +95 -0
  747. package/dist/ui/shared/usage-dialog.js +18 -1
  748. package/dist/ui/shared/view-history.css +17 -0
  749. package/dist/ui/shared/view-history.js +438 -0
  750. package/dist/ui/shared/view-strings.js +16 -0
  751. package/dist/ui/shared/workspace.css +20 -0
  752. package/dist/ui/signin.html +21 -0
  753. package/dist/ui/workspace-panel.js +189 -0
  754. package/dist/ui/workspace-strings.js +35 -0
  755. package/dist/unattended-install.d.ts +11 -2
  756. package/dist/unattended-install.js +41 -6
  757. package/dist/unattended-install.js.map +1 -1
  758. package/dist/usage/capacity.d.ts +69 -0
  759. package/dist/usage/capacity.js +119 -0
  760. package/dist/usage/capacity.js.map +1 -0
  761. package/dist/usage/i18n-keys.d.ts +1 -1
  762. package/dist/usage/i18n-keys.js +3 -0
  763. package/dist/usage/i18n-keys.js.map +1 -1
  764. package/dist/usage/profile-timeline.d.ts +16 -0
  765. package/dist/usage/profile-timeline.js +58 -0
  766. package/dist/usage/profile-timeline.js.map +1 -0
  767. package/dist/usage/providers.js +2 -1
  768. package/dist/usage/providers.js.map +1 -1
  769. package/dist/usage/quota-history.d.ts +43 -0
  770. package/dist/usage/quota-history.js +168 -0
  771. package/dist/usage/quota-history.js.map +1 -0
  772. package/dist/usage/usage-api.d.ts +31 -0
  773. package/dist/usage/usage-api.js +80 -1
  774. package/dist/usage/usage-api.js.map +1 -1
  775. package/dist/usage-report.d.ts +25 -1
  776. package/dist/usage-report.js +55 -4
  777. package/dist/usage-report.js.map +1 -1
  778. package/dist/usage-rollup.d.ts +6 -1
  779. package/dist/usage-rollup.js +16 -4
  780. package/dist/usage-rollup.js.map +1 -1
  781. package/dist/view-api.d.ts +16 -0
  782. package/dist/view-api.js +105 -23
  783. package/dist/view-api.js.map +1 -1
  784. package/dist/view-history.d.ts +84 -0
  785. package/dist/view-history.js +116 -0
  786. package/dist/view-history.js.map +1 -0
  787. package/dist/web-api.d.ts +48 -2
  788. package/dist/web-api.js +276 -8
  789. package/dist/web-api.js.map +1 -1
  790. package/dist/web-backend-login.d.ts +23 -1
  791. package/dist/web-backend-login.js +11 -17
  792. package/dist/web-backend-login.js.map +1 -1
  793. package/dist/web-device-login.d.ts +153 -0
  794. package/dist/web-device-login.js +278 -0
  795. package/dist/web-device-login.js.map +1 -0
  796. package/dist/web-office-skins.d.ts +9 -0
  797. package/dist/web-office-skins.js +16 -1
  798. package/dist/web-office-skins.js.map +1 -1
  799. package/dist/web-session-authorization.d.ts +13 -2
  800. package/dist/web-session-authorization.js +10 -3
  801. package/dist/web-session-authorization.js.map +1 -1
  802. package/dist/web-session.d.ts +35 -0
  803. package/dist/web-session.js +7 -0
  804. package/dist/web-session.js.map +1 -1
  805. package/dist/web-settings-patch.d.ts +3 -1
  806. package/dist/web-settings-patch.js +4 -1
  807. package/dist/web-settings-patch.js.map +1 -1
  808. package/dist/web-shell-routes.d.ts +6 -0
  809. package/dist/web-shell-routes.js +7 -0
  810. package/dist/web-shell-routes.js.map +1 -1
  811. package/dist/web-terminal.d.ts +4 -30
  812. package/dist/web-terminal.js +9 -6
  813. package/dist/web-terminal.js.map +1 -1
  814. package/dist/windows-agents.d.ts +1 -0
  815. package/dist/windows-agents.js +1 -0
  816. package/dist/windows-agents.js.map +1 -1
  817. package/dist/windows-cli-api.d.ts +12 -1
  818. package/dist/windows-cli-api.js +27 -1
  819. package/dist/windows-cli-api.js.map +1 -1
  820. package/dist/windows-cli-providers.d.ts +0 -9
  821. package/dist/windows-cli-providers.js +4 -9
  822. package/dist/windows-cli-providers.js.map +1 -1
  823. package/dist/windows-cli-worker.d.ts +24 -0
  824. package/dist/windows-cli-worker.js +96 -5
  825. package/dist/windows-cli-worker.js.map +1 -1
  826. package/dist/windows-cli.d.ts +10 -0
  827. package/dist/windows-cli.js +10 -1
  828. package/dist/windows-cli.js.map +1 -1
  829. package/dist/yaml-shared-nodes.js +8 -3
  830. package/dist/yaml-shared-nodes.js.map +1 -1
  831. package/launcher/agend-install.cjs +8 -1
  832. package/launcher/launchd-session-type.cjs +14 -0
  833. package/launcher/postinstall.cjs +27 -2
  834. package/launcher/private-home.cjs +1 -1
  835. package/launcher/tmux-bundle.cjs +247 -0
  836. package/package.json +3 -2
  837. package/templates/launchd.plist.ejs +3 -1
  838. package/templates/runtime-install/install.ps1 +270 -0
@@ -0,0 +1,189 @@
1
+ // #3153 P1: an agent's Files / Changes in the side panel (read-only) — the folder it works in, as the server's
2
+ // /ui/workspace answers it (src/agent-workspace.ts: confined to that folder, secrets hidden by name, size limits).
3
+ // - Changes (the default): git status and the uncommitted diff against HEAD, untracked files included, per file.
4
+ // - Files: the folder's tree, one directory at a time (gitignored entries left out), and a read-only viewer — text
5
+ // with line numbers, an image inline, otherwise why not (binary, too large, hidden, a link).
6
+ // Refreshed on demand, and when the agent replies (the end of its turn). Nothing here writes to the folder, and
7
+ // everything is drawn as text nodes: no HTML from the folder is ever parsed.
8
+ import { html, useEffect, useRef, useState } from "/assets/app-html.js";
9
+ import { t } from "/assets/app-i18n.js";
10
+ import { Icon } from "/assets/ui-icons.js";
11
+ import "./workspace-strings.js"; // this panel's own words (an older cached chat-strings.js lacks them)
12
+
13
+ /** This panel's stylesheet, linked once (a tab opened before an upgrade has an app.css without these rules). */
14
+ function linkWorkspaceCss(doc = typeof document !== "undefined" ? document : null) {
15
+ try {
16
+ if (!doc || !doc.head || doc.querySelector('link[data-ws-css="1"]')) return;
17
+ const link = doc.createElement("link");
18
+ link.setAttribute("rel", "stylesheet"); link.setAttribute("href", "/assets/workspace.css"); link.setAttribute("data-ws-css", "1");
19
+ doc.head.appendChild(link);
20
+ } catch { /* the panel still works without it */ }
21
+ }
22
+ const api = (instance, op, path) => `/ui/workspace?instance=${encodeURIComponent(instance)}&op=${op}${path !== undefined ? `&path=${encodeURIComponent(path)}` : ""}`;
23
+ async function read(instance, op, path) {
24
+ let r;
25
+ try { r = await fetch(api(instance, op, path), { credentials: "same-origin", cache: "no-store" }); }
26
+ catch { return { ok: false, error: "network" }; }
27
+ let body = null;
28
+ try { body = await r.json(); } catch { body = null; }
29
+ if (!r.ok) return { ok: false, status: r.status, error: (body && typeof body.error === "string" && body.error) || "failed" };
30
+ return { ok: true, body };
31
+ }
32
+ const ERRORS = { workspace_not_offered: "chat.wsNotOffered", not_found: "chat.wsNotFound", not_a_directory: "chat.wsNotFound", hidden: "chat.wsHidden",
33
+ symlink: "chat.wsSymlink", outside: "chat.wsOutside", not_a_file: "chat.wsNotAFile", network: "chat.wsFailed", failed: "chat.wsFailed" };
34
+ const errText = (e) => t(ERRORS[e] || "chat.wsFailed");
35
+ const size = (n) => (n == null ? "" : n < 1024 ? `${n} B` : n < 1024 * 1024 ? `${(n / 1024).toFixed(1)} KB` : `${(n / 1048576).toFixed(1)} MB`);
36
+ /** The patch split into one section per file: { path, lines: [{ t: "+" | "-" | " " | "@" | "h", text }] }. */
37
+ export function sectionsOf(patch) {
38
+ const out = new Map();
39
+ for (const sec of String(patch || "").split(/(?=^diff --git )/m)) {
40
+ const m = /^diff --git a\/(.*?) b\//.exec(sec);
41
+ if (!m) continue;
42
+ const lines = [];
43
+ for (const l of sec.split("\n")) {
44
+ if (/^(diff --git|index |--- |\+\+\+ |new file mode|deleted file mode|old mode|new mode|similarity index)/.test(l)) continue;
45
+ if (l.startsWith("@@")) lines.push({ t: "@", text: l });
46
+ else if (l.startsWith("+")) lines.push({ t: "+", text: l.slice(1) });
47
+ else if (l.startsWith("-")) lines.push({ t: "-", text: l.slice(1) });
48
+ else if (l.startsWith(" ")) lines.push({ t: " ", text: l.slice(1) });
49
+ else if (l.startsWith("\\")) lines.push({ t: "h", text: l });
50
+ }
51
+ out.set(m[1], lines);
52
+ }
53
+ return out;
54
+ }
55
+
56
+ export function WorkspacePanel({ open, name, panel, fs, enterFs, leaveFs, onKey, subscribe, close }) {
57
+ const [tab, setTab] = useState("changes");
58
+ const [changes, setChanges] = useState(null); // { state: "loading" | "ready" | "failed", body?, error? }
59
+ const [dir, setDir] = useState("");
60
+ const [listing, setListing] = useState(null);
61
+ const [file, setFile] = useState(null); // { path, state, body?, error? }
62
+ const [openFiles, setOpenFiles] = useState(() => new Set());
63
+ const gen = useRef(0);
64
+ const instance = open.instance;
65
+ const loadChanges = async () => {
66
+ const mine = ++gen.current;
67
+ setChanges((c) => (c && c.state === "ready" ? { ...c, refreshing: true } : { state: "loading" }));
68
+ const r = await read(instance, "changes");
69
+ if (mine !== gen.current) return;
70
+ setChanges(r.ok ? { state: "ready", body: r.body } : { state: "failed", error: r.error });
71
+ };
72
+ const loadDir = async (path) => {
73
+ const mine = ++gen.current;
74
+ setListing({ state: "loading", path }); setFile(null);
75
+ const r = await read(instance, "list", path);
76
+ if (mine !== gen.current) return;
77
+ setDir(path);
78
+ setListing(r.ok ? { state: "ready", body: r.body, path } : { state: "failed", error: r.error, path });
79
+ };
80
+ const loadFile = async (path) => {
81
+ const mine = ++gen.current;
82
+ setFile({ path, state: "loading" });
83
+ const r = await read(instance, "file", path);
84
+ if (mine !== gen.current) return;
85
+ setFile(r.ok ? { path, state: "ready", body: r.body } : { path, state: "failed", error: r.error });
86
+ };
87
+ const refresh = () => { if (tab === "changes") loadChanges(); else if (file) loadFile(file.path); else loadDir(dir); };
88
+ useEffect(() => { linkWorkspaceCss(); }, []);
89
+ useEffect(() => { loadChanges(); }, [instance]);
90
+ useEffect(() => { if (tab === "files" && !listing) loadDir(""); }, [tab]);
91
+ // The end of the agent's turn: its reply arrives — read Changes again (once, shortly after), never while hidden.
92
+ useEffect(() => {
93
+ if (typeof subscribe !== "function") return undefined;
94
+ let timer = 0;
95
+ const off = subscribe((inst, kind) => {
96
+ if (inst !== instance || kind !== "msgs") return;
97
+ clearTimeout(timer);
98
+ timer = setTimeout(() => { if (!(typeof document !== "undefined" && document.hidden) && tab === "changes") loadChanges(); }, 1500);
99
+ });
100
+ return () => { clearTimeout(timer); if (typeof off === "function") off(); };
101
+ }, [instance, tab]);
102
+
103
+ const crumbs = dir ? dir.split("/") : [];
104
+ return html`<aside data-trust="preview" class=${`pv-panel ws-panel${fs ? ` pv-fs pv-fs-${fs}` : ""}`} ref=${panel} aria-label=${t("chat.wsTitle")} onKeyDown=${onKey}>
105
+ <div class="pv-panel-head">
106
+ <button type="button" class="icon-btn only-narrow pv-panel-close" title=${t("chat.pvBack")} aria-label=${t("chat.pvBack")} onClick=${close}><${Icon} name="back" size=${18} /></button>
107
+ <div class="pv-panel-title"><strong>${t("chat.wsTitle")}</strong><span class="pv-source ws-agent">${name}</span></div>
108
+ <button type="button" class="icon-btn only-wide pv-panel-close" title=${t("chat.pvClose")} aria-label=${t("chat.pvClose")} onClick=${close}><${Icon} name="close" size=${18} /></button>
109
+ </div>
110
+ <div class="pv-panel-bar">
111
+ <div class="seg-inline" role="tablist" aria-label=${t("chat.wsTitle")}>
112
+ <button type="button" role="tab" class=${`btn btn-sm${tab === "changes" ? " on" : ""}`} aria-selected=${tab === "changes" ? "true" : "false"} onClick=${() => setTab("changes")}><${Icon} name="diff" size=${14} /><span class="lbl">${t("chat.wsChanges")}</span></button>
113
+ <button type="button" role="tab" class=${`btn btn-sm${tab === "files" ? " on" : ""}`} aria-selected=${tab === "files" ? "true" : "false"} onClick=${() => setTab("files")}><${Icon} name="file" size=${14} /><span class="lbl">${t("chat.wsFiles")}</span></button>
114
+ </div>
115
+ <span class="grow"></span>
116
+ <button type="button" class="btn btn-sm ws-refresh" title=${t("chat.wsRefresh")} onClick=${refresh}><${Icon} name="restart" size=${14} /><span class="lbl">${t("chat.wsRefresh")}</span></button>
117
+ <button type="button" class=${`btn btn-sm only-wide pv-panel-fs${fs ? " on" : ""}`} aria-pressed=${fs ? "true" : "false"} title=${t(fs ? "chat.pvFsExit" : "chat.pvFs")} aria-label=${t(fs ? "chat.pvFsExit" : "chat.pvFs")}
118
+ onClick=${() => (fs ? leaveFs() : enterFs())}><${Icon} name=${fs ? "fullscreenexit" : "fullscreen"} size=${14} /></button>
119
+ </div>
120
+ <div class="pv-note ws-readonly" role="note">${t("chat.wsReadOnly")}</div>
121
+ <div class="pv-panel-body show-code ws-body">
122
+ ${tab === "changes" ? html`<${Changes} state=${changes} openFiles=${openFiles} toggle=${(p) => setOpenFiles((s) => { const n = new Set(s); if (n.has(p)) n.delete(p); else n.add(p); return n; })} />`
123
+ : html`<div class="ws-files">
124
+ <nav class="ws-crumbs" aria-label=${t("chat.wsFiles")}>
125
+ <button type="button" class="btn btn-sm btn-ghost" onClick=${() => loadDir("")}>${name}</button>
126
+ ${crumbs.map((c, i) => html`<span aria-hidden="true">/</span><button type="button" class="btn btn-sm btn-ghost" onClick=${() => loadDir(crumbs.slice(0, i + 1).join("/"))}>${c}</button>`)}
127
+ </nav>
128
+ ${file ? html`<${Viewer} file=${file} instance=${instance} back=${() => setFile(null)} />` : html`<${Listing} listing=${listing} dir=${dir} openDir=${loadDir} openFile=${loadFile} />`}
129
+ </div>`}
130
+ </div>
131
+ </aside>`;
132
+ }
133
+
134
+ function Changes({ state, openFiles, toggle }) {
135
+ if (!state || state.state === "loading") return html`<div class="pv-note">${t("chat.pvLoading")}</div>`;
136
+ if (state.state === "failed") return html`<div class="pv-note" role="alert">${errText(state.error)}</div>`;
137
+ const c = state.body;
138
+ if (!c.repo) return html`<div class="pv-note">${t("chat.wsNoRepo")}</div>`;
139
+ if (!c.files.length) return html`<div class="pv-note">${t("chat.wsClean", c.branch || "HEAD")}</div>`;
140
+ const secs = sectionsOf(c.patch);
141
+ return html`<div class="ws-changes">
142
+ <div class="ws-summary">${t("chat.wsSummary", c.files.length, c.branch || "HEAD")}${c.hiddenCount ? ` · ${t("chat.wsHiddenCount", c.hiddenCount)}` : ""}</div>
143
+ ${c.cut && (c.cut.files || c.cut.bytes) ? html`<div class="pv-note" role="status">${t("chat.wsCut")}</div>` : null}
144
+ <ul class="ws-change-list">${c.files.map((f) => {
145
+ const lines = secs.get(f.path), why = f.hidden ? t("chat.wsHiddenFile") : f.binary ? t("chat.wsBinary") : f.tooLarge ? t("chat.wsTooLarge") : null;
146
+ const shown = openFiles.has(f.path);
147
+ return html`<li key=${f.path} class=${`ws-change st-${f.status}`}>
148
+ <button type="button" class="ws-change-head" aria-expanded=${lines ? (shown ? "true" : "false") : undefined} disabled=${!lines} onClick=${() => toggle(f.path)}>
149
+ <span class=${`ws-st st-${f.status}`}>${t(`chat.wsSt_${f.status}`)}</span>
150
+ <span class="ws-path">${f.path}</span>
151
+ ${f.adds != null || f.dels != null ? html`<span class="ws-count"><span class="d-add">+${f.adds ?? 0}</span> <span class="d-del">−${f.dels ?? 0}</span></span>` : null}
152
+ ${why ? html`<span class="ws-why">${why}</span>` : null}
153
+ </button>
154
+ ${lines && shown ? html`<pre class="pv-code pv-diff ws-diff"><code>${lines.map((l) => html`<span class=${l.t === "+" ? "d-add" : l.t === "-" ? "d-del" : l.t === "@" ? "d-hunk" : "d-ctx"}>${l.t === "@" || l.t === "h" ? `${l.text}\n` : `${l.t} ${l.text}\n`}</span>`)}</code></pre>` : null}
155
+ </li>`;
156
+ })}</ul>
157
+ </div>`;
158
+ }
159
+
160
+ function Listing({ listing, openDir, openFile }) {
161
+ if (!listing || listing.state === "loading") return html`<div class="pv-note">${t("chat.pvLoading")}</div>`;
162
+ if (listing.state === "failed") return html`<div class="pv-note" role="alert">${errText(listing.error)}</div>`;
163
+ const l = listing.body;
164
+ return html`<div>
165
+ ${l.cut ? html`<div class="pv-note" role="status">${t("chat.wsDirCut")}</div>` : null}
166
+ ${!l.entries.length ? html`<div class="pv-note">${t("chat.wsEmptyDir")}</div>` : null}
167
+ <ul class="ws-entries">${l.entries.map((e) => {
168
+ const rel = l.path ? `${l.path}/${e.name}` : e.name;
169
+ const usable = !e.hidden && (e.type === "dir" || e.type === "file");
170
+ return html`<li key=${e.name} class=${`ws-entry t-${e.type}${e.hidden ? " is-hidden" : ""}`}>
171
+ <button type="button" class="ws-entry-btn" disabled=${!usable} onClick=${() => (e.type === "dir" ? openDir(rel) : openFile(rel))}>
172
+ <${Icon} name=${e.type === "dir" ? "chevron" : e.type === "symlink" ? "external" : "file"} size=${14} />
173
+ <span class="ws-name">${e.name}${e.type === "dir" ? "/" : ""}</span>
174
+ <span class="ws-meta">${e.hidden ? t("chat.wsHiddenFile") : e.type === "symlink" ? t("chat.wsLink") : e.type === "file" ? size(e.size) : ""}</span>
175
+ </button></li>`;
176
+ })}</ul></div>`;
177
+ }
178
+
179
+ function Viewer({ file, instance, back }) {
180
+ const head = html`<div class="ws-viewer-head"><button type="button" class="btn btn-sm" onClick=${back}><${Icon} name="back" size=${14} />${t("chat.pvBack")}</button><code class="ws-path">${file.path}</code></div>`;
181
+ if (file.state === "loading") return html`<div>${head}<div class="pv-note">${t("chat.pvLoading")}</div></div>`;
182
+ if (file.state === "failed") return html`<div>${head}<div class="pv-note" role="alert">${errText(file.error)}</div></div>`;
183
+ const f = file.body;
184
+ if (f.kind === "image") return html`<div>${head}<img class="ws-image" alt=${f.path} src=${api(instance, "image", f.path)} /></div>`;
185
+ if (f.kind !== "text") return html`<div>${head}<div class="pv-note">${t(f.kind === "binary" ? "chat.wsBinaryFile" : "chat.wsTooLargeFile", size(f.size))}</div></div>`;
186
+ const lines = f.text.split("\n");
187
+ if (lines.length > 1 && lines[lines.length - 1] === "") lines.pop();
188
+ return html`<div>${head}<pre class="pv-code ws-text"><code>${lines.map((l, i) => html`<span class="ws-ln" aria-hidden="true">${String(i + 1).padStart(String(lines.length).length, " ")}</span>${`${l}\n`}`)}</code></pre></div>`;
189
+ }
@@ -0,0 +1,35 @@
1
+ // #3153 P1: the Files & changes panel's own words, registered by its module (workspace-panel.js). A page that opened
2
+ // Log or Details before an upgrade may hold an older chat-strings.js without them; these keep the panel and the ⋯
3
+ // entry saying what they are, never a raw key (the lesson of #3155).
4
+ import { register } from "/assets/app-i18n.js";
5
+
6
+ register("chat", {
7
+ en: {
8
+ wsOpen: "Files & changes", wsTitle: "Files & changes", wsChanges: "Changes", wsFiles: "Files", wsRefresh: "Refresh",
9
+ wsReadOnly: "Read-only view of the folder this agent works in. Secret-looking files (.env, keys, credentials) are hidden.",
10
+ wsNoRepo: "This folder is not a git repository, so there are no changes to show. Files still works.",
11
+ wsClean: "No uncommitted changes on {0}.", wsSummary: "{0} changed files on {1}", wsHiddenCount: "{0} hidden",
12
+ wsCut: "Some changes are not shown: the list or the diff reached its size limit.",
13
+ wsHiddenFile: "hidden: may contain secrets", wsBinary: "binary", wsTooLarge: "too large to show", wsLink: "link (not followed)",
14
+ wsSt_modified: "M", wsSt_added: "A", wsSt_deleted: "D", wsSt_untracked: "U",
15
+ wsDirCut: "Only the first 1,000 entries are listed.", wsEmptyDir: "This folder is empty.",
16
+ wsBinaryFile: "A binary file ({0}): not shown.", wsTooLargeFile: "Too large to show here ({0}).",
17
+ wsNotOffered: "Files & changes are not available for this agent (General, coordinators and agents on another computer).",
18
+ wsNotFound: "The folder or file was not found.", wsHidden: "Hidden: it may contain secrets.", wsSymlink: "A link: not followed.",
19
+ wsOutside: "Outside the agent's folder.", wsNotAFile: "Not a regular file.", wsFailed: "Couldn't read it. Try Refresh.",
20
+ },
21
+ "zh-TW": {
22
+ wsOpen: "檔案與變更", wsTitle: "檔案與變更", wsChanges: "變更", wsFiles: "檔案", wsRefresh: "重新整理",
23
+ wsReadOnly: "這是 Agent 工作資料夾的唯讀檢視。看起來像機密的檔案(.env、金鑰、憑證)會隱藏。",
24
+ wsNoRepo: "這個資料夾不是 git 儲存庫,沒有可顯示的變更;「檔案」仍可使用。",
25
+ wsClean: "{0} 沒有尚未提交的變更。", wsSummary: "{0} 個檔案有變更({1})", wsHiddenCount: "{0} 個已隱藏",
26
+ wsCut: "部分變更未顯示:清單或差異已達大小上限。",
27
+ wsHiddenFile: "已隱藏:可能含有機密", wsBinary: "二進位檔", wsTooLarge: "太大,無法顯示", wsLink: "連結(不追蹤)",
28
+ wsSt_modified: "M", wsSt_added: "A", wsSt_deleted: "D", wsSt_untracked: "U",
29
+ wsDirCut: "只列出前 1,000 個項目。", wsEmptyDir: "這個資料夾是空的。",
30
+ wsBinaryFile: "二進位檔({0}),不顯示。", wsTooLargeFile: "太大,無法在這裡顯示({0})。",
31
+ wsNotOffered: "這個 Agent 無法使用「檔案與變更」(General、協調者與其他電腦上的 Agent)。",
32
+ wsNotFound: "找不到這個資料夾或檔案。", wsHidden: "已隱藏:可能含有機密。", wsSymlink: "這是連結,不追蹤。",
33
+ wsOutside: "在 Agent 的資料夾之外。", wsNotAFile: "不是一般檔案。", wsFailed: "無法讀取,請按「重新整理」。",
34
+ },
35
+ });
@@ -2,5 +2,14 @@
2
2
  export declare const UNATTENDED_INSTALL_SCRIPT: string;
3
3
  /** The account's login shell, when it is an absolute path to an executable; else undefined (keep the inherited one). */
4
4
  export declare function loginShell(read?: () => string | null | undefined): Promise<string | undefined>;
5
- /** The window's command for an install command. `shell`: the $SHELL to give it; null keeps the inherited one. */
6
- export declare function unattendedInstallCommand(command: string, shell?: string | null): string;
5
+ /**
6
+ * The window's command for an install command. `shell`: the $SHELL to give it; null keeps the inherited one.
7
+ * `exitMarker` (installExitMarker()): the wrapper prints `<marker><exit code>` as its last line, for the session.
8
+ */
9
+ export declare function unattendedInstallCommand(command: string, shell?: string | null, exitMarker?: string): string;
10
+ /** A marker for one install: random per run, so nothing the installer prints can pass for the wrapper's verdict. */
11
+ export declare function installExitMarker(): string;
12
+ /** The exit code the wrapper printed after `marker` (its last such line), or undefined when there is none. */
13
+ export declare function exitCodeFromMarker(pane: string, marker: string): number | undefined;
14
+ /** The pane without the wrapper's verdict line (what a person is shown). */
15
+ export declare function withoutExitMarker(pane: string, marker: string): string;
@@ -15,10 +15,12 @@
15
15
  * line lands in the file the user's own terminals read.
16
16
  *
17
17
  * - **Its verdict is kept.** In a tmux pane it starts once remain-on-exit is on (see the script): an install that ends
18
- * at once still leaves a dead pane with its exit code and output for the session to judge.
18
+ * at once still leaves a dead pane with its exit code and output for the session to judge. The wrapper also prints
19
+ * its exit code after the session's marker, for when tmux never records the pane's exit status (see the script).
19
20
  *
20
21
  * The exit code is the install's own: the session judges success by it.
21
22
  */
23
+ import { randomBytes } from "node:crypto";
22
24
  import { userInfo } from "node:os";
23
25
  import { isAbsolute } from "node:path";
24
26
  import { shellQuote } from "./backend/types.js";
@@ -28,7 +30,8 @@ export const UNATTENDED_INSTALL_SCRIPT = [
28
30
  // In a tmux pane, start only once AgEnD has set remain-on-exit on the window (at most ~10 s): an install that fails
29
31
  // at once — a prompt with no terminal does — would otherwise close the window before it is set, taking its exit code
30
32
  // and output with it. Outside tmux ($TMUX_PANE unset) there is nothing to wait for.
31
- 'if [ -n "${TMUX_PANE:-}" ] && command -v tmux >/dev/null 2>&1; then i=0; while [ "$(tmux show-options -wqv -t "$TMUX_PANE" remain-on-exit 2>/dev/null)" != on ] && [ $i -lt 100 ]; do sleep 0.1; i=$((i+1)); done; fi',
33
+ // ${AGEND_TMUX:-tmux}: the tmux the fleet runs (its server exports it with the bundled tmux, M-2457); else PATH's.
34
+ 'T="${AGEND_TMUX:-tmux}"; if [ -n "${TMUX_PANE:-}" ] && command -v "$T" >/dev/null 2>&1; then i=0; while [ "$("$T" show-options -wqv -t "$TMUX_PANE" remain-on-exit 2>/dev/null)" != on ] && [ $i -lt 100 ]; do sleep 0.1; i=$((i+1)); done; fi',
32
35
  'P=""',
33
36
  'if command -v ionice >/dev/null 2>&1 && ionice -c2 -n7 true >/dev/null 2>&1; then P="ionice -c2 -n7"; fi',
34
37
  'if command -v setsid >/dev/null 2>&1; then setsid -w nice -n 10 $P sh -c "$1" </dev/null & else nice -n 10 $P sh -c "$1" </dev/null & fi',
@@ -36,7 +39,13 @@ export const UNATTENDED_INSTALL_SCRIPT = [
36
39
  // `kill -TERM -$pid`, not `kill -- -$pid`: dash's kill refuses `--` ("Illegal number"). Before setsid has run there is
37
40
  // no such group yet, and the plain pid is what exists.
38
41
  "trap 'kill -TERM -$pid 2>/dev/null || kill -TERM $pid 2>/dev/null; exit 129' HUP INT TERM",
39
- 'wait "$pid"',
42
+ // The verdict, said by the wrapper itself as its last line ("$2<code>", $2 = the session's own marker): tmux 3.4 can
43
+ // miss the pane's SIGCHLD — the pane is dead (its pty closed) but the shell stays an unreaped zombie and
44
+ // #{pane_dead_status} never appears (reproduced: 3 in 40 runs, the status still absent 15 s later). The session reads
45
+ // this line instead; no marker, no line.
46
+ 'wait "$pid"; rc=$?',
47
+ 'if [ -n "${2:-}" ]; then printf \'\\n%s%s\\n\' "$2" "$rc"; fi',
48
+ 'exit "$rc"',
40
49
  ].join("\n");
41
50
  /** The account's login shell, when it is an absolute path to an executable; else undefined (keep the inherited one). */
42
51
  export async function loginShell(read = () => userInfo().shell) {
@@ -71,9 +80,35 @@ export async function loginShell(read = () => userInfo().shell) {
71
80
  clearTimeout(timer);
72
81
  }
73
82
  }
74
- /** The window's command for an install command. `shell`: the $SHELL to give it; null keeps the inherited one. */
75
- export function unattendedInstallCommand(command, shell = null) {
83
+ /**
84
+ * The window's command for an install command. `shell`: the $SHELL to give it; null keeps the inherited one.
85
+ * `exitMarker` (installExitMarker()): the wrapper prints `<marker><exit code>` as its last line, for the session.
86
+ */
87
+ export function unattendedInstallCommand(command, shell = null, exitMarker) {
76
88
  const env = shell ? `SHELL=${shellQuote(shell)} ` : "";
77
- return `${env}sh -c ${shellQuote(UNATTENDED_INSTALL_SCRIPT)} agend-install ${shellQuote(command)}`;
89
+ if (exitMarker !== undefined && !/^[A-Za-z0-9-]+=$/.test(exitMarker))
90
+ throw new Error("exit marker: letters, digits and '-' ending in '='");
91
+ return `${env}sh -c ${shellQuote(UNATTENDED_INSTALL_SCRIPT)} agend-install ${shellQuote(command)}${exitMarker ? ` ${shellQuote(exitMarker)}` : ""}`;
92
+ }
93
+ /** A marker for one install: random per run, so nothing the installer prints can pass for the wrapper's verdict. */
94
+ export function installExitMarker() {
95
+ return `AGEND-INSTALL-EXIT-${randomBytes(8).toString("hex")}=`;
96
+ }
97
+ /** The exit code the wrapper printed after `marker` (its last such line), or undefined when there is none. */
98
+ export function exitCodeFromMarker(pane, marker) {
99
+ let code;
100
+ for (const line of pane.split("\n")) {
101
+ const at = line.indexOf(marker);
102
+ if (at < 0)
103
+ continue;
104
+ const m = /^(\d{1,3})\s*$/.exec(line.slice(at + marker.length));
105
+ if (m)
106
+ code = Number(m[1]);
107
+ }
108
+ return code;
109
+ }
110
+ /** The pane without the wrapper's verdict line (what a person is shown). */
111
+ export function withoutExitMarker(pane, marker) {
112
+ return pane.split("\n").filter((l) => !l.includes(marker)).join("\n");
78
113
  }
79
114
  //# sourceMappingURL=unattended-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unattended-install.js","sourceRoot":"","sources":["../src/unattended-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,uHAAuH;AACvH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,oHAAoH;IACpH,qHAAqH;IACrH,oFAAoF;IACpF,uNAAuN;IACvN,MAAM;IACN,0GAA0G;IAC1G,0IAA0I;IAC1I,QAAQ;IACR,uHAAuH;IACvH,uDAAuD;IACvD,2FAA2F;IAC3F,aAAa;CACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,wHAAwH;AACxH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAI,GAAoC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK;IAC7F,IAAI,KAAgC,CAAC;IACrC,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IACnD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,6GAA6G;IAC7G,mFAAmF;IACnF,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,yCAAyC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACtG,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC/B,KAAK,CAAC,MAAM;YACZ,IAAI,OAAO,CAAY,CAAC,CAAC,EAAE,EAAE;gBAC3B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC7E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC;SACH,CAAC,CAAC;QACH,OAAO,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAK,GAAkB,IAAI;IACnF,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,GAAG,GAAG,SAAS,UAAU,CAAC,yBAAyB,CAAC,kBAAkB,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"unattended-install.js","sourceRoot":"","sources":["../src/unattended-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * #3066 §1: how much is 100% of an account's weekly quota, measured — what this account's agents used while the vendor's
3
+ * weekly percent moved (the readings of quota-history.ts, the hours of the usage ledger). Pure: the fleet gathers both.
4
+ *
5
+ * Within one reset window (the same `resetsAt`, the percent never going down) the first and last readings bound an
6
+ * interval: capacity = consumed in it ÷ Δ%. Two uncertainties, both carried into the range, never hidden:
7
+ * - the vendors report whole percents, so Δ is ±1: the range divides by Δ+1 … Δ−1;
8
+ * - the ledger is hourly, so the two boundary hours are uncertain: without them is the low end, with them the high.
9
+ * A window counts only when Δ ≥ 10 points (rounding then costs ≤ ~±10%). Several windows: the median of their midpoints,
10
+ * the range their lowest low … highest high.
11
+ *
12
+ * Three bases, because the vendor's weighting is not published: the API-equivalent at list price (likely what the quota
13
+ * tracks — it weighs Opus over Sonnet, cache reads far below input), output tokens, all tokens. With three windows or
14
+ * more, the basis whose capacity varies least across weeks (coefficient of variation) is named as the best fit.
15
+ *
16
+ * What it cannot see: the same account used outside this fleet (claude.ai, another machine) spends the quota without a
17
+ * token here, so the estimate comes out LOW; a window whose bases disagree with each other by more than 2× is marked
18
+ * `mixed`. The page says so (usage.capacity.only_agend, usage.capacity.mixed).
19
+ */
20
+ import { type QuotaReading } from "./quota-history.js";
21
+ export declare const CAPACITY_MIN_DELTA = 10;
22
+ export declare const BASES: readonly ["api", "output", "all"];
23
+ export type CapacityBasis = typeof BASES[number];
24
+ /** One hour of one account's usage, on each basis (api null: a model in it has no list price). */
25
+ export interface CapacityHour {
26
+ hour: number;
27
+ api: number | null;
28
+ output: number;
29
+ all: number;
30
+ }
31
+ /** `windows`: how many reset windows this basis was measured over (a basis can miss one: an unpriced hour). */
32
+ export interface BasisEstimate {
33
+ median: number;
34
+ low: number;
35
+ high: number;
36
+ cv: number | null;
37
+ windows: number;
38
+ }
39
+ export type CapacityEstimate = {
40
+ status: "ok";
41
+ windows: number;
42
+ deltaPct: number;
43
+ bases: Partial<Record<CapacityBasis, BasisEstimate>>;
44
+ bestFit: CapacityBasis | null;
45
+ mixed: boolean;
46
+ } | {
47
+ status: "not_enough";
48
+ deltaPct: number;
49
+ };
50
+ interface Window {
51
+ t1: number;
52
+ p1: number;
53
+ t2: number;
54
+ p2: number;
55
+ }
56
+ /**
57
+ * The reset windows the readings span: a new `resetsAt`, or a percent that went down, starts the next. "New" is
58
+ * quota-history's sameReset (Prism #3073 P2): a vendor that gives only "resets in N seconds" drifts by seconds between
59
+ * reads and is still one window; compared with the window's latest reading, a real reset moves it by days.
60
+ */
61
+ export declare function quotaWindows(readings: readonly QuotaReading[]): Window[];
62
+ /**
63
+ * The estimate for one account's one weekly metric. `available(from, to)`: whether every hour from `from` to `to` is in
64
+ * the ledger — kept and scanned (Prism #3073 P2): the quota history keeps 12 weeks, the hours 31 days, so a window
65
+ * outside them would count as zero use and the estimate would come out absurdly low. Such a window is left out.
66
+ * Null: there are windows to measure, but no usage of this account in any of them on any basis — nothing to show.
67
+ */
68
+ export declare function estimateCapacity(readings: readonly QuotaReading[], hours: readonly CapacityHour[], available?: (from: number, to: number) => boolean): CapacityEstimate | null;
69
+ export {};
@@ -0,0 +1,119 @@
1
+ /**
2
+ * #3066 §1: how much is 100% of an account's weekly quota, measured — what this account's agents used while the vendor's
3
+ * weekly percent moved (the readings of quota-history.ts, the hours of the usage ledger). Pure: the fleet gathers both.
4
+ *
5
+ * Within one reset window (the same `resetsAt`, the percent never going down) the first and last readings bound an
6
+ * interval: capacity = consumed in it ÷ Δ%. Two uncertainties, both carried into the range, never hidden:
7
+ * - the vendors report whole percents, so Δ is ±1: the range divides by Δ+1 … Δ−1;
8
+ * - the ledger is hourly, so the two boundary hours are uncertain: without them is the low end, with them the high.
9
+ * A window counts only when Δ ≥ 10 points (rounding then costs ≤ ~±10%). Several windows: the median of their midpoints,
10
+ * the range their lowest low … highest high.
11
+ *
12
+ * Three bases, because the vendor's weighting is not published: the API-equivalent at list price (likely what the quota
13
+ * tracks — it weighs Opus over Sonnet, cache reads far below input), output tokens, all tokens. With three windows or
14
+ * more, the basis whose capacity varies least across weeks (coefficient of variation) is named as the best fit.
15
+ *
16
+ * What it cannot see: the same account used outside this fleet (claude.ai, another machine) spends the quota without a
17
+ * token here, so the estimate comes out LOW; a window whose bases disagree with each other by more than 2× is marked
18
+ * `mixed`. The page says so (usage.capacity.only_agend, usage.capacity.mixed).
19
+ */
20
+ import { sameReset } from "./quota-history.js";
21
+ export const CAPACITY_MIN_DELTA = 10;
22
+ export const BASES = ["api", "output", "all"];
23
+ const H = 3_600_000;
24
+ /**
25
+ * The reset windows the readings span: a new `resetsAt`, or a percent that went down, starts the next. "New" is
26
+ * quota-history's sameReset (Prism #3073 P2): a vendor that gives only "resets in N seconds" drifts by seconds between
27
+ * reads and is still one window; compared with the window's latest reading, a real reset moves it by days.
28
+ */
29
+ export function quotaWindows(readings) {
30
+ const out = [];
31
+ let cur = null;
32
+ for (const r of [...readings].sort((a, b) => a.t - b.t)) {
33
+ if (!cur || !sameReset(r.resetsAt, cur.resetsAt) || r.used < cur.p2) {
34
+ if (cur)
35
+ out.push(cur);
36
+ cur = { t1: r.t, p1: r.used, t2: r.t, p2: r.used, resetsAt: r.resetsAt };
37
+ }
38
+ else {
39
+ cur.t2 = r.t;
40
+ cur.p2 = r.used;
41
+ cur.resetsAt = r.resetsAt;
42
+ }
43
+ }
44
+ if (cur)
45
+ out.push(cur);
46
+ return out.map(({ t1, p1, t2, p2 }) => ({ t1, p1, t2, p2 }));
47
+ }
48
+ const median = (xs) => { const s = [...xs].sort((a, b) => a - b), m = s.length >> 1; return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2; };
49
+ const cv = (xs) => {
50
+ if (xs.length < 2)
51
+ return null;
52
+ const mean = xs.reduce((a, b) => a + b, 0) / xs.length;
53
+ return mean > 0 ? Math.sqrt(xs.reduce((a, x) => a + (x - mean) ** 2, 0) / xs.length) / mean : null;
54
+ };
55
+ /**
56
+ * The estimate for one account's one weekly metric. `available(from, to)`: whether every hour from `from` to `to` is in
57
+ * the ledger — kept and scanned (Prism #3073 P2): the quota history keeps 12 weeks, the hours 31 days, so a window
58
+ * outside them would count as zero use and the estimate would come out absurdly low. Such a window is left out.
59
+ * Null: there are windows to measure, but no usage of this account in any of them on any basis — nothing to show.
60
+ */
61
+ export function estimateCapacity(readings, hours, available = () => true) {
62
+ const windows = quotaWindows(readings).filter((w) => available(Math.floor(w.t1 / H) * H, w.t2));
63
+ const usable = windows.filter((w) => w.p2 - w.p1 >= CAPACITY_MIN_DELTA);
64
+ if (!usable.length) {
65
+ // No window inside the ledger at all: "not enough usage" would be a claim about weeks it cannot see. Say nothing.
66
+ if (!windows.length)
67
+ return null;
68
+ return { status: "not_enough", deltaPct: Math.max(0, ...windows.map((w) => w.p2 - w.p1)) };
69
+ }
70
+ const per = usable.map((w) => {
71
+ const delta = w.p2 - w.p1;
72
+ const inside = hours.filter((h) => h.hour >= w.t1 && h.hour + H <= w.t2); // whole hours within: low
73
+ const touching = hours.filter((h) => h.hour + H > w.t1 && h.hour < w.t2); // any hour touching: high
74
+ const sum = (list, b) => {
75
+ let n = 0;
76
+ for (const h of list) {
77
+ const v = h[b];
78
+ if (v === null)
79
+ return null;
80
+ n += v;
81
+ }
82
+ return n;
83
+ };
84
+ const out = {};
85
+ for (const b of BASES) {
86
+ const lo = sum(inside, b), hi = sum(touching, b);
87
+ if (lo === null || hi === null || hi <= 0)
88
+ continue; // a basis with an unpriced hour, or nothing used
89
+ out[b] = { low: lo / ((delta + 1) / 100), mid: ((lo + hi) / 2) / (delta / 100), high: hi / ((delta - 1) / 100) };
90
+ }
91
+ return out;
92
+ });
93
+ const bases = {};
94
+ for (const b of BASES) {
95
+ const ws = per.map((p) => p[b]).filter((x) => !!x);
96
+ if (!ws.length)
97
+ continue;
98
+ const mids = ws.map((x) => x.mid);
99
+ bases[b] = { median: median(mids), low: Math.min(...ws.map((x) => x.low)), high: Math.max(...ws.map((x) => x.high)), cv: cv(mids), windows: ws.length };
100
+ }
101
+ if (!BASES.some((b) => bases[b]))
102
+ return null; // Prism #3073 P1: no basis, no estimate
103
+ // Best fit: with three windows or more, the basis that varies least across them.
104
+ const scored = BASES.filter((b) => bases[b]?.cv !== null && bases[b]?.cv !== undefined && bases[b].windows >= 3);
105
+ const bestFit = scored.length ? scored.reduce((a, b) => (bases[b].cv < bases[a].cv ? b : a)) : null;
106
+ // Mixed: in some window the API-equivalent and the token count disagree (each against its own median) by over 2×.
107
+ let mixed = false;
108
+ if (bases.api && bases.all && usable.length >= 2) {
109
+ for (const p of per) {
110
+ if (!p.api || !p.all)
111
+ continue;
112
+ const ra = p.api.mid / bases.api.median, rt = p.all.mid / bases.all.median;
113
+ if (Math.max(ra / rt, rt / ra) > 2)
114
+ mixed = true;
115
+ }
116
+ }
117
+ return { status: "ok", windows: usable.length, deltaPct: Math.max(...usable.map((w) => w.p2 - w.p1)), bases, bestFit, mixed };
118
+ }
119
+ //# sourceMappingURL=capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity.js","sourceRoot":"","sources":["../../src/usage/capacity.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * Keep this list explicit: the parity test rejects a key missing from either
4
4
  * locale surface before a mixed-language release can ship.
5
5
  */
6
- export declare const USAGE_I18N_KEYS: readonly ["usage.title", "usage.title_plain", "usage.empty_active", "usage.not_logged_in", "usage.default_login", "usage.error_fallback", "usage.no_data", "usage.reset.in", "usage.reset.soon", "usage.duration.days_hours", "usage.duration.hours_minutes", "usage.duration.minutes", "usage.metric.session", "usage.metric.weekly", "usage.metric.monthly", "usage.metric.days_window", "usage.metric.named", "usage.metric.named_session", "usage.metric.named_weekly", "usage.metric.named_monthly", "usage.metric.named_days", "usage.metric.extra_usage", "usage.metric.rate_limit_resets", "usage.ticket_expiry", "usage.metric.credits", "usage.metric.weekly_limit", "usage.metric.pay_as_you_go", "usage.metric.bonus_credits", "usage.metric.overage_charges", "usage.metric.pay_per_use", "usage.unit.available", "usage.unit.credits", "usage.metric.usage_monthly", "usage.note.used_limit_unit", "usage.note.bonus_codes", "usage.value.disabled", "usage.value.cap", "usage.value.unlimited", "usage.note.binding", "usage.note.binding_severity", "usage.note.busiest_model", "usage.note.busiest_models", "usage.metric.agy_claude_others", "usage.metric.agy_claude_others_session", "usage.metric.agy_claude_others_weekly", "usage.hint.statusline_now", "usage.hint.statusline_minutes", "usage.hint.claude_api_key", "usage.hint.login_claude", "usage.hint.login_agy", "usage.hint.no_quota", "usage.hint.login_codex", "usage.hint.codex_no_oauth", "usage.hint.login_grok", "usage.hint.grok_no_login", "usage.hint.login_kiro", "usage.hint.kiro_signed_out", "usage.hint.claude_profile_signed_out", "usage.hint.claude_profile_signed_out_chat", "usage.hint.token_refreshing", "usage.hint.subscription_no_credit", "usage.hint.no_quota_account", "usage.error.unreachable", "usage.error.token_rejected", "usage.error.rate_limited", "usage.error.rate_limited_transient", "usage.stale_rate_limited", "usage.stale.expired", "usage.stale.transient", "usage.stale.error", "usage.metric.reset_since", "usage.error.http", "usage.error.billing_http", "usage.error.invalid_response", "usage.error.invalid_billing_response", "usage.error.invalid_kiro_response", "usage.error.claude_token_expired", "usage.error.codex_token_expired", "usage.error.grok_expired", "usage.error.grok_response_changed", "usage.error.agy_cap", "usage.error.agy_no_refresh", "usage.error.agy_token_expired", "usage.error.agy_login_expired", "usage.error.agy_refresh_empty", "usage.error.grok_auth_readonly", "usage.error.grok_no_refresh", "usage.error.grok_refresh_unreachable", "usage.error.grok_invalid_refresh", "usage.error.grok_persist"];
6
+ export declare const USAGE_I18N_KEYS: readonly ["usage.title", "usage.title_plain", "usage.empty_active", "usage.not_logged_in", "usage.default_login", "usage.error_fallback", "usage.no_data", "usage.reset.in", "usage.reset.soon", "usage.duration.days_hours", "usage.duration.hours_minutes", "usage.duration.minutes", "usage.metric.session", "usage.metric.weekly", "usage.metric.monthly", "usage.metric.days_window", "usage.metric.named", "usage.metric.named_session", "usage.metric.named_weekly", "usage.metric.named_monthly", "usage.metric.named_days", "usage.metric.extra_usage", "usage.metric.rate_limit_resets", "usage.ticket_expiry", "usage.metric.credits", "usage.metric.weekly_limit", "usage.metric.pay_as_you_go", "usage.metric.bonus_credits", "usage.metric.overage_charges", "usage.metric.pay_per_use", "usage.unit.available", "usage.unit.credits", "usage.metric.usage_monthly", "usage.note.used_limit_unit", "usage.note.bonus_codes", "usage.value.disabled", "usage.value.cap", "usage.value.unlimited", "usage.note.binding", "usage.note.binding_severity", "usage.note.busiest_model", "usage.note.busiest_models", "usage.metric.agy_claude_others", "usage.metric.agy_claude_others_session", "usage.metric.agy_claude_others_weekly", "usage.hint.statusline_now", "usage.hint.statusline_minutes", "usage.hint.claude_api_key", "usage.hint.login_claude", "usage.hint.login_agy", "usage.hint.no_quota", "usage.hint.login_codex", "usage.hint.codex_no_oauth", "usage.hint.login_grok", "usage.hint.grok_no_login", "usage.hint.login_kiro", "usage.hint.kiro_signed_out", "usage.hint.claude_profile_signed_out", "usage.hint.claude_profile_signed_out_chat", "usage.hint.token_refreshing", "usage.hint.subscription_no_credit", "usage.hint.no_quota_account", "usage.error.unreachable", "usage.error.token_rejected", "usage.error.rate_limited", "usage.error.rate_limited_transient", "usage.stale_rate_limited", "usage.stale.expired", "usage.stale.transient", "usage.stale.error", "usage.metric.reset_since", "usage.error.http", "usage.error.billing_http", "usage.error.invalid_response", "usage.error.invalid_billing_response", "usage.error.invalid_kiro_response", "usage.error.claude_token_expired", "usage.error.codex_token_expired", "usage.error.grok_expired", "usage.error.grok_response_changed", "usage.error.agy_cap", "usage.error.agy_no_refresh", "usage.error.agy_token_expired", "usage.error.agy_login_expired", "usage.error.agy_refresh_empty", "usage.error.grok_auth_readonly", "usage.error.grok_no_refresh", "usage.error.grok_refresh_unreachable", "usage.error.grok_invalid_refresh", "usage.error.grok_persist", "usage.capacity.line", "usage.capacity.line_tokens", "usage.capacity.not_enough", "usage.capacity.only_agend", "usage.capacity.mixed", "usage.capacity.best_fit_api", "usage.capacity.best_fit_output", "usage.capacity.best_fit_all"];
7
7
  export type UsageI18nKey = typeof USAGE_I18N_KEYS[number];
@@ -31,5 +31,8 @@ export const USAGE_I18N_KEYS = [
31
31
  "usage.error.agy_no_refresh", "usage.error.agy_token_expired", "usage.error.agy_login_expired",
32
32
  "usage.error.agy_refresh_empty", "usage.error.grok_auth_readonly", "usage.error.grok_no_refresh",
33
33
  "usage.error.grok_refresh_unreachable", "usage.error.grok_invalid_refresh", "usage.error.grok_persist",
34
+ // #3066 §1: a weekly quota's measured 100%.
35
+ "usage.capacity.line", "usage.capacity.line_tokens", "usage.capacity.not_enough", "usage.capacity.only_agend", "usage.capacity.mixed",
36
+ "usage.capacity.best_fit_api", "usage.capacity.best_fit_output", "usage.capacity.best_fit_all",
34
37
  ];
35
38
  //# sourceMappingURL=i18n-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-keys.js","sourceRoot":"","sources":["../../src/usage/i18n-keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB;IACtG,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB;IAC7E,2BAA2B,EAAE,8BAA8B,EAAE,wBAAwB;IACrF,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,0BAA0B;IACjG,oBAAoB,EAAE,4BAA4B,EAAE,2BAA2B;IAC/E,4BAA4B,EAAE,yBAAyB,EAAE,0BAA0B;IACnF,gCAAgC,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B;IAC5G,4BAA4B,EAAE,4BAA4B,EAAE,8BAA8B;IAC1F,0BAA0B,EAAE,sBAAsB,EAAE,oBAAoB;IACxE,4BAA4B,EAAE,4BAA4B,EAAE,wBAAwB;IACpF,sBAAsB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB;IACxF,6BAA6B,EAAE,0BAA0B,EAAE,2BAA2B;IACtF,gCAAgC,EAAE,wCAAwC,EAAE,uCAAuC;IACnH,2BAA2B,EAAE,+BAA+B,EAAE,2BAA2B;IACzF,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB;IACxE,wBAAwB,EAAE,2BAA2B,EAAE,uBAAuB;IAC9E,0BAA0B,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,sCAAsC,EAAE,2CAA2C;IACtK,6BAA6B,EAAE,mCAAmC,EAAE,6BAA6B;IACjG,yBAAyB,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,0BAA0B;IACrJ,qBAAqB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,0BAA0B;IAC/F,kBAAkB,EAAE,0BAA0B,EAAE,8BAA8B;IAC9E,sCAAsC,EAAE,mCAAmC;IAC3E,kCAAkC,EAAE,iCAAiC;IACrE,0BAA0B,EAAE,mCAAmC,EAAE,qBAAqB;IACtF,4BAA4B,EAAE,+BAA+B,EAAE,+BAA+B;IAC9F,+BAA+B,EAAE,gCAAgC,EAAE,6BAA6B;IAChG,sCAAsC,EAAE,kCAAkC,EAAE,0BAA0B;CAC9F,CAAC"}
1
+ {"version":3,"file":"i18n-keys.js","sourceRoot":"","sources":["../../src/usage/i18n-keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB;IACtG,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB;IAC7E,2BAA2B,EAAE,8BAA8B,EAAE,wBAAwB;IACrF,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,0BAA0B;IACjG,oBAAoB,EAAE,4BAA4B,EAAE,2BAA2B;IAC/E,4BAA4B,EAAE,yBAAyB,EAAE,0BAA0B;IACnF,gCAAgC,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B;IAC5G,4BAA4B,EAAE,4BAA4B,EAAE,8BAA8B;IAC1F,0BAA0B,EAAE,sBAAsB,EAAE,oBAAoB;IACxE,4BAA4B,EAAE,4BAA4B,EAAE,wBAAwB;IACpF,sBAAsB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB;IACxF,6BAA6B,EAAE,0BAA0B,EAAE,2BAA2B;IACtF,gCAAgC,EAAE,wCAAwC,EAAE,uCAAuC;IACnH,2BAA2B,EAAE,+BAA+B,EAAE,2BAA2B;IACzF,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB;IACxE,wBAAwB,EAAE,2BAA2B,EAAE,uBAAuB;IAC9E,0BAA0B,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,sCAAsC,EAAE,2CAA2C;IACtK,6BAA6B,EAAE,mCAAmC,EAAE,6BAA6B;IACjG,yBAAyB,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,0BAA0B;IACrJ,qBAAqB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,0BAA0B;IAC/F,kBAAkB,EAAE,0BAA0B,EAAE,8BAA8B;IAC9E,sCAAsC,EAAE,mCAAmC;IAC3E,kCAAkC,EAAE,iCAAiC;IACrE,0BAA0B,EAAE,mCAAmC,EAAE,qBAAqB;IACtF,4BAA4B,EAAE,+BAA+B,EAAE,+BAA+B;IAC9F,+BAA+B,EAAE,gCAAgC,EAAE,6BAA6B;IAChG,sCAAsC,EAAE,kCAAkC,EAAE,0BAA0B;IACtG,4CAA4C;IAC5C,qBAAqB,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB;IACrI,6BAA6B,EAAE,gCAAgC,EAAE,6BAA6B;CACtF,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface ProfileSpan {
2
+ t: number;
3
+ profile: string;
4
+ }
5
+ export declare const PROFILE_TIMELINE_FILE = "codex-profile-timeline.json";
6
+ export declare const PROFILE_TIMELINE_MAX = 200;
7
+ export declare const PROFILE_UNRECORDED = "unrecorded";
8
+ /** The file's entries, checked and sorted (an unreadable or missing file: none). */
9
+ export declare function readProfileTimeline(path: string): Promise<ProfileSpan[]>;
10
+ /**
11
+ * A launch under `profile` at `t`. One write at a time per file; nothing is added when the last entry already names the
12
+ * same profile. Never throws: a lost entry leaves that run's turns under the previous entry's profile (or unrecorded).
13
+ */
14
+ export declare function recordProfileLaunch(path: string, profile: string, t?: number): Promise<void>;
15
+ /** The profile in effect at `t`: the latest entry at or before it, else "unrecorded". */
16
+ export declare function profileAt(spans: readonly ProfileSpan[], t: number): string;