@ours.network/fleet 1.2.0-nightly.9 → 2.0.1

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 (429) hide show
  1. package/README.md +280 -68
  2. package/dist/account-origin.d.ts +5 -0
  3. package/dist/account-origin.js +31 -0
  4. package/dist/agent-ours/bridge.js +26 -9
  5. package/dist/agent-ours/correspondence.d.ts +10 -0
  6. package/dist/agent-ours/correspondence.js +1 -0
  7. package/dist/agent-ours/file-rpc.d.ts +12 -0
  8. package/dist/agent-ours/file-rpc.js +18 -4
  9. package/dist/agent-ours/harness.js +9 -1
  10. package/dist/agent-ours/mcp-endpoint.d.ts +22 -0
  11. package/dist/agent-ours/mcp-endpoint.js +101 -25
  12. package/dist/agent-ours/runtime.d.ts +9 -1
  13. package/dist/agent-ours/runtime.js +50 -2
  14. package/dist/agent-ours/service.d.ts +27 -1
  15. package/dist/agent-ours/service.js +107 -13
  16. package/dist/application/codex-models.d.ts +15 -0
  17. package/dist/application/codex-models.js +56 -0
  18. package/dist/application/conversation-history.d.ts +31 -0
  19. package/dist/application/conversation-history.js +339 -0
  20. package/dist/application/conversation-role-observer.d.ts +62 -0
  21. package/dist/application/conversation-role-observer.js +206 -0
  22. package/dist/application/fleet-query-service.d.ts +1 -1
  23. package/dist/application/fleet-query-service.js +3 -3
  24. package/dist/application/log-service.js +8 -8
  25. package/dist/application/model-catalog.d.ts +1 -1
  26. package/dist/application/model-catalog.js +5 -2
  27. package/dist/application/preset-provenance.d.ts +19 -0
  28. package/dist/application/preset-provenance.js +59 -0
  29. package/dist/application/resource-observer.d.ts +43 -0
  30. package/dist/application/resource-observer.js +323 -0
  31. package/dist/application/role-creation-service.js +3 -2
  32. package/dist/application/role-removal-service.js +17 -3
  33. package/dist/application/role-repository.d.ts +3 -1
  34. package/dist/application/role-repository.js +89 -54
  35. package/dist/application/room-layout-definitions.d.ts +45 -0
  36. package/dist/application/room-layout-definitions.js +130 -0
  37. package/dist/application/session-control.d.ts +63 -17
  38. package/dist/application/session-control.js +221 -23
  39. package/dist/application/supervisor-ours-tools.js +5 -11
  40. package/dist/application/task-layouts.d.ts +91 -0
  41. package/dist/application/task-layouts.js +261 -0
  42. package/dist/application/task-room-service.d.ts +101 -3
  43. package/dist/application/task-room-service.js +286 -33
  44. package/dist/application/types.d.ts +2 -0
  45. package/dist/atomic-file.d.ts +34 -1
  46. package/dist/atomic-file.js +161 -18
  47. package/dist/briefing.d.ts +5 -1
  48. package/dist/briefing.js +138 -31
  49. package/dist/build-info.json +10 -5
  50. package/dist/capabilities.d.ts +9 -1
  51. package/dist/capabilities.js +13 -0
  52. package/dist/cli.js +391 -38
  53. package/dist/client-profile.d.ts +5 -17
  54. package/dist/client-profile.js +4 -127
  55. package/dist/config.d.ts +45 -0
  56. package/dist/config.js +57 -6
  57. package/dist/creation.d.ts +1 -1
  58. package/dist/creation.js +4 -4
  59. package/dist/daemon-recovery.d.ts +14 -9
  60. package/dist/daemon-recovery.js +124 -115
  61. package/dist/docs.d.ts +1 -1
  62. package/dist/docs.js +402 -20
  63. package/dist/doctor.d.ts +4 -1
  64. package/dist/doctor.js +75 -60
  65. package/dist/erased-resources.d.ts +9 -0
  66. package/dist/erased-resources.js +87 -0
  67. package/dist/file-delivery/reader.d.ts +15 -0
  68. package/dist/file-delivery/reader.js +63 -0
  69. package/dist/file-delivery/store.d.ts +15 -0
  70. package/dist/file-delivery/store.js +124 -0
  71. package/dist/file-delivery/types.d.ts +19 -0
  72. package/dist/file-delivery/types.js +1 -0
  73. package/dist/fleet-command-audit.d.ts +13 -0
  74. package/dist/fleet-command-audit.js +31 -9
  75. package/dist/harness/agent-session.d.ts +4 -0
  76. package/dist/harness/claude-code-session.js +1 -1
  77. package/dist/harness/claude-code.js +21 -11
  78. package/dist/harness/claude-runtime.d.ts +12 -0
  79. package/dist/harness/claude-runtime.js +43 -0
  80. package/dist/harness/codex-app-server-proxy.d.ts +4 -1
  81. package/dist/harness/codex-app-server-proxy.js +41 -5
  82. package/dist/harness/codex-reasoning.d.ts +5 -0
  83. package/dist/harness/codex-reasoning.js +12 -0
  84. package/dist/harness/codex-runtime.d.ts +11 -1
  85. package/dist/harness/codex-runtime.js +31 -4
  86. package/dist/harness/codex-session.js +2 -2
  87. package/dist/harness/codex.js +24 -12
  88. package/dist/init-wizard.d.ts +2 -0
  89. package/dist/init-wizard.js +38 -19
  90. package/dist/isolation/policy.js +6 -1
  91. package/dist/isolation/types.d.ts +5 -0
  92. package/dist/managed-cli.d.ts +253 -0
  93. package/dist/managed-cli.js +923 -0
  94. package/dist/managed-recovery.d.ts +13 -0
  95. package/dist/managed-recovery.js +31 -0
  96. package/dist/minimal-setup.d.ts +2 -0
  97. package/dist/minimal-setup.js +44 -0
  98. package/dist/monitor.d.ts +9 -34
  99. package/dist/monitor.js +90 -153
  100. package/dist/notifications/fleet-producer.d.ts +31 -0
  101. package/dist/notifications/fleet-producer.js +351 -0
  102. package/dist/notifications/outbox.d.ts +59 -0
  103. package/dist/notifications/outbox.js +199 -0
  104. package/dist/notifications/target-cleanup.d.ts +16 -0
  105. package/dist/notifications/target-cleanup.js +75 -0
  106. package/dist/notifications/task-producer.d.ts +20 -0
  107. package/dist/notifications/task-producer.js +100 -0
  108. package/dist/ops.d.ts +2 -0
  109. package/dist/ops.js +20 -3
  110. package/dist/owner-channel/channel.js +17 -6
  111. package/dist/owner-channel/commands.d.ts +4 -0
  112. package/dist/owner-channel/commands.js +8 -0
  113. package/dist/owner-channel/lifecycle-outbox.js +4 -3
  114. package/dist/owner-channel/ours-client.js +2 -17
  115. package/dist/paths.d.ts +5 -0
  116. package/dist/paths.js +5 -0
  117. package/dist/preset-migration.js +55 -0
  118. package/dist/process-incarnation.d.ts +23 -0
  119. package/dist/process-incarnation.js +42 -0
  120. package/dist/reminders/manager.d.ts +75 -0
  121. package/dist/reminders/manager.js +278 -0
  122. package/dist/reminders/runtime.d.ts +27 -0
  123. package/dist/reminders/runtime.js +32 -0
  124. package/dist/reminders/schedule.d.ts +37 -0
  125. package/dist/reminders/schedule.js +104 -0
  126. package/dist/reminders/store.d.ts +341 -0
  127. package/dist/reminders/store.js +762 -0
  128. package/dist/reminders/tools.d.ts +20 -0
  129. package/dist/reminders/tools.js +114 -0
  130. package/dist/resolved-plan.js +1 -0
  131. package/dist/rooms-tasks/add-member.d.ts +48 -0
  132. package/dist/rooms-tasks/add-member.js +84 -0
  133. package/dist/rooms-tasks/archived-absence.d.ts +4 -0
  134. package/dist/rooms-tasks/archived-absence.js +11 -0
  135. package/dist/rooms-tasks/cli.js +182 -5
  136. package/dist/rooms-tasks/close.d.ts +5 -2
  137. package/dist/rooms-tasks/close.js +224 -36
  138. package/dist/rooms-tasks/config.d.ts +1 -1
  139. package/dist/rooms-tasks/config.js +11 -4
  140. package/dist/rooms-tasks/cowork-adapter.d.ts +12 -5
  141. package/dist/rooms-tasks/cowork-adapter.js +15 -121
  142. package/dist/rooms-tasks/cowork-http.js +56 -6
  143. package/dist/rooms-tasks/deletion.d.ts +1 -1
  144. package/dist/rooms-tasks/deletion.js +66 -10
  145. package/dist/rooms-tasks/erasure.d.ts +6 -0
  146. package/dist/rooms-tasks/erasure.js +173 -0
  147. package/dist/rooms-tasks/external-worker.d.ts +1 -1
  148. package/dist/rooms-tasks/external-worker.js +3 -4
  149. package/dist/rooms-tasks/layout-binding-client.d.ts +11 -0
  150. package/dist/rooms-tasks/layout-binding-client.js +56 -0
  151. package/dist/rooms-tasks/layout-binding-grants.d.ts +21 -0
  152. package/dist/rooms-tasks/layout-binding-grants.js +128 -0
  153. package/dist/rooms-tasks/layout-cli.d.ts +4 -0
  154. package/dist/rooms-tasks/layout-cli.js +107 -0
  155. package/dist/rooms-tasks/layout-config.d.ts +11 -0
  156. package/dist/rooms-tasks/layout-config.js +89 -0
  157. package/dist/rooms-tasks/layout-control.d.ts +21 -0
  158. package/dist/rooms-tasks/layout-control.js +52 -0
  159. package/dist/rooms-tasks/layout-member-retirement.d.ts +10 -0
  160. package/dist/rooms-tasks/layout-member-retirement.js +90 -0
  161. package/dist/rooms-tasks/layout-service.d.ts +43 -0
  162. package/dist/rooms-tasks/layout-service.js +203 -0
  163. package/dist/rooms-tasks/layout.d.ts +121 -0
  164. package/dist/rooms-tasks/layout.js +286 -0
  165. package/dist/rooms-tasks/legacy-task-member.d.ts +19 -0
  166. package/dist/rooms-tasks/legacy-task-member.js +116 -0
  167. package/dist/rooms-tasks/live-readiness.d.ts +18 -0
  168. package/dist/rooms-tasks/live-readiness.js +85 -0
  169. package/dist/rooms-tasks/member-ownership.d.ts +5 -0
  170. package/dist/rooms-tasks/member-ownership.js +40 -0
  171. package/dist/rooms-tasks/member-startup.d.ts +1 -0
  172. package/dist/rooms-tasks/member-startup.js +2 -0
  173. package/dist/rooms-tasks/provision.d.ts +3 -0
  174. package/dist/rooms-tasks/provision.js +101 -49
  175. package/dist/rooms-tasks/recovery.d.ts +19 -0
  176. package/dist/rooms-tasks/recovery.js +110 -0
  177. package/dist/rooms-tasks/room-state.d.ts +4 -2
  178. package/dist/rooms-tasks/room-state.js +47 -8
  179. package/dist/rooms-tasks/task-review.d.ts +113 -0
  180. package/dist/rooms-tasks/task-review.js +561 -0
  181. package/dist/rooms-tasks/task-service-retirement.d.ts +11 -0
  182. package/dist/rooms-tasks/task-service-retirement.js +21 -0
  183. package/dist/rooms-tasks/task-state.d.ts +51 -5
  184. package/dist/rooms-tasks/task-state.js +358 -50
  185. package/dist/rooms-tasks/task-tools.d.ts +35 -0
  186. package/dist/rooms-tasks/task-tools.js +134 -0
  187. package/dist/rooms-tasks/types.d.ts +78 -0
  188. package/dist/rooms-tasks/workspace-artifacts.d.ts +6 -0
  189. package/dist/rooms-tasks/workspace-artifacts.js +93 -0
  190. package/dist/rooms-tasks/workspace.d.ts +35 -0
  191. package/dist/rooms-tasks/workspace.js +325 -0
  192. package/dist/runner.d.ts +23 -4
  193. package/dist/runner.js +409 -61
  194. package/dist/session/acp.d.ts +75 -2
  195. package/dist/session/acp.js +345 -82
  196. package/dist/session/arbiter.d.ts +98 -0
  197. package/dist/session/arbiter.js +272 -3
  198. package/dist/session/codex-app-server.d.ts +45 -1
  199. package/dist/session/codex-app-server.js +225 -32
  200. package/dist/session/control.d.ts +17 -3
  201. package/dist/session/control.js +219 -23
  202. package/dist/session/conversation-normalizer.d.ts +2 -1
  203. package/dist/session/conversation-normalizer.js +1 -1
  204. package/dist/session/conversation-observation.d.ts +25 -0
  205. package/dist/session/conversation-observation.js +100 -0
  206. package/dist/session/conversation-replay.d.ts +50 -0
  207. package/dist/session/conversation-replay.js +203 -0
  208. package/dist/session/conversation-store.d.ts +15 -1
  209. package/dist/session/conversation-store.js +213 -26
  210. package/dist/session/conversation-types.d.ts +57 -4
  211. package/dist/session/prompt-batch.d.ts +79 -0
  212. package/dist/session/prompt-batch.js +120 -0
  213. package/dist/session/task-notice.d.ts +14 -0
  214. package/dist/session/task-notice.js +13 -0
  215. package/dist/session/types.d.ts +42 -1
  216. package/dist/setup-tunnel-preflight.d.ts +34 -0
  217. package/dist/setup-tunnel-preflight.js +62 -0
  218. package/dist/socket-path.d.ts +2 -0
  219. package/dist/socket-path.js +22 -0
  220. package/dist/spawn.d.ts +5 -1
  221. package/dist/spawn.js +40 -4
  222. package/dist/startup-prompt.d.ts +15 -0
  223. package/dist/startup-prompt.js +71 -0
  224. package/dist/startup-readiness.d.ts +20 -1
  225. package/dist/startup-readiness.js +66 -3
  226. package/dist/startup-telemetry.d.ts +16 -0
  227. package/dist/startup-telemetry.js +46 -0
  228. package/dist/subscriptions/cli.d.ts +91 -0
  229. package/dist/subscriptions/cli.js +223 -0
  230. package/dist/subscriptions/launch.d.ts +37 -0
  231. package/dist/subscriptions/launch.js +93 -0
  232. package/dist/subscriptions/login.d.ts +77 -0
  233. package/dist/subscriptions/login.js +215 -0
  234. package/dist/subscriptions/observed.d.ts +7 -0
  235. package/dist/subscriptions/observed.js +44 -0
  236. package/dist/subscriptions/probe.d.ts +10 -0
  237. package/dist/subscriptions/probe.js +73 -0
  238. package/dist/subscriptions/service.d.ts +102 -0
  239. package/dist/subscriptions/service.js +364 -0
  240. package/dist/subscriptions/store.d.ts +71 -0
  241. package/dist/subscriptions/store.js +143 -0
  242. package/dist/supervisor/adoption.d.ts +8 -0
  243. package/dist/supervisor/adoption.js +78 -0
  244. package/dist/supervisor/catalog.d.ts +62 -0
  245. package/dist/supervisor/catalog.js +254 -0
  246. package/dist/supervisor/fleet.d.ts +8 -0
  247. package/dist/supervisor/fleet.js +89 -0
  248. package/dist/supervisor/index.js +3 -6
  249. package/dist/supervisor/launchd.d.ts +1 -1
  250. package/dist/supervisor/launchd.js +26 -13
  251. package/dist/supervisor/legacy.d.ts +35 -0
  252. package/dist/supervisor/legacy.js +524 -0
  253. package/dist/supervisor/manager.d.ts +15 -0
  254. package/dist/supervisor/manager.js +270 -0
  255. package/dist/supervisor/registration-refresh.d.ts +45 -0
  256. package/dist/supervisor/registration-refresh.js +266 -0
  257. package/dist/supervisor/scope.d.ts +4 -0
  258. package/dist/supervisor/scope.js +10 -0
  259. package/dist/supervisor/systemd.d.ts +2 -2
  260. package/dist/supervisor/systemd.js +18 -37
  261. package/dist/task-supervision.d.ts +9 -0
  262. package/dist/task-supervision.js +145 -0
  263. package/dist/temp-idle.d.ts +17 -0
  264. package/dist/temp-idle.js +42 -0
  265. package/dist/temp-lifecycle.d.ts +23 -8
  266. package/dist/temp-lifecycle.js +123 -66
  267. package/dist/temp-supervisor-recovery.d.ts +1 -1
  268. package/dist/temp-supervisor-recovery.js +2 -2
  269. package/dist/tunnel-setup-completion.d.ts +7 -0
  270. package/dist/tunnel-setup-completion.js +13 -0
  271. package/dist/tunnel-setup-input.d.ts +19 -0
  272. package/dist/tunnel-setup-input.js +130 -0
  273. package/dist/watchdog/query.d.ts +3 -1
  274. package/dist/watchdog/query.js +2 -1
  275. package/dist/web/agent-attachments.d.ts +29 -0
  276. package/dist/web/agent-attachments.js +162 -0
  277. package/dist/web/auth.d.ts +65 -2
  278. package/dist/web/auth.js +201 -11
  279. package/dist/web/available-port.d.ts +2 -0
  280. package/dist/web/available-port.js +23 -0
  281. package/dist/web/control.d.ts +3 -3
  282. package/dist/web/control.js +10 -8
  283. package/dist/web/conversation-stream-codec.d.ts +23 -0
  284. package/dist/web/conversation-stream-codec.js +110 -0
  285. package/dist/web/conversation-stream.d.ts +26 -0
  286. package/dist/web/conversation-stream.js +239 -0
  287. package/dist/web/events.d.ts +2 -0
  288. package/dist/web/events.js +9 -0
  289. package/dist/web/fleet-config-service.d.ts +7 -1
  290. package/dist/web/fleet-config-service.js +61 -16
  291. package/dist/web/prefix-gateway.d.ts +32 -0
  292. package/dist/web/prefix-gateway.js +248 -0
  293. package/dist/web/resource-views.d.ts +138 -0
  294. package/dist/web/resource-views.js +519 -0
  295. package/dist/web/runtime.d.ts +3 -1
  296. package/dist/web/runtime.js +132 -34
  297. package/dist/web/server.d.ts +19 -0
  298. package/dist/web/server.js +893 -71
  299. package/dist/web/service.d.ts +11 -2
  300. package/dist/web/service.js +30 -4
  301. package/dist/web/workspace-devices.d.ts +107 -0
  302. package/dist/web/workspace-devices.js +277 -0
  303. package/dist/web/workspace-tunnel.d.ts +1 -0
  304. package/dist/web/workspace-tunnel.js +34 -0
  305. package/dist/workspace-enrollment.d.ts +83 -0
  306. package/dist/workspace-enrollment.js +605 -0
  307. package/dist/workspace-replacement.d.ts +66 -0
  308. package/dist/workspace-replacement.js +238 -0
  309. package/docs/acp-files.md +146 -0
  310. package/docs/conversation-stream.md +216 -0
  311. package/docs/fleet-migration.md +54 -0
  312. package/docs/live-voice.md +13 -0
  313. package/docs/room-layouts.md +227 -0
  314. package/docs/self-reminders.md +374 -0
  315. package/docs/task-progress-review.md +143 -0
  316. package/docs/task-workspaces.md +225 -0
  317. package/docs/validation/managed-cli-permissions.md +421 -0
  318. package/examples/room-layouts/fresh.yaml +27 -0
  319. package/examples/room-layouts/scoped.yaml +21 -0
  320. package/examples/room-layouts/shared.yaml +19 -0
  321. package/package.json +25 -20
  322. package/presets/README.md +78 -0
  323. package/presets/brain-catalog.json +8 -2
  324. package/presets/fleet/agent_templates/Critic.yaml +1 -1
  325. package/presets/fleet/agent_templates/Developer.yaml +1 -1
  326. package/presets/fleet/agent_templates/Engineer.yaml +5 -0
  327. package/presets/fleet/agent_templates/LocalCoordinator.yaml +6 -3
  328. package/presets/fleet/agents/FleetCoordinator.yaml +1 -1
  329. package/presets/fleet/brains/claude-fable-5-1-high.yaml +5 -0
  330. package/presets/fleet/brains/claude-fable-5-1-low.yaml +5 -0
  331. package/presets/fleet/brains/claude-fable-5-1-max.yaml +5 -0
  332. package/presets/fleet/brains/claude-fable-5-1-medium.yaml +5 -0
  333. package/presets/fleet/brains/claude-fable-5-1-xhigh.yaml +5 -0
  334. package/presets/fleet/brains/claude-fable-5-high.yaml +1 -1
  335. package/presets/fleet/brains/claude-fable-5-low.yaml +1 -1
  336. package/presets/fleet/brains/claude-fable-5-max.yaml +1 -1
  337. package/presets/fleet/brains/claude-fable-5-medium.yaml +1 -1
  338. package/presets/fleet/brains/claude-fable-5-xhigh.yaml +1 -1
  339. package/presets/fleet/brains/claude-haiku-4-5-20251001-default.yaml +4 -0
  340. package/presets/fleet/brains/claude-opus-5-5-high.yaml +5 -0
  341. package/presets/fleet/brains/claude-opus-5-5-low.yaml +5 -0
  342. package/presets/fleet/brains/claude-opus-5-5-max.yaml +5 -0
  343. package/presets/fleet/brains/claude-opus-5-5-medium.yaml +5 -0
  344. package/presets/fleet/brains/claude-opus-5-5-xhigh.yaml +5 -0
  345. package/presets/fleet/brains/claude-opus-5-high.yaml +1 -1
  346. package/presets/fleet/brains/claude-opus-5-low.yaml +1 -1
  347. package/presets/fleet/brains/claude-opus-5-max.yaml +1 -1
  348. package/presets/fleet/brains/claude-opus-5-medium.yaml +1 -1
  349. package/presets/fleet/brains/claude-opus-5-xhigh.yaml +1 -1
  350. package/presets/fleet/brains/claude-sonnet-5-high.yaml +1 -1
  351. package/presets/fleet/brains/claude-sonnet-5-low.yaml +1 -1
  352. package/presets/fleet/brains/claude-sonnet-5-max.yaml +1 -1
  353. package/presets/fleet/brains/claude-sonnet-5-medium.yaml +1 -1
  354. package/presets/fleet/brains/claude-sonnet-5-xhigh.yaml +1 -1
  355. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-high.yaml +1 -1
  356. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-low.yaml +1 -1
  357. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-medium.yaml +1 -1
  358. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-xhigh.yaml +1 -1
  359. package/presets/fleet/brains/codex-gpt-5-4-high.yaml +1 -1
  360. package/presets/fleet/brains/codex-gpt-5-4-low.yaml +1 -1
  361. package/presets/fleet/brains/codex-gpt-5-4-medium.yaml +1 -1
  362. package/presets/fleet/brains/codex-gpt-5-4-mini-high.yaml +1 -1
  363. package/presets/fleet/brains/codex-gpt-5-4-mini-low.yaml +1 -1
  364. package/presets/fleet/brains/codex-gpt-5-4-mini-medium.yaml +1 -1
  365. package/presets/fleet/brains/codex-gpt-5-4-mini-xhigh.yaml +1 -1
  366. package/presets/fleet/brains/codex-gpt-5-4-xhigh.yaml +1 -1
  367. package/presets/fleet/brains/codex-gpt-5-5-high.yaml +1 -1
  368. package/presets/fleet/brains/codex-gpt-5-5-low.yaml +1 -1
  369. package/presets/fleet/brains/codex-gpt-5-5-medium.yaml +1 -1
  370. package/presets/fleet/brains/codex-gpt-5-5-xhigh.yaml +1 -1
  371. package/presets/fleet/brains/codex-gpt-5-6-luna-high.yaml +1 -1
  372. package/presets/fleet/brains/codex-gpt-5-6-luna-low.yaml +1 -1
  373. package/presets/fleet/brains/codex-gpt-5-6-luna-max.yaml +1 -1
  374. package/presets/fleet/brains/codex-gpt-5-6-luna-medium.yaml +1 -1
  375. package/presets/fleet/brains/codex-gpt-5-6-luna-xhigh.yaml +1 -1
  376. package/presets/fleet/brains/codex-gpt-5-6-sol-high.yaml +1 -1
  377. package/presets/fleet/brains/codex-gpt-5-6-sol-low.yaml +1 -1
  378. package/presets/fleet/brains/codex-gpt-5-6-sol-max.yaml +1 -1
  379. package/presets/fleet/brains/codex-gpt-5-6-sol-medium.yaml +1 -1
  380. package/presets/fleet/brains/codex-gpt-5-6-sol-ultra.yaml +1 -1
  381. package/presets/fleet/brains/codex-gpt-5-6-sol-xhigh.yaml +1 -1
  382. package/presets/fleet/brains/codex-gpt-5-6-terra-high.yaml +1 -1
  383. package/presets/fleet/brains/codex-gpt-5-6-terra-low.yaml +1 -1
  384. package/presets/fleet/brains/codex-gpt-5-6-terra-max.yaml +1 -1
  385. package/presets/fleet/brains/codex-gpt-5-6-terra-medium.yaml +1 -1
  386. package/presets/fleet/brains/codex-gpt-5-6-terra-ultra.yaml +1 -1
  387. package/presets/fleet/brains/codex-gpt-5-6-terra-xhigh.yaml +1 -1
  388. package/presets/fleet/brains/codex-gpt-6-1-sol-high.yaml +5 -0
  389. package/presets/fleet/brains/codex-gpt-6-1-sol-low.yaml +5 -0
  390. package/presets/fleet/brains/codex-gpt-6-1-sol-max.yaml +5 -0
  391. package/presets/fleet/brains/codex-gpt-6-1-sol-medium.yaml +5 -0
  392. package/presets/fleet/brains/codex-gpt-6-1-sol-ultra.yaml +5 -0
  393. package/presets/fleet/brains/codex-gpt-6-1-sol-xhigh.yaml +5 -0
  394. package/presets/fleet/brains/codex-gpt-6-astra-high.yaml +1 -1
  395. package/presets/fleet/brains/codex-gpt-6-astra-low.yaml +1 -1
  396. package/presets/fleet/brains/codex-gpt-6-astra-max.yaml +1 -1
  397. package/presets/fleet/brains/codex-gpt-6-astra-medium.yaml +1 -1
  398. package/presets/fleet/brains/codex-gpt-6-astra-ultra.yaml +1 -1
  399. package/presets/fleet/brains/codex-gpt-6-astra-xhigh.yaml +1 -1
  400. package/presets/fleet/brains/codex-gpt-6-luna-high.yaml +5 -0
  401. package/presets/fleet/brains/codex-gpt-6-luna-low.yaml +5 -0
  402. package/presets/fleet/brains/codex-gpt-6-luna-max.yaml +5 -0
  403. package/presets/fleet/brains/codex-gpt-6-luna-medium.yaml +5 -0
  404. package/presets/fleet/brains/codex-gpt-6-luna-xhigh.yaml +5 -0
  405. package/presets/fleet/brains/codex-gpt-6-sol-high.yaml +5 -0
  406. package/presets/fleet/brains/codex-gpt-6-sol-low.yaml +5 -0
  407. package/presets/fleet/brains/codex-gpt-6-sol-max.yaml +5 -0
  408. package/presets/fleet/brains/codex-gpt-6-sol-medium.yaml +5 -0
  409. package/presets/fleet/brains/codex-gpt-6-sol-ultra.yaml +5 -0
  410. package/presets/fleet/brains/codex-gpt-6-sol-xhigh.yaml +5 -0
  411. package/presets/fleet/roles/Coordinator.yaml +21 -13
  412. package/presets/fleet/roles/Critic.yaml +24 -0
  413. package/presets/fleet/roles/Developer.yaml +32 -0
  414. package/presets/fleet/roles/Engineer.yaml +72 -0
  415. package/presets/fleet/roles/LocalCoordinator.yaml +17 -0
  416. package/presets/fleet/room_layouts/engineering.yaml +25 -0
  417. package/presets/fleet/room_layouts/pair.yaml +24 -0
  418. package/presets/fleet/room_layouts/single.yaml +17 -0
  419. package/presets/fleet/room_layouts/team.yaml +30 -0
  420. package/presets/fleet/room_templates/engineering.yaml +19 -0
  421. package/presets/manifest.json +2 -2
  422. package/dist/web-app/assets/index-59GF-gsZ.css +0 -1
  423. package/dist/web-app/assets/index-C0h3ALvs.js +0 -10
  424. package/dist/web-app/icons/ours-fleet-maskable.svg +0 -4
  425. package/dist/web-app/icons/ours-fleet.svg +0 -4
  426. package/dist/web-app/index.html +0 -17
  427. package/dist/web-app/manifest.webmanifest +0 -15
  428. package/dist/web-app/offline.html +0 -18
  429. package/dist/web-app/sw.js +0 -51
