@humwick/server 0.130.2 → 0.130.4

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 (587) hide show
  1. package/bundled/prompts/manifest.json +1 -0
  2. package/bundled/prompts/task.hydration.md +1 -1
  3. package/bundled/roles/builder.md +1 -1
  4. package/docs/guides/sub-coordinators.md +12 -5
  5. package/docs/guides/tools-coordination.md +1 -0
  6. package/docs/guides/workflows.md +16 -0
  7. package/docs/openapi.json +175 -4
  8. package/package.json +8 -7
  9. package/public/assets/{MessageBubble-BWLqMGKG.js → MessageBubble-BOkmEvgZ.js} +2 -2
  10. package/public/assets/{PlanGraphPanel-3TlIQpjk.js → PlanGraphPanel-BkaDJp0r.js} +2 -2
  11. package/public/assets/{TraceView-Wimm0Czv.js → TraceView-B99Uu2yT.js} +2 -2
  12. package/public/assets/{VaultDecisionCard-Bau_vNax.js → VaultDecisionCard-DUIfTTFF.js} +2 -2
  13. package/public/assets/{activity-CrSurn-r.js → activity-ZIX0N1El.js} +2 -2
  14. package/public/assets/{agent-lineage-CknAJKcb.js → agent-lineage-kq9TPYFw.js} +2 -2
  15. package/public/assets/agent-liveness-DSQY1Aa_.js +2 -0
  16. package/public/assets/{agent-name-DKbiIhBo.js → agent-name-C_7F4DFR.js} +2 -2
  17. package/public/assets/{agent-profiles-DwF6EQ4R.js → agent-profiles-BNOcrGcY.js} +2 -2
  18. package/public/assets/{agent-project-badge-Diz4Sjjb.js → agent-project-badge-B6yAh70a.js} +2 -2
  19. package/public/assets/{agent-tools-CRhpRQza.js → agent-tools-CcrhmOzF.js} +2 -2
  20. package/public/assets/{agent-type-icon-LrUEU3lB.js → agent-type-icon-CXSLrKiq.js} +2 -2
  21. package/public/assets/{agents-B-v66C-4.js → agents-DIZG97_X.js} +2 -2
  22. package/public/assets/{analytics-BqCb-LKi.js → analytics-rasmoPjR.js} +2 -2
  23. package/public/assets/{artifact-viewer-kf4pGuAR.js → artifact-viewer-tBpTrEPb.js} +2 -2
  24. package/public/assets/{artifacts-DJevXcvg.js → artifacts-BNkrynP1.js} +2 -2
  25. package/public/assets/{artifacts-D32zyw4Y.js → artifacts-Bjq-ZyBA.js} +2 -2
  26. package/public/assets/{automation-BpRajx_5.js → automation-Cx422L3L.js} +2 -2
  27. package/public/assets/{backlog-D_UjTdzX.js → backlog-RuFQ8PUu.js} +2 -2
  28. package/public/assets/{busy-health-N3VEh4ao.js → busy-health-BvNQ9g5x.js} +2 -2
  29. package/public/assets/{channels-9jopungq.js → channels-DNbKAS0I.js} +2 -2
  30. package/public/assets/{chat-CSXrTB3C.js → chat-Bp3Fx73h.js} +3 -3
  31. package/public/assets/{code-preview-p1NnmqK0.js → code-preview-KIRZA6cz.js} +2 -2
  32. package/public/assets/{connectors-CZdqlDNL.js → connectors-k7vO4vvc.js} +2 -2
  33. package/public/assets/{cosmos-BgdsE4dG.js → cosmos-BuVoq1aw.js} +2 -2
  34. package/public/assets/{crate-agent-30aXTKva.js → crate-agent-irqlt4NH.js} +2 -2
  35. package/public/assets/{dependency-graph-B_jvw2GE.js → dependency-graph-D_rurNBz.js} +2 -2
  36. package/public/assets/{deploys-DoN6bAb5.js → deploys-yzZqIpxE.js} +2 -2
  37. package/public/assets/{display-BrKWFGJz.js → display-BemJG1f_.js} +2 -2
  38. package/public/assets/{files-D6XEu8Ng.js → files-DXWcrxOz.js} +2 -2
  39. package/public/assets/{fleet-C7jQWbw2.js → fleet-TEuOCZXE.js} +2 -2
  40. package/public/assets/{fleet-metrics-BiDs3MLx.js → fleet-metrics-BGoDAFI-.js} +2 -2
  41. package/public/assets/{formatted-body-impl-DyG0WsQS.js → formatted-body-impl-BB9eq9nN.js} +2 -2
  42. package/public/assets/{formatted-body-CQBwc1fb.js → formatted-body-qy2nTD_1.js} +3 -3
  43. package/public/assets/{host-providers-dialog-DKaW31dN.js → host-providers-dialog-BGPHxuwT.js} +2 -2
  44. package/public/assets/{index-CRHep3M9.js → index-BC5XZc0z.js} +5 -5
  45. package/public/assets/{index-MYAIwYTX.css → index-D8Rp9pz2.css} +1 -1
  46. package/public/assets/{insights-CzrtkpOE.js → insights-C-KQG0h-.js} +2 -2
  47. package/public/assets/{integrations-aVsUmigt.js → integrations-ClPRPyKU.js} +2 -2
  48. package/public/assets/{issue-ref-chip-BnSlM_95.js → issue-ref-chip-DbH8J9Ak.js} +2 -2
  49. package/public/assets/{log-viewer-qe7Ee47Z.js → log-viewer-PH4zVn24.js} +2 -2
  50. package/public/assets/{maintenance-NfjqFZAk.js → maintenance-5lV43uTL.js} +2 -2
  51. package/public/assets/{managed-agents-BiH0HgaE.js → managed-agents-BdgU35aX.js} +2 -2
  52. package/public/assets/{markdown-preview-BixaT3Xr.js → markdown-preview-DNT4OUwQ.js} +3 -3
  53. package/public/assets/{markdown-preview-impl-DNGlWIS3.js → markdown-preview-impl-CnCcPy0A.js} +2 -2
  54. package/public/assets/{memory-DNsCl6UX.js → memory--GgWH1gH.js} +2 -2
  55. package/public/assets/{messages-DopU1L1X.js → messages-CzFl_97O.js} +2 -2
  56. package/public/assets/{orchestrators-Cq7ckLQT.js → orchestrators-CVvJVkzv.js} +2 -2
  57. package/public/assets/overview-DsrZvE86.js +2 -0
  58. package/public/assets/{pairs-DE_m6rrE.js → pairs-D2d0d2py.js} +2 -2
  59. package/public/assets/{profile-icon-B3rfh77F.js → profile-icon-_SMuSbYF.js} +2 -2
  60. package/public/assets/{project-profile-instructions-DQWZE0kA.js → project-profile-instructions-Apn15y43.js} +2 -2
  61. package/public/assets/{projects-Br2Bd2h1.js → projects-D3B6kto5.js} +2 -2
  62. package/public/assets/{prompt-settings-BKvFsvGD.js → prompt-settings-DnPB6Ez6.js} +2 -2
  63. package/public/assets/provider-display-bWwiuedV.js +2 -0
  64. package/public/assets/{registry-Cw38_6gW.js → registry-D790cIhN.js} +2 -2
  65. package/public/assets/run-card-BCro-Odj.js +2 -0
  66. package/public/assets/{secrets-DxI-vzSq.js → secrets-CVXvfvbU.js} +2 -2
  67. package/public/assets/{service-access-settings-D9s_VJbd.js → service-access-settings-D3Xxqb9w.js} +2 -2
  68. package/public/assets/{settings-CKZTVGIx.js → settings-CoUC7Jci.js} +2 -2
  69. package/public/assets/shipping-D_Lp9n_J.js +2 -0
  70. package/public/assets/{stats-DyUBKyWI.js → stats-CXiNjB9S.js} +2 -2
  71. package/public/assets/{status-dot-DYqlEUhJ.js → status-dot-C703YIy1.js} +2 -2
  72. package/public/assets/store-BgDALGIX.js +9 -0
  73. package/public/assets/{tasks-Bh7Chr4-.js → tasks-DO0WpJCx.js} +2 -2
  74. package/public/assets/{teams-bowI7qVY.js → teams-FGkdi_tL.js} +2 -2
  75. package/public/assets/{terminal-viewer-BgVLHdsU.js → terminal-viewer-Dh8dSC7e.js} +3 -3
  76. package/public/assets/{terminal-viewer-impl-Dz22UPy6.js → terminal-viewer-impl-B5Zriip3.js} +2 -2
  77. package/public/assets/{use-agent-terminal-DSQQ-iY7.js → use-agent-terminal-CRUVDvLC.js} +2 -2
  78. package/public/assets/{use-decisions-samMQhQf.js → use-decisions-CoaqRh4l.js} +2 -2
  79. package/public/assets/{use-project-list-59LheVP7.js → use-project-list-X-BgT53X.js} +2 -2
  80. package/public/assets/{use-selectors-BZa25xEB.js → use-selectors-0X_UZkk-.js} +2 -2
  81. package/public/assets/{user-avatar-DHxlvUvV.js → user-avatar-CkLhVBGu.js} +2 -2
  82. package/public/assets/{versioned-prompt-editor-BmED5DnJ.js → versioned-prompt-editor-BkTi7eim.js} +2 -2
  83. package/public/assets/{work-queue-CSvpuNLz.js → work-queue-DDOLEyKo.js} +2 -2
  84. package/public/assets/{workflow-marker-DAZcj5qt.js → workflow-marker-CzOsB8BM.js} +2 -2
  85. package/public/assets/{workflows-DdmxRSyg.js → workflows-DJilvmRM.js} +2 -2
  86. package/public/assets/{workspaces-BxeKfVuF.js → workspaces-CHcfbLR3.js} +2 -2
  87. package/public/cosmos.html +4 -4
  88. package/public/index.html +29 -29
  89. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  90. package/runner/src/adapters/claude-api.ts +1 -1
  91. package/runner/src/adapters/claude-headless.ts +1 -1
  92. package/runner/src/adapters/claude-launch-exit.ts +26 -0
  93. package/runner/src/adapters/claude-session-probe.ts +1 -1
  94. package/runner/src/adapters/claude-tmux.ts +38 -10
  95. package/runner/src/adapters/claude.ts +28 -75
  96. package/runner/src/adapters/provider-quota-harvest.ts +20 -71
  97. package/runner/src/agent-runner/lifecycle-milestones.ts +2 -2
  98. package/runner/src/agent-runner/liveness-exchange.ts +104 -0
  99. package/runner/src/claude-system-prompt.ts +49 -0
  100. package/runner/src/launch-assembly.ts +14 -10
  101. package/runner/src/profile-home.ts +1 -1
  102. package/runner/src/project-instructions.ts +2 -2
  103. package/runner/src/provider-command.ts +18 -0
  104. package/runner/src/provider-setup.ts +3 -2
  105. package/runner/src/runner-core.ts +14 -15
  106. package/runner/src/runner-helpers.ts +0 -8
  107. package/runner/src/session-scratch.ts +6 -2
  108. package/runner/test-support/provisioning-context.ts +4 -2
  109. package/runner/test-support/runner-harness.ts +2 -1
  110. package/scripts/steward-policy-cleanup.ts +2 -2
  111. package/src/agent-authz.ts +2 -2
  112. package/src/agent-drive-arbiter.ts +3 -8
  113. package/src/agent-exit-cleanup-async.ts +2 -2
  114. package/src/agent-exit-cleanup.ts +23 -19
  115. package/src/agent-lifecycle-events.ts +112 -85
  116. package/src/agent-ref.ts +3 -2
  117. package/src/agent-status-events.ts +43 -14
  118. package/src/auth/login-link.ts +35 -0
  119. package/src/auth/password.ts +4 -3
  120. package/src/auth/session-refresh.ts +1 -1
  121. package/src/auth/session.test-fixture.ts +2 -2
  122. package/src/auth/session.ts +7 -7
  123. package/src/automations/crud.ts +8 -81
  124. package/src/automations/dispatch.ts +33 -58
  125. package/src/automations/index.ts +1 -1
  126. package/src/automations/persistence.ts +65 -0
  127. package/src/automations/precheck.ts +18 -16
  128. package/src/automations/read-async.ts +11 -0
  129. package/src/automations/reconcile.ts +30 -39
  130. package/src/automations/storage.ts +33 -10
  131. package/src/automations/write-async.ts +33 -0
  132. package/src/branch-land-notice.ts +3 -3
  133. package/src/branch-landed.ts +25 -23
  134. package/src/bus.ts +21 -19
  135. package/src/cd-deploy-notify.ts +2 -2
  136. package/src/ci/notifications.ts +4 -4
  137. package/src/ci/root-missing.ts +3 -3
  138. package/src/ci/transition-notify.ts +5 -5
  139. package/src/claude-app/oauth-http.ts +3 -3
  140. package/src/cli/index.ts +7 -1
  141. package/src/cli/init.ts +53 -0
  142. package/src/cli/orchestrator.ts +1 -7
  143. package/src/cli/setup.ts +6 -4
  144. package/src/cli/workflow.ts +12 -3
  145. package/src/commands-db.ts +4 -4
  146. package/src/commands-write.ts +8 -0
  147. package/src/compaction-watch.ts +10 -8
  148. package/src/config-store-write.ts +2 -2
  149. package/src/config.ts +4 -11
  150. package/src/connectors.ts +10 -8
  151. package/src/context-advisory.ts +22 -21
  152. package/src/db/agent-action-write.ts +36 -0
  153. package/src/db/agent-control-async.ts +9 -0
  154. package/src/db/agent-control-write.ts +49 -0
  155. package/src/db/agent-effort-observe.ts +22 -0
  156. package/src/db/agent-meta.ts +14 -3
  157. package/src/db/agents-async.ts +8 -5
  158. package/src/db/agents.ts +15 -12
  159. package/src/db/auth-identities.ts +2 -2
  160. package/src/db/automation-read-ops.ts +11 -0
  161. package/src/db/automation-write-ops.ts +46 -0
  162. package/src/db/blackboard.ts +2 -2
  163. package/src/db/browser-session-write.ts +32 -0
  164. package/src/db/bus-outbox-write-ops.ts +3 -1
  165. package/src/db/checkout-refresh-schema.ts +47 -0
  166. package/src/db/checkout-refresh.ts +5 -5
  167. package/src/db/command-agent-profile-backfill.ts +39 -0
  168. package/src/db/command-agent-profiles.ts +5 -1
  169. package/src/db/command-retention.ts +126 -0
  170. package/src/db/commands-planner-stats.test-fixture.ts +8 -0
  171. package/src/db/commands-read-ops.ts +16 -0
  172. package/src/db/connection.ts +1 -182
  173. package/src/db/context-carry-write.ts +74 -0
  174. package/src/db/continuations.ts +4 -4
  175. package/src/db/db-error-registry.ts +12 -0
  176. package/src/db/gateway.ts +26 -133
  177. package/src/db/history-retention-ops.ts +13 -0
  178. package/src/db/inbox-async.ts +2 -2
  179. package/src/db/inbox-read-ops.ts +1 -1
  180. package/src/db/inbox.ts +9 -3
  181. package/src/db/issue-associations.ts +2 -2
  182. package/src/db/issue-refs-async.ts +4 -1
  183. package/src/db/issue-refs-read-ops.ts +6 -0
  184. package/src/db/issue-refs.ts +8 -8
  185. package/src/db/kernel-event-log-schema.ts +2 -0
  186. package/src/db/land-boundaries.ts +51 -5
  187. package/src/db/land-gate-attestations.ts +2 -2
  188. package/src/db/landing-receipts.ts +2 -2
  189. package/src/db/lifecycle-context-write.ts +5 -0
  190. package/src/db/lifecycle-tail-async.ts +76 -0
  191. package/src/db/lifecycle-tail-write-ops.ts +62 -0
  192. package/src/db/lifecycle-write-window.ts +2 -1
  193. package/src/db/lineage-pair-dedupe-sql.ts +3 -3
  194. package/src/db/main-connection-mode.ts +11 -0
  195. package/src/db/main-connection-writes.ts +20 -2
  196. package/src/db/maintenance-job-runs-async.ts +2 -2
  197. package/src/db/maintenance-job-write-ops.ts +1 -1
  198. package/src/db/maintenance-pauses.ts +2 -2
  199. package/src/db/message-send.ts +4 -0
  200. package/src/db/messages.ts +31 -25
  201. package/src/db/migrations.ts +18 -1
  202. package/src/db/notification-write-ops.ts +19 -0
  203. package/src/db/operator-answer-write.ts +19 -0
  204. package/src/db/orchestrators.ts +10 -4
  205. package/src/db/pairs-async.ts +22 -1
  206. package/src/db/pairs-write-ops.ts +8 -3
  207. package/src/db/pairs.ts +41 -48
  208. package/src/db/plan-dispatch-schema.ts +5 -1
  209. package/src/db/plan-ready-notices.ts +43 -0
  210. package/src/db/plan-tools-include-migration.ts +36 -0
  211. package/src/db/plans-write-ops.ts +2 -0
  212. package/src/db/presence-buffer.ts +5 -0
  213. package/src/db/presence-loop.ts +18 -23
  214. package/src/db/presence-write.ts +0 -6
  215. package/src/db/project-entries-async.ts +14 -0
  216. package/src/db/project-entries-read-ops.ts +5 -1
  217. package/src/db/project-entries-write-ops.ts +8 -0
  218. package/src/db/project-entries.ts +15 -12
  219. package/src/db/project-journal.ts +2 -2
  220. package/src/db/project-trust-approvals.ts +2 -2
  221. package/src/db/prompt-templates.ts +4 -4
  222. package/src/db/read-op-marshaling-fixtures.ts +18 -0
  223. package/src/db/read-ops.ts +4 -0
  224. package/src/db/retention.ts +13 -2
  225. package/src/db/review-publish-write.ts +8 -0
  226. package/src/db/runtime-admin-async.ts +19 -0
  227. package/src/db/runtime-admin-write-ops.ts +36 -0
  228. package/src/db/runtime-tail-async.ts +288 -0
  229. package/src/db/runtime-tail-write-ops.ts +97 -0
  230. package/src/db/schema.ts +4 -1
  231. package/src/db/spawn-budget.ts +5 -0
  232. package/src/db/spawn-delegation.ts +3 -12
  233. package/src/db/sql-audit-indexes.ts +3 -0
  234. package/src/db/stats-async.ts +5 -3
  235. package/src/db/task-entity.ts +5 -4
  236. package/src/db/team-claim-policy.ts +60 -0
  237. package/src/db/teams-async.ts +4 -0
  238. package/src/db/teams-write-ops.ts +4 -0
  239. package/src/db/terminal-events.ts +15 -0
  240. package/src/db/timer-cutover-bodies.ts +292 -0
  241. package/src/db/timer-cutover-core.ts +37 -278
  242. package/src/db/timer-cutover-state.ts +40 -0
  243. package/src/db/timer-cutover-write-ops.ts +1 -40
  244. package/src/db/token-db-write-ops.ts +2 -0
  245. package/src/db/token-standing-async.ts +12 -0
  246. package/src/db/token-standing.ts +6 -9
  247. package/src/db/token-usage-retention.ts +33 -0
  248. package/src/db/token-usage-write-ops.ts +1 -1
  249. package/src/db/token-usage.ts +4 -1
  250. package/src/db/user-invites-async.ts +13 -0
  251. package/src/db/user-invites.ts +3 -3
  252. package/src/db/users.ts +14 -6
  253. package/src/db/workflow-execution.ts +3 -3
  254. package/src/db/workspaces.ts +8 -5
  255. package/src/db/write-ops.ts +31 -12
  256. package/src/db/writer-fault-seam.ts +2 -9
  257. package/src/db/writer-fault-test-ops.ts +18 -0
  258. package/src/db/writer-gateway.ts +42 -46
  259. package/src/dev.ts +12 -16
  260. package/src/event-loop-lag.ts +4 -2
  261. package/src/event-loop-yield.ts +2 -2
  262. package/src/events.ts +10 -8
  263. package/src/host-provider-store.ts +5 -4
  264. package/src/hub-metrics-report.ts +5 -1
  265. package/src/hub-metrics.ts +38 -18
  266. package/src/init.ts +299 -0
  267. package/src/injection-sweep-pacing.ts +6 -8
  268. package/src/invite-link.ts +16 -9
  269. package/src/land-gate-notifications.ts +11 -10
  270. package/src/land-gate-queue-progress.ts +3 -3
  271. package/src/land-settle-dispatch.ts +52 -92
  272. package/src/lifecycle-context-pressure.ts +11 -10
  273. package/src/lifecycle-manager.ts +104 -98
  274. package/src/maintenance/breaker.ts +18 -16
  275. package/src/maintenance/checkout-refresh.ts +18 -1
  276. package/src/maintenance/critical-job-watchdog.ts +3 -3
  277. package/src/maintenance/events.ts +3 -3
  278. package/src/maintenance/history-retention-job.ts +30 -0
  279. package/src/maintenance/jobs.ts +29 -67
  280. package/src/maintenance/long-running-work.ts +3 -1
  281. package/src/maintenance/offline-agent-prune-job.ts +28 -0
  282. package/src/maintenance/orphaned-sessions.ts +5 -4
  283. package/src/maintenance/pauses.ts +4 -10
  284. package/src/maintenance/plan-ready-notice-job.ts +71 -0
  285. package/src/maintenance/scheduler.ts +18 -13
  286. package/src/maintenance/stalled-delivery-pager.ts +4 -4
  287. package/src/maintenance/teams.ts +19 -30
  288. package/src/maintenance/workspaces.ts +17 -27
  289. package/src/managed-policy-escalation.ts +7 -7
  290. package/src/managed-policy.ts +3 -3
  291. package/src/managed-provider-gate.ts +5 -4
  292. package/src/managed-spawn-reservation.ts +5 -4
  293. package/src/mcp/index.ts +8 -8
  294. package/src/mcp/output-descriptions.ts +1 -1
  295. package/src/mcp/presentation.ts +2 -1
  296. package/src/mcp/runtime-output.ts +6 -1
  297. package/src/mcp/self-care-visibility.ts +2 -2
  298. package/src/mcp/spawn-targets-matrix.ts +10 -1
  299. package/src/mcp/tool-groups.ts +3 -2
  300. package/src/mcp/tool-roles.ts +81 -0
  301. package/src/mcp/tools-workspace.ts +1 -1
  302. package/src/mcp-blackboard-tools.ts +6 -5
  303. package/src/mcp-decision-tools.ts +7 -7
  304. package/src/mcp-egress-tools.ts +10 -9
  305. package/src/mcp-issue-activity-tools.ts +2 -2
  306. package/src/mcp-issue-association-tools.ts +4 -4
  307. package/src/mcp-issue-ref-tools.ts +3 -3
  308. package/src/mcp-merge-tools.ts +5 -5
  309. package/src/mcp-notification-subscription-tools.ts +14 -15
  310. package/src/mcp-output-levels.test-fixture.ts +1 -1
  311. package/src/mcp-profile-trust-tools.ts +1 -1
  312. package/src/mcp-project-journal-tools.ts +4 -12
  313. package/src/mcp-project-tools.ts +17 -18
  314. package/src/mcp-routing-policy-tools.ts +3 -2
  315. package/src/mcp-team-tools.ts +6 -6
  316. package/src/mcp-workflow-tools.ts +5 -3
  317. package/src/memory-area-injection.ts +13 -12
  318. package/src/memory-boundary-capture.ts +6 -6
  319. package/src/memory-injection.ts +45 -43
  320. package/src/merge-pause-maintenance.ts +5 -4
  321. package/src/notification-router.ts +44 -17
  322. package/src/notify.ts +5 -5
  323. package/src/observed-reset-refresh.ts +4 -4
  324. package/src/operator-alarm.ts +2 -5
  325. package/src/project-ingest.ts +6 -6
  326. package/src/project-instructions.ts +8 -1
  327. package/src/project-trust.ts +12 -11
  328. package/src/prompt-resolver.ts +3 -3
  329. package/src/provider-quota-async.ts +5 -7
  330. package/src/provider-timeline-event.ts +4 -7
  331. package/src/quota-band-delivery.ts +2 -2
  332. package/src/recipe-runner.ts +4 -3
  333. package/src/retention-config-store.ts +4 -3
  334. package/src/reviewer-pipeline.ts +11 -10
  335. package/src/routes/_route.ts +4 -4
  336. package/src/routes/_shared.ts +13 -12
  337. package/src/routes/agent-effort.ts +5 -5
  338. package/src/routes/agent-heartbeat-quota.ts +23 -0
  339. package/src/routes/agent-keep.ts +1 -1
  340. package/src/routes/agent-reporting.ts +1 -1
  341. package/src/routes/agent-self-effort.ts +5 -5
  342. package/src/routes/agent-sessions.ts +24 -24
  343. package/src/routes/agents-spawn.ts +1 -1
  344. package/src/routes/agents.ts +17 -119
  345. package/src/routes/auth.ts +44 -17
  346. package/src/routes/authority-audit.ts +2 -2
  347. package/src/routes/automations.ts +6 -5
  348. package/src/routes/channel-binding-delete.ts +1 -1
  349. package/src/routes/channel-output.ts +3 -3
  350. package/src/routes/claude-api-budget.ts +5 -5
  351. package/src/routes/commands-listing.ts +1 -1
  352. package/src/routes/commands.ts +29 -27
  353. package/src/routes/context-resets.ts +2 -2
  354. package/src/routes/coordinator-teams.ts +1 -1
  355. package/src/routes/decisions.ts +2 -2
  356. package/src/routes/host-providers.ts +18 -0
  357. package/src/routes/host-secret-files.ts +1 -1
  358. package/src/routes/hosts.ts +11 -11
  359. package/src/routes/inbox.ts +3 -2
  360. package/src/routes/index.ts +7 -3
  361. package/src/routes/integrations.ts +9 -7
  362. package/src/routes/issue-activity.ts +2 -2
  363. package/src/routes/issue-associations.ts +4 -4
  364. package/src/routes/issue-refs.ts +3 -3
  365. package/src/routes/kernel-timers-operator.ts +1 -1
  366. package/src/routes/memory.ts +1 -1
  367. package/src/routes/merges.ts +11 -11
  368. package/src/routes/messages.ts +23 -17
  369. package/src/routes/orchestrator-bootstrap.ts +3 -1
  370. package/src/routes/orchestrator-host-registration.ts +2 -0
  371. package/src/routes/orchestrator-host-utilization.ts +2 -2
  372. package/src/routes/orchestrator-proxy.ts +2 -2
  373. package/src/routes/orchestrator.ts +27 -18
  374. package/src/routes/pairs.ts +8 -8
  375. package/src/routes/project-profile-instructions.ts +1 -1
  376. package/src/routes/project-trust.ts +1 -1
  377. package/src/routes/projects.ts +16 -16
  378. package/src/routes/prompt-templates.ts +12 -12
  379. package/src/routes/provider-quotas.ts +10 -10
  380. package/src/routes/run-command.ts +1 -1
  381. package/src/routes/secrets-backup.ts +4 -5
  382. package/src/routes/secrets-import.ts +3 -4
  383. package/src/routes/secrets-vault.ts +12 -14
  384. package/src/routes/settings.ts +1 -1
  385. package/src/routes/shipping.ts +9 -1
  386. package/src/routes/spawn-policy.ts +8 -7
  387. package/src/routes/sse.ts +2 -2
  388. package/src/routes/team-templates.ts +7 -7
  389. package/src/routes/teams.ts +10 -10
  390. package/src/routes/tokens.ts +18 -17
  391. package/src/routes/users.ts +24 -24
  392. package/src/routes/viewer-read.ts +3 -3
  393. package/src/routes/web-tool-calls.ts +4 -4
  394. package/src/routes/workflows.ts +2 -2
  395. package/src/routes/workspaces.ts +17 -16
  396. package/src/routing-policy-push.ts +6 -6
  397. package/src/runtime-grant.ts +17 -11
  398. package/src/runtime-install.ts +30 -0
  399. package/src/runtime-tokens.ts +20 -28
  400. package/src/secrets-broker/config.ts +1 -1
  401. package/src/secrets-broker/service.ts +2 -2
  402. package/src/security.ts +3 -1
  403. package/src/self-resume-carry.ts +21 -110
  404. package/src/self-resume-supersede.ts +4 -3
  405. package/src/self-resume.ts +54 -66
  406. package/src/server-background.ts +1 -1
  407. package/src/server.ts +25 -26
  408. package/src/services/agent-action.ts +12 -31
  409. package/src/services/agent-effort.ts +7 -32
  410. package/src/services/agent-hang-watchdog-job.ts +2 -2
  411. package/src/services/agent-heartbeat.ts +166 -0
  412. package/src/services/agent-reporting.ts +1 -1
  413. package/src/services/auth-context.ts +6 -0
  414. package/src/services/browser-inventory.ts +3 -3
  415. package/src/services/browser-session-state.ts +3 -2
  416. package/src/services/browser-session.ts +21 -27
  417. package/src/services/bus-command-update.ts +9 -9
  418. package/src/services/checkout-refresh-state.ts +1 -0
  419. package/src/services/checkout-refresh.test-fixture.ts +3 -2
  420. package/src/services/command-host.ts +7 -2
  421. package/src/services/coordinator-digest.ts +3 -2
  422. package/src/services/dispatch-command.ts +12 -13
  423. package/src/services/effective-launch-driver.ts +14 -9
  424. package/src/services/host-changed-paths.test-fixture.ts +5 -6
  425. package/src/services/host-project-readiness.ts +2 -2
  426. package/src/services/host-providers.ts +1 -1
  427. package/src/services/host-utilization.ts +9 -9
  428. package/src/services/idle-agent-digest.ts +17 -12
  429. package/src/services/idle-epics.ts +4 -4
  430. package/src/services/interrupt-agent.ts +12 -9
  431. package/src/services/issue-activity.ts +3 -3
  432. package/src/services/issue-associations.ts +15 -18
  433. package/src/services/issue-lifecycle-comments.ts +3 -2
  434. package/src/services/issue-lifecycle.ts +14 -13
  435. package/src/services/issue-refs.ts +4 -5
  436. package/src/services/kernel-timers-cutover-chaos-worker.ts +1 -1
  437. package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
  438. package/src/services/kernel-timers-ingress.ts +3 -3
  439. package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
  440. package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
  441. package/src/services/kernel-timers-outbox.ts +1 -1
  442. package/src/services/kernel-timers-stage10-operator.ts +1 -1
  443. package/src/services/kernel-timers.ts +4 -3
  444. package/src/services/land-gate-placement.ts +11 -2
  445. package/src/services/land-issue-relations.ts +5 -4
  446. package/src/services/land-restart-retry.ts +7 -6
  447. package/src/services/landed-ancestry.ts +6 -5
  448. package/src/services/legacy-landing-host.ts +4 -1
  449. package/src/services/legacy-landing-recovery.ts +8 -6
  450. package/src/services/managed-running.ts +17 -17
  451. package/src/services/memory-areas.ts +3 -3
  452. package/src/services/merge-pause.ts +9 -15
  453. package/src/services/operator-decisions.ts +37 -41
  454. package/src/services/orchestrator-registration-recovery.ts +6 -2
  455. package/src/services/orchestrator-upgrade.ts +14 -12
  456. package/src/services/permission-decision.ts +4 -3
  457. package/src/services/plan-ci-notice.ts +1 -1
  458. package/src/services/plan-conformance.ts +4 -4
  459. package/src/services/plan-dispatch-policy.ts +10 -3
  460. package/src/services/plan-dispatch.ts +35 -14
  461. package/src/services/plan-graph.ts +39 -261
  462. package/src/services/plan-import.ts +1 -1
  463. package/src/services/plan-live-bindings.ts +8 -37
  464. package/src/services/plan-task-create.ts +1 -1
  465. package/src/services/plan-terminal-refs.ts +2 -12
  466. package/src/services/plan-wake-digest.ts +8 -3
  467. package/src/services/profile-trust.ts +2 -2
  468. package/src/services/project.ts +11 -10
  469. package/src/services/prompt-templates.ts +6 -5
  470. package/src/services/provider-api-key.ts +73 -0
  471. package/src/services/provider-hold-nudge.ts +9 -9
  472. package/src/services/provider-hold-record.ts +13 -12
  473. package/src/services/provider-state-audit.ts +19 -18
  474. package/src/services/provisioning-harness/driver.ts +1 -1
  475. package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
  476. package/src/services/provisioning-harness/lifecycle.ts +24 -22
  477. package/src/services/provisioning-harness/prepare.ts +16 -17
  478. package/src/services/rate-limit-resume.ts +10 -9
  479. package/src/services/red-main-auto-revert.ts +7 -5
  480. package/src/services/red-main-controller-deps.ts +20 -3
  481. package/src/services/red-main-incident.ts +3 -1
  482. package/src/services/red-main-quarantine.ts +2 -3
  483. package/src/services/register-agent.ts +22 -22
  484. package/src/services/restart-project-role.ts +1 -1
  485. package/src/services/restart-spawn.ts +17 -16
  486. package/src/services/review-publish.ts +7 -24
  487. package/src/services/review-ref-reconcile.ts +29 -38
  488. package/src/services/runtime-dependency-alert.ts +27 -0
  489. package/src/services/scheduler-command.ts +11 -9
  490. package/src/services/scheduler.ts +5 -5
  491. package/src/services/self-effort-grant.ts +5 -25
  492. package/src/services/send-message.ts +16 -33
  493. package/src/services/shutdown-agent.ts +17 -14
  494. package/src/services/spawn-agent.ts +12 -41
  495. package/src/services/spawn-chain-inspector.ts +1 -1
  496. package/src/services/spawn-cwd-placement.ts +21 -5
  497. package/src/services/spawn-issue-activity.ts +8 -6
  498. package/src/services/spawn-launch.ts +17 -1
  499. package/src/services/spawn-loss-escalation.ts +1 -1
  500. package/src/services/spawn-registration-watchdog.ts +2 -2
  501. package/src/services/spawn-repo-probe.ts +7 -5
  502. package/src/services/spawn-tree-cleanup.ts +7 -8
  503. package/src/services/steward-reaper.ts +4 -4
  504. package/src/services/task-context-hydration.ts +25 -1
  505. package/src/services/task-delivery.ts +20 -34
  506. package/src/services/task-entity.ts +40 -203
  507. package/src/services/task-issue-link.ts +13 -20
  508. package/src/services/task-issue-weave.ts +12 -11
  509. package/src/services/task-lifecycle.ts +27 -31
  510. package/src/services/task-repo-cwd.ts +37 -0
  511. package/src/services/task-review-hold.ts +4 -17
  512. package/src/services/task-semantic-events.ts +13 -11
  513. package/src/services/task-state-reconcile.ts +3 -4
  514. package/src/services/task-validation.ts +2 -2
  515. package/src/services/team-templates.ts +5 -5
  516. package/src/services/team.ts +31 -98
  517. package/src/services/terminal-provider-exit.ts +6 -5
  518. package/src/services/timer-message-fire-chaos-worker.ts +7 -3
  519. package/src/services/timer-message-fire-outbox.ts +1 -1
  520. package/src/services/transient-agent-reaper.ts +22 -19
  521. package/src/services/turn-reconcile-audit.ts +9 -9
  522. package/src/services/user-onboarding.ts +8 -6
  523. package/src/services/user-profile.ts +6 -9
  524. package/src/services/work-finality.ts +16 -4
  525. package/src/services/workflow-auto-start.ts +2 -1
  526. package/src/services/workflow-caller.ts +61 -4
  527. package/src/services/workflow-child-proof-worker.ts +1 -1
  528. package/src/services/workflow-control-proof-worker.ts +1 -1
  529. package/src/services/workflow-coordinator.ts +8 -2
  530. package/src/services/workflow-decisions.ts +5 -5
  531. package/src/services/workflow-deferred-cleanup.ts +1 -1
  532. package/src/services/workflow-effect-driver.ts +42 -19
  533. package/src/services/workflow-effects.ts +41 -27
  534. package/src/services/workflow-pins.ts +7 -4
  535. package/src/services/workflow-reconcile.ts +1 -0
  536. package/src/services/workflow-resume-pins.ts +3 -3
  537. package/src/services/workflow-routing-defaults.ts +18 -0
  538. package/src/services/workflow-run-view.ts +4 -3
  539. package/src/services/workflow-run.test-fixture.ts +1 -1
  540. package/src/services/workflow-runs.ts +34 -22
  541. package/src/services/workflow-supervisor-state.ts +21 -1
  542. package/src/services/workflow-supervisor.ts +4 -3
  543. package/src/services/workspace-recovery.ts +4 -3
  544. package/src/setup.ts +47 -8
  545. package/src/spawn-admission.ts +10 -2
  546. package/src/spawn-placement.ts +27 -9
  547. package/src/spawn-targets.ts +8 -8
  548. package/src/sse-agent-status.ts +15 -6
  549. package/src/sse.ts +49 -24
  550. package/src/startup-context-injection.ts +61 -57
  551. package/src/steward-handoff.ts +4 -3
  552. package/src/steward-policy-cleanup.ts +9 -8
  553. package/src/steward.ts +2 -2
  554. package/src/task-dispatch-live.ts +5 -2
  555. package/src/task-dispatcher.ts +2 -2
  556. package/src/token-db.ts +2 -2
  557. package/src/token-usage-async.ts +2 -4
  558. package/src/user-awaiting-reply.ts +5 -5
  559. package/src/utils.ts +7 -0
  560. package/src/workspace-actions.ts +24 -29
  561. package/src/workspace-auto-merge.ts +14 -12
  562. package/src/workspace-changed-paths-client.ts +16 -5
  563. package/src/workspace-cleanup-stale.ts +30 -7
  564. package/src/workspace-command-settle.ts +24 -16
  565. package/src/workspace-config.ts +1 -1
  566. package/src/workspace-conflict-resolver.ts +9 -7
  567. package/src/workspace-dead-owner-recovery.ts +5 -4
  568. package/src/workspace-escalation.ts +12 -11
  569. package/src/workspace-human-escalation.ts +3 -3
  570. package/src/workspace-land-gate-watchdog.ts +3 -3
  571. package/src/workspace-land-refusal.ts +20 -0
  572. package/src/workspace-land-stopped.ts +1 -0
  573. package/src/workspace-merge.ts +10 -26
  574. package/src/workspace-nothing-to-land-notice.ts +2 -2
  575. package/src/workspace-orphans.ts +18 -37
  576. package/src/workspace-pr-completion.ts +10 -8
  577. package/src/workspace-rekey.ts +3 -3
  578. package/src/workspace-steward-failure.ts +2 -2
  579. package/src/workspace-steward-wake.ts +2 -2
  580. package/public/assets/agent-liveness-CaNwK0Zf.js +0 -2
  581. package/public/assets/overview-C1DCTzzV.js +0 -2
  582. package/public/assets/provider-display-DsuWMvVL.js +0 -2
  583. package/public/assets/run-card-CpKqRbhg.js +0 -2
  584. package/public/assets/shipping-B9YtnwtG.js +0 -2
  585. package/public/assets/store-DcClXLH0.js +0 -9
  586. package/runner/src/agent-runner/http-liveness.ts +0 -85
  587. package/src/db/on-loop-write-transaction.ts +0 -34