@@ -0,0 +1,110 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { parse } from 'yaml';
4
+ import { withFileLock } from '../atomic-file.js';
5
+ import { agentDir, stateRoot } from '../paths.js';
6
+ import { readProvenance } from '../creation.js';
7
+ import { readTempSupervisor, tempSupervisorLiveness, requestedTempStopReason } from '../temp-lifecycle.js';
8
+ import { taskSupervisorMayRun } from '../task-supervision.js';
9
+ import { resumeTaskSupervisor } from '../spawn.js';
10
+ import { resetRestartLedger, readRestartLedger } from '../runner.js';
11
+ import { readRoomReadiness } from '../agent-ours/service.js';
12
+ import { getTask } from './task-state.js';
13
+ import { getRoomRecord } from './room-state.js';
14
+ import { roomCloseLockPath, CLOSE_LOCK_STALE_MS } from './close.js';
15
+ import { taskOperationLockPath, TASK_OPERATION_LOCK_STALE_MS } from './terminal.js';
16
+ import { adoptLegacyTaskMember } from './legacy-task-member.js';
17
+ /** Explicit supported recovery; never creates an identity, seat, invite, or session ID. */
18
+ export async function recoverTaskMembers(input) {
19
+ const deps = input.deps ?? {};
20
+ return withFileLock(taskOperationLockPath(input.taskId), async () => {
21
+ const task = getTask(input.taskId);
22
+ if (!['provisioning', 'active', 'review'].includes(task.state) || task.deletion || task.terminal_intent)
23
+ throw Error('Task is not open for member recovery');
24
+ const recover = async (name, roomId) => {
25
+ const dir = agentDir(name, true), metadata = readTempSupervisor(dir);
26
+ if (!metadata || metadata.role !== name)
27
+ throw Error('Exact supervisor state missing; explicit reconciliation required');
28
+ if (requestedTempStopReason(dir))
29
+ throw Error('Task member has an explicit retirement request');
30
+ const live = await (deps.liveness ?? tempSupervisorLiveness)(dir);
31
+ if (live === 'unknown')
32
+ throw Error('Supervisor liveness unknown; refusing recovery');
33
+ if (!metadata.taskOwner) {
34
+ if (live === 'running')
35
+ return { name, status: 'migration_pending' };
36
+ if (!roomId)
37
+ throw Error('Legacy layout member requires explicit reconciliation');
38
+ if (deps.adopt)
39
+ await deps.adopt(input.taskId, roomId, name);
40
+ else {
41
+ const room = getRoomRecord(roomId);
42
+ const seat = room.member_seats.find(member => member.role_name === name);
43
+ const adopted = await adoptLegacyTaskMember({ taskId: input.taskId, roomId,
44
+ roomIdentityCid: room.room_identity_cid, creationActionId: seat.launch.action_id }, name);
45
+ if (adopted === 'running-legacy')
46
+ return { name, status: 'migration_pending' };
47
+ }
48
+ }
49
+ if (!taskSupervisorMayRun(name))
50
+ throw Error('Task member is retired');
51
+ const reset = readRestartLedger(dir).circuit === 'open';
52
+ if (reset)
53
+ resetRestartLedger(dir);
54
+ if (live === 'running') {
55
+ return { name, status: reset ? 'recovery_reset' : 'running' };
56
+ }
57
+ await (deps.resume ?? resumeTaskSupervisor)(name, input.binPath);
58
+ return { name, status: 'resumed' };
59
+ };
60
+ if (task.layout) {
61
+ const path = join(stateRoot(), 'layouts', `${task.layout.run_id}.json`);
62
+ return withFileLock(path + '.lock', async () => {
63
+ const state = JSON.parse(readFileSync(path, 'utf8'));
64
+ if (state.closed || state.closing || state.uncertain)
65
+ throw Error('Layout requires reconciliation before recovery');
66
+ const result = [];
67
+ for (const member of Object.values(state.participants)) {
68
+ if (!member.owned || member.retired)
69
+ continue;
70
+ if (!member.instance?.agent || member.instance.remote)
71
+ throw Error('Layout owned instance evidence missing');
72
+ result.push(await recover(member.instance.agent));
73
+ }
74
+ return result;
75
+ });
76
+ }
77
+ if (!task.room_id || !input.cowork)
78
+ throw Error('Task room required for member recovery');
79
+ return withFileLock(roomCloseLockPath(task.room_id), async () => {
80
+ const room = getRoomRecord(task.room_id);
81
+ if (!room || room.task_id !== task.task_id || room.close || !['active', 'provisioning'].includes(room.state)
82
+ || !room.room_identity_cid || room.room_identity_cid !== task.room_identity_cid)
83
+ throw Error('Exact open task room required');
84
+ const remote = await input.cowork.getRoom(room.room_id);
85
+ if (!remote || remote.identity_cid !== room.room_identity_cid || remote.state !== 'active')
86
+ throw Error('Exact active Cowork room required');
87
+ // Validate the complete admitted roster before any member is resumed.
88
+ for (const seat of room.member_seats) {
89
+ const dir = agentDir(seat.role_name, true), metadata = readTempSupervisor(dir), provenance = readProvenance(dir);
90
+ const role = parse(readFileSync(join(dir, 'role.yaml'), 'utf8')), startup = role.roomMemberStartup;
91
+ const found = remote.seats.filter(item => item.display_name === seat.role_name && item.seat_state !== 'removed');
92
+ const ready = readRoomReadiness(room.room_identity_cid, seat.role_name);
93
+ if (seat.retirement || !seat.identity_cid || !seat.invite_id || !seat.launch?.action_id || !seat.launch.launch_id
94
+ || metadata?.role !== seat.role_name || metadata.launchId !== seat.launch.launch_id
95
+ || provenance?.role !== seat.role_name || provenance.creationActionId !== seat.launch.action_id
96
+ || role.identity !== seat.role_name || startup?.identity_name !== seat.role_name
97
+ || startup.room_id !== room.room_id || startup.room_identity_cid !== room.room_identity_cid
98
+ || startup.invite_id !== seat.invite_id || startup.role !== seat.cowork_role
99
+ || !ready || ready.cid !== seat.identity_cid || ready.room !== room.room_id || ready.invite !== seat.invite_id
100
+ || found.length !== 1 || found[0].identity_cid !== seat.identity_cid || found[0].invite_id !== seat.invite_id
101
+ || found[0].role !== seat.cowork_role || found[0].seat_state !== 'active')
102
+ throw Error(`Exact admitted member proof missing: ${seat.role_name}`);
103
+ }
104
+ const result = [];
105
+ for (const seat of room.member_seats)
106
+ result.push(await recover(seat.role_name, room.room_id));
107
+ return result;
108
+ }, {}, CLOSE_LOCK_STALE_MS);
109
+ }, {}, TASK_OPERATION_LOCK_STALE_MS);
110
+ }
@@ -22,7 +22,7 @@ export declare function advanceSaga(id: string, phase: SagaPhase, stepIndex?: nu
22
22
  export declare function setSagaError(id: string, error: string, hint?: string, detail?: ProvisioningDetail): RoomOrchestrationRecord;
23
23
  export declare function setRoomIdentity(id: string, roomIdentityCid: string): RoomOrchestrationRecord;
24
24
  export declare function setOwnerSeat(id: string, ownerSeatCid: string, inviteFingerprint: string): RoomOrchestrationRecord;
25
- export declare function updateMemberSeats(id: string, seats: RoomMemberSeat[]): RoomOrchestrationRecord;
25
+ export declare function updateMemberSeats(id: string, seats: RoomMemberSeat[], additionalTemplate?: import('./types.js').TemplateSnapshot): RoomOrchestrationRecord;
26
26
  export declare function updateRoomRoleBriefing(id: string, role: string, definition: RoomRoleBriefingDefinition): RoomOrchestrationRecord;
27
27
  export declare function updateRoomHistoryCursor(id: string, cursor: number): RoomOrchestrationRecord;
28
28
  export declare function updateMemberStartup(id: string, roleName: string, update: {
@@ -31,6 +31,8 @@ export declare function updateMemberStartup(id: string, roleName: string, update
31
31
  export declare function activateRoom(id: string): RoomOrchestrationRecord;
32
32
  export declare function closeRoom(id: string): RoomOrchestrationRecord;
33
33
  export declare function beginRoomClose(id: string): RoomOrchestrationRecord;
34
- export declare function advanceMemberRetirement(id: string, roleName: string, phase: MemberRetirementPhase, launchId: string, archivePath?: string): RoomOrchestrationRecord;
34
+ export declare function advanceMemberRetirement(id: string, roleName: string, phase: MemberRetirementPhase, launchId: string, archivePath?: string, absenceVerified?: boolean): RoomOrchestrationRecord;
35
35
  export declare function advanceRoomClose(id: string, phase: RoomClosePhase): RoomOrchestrationRecord;
36
36
  export declare function setRoomCloseError(id: string, error: string, recoveryHint: string): RoomOrchestrationRecord;
37
+ /** Settlement-only binding recovery; never publishes a seat or changes a launch. */
38
+ export declare function recordRetirementMemberCids(id: string, recovered: ReadonlyArray<RoomMemberSeat>): RoomOrchestrationRecord;
@@ -2,17 +2,28 @@ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync } from 'node:f
2
2
  import { join } from 'node:path';
3
3
  import { replaceFileAtomically } from '../atomic-file.js';
4
4
  import { stateRoot } from '../paths.js';
5
+ import { planWorkspace, ensureWorkspace } from './workspace.js';
6
+ import { getTask } from './task-state.js';
5
7
  import { storedRoomLaunchPolicy } from './types.js';
6
8
  import { releaseLaunchSnapshot } from './launch-snapshot.js';
7
9
  export const roomsDir = () => join(stateRoot(), 'rooms');
8
- function roomPath(id) { return join(roomsDir(), `${id}.json`); }
10
+ function roomPath(id) {
11
+ if (!/^[a-zA-Z0-9_-]{1,120}$/.test(id))
12
+ throw new RoomStateError('Invalid room ID');
13
+ return join(roomsDir(), `${id}.json`);
14
+ }
9
15
  export class RoomStateError extends Error {
10
16
  }
11
17
  function readRoom(id) {
12
18
  const p = roomPath(id);
13
- if (!existsSync(p))
14
- throw new RoomStateError(`room not found: ${id}`);
15
- return JSON.parse(readFileSync(p, 'utf8'));
19
+ try {
20
+ return JSON.parse(readFileSync(p, 'utf8'));
21
+ }
22
+ catch (error) {
23
+ if (error.code === 'ENOENT')
24
+ throw new RoomStateError(`room not found: ${id}`);
25
+ throw error;
26
+ }
16
27
  }
17
28
  function writeRoom(record) {
18
29
  mkdirSync(roomsDir(), { recursive: true });
@@ -25,6 +36,8 @@ export function createRoomRecord(input) {
25
36
  const requested = storedRoomLaunchPolicy(input.room_policy);
26
37
  if (JSON.stringify(before) !== JSON.stringify(requested))
27
38
  throw new RoomStateError(`room ${input.room_id} launch policy mismatch`);
39
+ if (existing.workspace)
40
+ ensureWorkspace(existing.workspace);
28
41
  return existing;
29
42
  }
30
43
  const record = {
@@ -40,15 +53,20 @@ export function createRoomRecord(input) {
40
53
  state: 'provisioning',
41
54
  created_at: new Date().toISOString(),
42
55
  };
56
+ record.workspace = input.task_id ? getTask(input.task_id).workspace : planWorkspace('room', input.room_id);
43
57
  writeRoom(record);
58
+ if (record.workspace)
59
+ ensureWorkspace(record.workspace);
44
60
  return record;
45
61
  }
46
62
  export function getRoomRecord(id) {
47
63
  try {
48
64
  return readRoom(id);
49
65
  }
50
- catch {
51
- return undefined;
66
+ catch (error) {
67
+ if (error instanceof RoomStateError && error.message === `room not found: ${id}`)
68
+ return undefined;
69
+ throw error;
52
70
  }
53
71
  }
54
72
  /** Remove a terminal orchestration record from the live room inventory. */
@@ -110,11 +128,13 @@ export function setOwnerSeat(id, ownerSeatCid, inviteFingerprint) {
110
128
  writeRoom(r);
111
129
  return r;
112
130
  }
113
- export function updateMemberSeats(id, seats) {
131
+ export function updateMemberSeats(id, seats, additionalTemplate) {
114
132
  const r = readRoom(id);
115
133
  if (r.state === 'closing' || r.state === 'closed')
116
134
  throw new RoomStateError(`room ${id} is ${r.state}; member provisioning is fenced`);
117
135
  r.member_seats = seats;
136
+ if (additionalTemplate)
137
+ r.additional_member_templates = [...(r.additional_member_templates ?? []), additionalTemplate];
118
138
  writeRoom(r);
119
139
  return r;
120
140
  }
@@ -204,7 +224,7 @@ export function beginRoomClose(id) {
204
224
  const RETIREMENT_ORDER = [
205
225
  'stop_requested', 'liveness_absent', 'archive_secured', 'identity_absent',
206
226
  ];
207
- export function advanceMemberRetirement(id, roleName, phase, launchId, archivePath) {
227
+ export function advanceMemberRetirement(id, roleName, phase, launchId, archivePath, absenceVerified = false) {
208
228
  const r = readRoom(id);
209
229
  if (r.state !== 'closing')
210
230
  throw new RoomStateError(`room ${id} is not closing`);
@@ -221,6 +241,7 @@ export function advanceMemberRetirement(id, roleName, phase, launchId, archivePa
221
241
  throw new RoomStateError(`room ${id} member ${roleName} retirement cannot move backward to ${phase}`);
222
242
  }
223
243
  seat.retirement = {
244
+ ...(absenceVerified || previous?.absence_verified ? { absence_verified: true } : {}),
224
245
  phase,
225
246
  launch_id: launchId,
226
247
  updated_at: new Date().toISOString(),
@@ -273,3 +294,21 @@ export function setRoomCloseError(id, error, recoveryHint) {
273
294
  writeRoom(r);
274
295
  return r;
275
296
  }
297
+ /** Settlement-only binding recovery; never publishes a seat or changes a launch. */
298
+ export function recordRetirementMemberCids(id, recovered) {
299
+ const room = readRoom(id);
300
+ if (room.state !== 'closing')
301
+ throw new RoomStateError('Room is not closing');
302
+ for (const proof of recovered) {
303
+ const seat = room.member_seats.find(value => value.role_name === proof.role_name);
304
+ if (!seat || seat.launch?.action_id !== proof.launch?.action_id || seat.invite_id !== proof.invite_id)
305
+ throw new RoomStateError('Member changed during identity recovery');
306
+ if (!proof.identity_cid)
307
+ continue;
308
+ if (seat.identity_cid && seat.identity_cid.toLowerCase() !== proof.identity_cid.toLowerCase())
309
+ throw new RoomStateError('Member identity changed during recovery');
310
+ seat.identity_cid = proof.identity_cid;
311
+ }
312
+ writeRoom(room);
313
+ return room;
314
+ }
@@ -0,0 +1,113 @@
1
+ import type { TaskContributionAuthor, TaskProgressEntry, TaskRecord, TaskReview, TaskReviewArtifact } from './types.js';
2
+ export declare const PROGRESS_TEXT_MAX = 4000;
3
+ export declare const PROGRESS_MAX_ENTRIES = 200;
4
+ export declare const REVIEW_MARKDOWN_MAX = 50000;
5
+ export declare const REVIEW_MAX_ARTIFACTS = 20;
6
+ export declare const REVIEW_ARTIFACT_MAX_BYTES: number;
7
+ export declare class TaskReviewError extends Error {
8
+ readonly code: 'invalid_request' | 'idempotency_conflict' | 'limit_exceeded' | 'conflict' | 'not_found';
9
+ constructor(code: 'invalid_request' | 'idempotency_conflict' | 'limit_exceeded' | 'conflict' | 'not_found', message: string);
10
+ }
11
+ export declare function reviewArtifactMime(name: string): string;
12
+ export declare function checkArtifactName(name: string): string;
13
+ export declare function listTaskProgress(taskId: string): TaskProgressEntry[];
14
+ /**
15
+ * Append one milestone. Text is kept exactly as written; whitespace-only text is
16
+ * rejected. A retry with the same author-scoped request_key returns the original
17
+ * entry; the same key with different text is a conflict.
18
+ */
19
+ export declare function appendTaskProgress(taskId: string, input: {
20
+ text: string;
21
+ author: TaskContributionAuthor;
22
+ requestKey?: string;
23
+ }): {
24
+ entry: TaskProgressEntry;
25
+ replayed: boolean;
26
+ };
27
+ export declare function getTaskReview(taskId: string): TaskReview | undefined;
28
+ /**
29
+ * Replace the review Markdown. `expectedMarkdown` is what the writer last read
30
+ * ('' when none); a different current value is a stale edit. Re-sending the
31
+ * value already stored succeeds, so retries are safe.
32
+ */
33
+ export declare function setTaskReviewMarkdown(taskId: string, input: {
34
+ markdown: string;
35
+ expectedMarkdown: string;
36
+ author: TaskContributionAuthor;
37
+ }): TaskReview;
38
+ export declare const reviewStoreRoot: () => string;
39
+ export declare function reviewStoreDirectory(taskId: string): string;
40
+ /** A file being read; `verify` fails when it changed since it was opened. */
41
+ export type Source = {
42
+ size: number;
43
+ body: ReadableStream<Uint8Array>;
44
+ close(): Promise<void>;
45
+ verify?(): Promise<void>;
46
+ };
47
+ type Stored = {
48
+ id: string;
49
+ size: number;
50
+ sha256: string;
51
+ };
52
+ /**
53
+ * Attach one file to the review package: reserve under the task lock, copy
54
+ * into the private store, then commit metadata under the lock again; any
55
+ * failure removes the copy. A retry with the same author-scoped request_key
56
+ * is compared by content without storing another copy: identical content
57
+ * returns the original artifact, different content is a conflict. Without a
58
+ * key an interrupted call may or may not have attached: read the package
59
+ * before retrying.
60
+ */
61
+ export declare function attachTaskReviewArtifact(taskId: string, input: {
62
+ name: string;
63
+ source: Source;
64
+ author: TaskContributionAuthor;
65
+ requestKey?: string;
66
+ signal?: AbortSignal;
67
+ /** Test seam: runs after the bytes are durable, before the record references them. */
68
+ beforeCommit?(stored: Stored): void;
69
+ /** Test seam: runs after a keyed retry was read, before it is confirmed under the lock. */
70
+ beforeReplay?(): void;
71
+ }): Promise<{
72
+ artifact: TaskReviewArtifact;
73
+ replayed: boolean;
74
+ }>;
75
+ /** Remove a file from the package; repeating it after success reports not found. */
76
+ export declare function detachTaskReviewArtifact(taskId: string, artifactId: string, input: {
77
+ author: TaskContributionAuthor;
78
+ }): TaskReviewArtifact;
79
+ /** Bytes of a referenced artifact, integrity-checked; only the owning task can name it. */
80
+ export declare function readTaskReviewArtifact(taskId: string, artifactId: string): Promise<{
81
+ artifact: TaskReviewArtifact;
82
+ bytes: Buffer;
83
+ }>;
84
+ /** Task deletion: remove every retained review file of the task. */
85
+ export declare function deleteTaskReviewStore(taskId: string): void;
86
+ /** True when `path` names an entry strictly inside `root`, compared by path components. */
87
+ export declare function insideDirectory(root: string, path: string): boolean;
88
+ /** The task's owned workspace, validated against its ownership marker. */
89
+ export declare function taskWorkspaceRoot(task: TaskRecord): string;
90
+ /**
91
+ * Open a file inside the task workspace in this process's own OS context (the
92
+ * CLI). Every component below the pinned workspace is opened without
93
+ * following symlinks; the file must be one regular, singly-linked file.
94
+ */
95
+ export declare function openTaskWorkspaceFile(task: TaskRecord, input: string, cwd?: string): Promise<Source & {
96
+ name: string;
97
+ }>;
98
+ /** Size of the store, for diagnostics and tests. */
99
+ export declare function reviewStoreFiles(taskId: string): string[];
100
+ /** Wire shapes: retry keys stay internal. */
101
+ export declare function publicProgressEntry(entry: TaskProgressEntry): Omit<TaskProgressEntry, 'request_key'>;
102
+ export declare function publicReview(review: TaskReview): TaskReview;
103
+ /** Compact summary for list and detail payloads; bodies are fetched separately. */
104
+ export declare function taskContributionSummary(task: TaskRecord): {
105
+ progress_count: number;
106
+ review: {
107
+ has_markdown: boolean;
108
+ artifact_count: number;
109
+ revision: number;
110
+ updated_at?: string;
111
+ };
112
+ };
113
+ export {};