@@ -191,6 +191,16 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
191
191
  "projects.resolveEntries": { args: { projectId: SEED.projectId } },
192
192
  "projects.readMemoryEntriesByIds": { args: { identity: { projectId: SEED.projectId }, ids: ["pe_t9_alpha"] } },
193
193
  "projects.memoryPreamble": { args: { identity: { projectId: SEED.projectId }, options: {} } },
194
+ "issueRefs.list": { args: { limit: 10 } },
195
+ "automations.listRuns": { args: { limit: 10 } },
196
+ "automations.pendingPrecheckRuns": { args: undefined },
197
+ "automations.reconcilableRuns": { args: undefined },
198
+ "automations.dispatchableQueuedRuns": { args: undefined },
199
+ "automations.dueAutomations": { args: { now: 1_700_000_000_000 } },
200
+ "projectEntries.get": { args: { id: "pe_t9_alpha" } },
201
+ "projectEntries.chain": { args: { id: "pe_t9_alpha" } },
202
+ "projectEntries.inArea": { args: { projectId: SEED.projectId, area: "db" } },
203
+ "projectEntries.countPinnedInArea": { args: { projectId: SEED.projectId, area: "db" } },
194
204
  "projectEntries.list": { args: { projectId: SEED.projectId } },
195
205
  "projectEntries.search": { args: { projectId: SEED.projectId, query: "t9" } },
196
206
  "teams.spawnDelegation.get": { args: { teamId: SEED.teamId } },
@@ -242,6 +252,7 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
242
252
  // --- commands / codex reset / inbox / insights --------------------------------------------------
243
253
  "commands.spawnOutcome": { args: { spawnRequestId: "spawn-t9" } },
244
254
  "commands.get": { args: { id: SEED.commandId } },
255
+ "commands.latestAttempt": { args: { baseId: SEED.commandId } },
245
256
  "commands.listLegacyLandingBackfillCandidates": { args: { afterId: "", limit: 10 } },
246
257
  // `observedAt` is the dispatcher's own `ctx.now`, so the in-process and worker runs legitimately
247
258
  // stamp different clock readings for the same DB state — normalize it out or the #1960 worker-seam
@@ -714,6 +725,12 @@ export function seedReadOpMarshalingData(): void {
714
725
  VALUES ('t9', 't9 claimed task', 't9', 'info', 'in_progress', 't9', 'claim', ?, ?, ?, ?, ?)`,
715
726
  ).run(SEED.agentId, t - 1, t, t, t);
716
727
 
728
+ // An open task-bound run so the automation scan ops marshal a NON-trivial run (meta/result JSON parsed worker-side).
729
+ db.query(
730
+ `INSERT INTO automation_runs (id, automation_id, status, scheduled_for, orchestrator_id, task_id, meta, created_at, updated_at)
731
+ VALUES ('run-t9', 'automation-t9', 'running', ?, 'orch-t9', 1, '{"k":"v"}', ?, ?)`,
732
+ ).run(t, t, t);
733
+
717
734
  // Project-entries rows so `projectEntries.list`/`search` marshal NON-trivial results:
718
735
  // two active rows the query term hits, plus a retracted row proving mixed-status parity.
719
736
  for (const [id, title, body, status, updatedAt] of [
@@ -725,5 +742,6 @@ export function seedReadOpMarshalingData(): void {
725
742
  `INSERT INTO project_entries (id, project_id, kind, title, body, status, tags, author_id, source, audience, inject, sensitivity, created_at, updated_at)
726
743
  VALUES (?, ?, 'rule', ?, ?, ?, '["t9"]', ?, 'manual', 'all', 'indexed', 'normal', ?, ?)`,
727
744
  ).run(id, SEED.projectId, title, body, status, SEED.agentId, updatedAt, updatedAt);
745
+ db.query("UPDATE project_entries SET areas = ?, inject = ? WHERE id = ?").run('["db"]', "pinned", id);
728
746
  }
729
747
  }
@@ -63,6 +63,8 @@ import { ARTIFACTS_READ_OPS } from "./artifacts-read-ops.ts";
63
63
  import { PLANS_READ_OPS } from "./plans-read-ops.ts";
64
64
  import { CONTINUATION_ARCHIVES_READ_OPS } from "./continuation-archives-read-ops.ts";
65
65
  import { WORKFLOW_JOURNAL_READ_OPS } from "./workflow-journal-read-ops.ts";
66
+ import { AUTOMATION_READ_OPS } from "./automation-read-ops.ts";
67
+ import { ISSUE_REFS_READ_OPS } from "./issue-refs-read-ops.ts";
66
68
  import { PROJECTS_READ_OPS } from "./projects-read-ops.ts";
67
69
  import { PROJECT_ENTRIES_READ_OPS } from "./project-entries-read-ops.ts";
68
70
  import { CHANNELS_READ_OPS } from "./channels-read-ops.ts";
@@ -256,6 +258,8 @@ export const readOps = {
256
258
  ...WORKFLOW_JOURNAL_READ_OPS,
257
259
  ...PROJECTS_READ_OPS,
258
260
  ...PROJECT_ENTRIES_READ_OPS,
261
+ ...AUTOMATION_READ_OPS,
262
+ ...ISSUE_REFS_READ_OPS,
259
263
  ...CHANNELS_READ_OPS,
260
264
  ...INTEGRATIONS_READ_OPS,
261
265
  } satisfies Record<string, ReadOpFn>;
@@ -1,5 +1,6 @@
1
1
  import { getDb, getDbPath, runDbMaintenanceWorker } from "./connection.ts";
2
2
  import { spawnProcessGoneSql } from "./spawn-process-evidence";
3
+ import { slimSpawnProfileChunk } from "./command-agent-profile-backfill";
3
4
 
4
5
  export interface RetentionPruneInput {
5
6
  messageCutoff: number;
@@ -13,6 +14,8 @@ export interface RetentionPruneResult {
13
14
  prunedMessages: number;
14
15
  prunedActivityEvents: number;
15
16
  prunedSpawnCommands: number;
17
+ /** #3610 — legacy spawn rows whose inline agentProfile moved to the content-hash store. */
18
+ slimmedSpawnProfiles: number;
16
19
  // #1758 — true when this run stopped on its batch-size cap or its wall-time budget with candidate
17
20
  // rows still available in at least one table, i.e. it made bounded progress but did NOT drain the
18
21
  // backlog. The scheduler uses it to record the run `succeeded` (not `failed`) and to reschedule the
@@ -325,11 +328,13 @@ export function pruneRetentionBatchOnDb(db: RetentionDb, input: RetentionPruneIn
325
328
  const messages = pruneChunks(batchSize, deadlineAt, (limit) => messageChunk(db, input.messageCutoff, limit));
326
329
  const activity = pruneChunks(batchSize, deadlineAt, (limit) => activityChunk(db, input.activityCutoff, activityHotSetBoundary, limit));
327
330
  const spawnCommands = pruneChunks(batchSize, deadlineAt, (limit) => spawnCommandChunk(db, input.spawnCommandCutoff, limit));
331
+ const profiles = pruneChunks(batchSize, deadlineAt, (limit) => slimSpawnProfileChunk(db, limit));
328
332
  return {
329
333
  prunedMessages: messages.pruned,
330
334
  prunedActivityEvents: activity.pruned,
331
335
  prunedSpawnCommands: spawnCommands.pruned,
332
- moreWork: messages.moreWork || activity.moreWork || spawnCommands.moreWork,
336
+ slimmedSpawnProfiles: profiles.pruned,
337
+ moreWork: messages.moreWork || activity.moreWork || spawnCommands.moreWork || profiles.moreWork,
333
338
  };
334
339
  }
335
340
 
@@ -362,10 +367,13 @@ export async function pruneRetentionBatchOnDbAsync(
362
367
  const runMessages = (deadlineAt: number) => pruneChunksAsync(batchCap, deadlineAt, (limit) => messageChunk(db, input.messageCutoff, limit));
363
368
  const runActivity = (deadlineAt: number) => pruneChunksAsync(batchCap, deadlineAt, (limit) => activityChunk(db, input.activityCutoff, activityHotSetBoundary, limit));
364
369
  const runSpawn = (deadlineAt: number) => pruneChunksAsync(batchCap, deadlineAt, (limit) => spawnCommandChunk(db, input.spawnCommandCutoff, limit));
370
+ // After the deletes, so rows about to age out are never rewritten first.
371
+ const runProfiles = (deadlineAt: number) => pruneChunksAsync(batchCap, deadlineAt, (limit) => slimSpawnProfileChunk(db, limit));
365
372
 
366
373
  let messages: { pruned: number; moreWork: boolean };
367
374
  let activity: { pruned: number; moreWork: boolean };
368
375
  let spawnCommands: { pruned: number; moreWork: boolean };
376
+ let profiles: { pruned: number; moreWork: boolean };
369
377
  if (options.catchUp) {
370
378
  // Cumulative per-table deadline checkpoints against one shared clock. With the batch cap unreachable,
371
379
  // a single shared deadline would let a large `messages` backlog consume the whole budget before
@@ -377,6 +385,7 @@ export async function pruneRetentionBatchOnDbAsync(
377
385
  const third = totalBudget / 3;
378
386
  activity = await runActivity(start + third);
379
387
  spawnCommands = await runSpawn(start + 2 * third);
388
+ profiles = await runProfiles(start + 2 * third);
380
389
  messages = await runMessages(start + totalBudget);
381
390
  } else {
382
391
  // Inline-async fallback (:memory:): one shared deadline + the operator batch cap, unchanged.
@@ -384,12 +393,14 @@ export async function pruneRetentionBatchOnDbAsync(
384
393
  messages = await runMessages(deadlineAt);
385
394
  activity = await runActivity(deadlineAt);
386
395
  spawnCommands = await runSpawn(deadlineAt);
396
+ profiles = await runProfiles(deadlineAt);
387
397
  }
388
398
  return {
389
399
  prunedMessages: messages.pruned,
390
400
  prunedActivityEvents: activity.pruned,
391
401
  prunedSpawnCommands: spawnCommands.pruned,
392
- moreWork: messages.moreWork || activity.moreWork || spawnCommands.moreWork,
402
+ slimmedSpawnProfiles: profiles.pruned,
403
+ moreWork: messages.moreWork || activity.moreWork || spawnCommands.moreWork || profiles.moreWork,
393
404
  };
394
405
  }
395
406
 
@@ -0,0 +1,8 @@
1
+ import { createCommandInternal, type CreateCommandWriteArgs } from "../commands-db";
2
+ import { upsertReviewRefCleanup } from "./review-ref-cleanups";
3
+ export type ReviewCleanupInput = Omit<Parameters<typeof upsertReviewRefCleanup>[0], "id">;
4
+ export function createReviewPublishBody(args: { command: CreateCommandWriteArgs; cleanup: ReviewCleanupInput }, now: number) {
5
+ const command = createCommandInternal(args.command, now);
6
+ upsertReviewRefCleanup({ ...args.cleanup, id: command.id });
7
+ return command;
8
+ }
@@ -0,0 +1,19 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { getGateway } from "./gateway";
3
+ import { emitWorkspaceChange, emitWorkspaceCreate, type RecoveredWorkspaceInput } from "./workspaces";
4
+ import type { upsertWorkspaceRow } from "./workspaces";
5
+ import type { recoverWorkspaceBody, expireRuntimeCommands } from "./runtime-admin-write-ops";
6
+
7
+ export async function upsertWorkspaceAsync(input: Parameters<typeof upsertWorkspaceRow>[0]) {
8
+ const result = await getGateway().write("workspaces.upsertRow", input, { idempotencyKey: randomUUID() }) as unknown as ReturnType<typeof upsertWorkspaceRow>;
9
+ if (result.changed) emitWorkspaceChange(result.workspace);
10
+ return result.workspace;
11
+ }
12
+ export async function insertRecoveredWorkspaceAsync(input: RecoveredWorkspaceInput): Promise<ReturnType<typeof recoverWorkspaceBody>> {
13
+ const result = await getGateway().write("workspaces.recover", input, { idempotencyKey: randomUUID() }) as unknown as ReturnType<typeof recoverWorkspaceBody>;
14
+ if (result.created) { emitWorkspaceChange(result.workspace); emitWorkspaceCreate(result.workspace); }
15
+ return result;
16
+ }
17
+ export function expireCommandsAsync(now = Date.now()): Promise<ReturnType<typeof expireRuntimeCommands>> {
18
+ return getGateway().write("commands.expireRuntime", { now }, { idempotencyKey: randomUUID(), critical: true }) as unknown as Promise<ReturnType<typeof expireRuntimeCommands>>;
19
+ }
@@ -0,0 +1,36 @@
1
+ import { createUserInvite, acceptUserInvite } from "./user-invites";
2
+ import { getAgent } from "./agents";
3
+ import { getWorkspace, upsertWorkspaceRow, type RecoveredWorkspaceInput } from "./workspaces";
4
+ import { expireCommands, updateCommandInternal, applyCommandUpdatePostCommit } from "../commands-db";
5
+ import { redactCommandSecrets } from "../command-secrets";
6
+ import type { Command } from "../types";
7
+ import type { WriterOpSpec } from "./write-ops";
8
+
9
+ export function recoverWorkspaceBody(input: RecoveredWorkspaceInput, now: number) {
10
+ const existing = getWorkspace(input.id);
11
+ if (existing) return { workspace: existing, created: false };
12
+ const result = upsertWorkspaceRow({ id: input.id, repoRoot: input.repoRoot, sourceCwd: input.sourceCwd, worktreePath: input.worktreePath,
13
+ branch: input.branch, baseRef: input.baseRef, baseSha: input.baseSha, mode: "isolated", status: "active", orchestratorId: input.orchestratorId,
14
+ ownerAgentId: input.ownerAgentId, metadata: { reregistered: true, ...input.landMetadata } }, now);
15
+ return { workspace: result.workspace, created: result.created };
16
+ }
17
+ export function expireRuntimeCommands(now: number) {
18
+ return expireCommands(now, {
19
+ isTargetGone: command => Boolean(command.target && command.target !== "system" && (!getAgent(command.target) || getAgent(command.target)!.status === "offline")),
20
+ update: (id, input, options) => {
21
+ const result = updateCommandInternal(id, input, options, now);
22
+ return applyCommandUpdatePostCommit(result.previousStatus, result.command);
23
+ },
24
+ });
25
+ }
26
+ export const RUNTIME_ADMIN_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = Object.freeze({
27
+ "userInvites.create": { offLoop: true, idempotent: false,
28
+ fn: (input: Parameters<typeof createUserInvite>[0], ctx) => createUserInvite({ ...input, now: input.now ?? ctx.now }),
29
+ // The invite code is a bearer credential returned once, like a token mint (#1870).
30
+ serializeIdempotencyResult: value => ({ invite: (value as ReturnType<typeof createUserInvite>).invite }) },
31
+ "userInvites.accept": { offLoop: true, idempotent: false, fn: (input: Parameters<typeof acceptUserInvite>[0], ctx) => acceptUserInvite({ ...input, now: input.now ?? ctx.now }) },
32
+ "workspaces.upsertRow": { offLoop: true, idempotent: false, fn: (input: Parameters<typeof upsertWorkspaceRow>[0], ctx) => upsertWorkspaceRow(input, ctx.now) },
33
+ "workspaces.recover": { offLoop: true, idempotent: false, fn: (input: RecoveredWorkspaceInput, ctx) => recoverWorkspaceBody(input, ctx.now) },
34
+ "commands.expireRuntime": { offLoop: true, idempotent: false, fn: (args: { now?: number }, ctx) => expireRuntimeCommands(args.now ?? ctx.now),
35
+ serializeIdempotencyResult: value => (value as Command[]).map(command => redactCommandSecrets(command)) },
36
+ });
@@ -0,0 +1,288 @@
1
+ import type { pruneWorkspaceOrphanAlerts, pruneOrphanedSharedWorkspaces, claimWorkspaceOrphanAlert, claimWorkspaceHumanEscalationAlert, pruneStaleWorkspaceHumanEscalationAlerts, reelectRepoSteward } from "./workspaces";
2
+ import type { upsertProjectTrustApproval } from "./project-trust-approvals";
3
+ import type { setProjectJournalFields } from "./project-journal";
4
+ import type { promoteLineageCapturedResponse, markSelfResumeContinuationIngested } from "./messages";
5
+ import type { acquireMergePause, acquireMergeLease, releaseMergeLease, releaseExpiredMergeLeases, releaseExpiredMergePauses, renewMergePause, releaseMergePause } from "./merge-lease";
6
+ import type { ingestIntegrationEvent, upsertIntegrationRegistry } from "./integrations";
7
+ import type { refreshPendingLandQueueLease } from "./commands-claim-admission";
8
+ import type { writeEntry, retractEntry } from "./blackboard";
9
+ import type { fencePublishForPush, cancelPendingCommand } from "../commands-db";
10
+ import { randomUUID } from "node:crypto";
11
+ import { getGateway } from "./gateway";
12
+ import { deferLineageReport } from "./deferred-lineage-reports";
13
+ import { applyLineageReportEffects } from "./messages";
14
+ import { evictPendingPresence } from "./presence-buffer";
15
+ import type { deleteOrchestratorRow } from "./orchestrators";
16
+ import type { setUserSecret, createAuthIdentity } from "./auth-identities";
17
+ import type { markWorkspaceCarryPending, confirmWorkspaceCarryPendingForTask } from "./carry-pending-marker";
18
+ import type { ensureContinuationEnvelope, updateContinuationObjective } from "./continuations";
19
+ import type { releaseDriveLease, releaseExpiredDriveLeases } from "./drive-leases";
20
+ import type { finishIdleDigestScan, updateIdleDigestScan, startIdleDigestWindow } from "./idle-digest";
21
+ import type { associateIssue, removeAssociation } from "./issue-associations";
22
+ import type { insertLandGateAttestation } from "./land-gate-attestations";
23
+ import type { insertLandingReceipt } from "./landing-receipts";
24
+ import type { recordIssueLifecycleComment } from "./long-running-work";
25
+ import type { pauseMaintenanceJob, resumeMaintenanceJob } from "./maintenance-pauses";
26
+ import type { updateOpenOperatorDecision, withdrawOpenOperatorDecision } from "./operator-decisions";
27
+ import type { deleteOrchestrator } from "./orchestrators";
28
+ import type { upsertTemplate, resetTemplate } from "./prompt-templates";
29
+ import type { setReviewRefFenceToken, markReviewRefPublished, markReviewRefAnnounced, markReviewRefFailed, markReviewRefClosed, recordReviewRefCleanupDispatch, deleteReviewRefCleanup } from "./review-ref-cleanups";
30
+ import type { insertTaskEvent } from "./task-core";
31
+ import type { clearTeamIdleEntry, setTeamIdleEntry } from "./team-idle";
32
+ import type { updateUserProfile, updateUserAccess } from "./users";
33
+ import type { upsertTokenProfile, updateTokenProfile, deleteTokenProfile } from "../token-db";
34
+
35
+ export function setUserSecretAsync(...args: Parameters<typeof setUserSecret>): Promise<ReturnType<typeof setUserSecret>> {
36
+ return getGateway().write("runtimeTail.setUserSecret", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof setUserSecret>>;
37
+ }
38
+
39
+ export function createAuthIdentityAsync(...args: Parameters<typeof createAuthIdentity>): Promise<ReturnType<typeof createAuthIdentity>> {
40
+ return getGateway().write("runtimeTail.createAuthIdentity", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof createAuthIdentity>>;
41
+ }
42
+
43
+ export function retractEntryAsync(...args: Parameters<typeof retractEntry>): Promise<ReturnType<typeof retractEntry>> {
44
+ return getGateway().write("runtimeTail.retractEntry", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof retractEntry>>;
45
+ }
46
+
47
+ export function markWorkspaceCarryPendingAsync(...args: Parameters<typeof markWorkspaceCarryPending>): Promise<ReturnType<typeof markWorkspaceCarryPending>> {
48
+ return getGateway().write("runtimeTail.markWorkspaceCarryPending", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markWorkspaceCarryPending>>;
49
+ }
50
+
51
+ export function confirmWorkspaceCarryPendingForTaskAsync(...args: Parameters<typeof confirmWorkspaceCarryPendingForTask>): Promise<ReturnType<typeof confirmWorkspaceCarryPendingForTask>> {
52
+ return getGateway().write("runtimeTail.confirmWorkspaceCarryPendingForTask", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof confirmWorkspaceCarryPendingForTask>>;
53
+ }
54
+
55
+ export function ensureContinuationEnvelopeAsync(...args: Parameters<typeof ensureContinuationEnvelope>): Promise<ReturnType<typeof ensureContinuationEnvelope>> {
56
+ return getGateway().write("runtimeTail.ensureContinuationEnvelope", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof ensureContinuationEnvelope>>;
57
+ }
58
+
59
+ export function updateContinuationObjectiveAsync(...args: Parameters<typeof updateContinuationObjective>): Promise<ReturnType<typeof updateContinuationObjective>> {
60
+ return getGateway().write("runtimeTail.updateContinuationObjective", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateContinuationObjective>>;
61
+ }
62
+
63
+ export function releaseDriveLeaseAsync(...args: Parameters<typeof releaseDriveLease>): Promise<ReturnType<typeof releaseDriveLease>> {
64
+ return getGateway().write("runtimeTail.releaseDriveLease", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseDriveLease>>;
65
+ }
66
+
67
+ export function releaseExpiredDriveLeasesAsync(...args: Parameters<typeof releaseExpiredDriveLeases>): Promise<ReturnType<typeof releaseExpiredDriveLeases>> {
68
+ return getGateway().write("runtimeTail.releaseExpiredDriveLeases", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseExpiredDriveLeases>>;
69
+ }
70
+
71
+ export function finishIdleDigestScanAsync(...args: Parameters<typeof finishIdleDigestScan>): Promise<ReturnType<typeof finishIdleDigestScan>> {
72
+ return getGateway().write("runtimeTail.finishIdleDigestScan", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof finishIdleDigestScan>>;
73
+ }
74
+
75
+ export function updateIdleDigestScanAsync(...args: Parameters<typeof updateIdleDigestScan>): Promise<ReturnType<typeof updateIdleDigestScan>> {
76
+ return getGateway().write("runtimeTail.updateIdleDigestScan", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateIdleDigestScan>>;
77
+ }
78
+
79
+ export function startIdleDigestWindowAsync(...args: Parameters<typeof startIdleDigestWindow>): Promise<ReturnType<typeof startIdleDigestWindow>> {
80
+ return getGateway().write("runtimeTail.startIdleDigestWindow", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof startIdleDigestWindow>>;
81
+ }
82
+
83
+ export function associateIssueAsync(...args: Parameters<typeof associateIssue>): Promise<ReturnType<typeof associateIssue>> {
84
+ return getGateway().write("runtimeTail.associateIssue", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof associateIssue>>;
85
+ }
86
+
87
+ export function removeAssociationAsync(...args: Parameters<typeof removeAssociation>): Promise<ReturnType<typeof removeAssociation>> {
88
+ return getGateway().write("runtimeTail.removeAssociation", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof removeAssociation>>;
89
+ }
90
+
91
+ export function insertLandGateAttestationAsync(...args: Parameters<typeof insertLandGateAttestation>): Promise<ReturnType<typeof insertLandGateAttestation>> {
92
+ return getGateway().write("runtimeTail.insertLandGateAttestation", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof insertLandGateAttestation>>;
93
+ }
94
+
95
+ export function insertLandingReceiptAsync(...args: Parameters<typeof insertLandingReceipt>): Promise<ReturnType<typeof insertLandingReceipt>> {
96
+ return getGateway().write("runtimeTail.insertLandingReceipt", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof insertLandingReceipt>>;
97
+ }
98
+
99
+ export function recordIssueLifecycleCommentAsync(...args: Parameters<typeof recordIssueLifecycleComment>): Promise<ReturnType<typeof recordIssueLifecycleComment>> {
100
+ return getGateway().write("runtimeTail.recordIssueLifecycleComment", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof recordIssueLifecycleComment>>;
101
+ }
102
+
103
+ export function pauseMaintenanceJobAsync(...args: Parameters<typeof pauseMaintenanceJob>): Promise<ReturnType<typeof pauseMaintenanceJob>> {
104
+ return getGateway().write("runtimeTail.pauseMaintenanceJob", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof pauseMaintenanceJob>>;
105
+ }
106
+
107
+ export function resumeMaintenanceJobAsync(...args: Parameters<typeof resumeMaintenanceJob>): Promise<ReturnType<typeof resumeMaintenanceJob>> {
108
+ return getGateway().write("runtimeTail.resumeMaintenanceJob", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof resumeMaintenanceJob>>;
109
+ }
110
+
111
+ export function releaseMergeLeaseAsync(...args: Parameters<typeof releaseMergeLease>): Promise<ReturnType<typeof releaseMergeLease>> {
112
+ return getGateway().write("runtimeTail.releaseMergeLease", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseMergeLease>>;
113
+ }
114
+
115
+ export function releaseExpiredMergeLeasesAsync(...args: Parameters<typeof releaseExpiredMergeLeases>): Promise<ReturnType<typeof releaseExpiredMergeLeases>> {
116
+ return getGateway().write("runtimeTail.releaseExpiredMergeLeases", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseExpiredMergeLeases>>;
117
+ }
118
+
119
+ export function releaseExpiredMergePausesAsync(...args: Parameters<typeof releaseExpiredMergePauses>): Promise<ReturnType<typeof releaseExpiredMergePauses>> {
120
+ return getGateway().write("runtimeTail.releaseExpiredMergePauses", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseExpiredMergePauses>>;
121
+ }
122
+
123
+ export function renewMergePauseAsync(...args: Parameters<typeof renewMergePause>): Promise<ReturnType<typeof renewMergePause>> {
124
+ return getGateway().write("runtimeTail.renewMergePause", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof renewMergePause>>;
125
+ }
126
+
127
+ export function releaseMergePauseAsync(...args: Parameters<typeof releaseMergePause>): Promise<ReturnType<typeof releaseMergePause>> {
128
+ return getGateway().write("runtimeTail.releaseMergePause", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof releaseMergePause>>;
129
+ }
130
+
131
+ export function markSelfResumeContinuationIngestedAsync(...args: Parameters<typeof markSelfResumeContinuationIngested>): Promise<ReturnType<typeof markSelfResumeContinuationIngested>> {
132
+ return getGateway().write("runtimeTail.markSelfResumeContinuationIngested", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markSelfResumeContinuationIngested>>;
133
+ }
134
+
135
+ export function updateOpenOperatorDecisionAsync(...args: Parameters<typeof updateOpenOperatorDecision>): Promise<ReturnType<typeof updateOpenOperatorDecision>> {
136
+ return getGateway().write("runtimeTail.updateOpenOperatorDecision", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateOpenOperatorDecision>>;
137
+ }
138
+
139
+ export function withdrawOpenOperatorDecisionAsync(...args: Parameters<typeof withdrawOpenOperatorDecision>): Promise<ReturnType<typeof withdrawOpenOperatorDecision>> {
140
+ return getGateway().write("runtimeTail.withdrawOpenOperatorDecision", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof withdrawOpenOperatorDecision>>;
141
+ }
142
+
143
+ export async function deleteOrchestratorAsync(...args: Parameters<typeof deleteOrchestrator>): Promise<ReturnType<typeof deleteOrchestrator>> {
144
+ const result = await getGateway().write("runtimeTail.deleteOrchestrator", args, { idempotencyKey: randomUUID() }) as unknown as ReturnType<typeof deleteOrchestratorRow>;
145
+ if (result.agentId) evictPendingPresence(result.agentId);
146
+ return result.deleted;
147
+ }
148
+
149
+ export function upsertTemplateAsync(...args: Parameters<typeof upsertTemplate>): Promise<ReturnType<typeof upsertTemplate>> {
150
+ return getGateway().write("runtimeTail.upsertTemplate", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof upsertTemplate>>;
151
+ }
152
+
153
+ export function resetTemplateAsync(...args: Parameters<typeof resetTemplate>): Promise<ReturnType<typeof resetTemplate>> {
154
+ return getGateway().write("runtimeTail.resetTemplate", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof resetTemplate>>;
155
+ }
156
+
157
+ export function setReviewRefFenceTokenAsync(...args: Parameters<typeof setReviewRefFenceToken>): Promise<ReturnType<typeof setReviewRefFenceToken>> {
158
+ return getGateway().write("runtimeTail.setReviewRefFenceToken", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof setReviewRefFenceToken>>;
159
+ }
160
+
161
+ export function markReviewRefPublishedAsync(...args: Parameters<typeof markReviewRefPublished>): Promise<ReturnType<typeof markReviewRefPublished>> {
162
+ return getGateway().write("runtimeTail.markReviewRefPublished", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markReviewRefPublished>>;
163
+ }
164
+
165
+ export function markReviewRefAnnouncedAsync(...args: Parameters<typeof markReviewRefAnnounced>): Promise<ReturnType<typeof markReviewRefAnnounced>> {
166
+ return getGateway().write("runtimeTail.markReviewRefAnnounced", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markReviewRefAnnounced>>;
167
+ }
168
+
169
+ export function markReviewRefFailedAsync(...args: Parameters<typeof markReviewRefFailed>): Promise<ReturnType<typeof markReviewRefFailed>> {
170
+ return getGateway().write("runtimeTail.markReviewRefFailed", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markReviewRefFailed>>;
171
+ }
172
+
173
+ export function markReviewRefClosedAsync(...args: Parameters<typeof markReviewRefClosed>): Promise<ReturnType<typeof markReviewRefClosed>> {
174
+ return getGateway().write("runtimeTail.markReviewRefClosed", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof markReviewRefClosed>>;
175
+ }
176
+
177
+ export function recordReviewRefCleanupDispatchAsync(...args: Parameters<typeof recordReviewRefCleanupDispatch>): Promise<ReturnType<typeof recordReviewRefCleanupDispatch>> {
178
+ return getGateway().write("runtimeTail.recordReviewRefCleanupDispatch", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof recordReviewRefCleanupDispatch>>;
179
+ }
180
+
181
+ export function deleteReviewRefCleanupAsync(...args: Parameters<typeof deleteReviewRefCleanup>): Promise<ReturnType<typeof deleteReviewRefCleanup>> {
182
+ return getGateway().write("runtimeTail.deleteReviewRefCleanup", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof deleteReviewRefCleanup>>;
183
+ }
184
+
185
+ export function insertTaskEventAsync(...args: Parameters<typeof insertTaskEvent>): Promise<ReturnType<typeof insertTaskEvent>> {
186
+ return getGateway().write("runtimeTail.insertTaskEvent", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof insertTaskEvent>>;
187
+ }
188
+
189
+ export function clearTeamIdleEntryAsync(...args: Parameters<typeof clearTeamIdleEntry>): Promise<ReturnType<typeof clearTeamIdleEntry>> {
190
+ return getGateway().write("runtimeTail.clearTeamIdleEntry", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof clearTeamIdleEntry>>;
191
+ }
192
+
193
+ export function setTeamIdleEntryAsync(...args: Parameters<typeof setTeamIdleEntry>): Promise<ReturnType<typeof setTeamIdleEntry>> {
194
+ return getGateway().write("runtimeTail.setTeamIdleEntry", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof setTeamIdleEntry>>;
195
+ }
196
+
197
+ export function updateUserProfileAsync(...args: Parameters<typeof updateUserProfile>): Promise<ReturnType<typeof updateUserProfile>> {
198
+ return getGateway().write("runtimeTail.updateUserProfile", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateUserProfile>>;
199
+ }
200
+
201
+ export function updateUserAccessAsync(...args: Parameters<typeof updateUserAccess>): Promise<ReturnType<typeof updateUserAccess>> {
202
+ return getGateway().write("runtimeTail.updateUserAccess", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateUserAccess>>;
203
+ }
204
+
205
+ export function claimWorkspaceOrphanAlertAsync(...args: Parameters<typeof claimWorkspaceOrphanAlert>): Promise<ReturnType<typeof claimWorkspaceOrphanAlert>> {
206
+ return getGateway().write("runtimeTail.claimWorkspaceOrphanAlert", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof claimWorkspaceOrphanAlert>>;
207
+ }
208
+
209
+ export function claimWorkspaceHumanEscalationAlertAsync(...args: Parameters<typeof claimWorkspaceHumanEscalationAlert>): Promise<ReturnType<typeof claimWorkspaceHumanEscalationAlert>> {
210
+ return getGateway().write("runtimeTail.claimWorkspaceHumanEscalationAlert", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof claimWorkspaceHumanEscalationAlert>>;
211
+ }
212
+
213
+ export function pruneStaleWorkspaceHumanEscalationAlertsAsync(...args: Parameters<typeof pruneStaleWorkspaceHumanEscalationAlerts>): Promise<ReturnType<typeof pruneStaleWorkspaceHumanEscalationAlerts>> {
214
+ return getGateway().write("runtimeTail.pruneStaleWorkspaceHumanEscalationAlerts", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof pruneStaleWorkspaceHumanEscalationAlerts>>;
215
+ }
216
+
217
+ export function reelectRepoStewardAsync(...args: Parameters<typeof reelectRepoSteward>): Promise<ReturnType<typeof reelectRepoSteward>> {
218
+ return getGateway().write("runtimeTail.reelectRepoSteward", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof reelectRepoSteward>>;
219
+ }
220
+
221
+ export function upsertTokenProfileAsync(...args: Parameters<typeof upsertTokenProfile>): Promise<ReturnType<typeof upsertTokenProfile>> {
222
+ return getGateway().write("runtimeTail.upsertTokenProfile", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof upsertTokenProfile>>;
223
+ }
224
+
225
+ export function updateTokenProfileAsync(...args: Parameters<typeof updateTokenProfile>): Promise<ReturnType<typeof updateTokenProfile>> {
226
+ return getGateway().write("runtimeTail.updateTokenProfile", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof updateTokenProfile>>;
227
+ }
228
+
229
+ export function deleteTokenProfileAsync(...args: Parameters<typeof deleteTokenProfile>): Promise<ReturnType<typeof deleteTokenProfile>> {
230
+ return getGateway().write("runtimeTail.deleteTokenProfile", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof deleteTokenProfile>>;
231
+ }
232
+
233
+ export function cancelPendingCommandAsync(...args: Parameters<typeof cancelPendingCommand>): Promise<ReturnType<typeof cancelPendingCommand>> {
234
+ return getGateway().write("runtimeTail.cancelPendingCommand", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof cancelPendingCommand>>;
235
+ }
236
+
237
+ export function fencePublishForPushAsync(...args: Parameters<typeof fencePublishForPush>): Promise<ReturnType<typeof fencePublishForPush>> {
238
+ return getGateway().write("runtimeTail.fencePublishForPush", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof fencePublishForPush>>;
239
+ }
240
+
241
+ export function writeEntryAsync(...args: Parameters<typeof writeEntry>): Promise<ReturnType<typeof writeEntry>> {
242
+ return getGateway().write("runtimeTail.writeEntry", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof writeEntry>>;
243
+ }
244
+
245
+ export function refreshPendingLandQueueLeaseAsync(...args: Parameters<typeof refreshPendingLandQueueLease>): Promise<ReturnType<typeof refreshPendingLandQueueLease>> {
246
+ return getGateway().write("runtimeTail.refreshPendingLandQueueLease", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof refreshPendingLandQueueLease>>;
247
+ }
248
+
249
+ export function upsertIntegrationRegistryAsync(...args: Parameters<typeof upsertIntegrationRegistry>): Promise<ReturnType<typeof upsertIntegrationRegistry>> {
250
+ return getGateway().write("runtimeTail.upsertIntegrationRegistry", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof upsertIntegrationRegistry>>;
251
+ }
252
+
253
+ export function ingestIntegrationEventAsync(...args: Parameters<typeof ingestIntegrationEvent>): Promise<ReturnType<typeof ingestIntegrationEvent>> {
254
+ return getGateway().write("runtimeTail.ingestIntegrationEvent", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof ingestIntegrationEvent>>;
255
+ }
256
+
257
+ export function acquireMergeLeaseAsync(...args: Parameters<typeof acquireMergeLease>): Promise<ReturnType<typeof acquireMergeLease>> {
258
+ return getGateway().write("runtimeTail.acquireMergeLease", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof acquireMergeLease>>;
259
+ }
260
+
261
+ export function acquireMergePauseAsync(...args: Parameters<typeof acquireMergePause>): Promise<ReturnType<typeof acquireMergePause>> {
262
+ return getGateway().write("runtimeTail.acquireMergePause", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof acquireMergePause>>;
263
+ }
264
+
265
+ export async function promoteLineageCapturedResponseAsync(message: Parameters<typeof promoteLineageCapturedResponse>[0]): Promise<ReturnType<typeof promoteLineageCapturedResponse>> {
266
+ const value = await getGateway().write("runtimeTail.promoteLineageCapturedResponse", [message], { idempotencyKey: randomUUID() }) as unknown as {
267
+ result: ReturnType<typeof promoteLineageCapturedResponse>; deferred: Array<{ childId: string; messageId: number }>;
268
+ };
269
+ for (const effect of value.deferred) deferLineageReport(effect.childId, effect.messageId);
270
+ applyLineageReportEffects(value.result);
271
+ return value.result;
272
+ }
273
+
274
+ export function setProjectJournalFieldsAsync(...args: Parameters<typeof setProjectJournalFields>): Promise<ReturnType<typeof setProjectJournalFields>> {
275
+ return getGateway().write("runtimeTail.setProjectJournalFields", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof setProjectJournalFields>>;
276
+ }
277
+
278
+ export function upsertProjectTrustApprovalAsync(...args: Parameters<typeof upsertProjectTrustApproval>): Promise<ReturnType<typeof upsertProjectTrustApproval>> {
279
+ return getGateway().write("runtimeTail.upsertProjectTrustApproval", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof upsertProjectTrustApproval>>;
280
+ }
281
+
282
+ export function pruneOrphanedSharedWorkspacesAsync(...args: Parameters<typeof pruneOrphanedSharedWorkspaces>): Promise<ReturnType<typeof pruneOrphanedSharedWorkspaces>> {
283
+ return getGateway().write("runtimeTail.pruneOrphanedSharedWorkspaces", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof pruneOrphanedSharedWorkspaces>>;
284
+ }
285
+
286
+ export function pruneWorkspaceOrphanAlertsAsync(...args: Parameters<typeof pruneWorkspaceOrphanAlerts>): Promise<ReturnType<typeof pruneWorkspaceOrphanAlerts>> {
287
+ return getGateway().write("runtimeTail.pruneWorkspaceOrphanAlerts", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof pruneWorkspaceOrphanAlerts>>;
288
+ }
@@ -0,0 +1,97 @@
1
+ import { redactCommandSecrets } from "../command-secrets";
2
+ import { pruneWorkspaceOrphanAlerts, pruneOrphanedSharedWorkspaces, claimWorkspaceOrphanAlert, claimWorkspaceHumanEscalationAlert, pruneStaleWorkspaceHumanEscalationAlerts, reelectRepoSteward } from "./workspaces";
3
+ import { upsertProjectTrustApproval } from "./project-trust-approvals";
4
+ import { setProjectJournalFields } from "./project-journal";
5
+ import { promoteLineageCapturedResponse, markSelfResumeContinuationIngested } from "./messages";
6
+ import { acquireMergePause, acquireMergeLease, releaseMergeLease, releaseExpiredMergeLeases, releaseExpiredMergePauses, renewMergePause, releaseMergePause } from "./merge-lease";
7
+ import { ingestIntegrationEvent, upsertIntegrationRegistry } from "./integrations";
8
+ import { refreshPendingLandQueueLease } from "./commands-claim-admission";
9
+ import { writeEntry, retractEntry } from "./blackboard";
10
+ import { fencePublishForPush, cancelPendingCommand } from "../commands-db";
11
+ import { setUserSecret, createAuthIdentity } from "./auth-identities";
12
+ import { markWorkspaceCarryPending, confirmWorkspaceCarryPendingForTask } from "./carry-pending-marker";
13
+ import { ensureContinuationEnvelope, updateContinuationObjective } from "./continuations";
14
+ import { releaseDriveLease, releaseExpiredDriveLeases } from "./drive-leases";
15
+ import { finishIdleDigestScan, updateIdleDigestScan, startIdleDigestWindow } from "./idle-digest";
16
+ import { associateIssue, removeAssociation } from "./issue-associations";
17
+ import { insertLandGateAttestation } from "./land-gate-attestations";
18
+ import { insertLandingReceipt } from "./landing-receipts";
19
+ import { recordIssueLifecycleComment } from "./long-running-work";
20
+ import { pauseMaintenanceJob, resumeMaintenanceJob } from "./maintenance-pauses";
21
+ import { updateOpenOperatorDecision, withdrawOpenOperatorDecision } from "./operator-decisions";
22
+ import { deleteOrchestratorRow } from "./orchestrators";
23
+ import { upsertTemplate, resetTemplate } from "./prompt-templates";
24
+ import { setReviewRefFenceToken, markReviewRefPublished, markReviewRefAnnounced, markReviewRefFailed, markReviewRefClosed, recordReviewRefCleanupDispatch, deleteReviewRefCleanup } from "./review-ref-cleanups";
25
+ import { insertTaskEvent } from "./task-core";
26
+ import { clearTeamIdleEntry, setTeamIdleEntry } from "./team-idle";
27
+ import { updateUserProfile, updateUserAccess } from "./users";
28
+ import { upsertTokenProfile, updateTokenProfile, deleteTokenProfile } from "../token-db";
29
+ import type { WriterOpSpec } from "./write-ops";
30
+
31
+ export const RUNTIME_TAIL_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = Object.freeze({
32
+ "runtimeTail.setUserSecret": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof setUserSecret>) => setUserSecret(...args) ?? null },
33
+ "runtimeTail.createAuthIdentity": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof createAuthIdentity>, ctx) => { const values: Parameters<typeof createAuthIdentity> = [...args]; values[1] ??= ctx.now; return createAuthIdentity(...values) ?? null; } },
34
+ "runtimeTail.retractEntry": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof retractEntry>, ctx) => { const values: Parameters<typeof retractEntry> = [...args]; values[1] ??= ctx.now; return retractEntry(...values) ?? null; } },
35
+ "runtimeTail.markWorkspaceCarryPending": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markWorkspaceCarryPending>) => markWorkspaceCarryPending(...args) ?? null },
36
+ "runtimeTail.confirmWorkspaceCarryPendingForTask": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof confirmWorkspaceCarryPendingForTask>) => confirmWorkspaceCarryPendingForTask(...args) ?? null },
37
+ "runtimeTail.ensureContinuationEnvelope": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof ensureContinuationEnvelope>, ctx) => { const values: Parameters<typeof ensureContinuationEnvelope> = [...args]; values[1] ??= ctx.now; return ensureContinuationEnvelope(...values) ?? null; } },
38
+ "runtimeTail.updateContinuationObjective": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateContinuationObjective>, ctx) => { const values: Parameters<typeof updateContinuationObjective> = [...args]; values[1] ??= ctx.now; return updateContinuationObjective(...values) ?? null; } },
39
+ "runtimeTail.releaseDriveLease": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseDriveLease>) => releaseDriveLease(...args) ?? null },
40
+ "runtimeTail.releaseExpiredDriveLeases": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseExpiredDriveLeases>, ctx) => { const values: Parameters<typeof releaseExpiredDriveLeases> = [...args]; values[0] ??= ctx.now; return releaseExpiredDriveLeases(...values) ?? null; } },
41
+ "runtimeTail.finishIdleDigestScan": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof finishIdleDigestScan>) => finishIdleDigestScan(...args) ?? null },
42
+ "runtimeTail.updateIdleDigestScan": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateIdleDigestScan>) => updateIdleDigestScan(...args) ?? null },
43
+ "runtimeTail.startIdleDigestWindow": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof startIdleDigestWindow>) => startIdleDigestWindow(...args) ?? null },
44
+ "runtimeTail.associateIssue": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof associateIssue>, ctx) => { const values: Parameters<typeof associateIssue> = [...args]; values[4] ??= ctx.now; return associateIssue(...values) ?? null; } },
45
+ "runtimeTail.removeAssociation": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof removeAssociation>) => removeAssociation(...args) ?? null },
46
+ "runtimeTail.insertLandGateAttestation": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof insertLandGateAttestation>, ctx) => { const values: Parameters<typeof insertLandGateAttestation> = [...args]; values[1] ??= ctx.now; return insertLandGateAttestation(...values) ?? null; } },
47
+ "runtimeTail.insertLandingReceipt": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof insertLandingReceipt>, ctx) => { const values: Parameters<typeof insertLandingReceipt> = [...args]; values[1] ??= ctx.now; return insertLandingReceipt(...values) ?? null; } },
48
+ "runtimeTail.recordIssueLifecycleComment": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof recordIssueLifecycleComment>) => recordIssueLifecycleComment(...args) ?? null },
49
+ "runtimeTail.pauseMaintenanceJob": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof pauseMaintenanceJob>, ctx) => { const values: Parameters<typeof pauseMaintenanceJob> = [...args]; values[1] ??= ctx.now; return pauseMaintenanceJob(...values) ?? null; } },
50
+ "runtimeTail.resumeMaintenanceJob": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof resumeMaintenanceJob>) => resumeMaintenanceJob(...args) ?? null },
51
+ "runtimeTail.releaseMergeLease": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseMergeLease>) => releaseMergeLease(...args) ?? null },
52
+ "runtimeTail.releaseExpiredMergeLeases": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseExpiredMergeLeases>, ctx) => { const values: Parameters<typeof releaseExpiredMergeLeases> = [...args]; values[0] ??= ctx.now; return releaseExpiredMergeLeases(...values) ?? null; } },
53
+ "runtimeTail.releaseExpiredMergePauses": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseExpiredMergePauses>, ctx) => { const values: Parameters<typeof releaseExpiredMergePauses> = [...args]; values[0] ??= ctx.now; return releaseExpiredMergePauses(...values) ?? null; } },
54
+ "runtimeTail.renewMergePause": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof renewMergePause>, ctx) => { const values: Parameters<typeof renewMergePause> = [...args]; values[2] ??= ctx.now; return renewMergePause(...values) ?? null; } },
55
+ "runtimeTail.releaseMergePause": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof releaseMergePause>) => releaseMergePause(...args) ?? null },
56
+ "runtimeTail.markSelfResumeContinuationIngested": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markSelfResumeContinuationIngested>, ctx) => { const values: Parameters<typeof markSelfResumeContinuationIngested> = [...args]; values[1] ??= ctx.now; return markSelfResumeContinuationIngested(...values) ?? null; } },
57
+ "runtimeTail.updateOpenOperatorDecision": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateOpenOperatorDecision>, ctx) => { const values: Parameters<typeof updateOpenOperatorDecision> = [...args]; values[2] ??= ctx.now; return updateOpenOperatorDecision(...values) ?? null; } },
58
+ "runtimeTail.withdrawOpenOperatorDecision": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof withdrawOpenOperatorDecision>, ctx) => { const values: Parameters<typeof withdrawOpenOperatorDecision> = [...args]; values[1] ??= ctx.now; return withdrawOpenOperatorDecision(...values) ?? null; } },
59
+ "runtimeTail.deleteOrchestrator": { offLoop: true, idempotent: false, fn: (args: [string], ctx) => deleteOrchestratorRow(args[0], ctx.now) },
60
+ "runtimeTail.upsertTemplate": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof upsertTemplate>, ctx) => { const values: Parameters<typeof upsertTemplate> = [...args]; values[2] ??= ctx.now; return upsertTemplate(...values) ?? null; } },
61
+ "runtimeTail.resetTemplate": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof resetTemplate>, ctx) => { const values: Parameters<typeof resetTemplate> = [...args]; values[1] ??= ctx.now; return resetTemplate(...values) ?? null; } },
62
+ "runtimeTail.setReviewRefFenceToken": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof setReviewRefFenceToken>, ctx) => { const values: Parameters<typeof setReviewRefFenceToken> = [...args]; values[2] ??= ctx.now; return setReviewRefFenceToken(...values) ?? null; } },
63
+ "runtimeTail.markReviewRefPublished": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markReviewRefPublished>, ctx) => { const values: Parameters<typeof markReviewRefPublished> = [...args]; values[2] ??= ctx.now; return markReviewRefPublished(...values) ?? null; } },
64
+ "runtimeTail.markReviewRefAnnounced": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markReviewRefAnnounced>, ctx) => { const values: Parameters<typeof markReviewRefAnnounced> = [...args]; values[1] ??= ctx.now; return markReviewRefAnnounced(...values) ?? null; } },
65
+ "runtimeTail.markReviewRefFailed": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markReviewRefFailed>, ctx) => { const values: Parameters<typeof markReviewRefFailed> = [...args]; values[1] ??= ctx.now; return markReviewRefFailed(...values) ?? null; } },
66
+ "runtimeTail.markReviewRefClosed": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof markReviewRefClosed>, ctx) => { const values: Parameters<typeof markReviewRefClosed> = [...args]; values[1] ??= ctx.now; return markReviewRefClosed(...values) ?? null; } },
67
+ "runtimeTail.recordReviewRefCleanupDispatch": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof recordReviewRefCleanupDispatch>, ctx) => { const values: Parameters<typeof recordReviewRefCleanupDispatch> = [...args]; values[3] ??= ctx.now; return recordReviewRefCleanupDispatch(...values) ?? null; } },
68
+ "runtimeTail.deleteReviewRefCleanup": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof deleteReviewRefCleanup>) => deleteReviewRefCleanup(...args) ?? null },
69
+ "runtimeTail.insertTaskEvent": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof insertTaskEvent>, ctx) => { const values: Parameters<typeof insertTaskEvent> = [...args]; values[2] ??= ctx.now; return insertTaskEvent(...values) ?? null; } },
70
+ "runtimeTail.clearTeamIdleEntry": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof clearTeamIdleEntry>) => clearTeamIdleEntry(...args) ?? null },
71
+ "runtimeTail.setTeamIdleEntry": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof setTeamIdleEntry>) => setTeamIdleEntry(...args) ?? null },
72
+ "runtimeTail.updateUserProfile": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateUserProfile>, ctx) => { const values: Parameters<typeof updateUserProfile> = [...args]; values[1] ??= ctx.now; return updateUserProfile(...values) ?? null; } },
73
+ "runtimeTail.updateUserAccess": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateUserAccess>, ctx) => { const values: Parameters<typeof updateUserAccess> = [...args]; values[1] ??= ctx.now; return updateUserAccess(...values) ?? null; } },
74
+ "runtimeTail.claimWorkspaceOrphanAlert": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof claimWorkspaceOrphanAlert>, ctx) => { const values: Parameters<typeof claimWorkspaceOrphanAlert> = [...args]; values[2] ??= ctx.now; return claimWorkspaceOrphanAlert(...values) ?? null; } },
75
+ "runtimeTail.claimWorkspaceHumanEscalationAlert": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof claimWorkspaceHumanEscalationAlert>, ctx) => { const values: Parameters<typeof claimWorkspaceHumanEscalationAlert> = [...args]; values[1] ??= ctx.now; return claimWorkspaceHumanEscalationAlert(...values) ?? null; } },
76
+ "runtimeTail.pruneStaleWorkspaceHumanEscalationAlerts": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof pruneStaleWorkspaceHumanEscalationAlerts>, ctx) => { const values: Parameters<typeof pruneStaleWorkspaceHumanEscalationAlerts> = [...args]; values[0] ??= ctx.now; return pruneStaleWorkspaceHumanEscalationAlerts(...values) ?? null; } },
77
+ "runtimeTail.reelectRepoSteward": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof reelectRepoSteward>) => reelectRepoSteward(...args) ?? null },
78
+ "runtimeTail.upsertTokenProfile": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof upsertTokenProfile>, ctx) => { const values: Parameters<typeof upsertTokenProfile> = [...args]; values[1] ??= ctx.now; return upsertTokenProfile(...values) ?? null; } },
79
+ "runtimeTail.updateTokenProfile": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof updateTokenProfile>) => updateTokenProfile(...args) ?? null },
80
+ "runtimeTail.deleteTokenProfile": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof deleteTokenProfile>) => deleteTokenProfile(...args) ?? null },
81
+ "runtimeTail.cancelPendingCommand": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof cancelPendingCommand>, ctx) => { const values: Parameters<typeof cancelPendingCommand> = [...args]; values[3] ??= ctx.now; return cancelPendingCommand(...values) ?? null; } },
82
+ "runtimeTail.fencePublishForPush": { offLoop: true, idempotent: false, serializeIdempotencyResult: value => value ? redactCommandSecrets(value as import("../types").Command) : null, fn: (args: Parameters<typeof fencePublishForPush>) => fencePublishForPush(...args) ?? null },
83
+ "runtimeTail.writeEntry": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof writeEntry>) => writeEntry(...args) ?? null },
84
+ "runtimeTail.refreshPendingLandQueueLease": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof refreshPendingLandQueueLease>, ctx) => { const values: Parameters<typeof refreshPendingLandQueueLease> = [...args]; values[1] ??= ctx.now; return refreshPendingLandQueueLease(...values) ?? null; } },
85
+ "runtimeTail.upsertIntegrationRegistry": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof upsertIntegrationRegistry>, ctx) => { const values: Parameters<typeof upsertIntegrationRegistry> = [...args]; values[1] ??= ctx.now; return upsertIntegrationRegistry(...values) ?? null; } },
86
+ "runtimeTail.ingestIntegrationEvent": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof ingestIntegrationEvent>) => ingestIntegrationEvent(...args) ?? null },
87
+ "runtimeTail.acquireMergeLease": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof acquireMergeLease>) => acquireMergeLease(...args) ?? null },
88
+ "runtimeTail.acquireMergePause": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof acquireMergePause>) => acquireMergePause(...args) ?? null },
89
+ "runtimeTail.promoteLineageCapturedResponse": { offLoop: true, idempotent: false, fn: (args: [Parameters<typeof promoteLineageCapturedResponse>[0]]) => {
90
+ const deferred: NonNullable<Parameters<typeof promoteLineageCapturedResponse>[1]> = [];
91
+ return { result: promoteLineageCapturedResponse(args[0], deferred), deferred };
92
+ } },
93
+ "runtimeTail.setProjectJournalFields": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof setProjectJournalFields>, ctx) => { const values: Parameters<typeof setProjectJournalFields> = [...args]; values[1] ??= ctx.now; return setProjectJournalFields(...values) ?? null; } },
94
+ "runtimeTail.upsertProjectTrustApproval": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof upsertProjectTrustApproval>, ctx) => { const values: Parameters<typeof upsertProjectTrustApproval> = [...args]; values[1] ??= ctx.now; return upsertProjectTrustApproval(...values) ?? null; } },
95
+ "runtimeTail.pruneOrphanedSharedWorkspaces": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof pruneOrphanedSharedWorkspaces>) => pruneOrphanedSharedWorkspaces(...args) ?? null },
96
+ "runtimeTail.pruneWorkspaceOrphanAlerts": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof pruneWorkspaceOrphanAlerts>) => pruneWorkspaceOrphanAlerts(...args) ?? null },
97
+ });