@open-everywhere/core 0.1.0

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 (3606) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +21 -0
  3. package/README.md +67 -0
  4. package/agent/access/access-referenced-link-sets.ts +23 -0
  5. package/agent/access/admin-read-venue.ts +159 -0
  6. package/agent/access/admin-standing.ts +98 -0
  7. package/agent/access/analytics-scope.ts +84 -0
  8. package/agent/access/approval-dedupe.ts +144 -0
  9. package/agent/access/approval-judge.ts +639 -0
  10. package/agent/access/approval-preview.ts +118 -0
  11. package/agent/access/approval-scenarios.ts +48 -0
  12. package/agent/access/approver-chain.ts +779 -0
  13. package/agent/access/audience-floor.ts +270 -0
  14. package/agent/access/aws-output.ts +132 -0
  15. package/agent/access/aws-screen.ts +198 -0
  16. package/agent/access/background-tasks.ts +364 -0
  17. package/agent/access/browser-hosts.ts +151 -0
  18. package/agent/access/browser-toolkit.ts +271 -0
  19. package/agent/access/bundle.ts +716 -0
  20. package/agent/access/capabilities.ts +11 -0
  21. package/agent/access/chat-dm-grant.ts +241 -0
  22. package/agent/access/chat-write-grant.ts +194 -0
  23. package/agent/access/config.ts +132 -0
  24. package/agent/access/connector-content-origin-state.ts +72 -0
  25. package/agent/access/connector-credentials.ts +449 -0
  26. package/agent/access/connector-disclosure.ts +253 -0
  27. package/agent/access/connector-op-gating.ts +224 -0
  28. package/agent/access/connector-scope.ts +302 -0
  29. package/agent/access/consequence.ts +1208 -0
  30. package/agent/access/credential-bindings-codemod.ts +242 -0
  31. package/agent/access/credential-endpoints.ts +279 -0
  32. package/agent/access/credential-grant-ask.ts +115 -0
  33. package/agent/access/credential-grant-broker.ts +359 -0
  34. package/agent/access/credential-grant-card.ts +521 -0
  35. package/agent/access/credential-grant-click.ts +246 -0
  36. package/agent/access/credential-grant-copy.ts +338 -0
  37. package/agent/access/credential-grant-flow.ts +735 -0
  38. package/agent/access/credential-grant-key-shape.ts +59 -0
  39. package/agent/access/credential-grant-notice.ts +219 -0
  40. package/agent/access/credential-grant-owner.ts +23 -0
  41. package/agent/access/credential-grant-reach.ts +81 -0
  42. package/agent/access/credential-grant-resolution.ts +119 -0
  43. package/agent/access/credential-grant-revoke.ts +95 -0
  44. package/agent/access/credential-grant-scope.ts +306 -0
  45. package/agent/access/credential-grant.ts +284 -0
  46. package/agent/access/credentials.ts +159 -0
  47. package/agent/access/dated-read.ts +18 -0
  48. package/agent/access/delegation-flag.ts +12 -0
  49. package/agent/access/delegation-mount.ts +28 -0
  50. package/agent/access/delta.ts +386 -0
  51. package/agent/access/dispatch-origin-signal.ts +133 -0
  52. package/agent/access/domain-credentials.ts +115 -0
  53. package/agent/access/egress-denial-log.ts +111 -0
  54. package/agent/access/egress-denial-poller.ts +239 -0
  55. package/agent/access/egress-status.ts +195 -0
  56. package/agent/access/egress.ts +321 -0
  57. package/agent/access/enforcement.ts +25 -0
  58. package/agent/access/eve-patch-probe-boot.ts +91 -0
  59. package/agent/access/eve-patch-probe.ts +276 -0
  60. package/agent/access/external-policy.ts +209 -0
  61. package/agent/access/extra-hosts.ts +31 -0
  62. package/agent/access/grant-borrow-transport-registry.internal.ts +81 -0
  63. package/agent/access/grant-room-notice-registry.internal.ts +77 -0
  64. package/agent/access/grant-schema-pin.ts +38 -0
  65. package/agent/access/grants-codemod.ts +352 -0
  66. package/agent/access/group-request.ts +76 -0
  67. package/agent/access/halt-state.ts +24 -0
  68. package/agent/access/halt.ts +276 -0
  69. package/agent/access/host-egress.ts +432 -0
  70. package/agent/access/human-only-invariants-manifest.ts +172 -0
  71. package/agent/access/ingestion-binding-manifest.ts +263 -0
  72. package/agent/access/ingestion-route-inventory.generated.ts +58 -0
  73. package/agent/access/instructions.ts +89 -0
  74. package/agent/access/invoker-posture-state.ts +25 -0
  75. package/agent/access/invoker-posture.ts +96 -0
  76. package/agent/access/job-posture.ts +83 -0
  77. package/agent/access/job-session-state.ts +58 -0
  78. package/agent/access/lean-seat-state.ts +45 -0
  79. package/agent/access/lean-seat.ts +83 -0
  80. package/agent/access/lint.ts +638 -0
  81. package/agent/access/live-delegated-tasks.ts +95 -0
  82. package/agent/access/loop-breaker.ts +88 -0
  83. package/agent/access/mcp-call-fence.ts +179 -0
  84. package/agent/access/member-grant.ts +45 -0
  85. package/agent/access/member-plane.ts +212 -0
  86. package/agent/access/native-admin.ts +35 -0
  87. package/agent/access/native-delegation-state.ts +40 -0
  88. package/agent/access/network-access.ts +132 -0
  89. package/agent/access/nullable-optional-fields.ts +184 -0
  90. package/agent/access/overlay-module.ts +70 -0
  91. package/agent/access/own-account-gate-manifest.ts +134 -0
  92. package/agent/access/pane-venue.ts +238 -0
  93. package/agent/access/pending-delegation-signal.ts +282 -0
  94. package/agent/access/permission-evidence.ts +627 -0
  95. package/agent/access/permission-proposal.ts +362 -0
  96. package/agent/access/platform.ts +14 -0
  97. package/agent/access/pre-approval-rules.ts +135 -0
  98. package/agent/access/principal-gate-manifest.ts +830 -0
  99. package/agent/access/provider-selection-check.ts +130 -0
  100. package/agent/access/provider-selection.ts +96 -0
  101. package/agent/access/read-grant.ts +104 -0
  102. package/agent/access/repo-capabilities.ts +74 -0
  103. package/agent/access/request.ts +126 -0
  104. package/agent/access/requester-identity.ts +305 -0
  105. package/agent/access/requester-messages.ts +52 -0
  106. package/agent/access/reserved-hosts.ts +11 -0
  107. package/agent/access/resolver.ts +604 -0
  108. package/agent/access/resource-capabilities.ts +103 -0
  109. package/agent/access/resource-grant-manifest.ts +136 -0
  110. package/agent/access/resource-grant.ts +163 -0
  111. package/agent/access/result-cap.ts +34 -0
  112. package/agent/access/result-reduce-model-arm.ts +94 -0
  113. package/agent/access/result-reduce.ts +104 -0
  114. package/agent/access/roles.ts +106 -0
  115. package/agent/access/scope-key.ts +50 -0
  116. package/agent/access/seat-read-budget.ts +57 -0
  117. package/agent/access/self-host-egress.ts +103 -0
  118. package/agent/access/settlement-dispatch-signal.ts +96 -0
  119. package/agent/access/skill-taint-envelope.ts +94 -0
  120. package/agent/access/source-gate-manifest.ts +148 -0
  121. package/agent/access/source-scoped-mount.ts +27 -0
  122. package/agent/access/subagent-taint.ts +225 -0
  123. package/agent/access/surface-work-grant.ts +91 -0
  124. package/agent/access/taint-enforcement.ts +183 -0
  125. package/agent/access/taint-signal.ts +297 -0
  126. package/agent/access/taint-tiers.ts +168 -0
  127. package/agent/access/task-wake-signal.ts +94 -0
  128. package/agent/access/tenant-admission.ts +191 -0
  129. package/agent/access/untrusted-projection.ts +273 -0
  130. package/agent/access/untrusted.ts +132 -0
  131. package/agent/access/wake-mapping.ts +38 -0
  132. package/agent/access/web-fetch-fence.ts +81 -0
  133. package/agent/access/window-gate-manifest.ts +543 -0
  134. package/agent/access/window-gated.ts +668 -0
  135. package/agent/access/window-routing.ts +23 -0
  136. package/agent/access/work-grant.ts +119 -0
  137. package/agent/access/work-mount-manifest.ts +203 -0
  138. package/agent/access/worker-capabilities.ts +379 -0
  139. package/agent/access/worker-capability-index.generated.ts +189 -0
  140. package/agent/access/worker-continuation.ts +200 -0
  141. package/agent/access/worker-seat-state.ts +25 -0
  142. package/agent/access/worker-seat.ts +54 -0
  143. package/agent/access/worker-toolset-state.ts +65 -0
  144. package/agent/adapter-api.ts +1795 -0
  145. package/agent/analytics/compile.ts +461 -0
  146. package/agent/analytics/execute.ts +166 -0
  147. package/agent/analytics/registry.ts +302 -0
  148. package/agent/approvals/access-request.ts +255 -0
  149. package/agent/approvals/actions.ts +398 -0
  150. package/agent/approvals/agent-create.ts +272 -0
  151. package/agent/approvals/arming-context.ts +26 -0
  152. package/agent/approvals/card-disclosure.ts +53 -0
  153. package/agent/approvals/card-signal.ts +151 -0
  154. package/agent/approvals/card-venue.ts +152 -0
  155. package/agent/approvals/card.ts +121 -0
  156. package/agent/approvals/chat-dm.ts +63 -0
  157. package/agent/approvals/chat-post.ts +60 -0
  158. package/agent/approvals/clicker-floor.ts +106 -0
  159. package/agent/approvals/decision-authority.internal.ts +114 -0
  160. package/agent/approvals/decision-wake.ts +122 -0
  161. package/agent/approvals/domain-exposure.ts +182 -0
  162. package/agent/approvals/eve-response-policy.ts +48 -0
  163. package/agent/approvals/flow.ts +2185 -0
  164. package/agent/approvals/input-response-floor.ts +104 -0
  165. package/agent/approvals/judge-contradiction.ts +156 -0
  166. package/agent/approvals/memory-purge.ts +149 -0
  167. package/agent/approvals/pr-open.ts +172 -0
  168. package/agent/approvals/review-surface.ts +7 -0
  169. package/agent/approvals/routine-cancel.ts +57 -0
  170. package/agent/approvals/routine-create.ts +213 -0
  171. package/agent/approvals/routine-lifecycle.ts +206 -0
  172. package/agent/approvals/routine-permission-offer.ts +131 -0
  173. package/agent/approvals/routine-permission.ts +214 -0
  174. package/agent/approvals/routine-policy.ts +174 -0
  175. package/agent/approvals/scope-label.ts +48 -0
  176. package/agent/approvals/session-checkpoint.ts +80 -0
  177. package/agent/approvals/session-grant.ts +173 -0
  178. package/agent/approvals/skill-create.ts +60 -0
  179. package/agent/approvals/skill-delete.ts +50 -0
  180. package/agent/approvals/taint-disclosure.ts +42 -0
  181. package/agent/approvals/ticket-actions.ts +86 -0
  182. package/agent/approvals/ticket-create.ts +67 -0
  183. package/agent/approvals/types.ts +48 -0
  184. package/agent/approvals/webhook-declare.ts +297 -0
  185. package/agent/approvals/webhook.ts +205 -0
  186. package/agent/audit/action-registry.ts +1094 -0
  187. package/agent/audit/audit.ts +105 -0
  188. package/agent/audit/chain.ts +568 -0
  189. package/agent/audit/tool-action.ts +286 -0
  190. package/agent/audit/window-tool-gate.ts +54 -0
  191. package/agent/audit/worker-toolset.ts +117 -0
  192. package/agent/blob/hosting.ts +180 -0
  193. package/agent/channels/access-request-ledger.ts +139 -0
  194. package/agent/channels/ambient-skip.ts +102 -0
  195. package/agent/channels/answered-container-ledger.ts +76 -0
  196. package/agent/channels/approval-card.ts +454 -0
  197. package/agent/channels/approval-claim-guard.ts +384 -0
  198. package/agent/channels/attachments.ts +243 -0
  199. package/agent/channels/aws-sso-callback.ts +9 -0
  200. package/agent/channels/backscroll-window.ts +145 -0
  201. package/agent/channels/cancel-note.ts +127 -0
  202. package/agent/channels/channel-key.ts +56 -0
  203. package/agent/channels/channel-read.ts +501 -0
  204. package/agent/channels/chat-turn-audit.ts +23 -0
  205. package/agent/channels/closing-prose-drop.ts +53 -0
  206. package/agent/channels/command-registration.ts +165 -0
  207. package/agent/channels/context-render.ts +206 -0
  208. package/agent/channels/control-mcp.ts +44 -0
  209. package/agent/channels/control-read.ts +37 -0
  210. package/agent/channels/credential-intake-page.ts +12 -0
  211. package/agent/channels/delegated-provenance.ts +506 -0
  212. package/agent/channels/dm-audience.ts +346 -0
  213. package/agent/channels/dm-seat.ts +138 -0
  214. package/agent/channels/domain-fingerprint.ts +90 -0
  215. package/agent/channels/egress-spoof.ts +35 -0
  216. package/agent/channels/engaged-wake.ts +158 -0
  217. package/agent/channels/engagement.ts +254 -0
  218. package/agent/channels/entity-actions.ts +186 -0
  219. package/agent/channels/front-queue.ts +78 -0
  220. package/agent/channels/generation-retirement.ts +557 -0
  221. package/agent/channels/halt-per-wake.ts +166 -0
  222. package/agent/channels/memory-claim-guard.ts +425 -0
  223. package/agent/channels/name-drop-wake-audit.ts +162 -0
  224. package/agent/channels/native-wake-retry.ts +62 -0
  225. package/agent/channels/no-reply-signal.ts +49 -0
  226. package/agent/channels/normalized-wake.ts +285 -0
  227. package/agent/channels/oe-oauth-callback.ts +13 -0
  228. package/agent/channels/own-post-ledger.ts +76 -0
  229. package/agent/channels/platform-failure.ts +45 -0
  230. package/agent/channels/policy-pages.ts +15 -0
  231. package/agent/channels/post-arms.ts +321 -0
  232. package/agent/channels/proactive-dm-manifest.ts +113 -0
  233. package/agent/channels/propose-scope.ts +90 -0
  234. package/agent/channels/question-bridge.ts +594 -0
  235. package/agent/channels/rate-limit-retry.ts +355 -0
  236. package/agent/channels/react-signal.ts +26 -0
  237. package/agent/channels/reaction-ingest.ts +221 -0
  238. package/agent/channels/read-author-trust.ts +71 -0
  239. package/agent/channels/read-reach.ts +339 -0
  240. package/agent/channels/read-scope-audit.ts +127 -0
  241. package/agent/channels/read-scope-error.ts +5 -0
  242. package/agent/channels/read-spool.ts +131 -0
  243. package/agent/channels/reply-edit.ts +208 -0
  244. package/agent/channels/reply-fold.ts +517 -0
  245. package/agent/channels/reply-freshness.ts +253 -0
  246. package/agent/channels/reply-post.ts +502 -0
  247. package/agent/channels/reply-provenance.ts +804 -0
  248. package/agent/channels/reply-signal.ts +723 -0
  249. package/agent/channels/request-claim-guard.ts +532 -0
  250. package/agent/channels/runtime-code-fingerprint.generated.ts +10 -0
  251. package/agent/channels/runtime-rotation.ts +224 -0
  252. package/agent/channels/seat-admission.ts +103 -0
  253. package/agent/channels/seat-catch-up.ts +482 -0
  254. package/agent/channels/self-dispatch.ts +349 -0
  255. package/agent/channels/session-park.ts +252 -0
  256. package/agent/channels/session-resume.ts +36 -0
  257. package/agent/channels/session-tail-record.ts +172 -0
  258. package/agent/channels/session-tail.ts +140 -0
  259. package/agent/channels/slack-bridge.ts +125 -0
  260. package/agent/channels/stand-down-silence.ts +110 -0
  261. package/agent/channels/standing-authority.ts +237 -0
  262. package/agent/channels/stranded-seat.ts +155 -0
  263. package/agent/channels/supervisor-complete.ts +141 -0
  264. package/agent/channels/surface-message-ops.ts +217 -0
  265. package/agent/channels/task-wake.ts +528 -0
  266. package/agent/channels/teams-bridge.ts +85 -0
  267. package/agent/channels/test-wake.ts +12 -0
  268. package/agent/channels/thread-ownership.ts +70 -0
  269. package/agent/channels/thread-seat-state.ts +90 -0
  270. package/agent/channels/ticket-create.ts +171 -0
  271. package/agent/channels/transcript-relay.ts +9 -0
  272. package/agent/channels/turn-cancel.ts +431 -0
  273. package/agent/channels/turn-delivery.ts +484 -0
  274. package/agent/channels/turn-registry.ts +117 -0
  275. package/agent/channels/turn-terminal-actions.ts +134 -0
  276. package/agent/channels/unified-redrive.ts +215 -0
  277. package/agent/channels/unified-reply.ts +300 -0
  278. package/agent/channels/unified-supervisor.ts +193 -0
  279. package/agent/channels/unified-window.ts +1075 -0
  280. package/agent/channels/unified.ts +1575 -0
  281. package/agent/channels/wake-accounting.ts +121 -0
  282. package/agent/channels/wake-arm.ts +244 -0
  283. package/agent/channels/wake-container.ts +50 -0
  284. package/agent/channels/wake-envelope.ts +632 -0
  285. package/agent/channels/wake-origin-codec.ts +96 -0
  286. package/agent/channels/wake-origin-codecs.ts +4 -0
  287. package/agent/channels/wake-timing.ts +401 -0
  288. package/agent/channels/webhook-reveal-page.ts +12 -0
  289. package/agent/channels/webhooks.ts +216 -0
  290. package/agent/channels/window-key.ts +439 -0
  291. package/agent/channels/window-sources.ts +88 -0
  292. package/agent/channels/work-destinations.ts +48 -0
  293. package/agent/channels/work-registry.ts +26 -0
  294. package/agent/channels/work-search.ts +92 -0
  295. package/agent/commands/core.ts +737 -0
  296. package/agent/commands/rate.ts +173 -0
  297. package/agent/connections/auth-retry-memo.ts +115 -0
  298. package/agent/connections/aws-exec.ts +52 -0
  299. package/agent/connections/aws-identity.ts +297 -0
  300. package/agent/connections/aws-sso-callback.ts +103 -0
  301. package/agent/connections/aws-sso-identity-binding.ts +115 -0
  302. package/agent/connections/aws-sso-link.ts +40 -0
  303. package/agent/connections/connector-auth.ts +984 -0
  304. package/agent/connections/connector-card.ts +447 -0
  305. package/agent/connections/connector-flags.ts +44 -0
  306. package/agent/connections/connector-offer.ts +241 -0
  307. package/agent/connections/connector-transport.ts +131 -0
  308. package/agent/connections/consent-resume.ts +205 -0
  309. package/agent/connections/grant-mcp-borrow.ts +334 -0
  310. package/agent/connections/grant-mcp-transport.ts +64 -0
  311. package/agent/connections/notion.ts +42 -0
  312. package/agent/connections/oe-oauth-callback.ts +207 -0
  313. package/agent/connections/own-account-ask.ts +302 -0
  314. package/agent/connections/own-account-carriage.ts +99 -0
  315. package/agent/connections/own-account-gate.ts +361 -0
  316. package/agent/connections/own-account-vendors.ts +117 -0
  317. package/agent/connections/user-auth-flow.ts +102 -0
  318. package/agent/contributions.ts +197 -0
  319. package/agent/control/auth.ts +663 -0
  320. package/agent/control/capture-window-read.ts +382 -0
  321. package/agent/control/delivery-history.ts +558 -0
  322. package/agent/control/http.ts +169 -0
  323. package/agent/control/mcp-route.ts +105 -0
  324. package/agent/control/oauth-clients.ts +278 -0
  325. package/agent/control/oauth-resource.ts +200 -0
  326. package/agent/control/oauth-route.ts +397 -0
  327. package/agent/control/oauth-tokens.ts +222 -0
  328. package/agent/control/read-route.ts +841 -0
  329. package/agent/control/server.ts +540 -0
  330. package/agent/control/test-route.ts +527 -0
  331. package/agent/control/transcript-export.ts +197 -0
  332. package/agent/control/transcript-relay.ts +381 -0
  333. package/agent/control/transcript-render.ts +164 -0
  334. package/agent/control/views.ts +1289 -0
  335. package/agent/control/writes.ts +1431 -0
  336. package/agent/credentials/binding-pr.ts +247 -0
  337. package/agent/credentials/config-pr-github.ts +197 -0
  338. package/agent/credentials/config-pr.ts +180 -0
  339. package/agent/credentials/db-broker.ts +270 -0
  340. package/agent/credentials/home.ts +83 -0
  341. package/agent/credentials/intake-page.ts +302 -0
  342. package/agent/credentials/intake.ts +550 -0
  343. package/agent/credentials/kv-vault.ts +180 -0
  344. package/agent/credentials/operator-secrets.ts +396 -0
  345. package/agent/credentials/page-chrome.ts +59 -0
  346. package/agent/credentials/page-token.ts +219 -0
  347. package/agent/credentials/purge.ts +113 -0
  348. package/agent/credentials/ref.ts +151 -0
  349. package/agent/credentials/reserved-refs.ts +76 -0
  350. package/agent/credentials/self-secrets.ts +165 -0
  351. package/agent/credentials/warm.ts +209 -0
  352. package/agent/docs/approver-policy.ts +234 -0
  353. package/agent/docs/capability-map.ts +180 -0
  354. package/agent/docs/counted-claims.ts +433 -0
  355. package/agent/docs/registry.ts +184 -0
  356. package/agent/docs/source-map.ts +174 -0
  357. package/agent/hooks/approval-raised.ts +37 -0
  358. package/agent/hooks/approval-settlement.ts +109 -0
  359. package/agent/hooks/binding-bridge.ts +77 -0
  360. package/agent/hooks/connector-audit.ts +111 -0
  361. package/agent/hooks/egress.ts +694 -0
  362. package/agent/hooks/eve-patch-gate.ts +52 -0
  363. package/agent/hooks/fire-carriage.ts +44 -0
  364. package/agent/hooks/fire-toolset.ts +306 -0
  365. package/agent/hooks/job-posture.ts +82 -0
  366. package/agent/hooks/lean-seat.ts +233 -0
  367. package/agent/hooks/learn.ts +199 -0
  368. package/agent/hooks/link-claim.ts +269 -0
  369. package/agent/hooks/log-flush.ts +32 -0
  370. package/agent/hooks/loop-breaker.ts +17 -0
  371. package/agent/hooks/memory.ts +1250 -0
  372. package/agent/hooks/native-input-audit.ts +41 -0
  373. package/agent/hooks/own-account-ask.ts +172 -0
  374. package/agent/hooks/requester-identity.ts +30 -0
  375. package/agent/hooks/requester-messages.ts +55 -0
  376. package/agent/hooks/routine-outcome.ts +252 -0
  377. package/agent/hooks/routine-silence.ts +38 -0
  378. package/agent/hooks/session-park.ts +48 -0
  379. package/agent/hooks/settlement-flush.ts +173 -0
  380. package/agent/hooks/spawn-taint.ts +1312 -0
  381. package/agent/hooks/spend.ts +368 -0
  382. package/agent/hooks/stall-guard.ts +22 -0
  383. package/agent/hooks/telemetry.ts +90 -0
  384. package/agent/hooks/turn-anchor.ts +682 -0
  385. package/agent/hooks/turn-tally.ts +98 -0
  386. package/agent/hooks/wake-accounting-turn.ts +96 -0
  387. package/agent/hooks/wake-turn-start.ts +44 -0
  388. package/agent/hooks/window-routing.ts +51 -0
  389. package/agent/identity/account-directory.ts +138 -0
  390. package/agent/identity/account-display-name.ts +178 -0
  391. package/agent/identity/author-trust.ts +297 -0
  392. package/agent/identity/binding-bridge.ts +88 -0
  393. package/agent/identity/binding.ts +1308 -0
  394. package/agent/identity/bot-display-name.ts +50 -0
  395. package/agent/identity/bot-name.ts +79 -0
  396. package/agent/identity/capabilities.ts +79 -0
  397. package/agent/identity/delegated-binding.ts +130 -0
  398. package/agent/identity/deployment-identity.ts +105 -0
  399. package/agent/identity/directory-sync.ts +777 -0
  400. package/agent/identity/directory.ts +89 -0
  401. package/agent/identity/display-title.ts +19 -0
  402. package/agent/identity/frozen-surface-binding.internal.ts +83 -0
  403. package/agent/identity/group-sync.ts +169 -0
  404. package/agent/identity/groups-codemod.ts +142 -0
  405. package/agent/identity/groups-delivery.ts +156 -0
  406. package/agent/identity/groups.ts +174 -0
  407. package/agent/identity/link-challenge.ts +147 -0
  408. package/agent/identity/link-consent.ts +216 -0
  409. package/agent/identity/link-flow.ts +380 -0
  410. package/agent/identity/link-initiator.ts +27 -0
  411. package/agent/identity/link-resolve.ts +227 -0
  412. package/agent/identity/link-set-ref.ts +33 -0
  413. package/agent/identity/link-store.ts +889 -0
  414. package/agent/identity/link-tenant-backfill.ts +79 -0
  415. package/agent/identity/link-tenant.ts +54 -0
  416. package/agent/identity/oauth-vault-share.ts +40 -0
  417. package/agent/identity/platform.ts +48 -0
  418. package/agent/identity/principal-key-rules.ts +113 -0
  419. package/agent/identity/principal-key.ts +210 -0
  420. package/agent/identity/principals.ts +354 -0
  421. package/agent/identity/surface-key-grammar.ts +142 -0
  422. package/agent/identity/surface-parity.ts +427 -0
  423. package/agent/identity/trust-preflight.ts +271 -0
  424. package/agent/identity/trust.ts +433 -0
  425. package/agent/identity/wake-trust.ts +217 -0
  426. package/agent/instructions/access.ts +1239 -0
  427. package/agent/instructions/seat-prompt.ts +1286 -0
  428. package/agent/lib/process-registry.ts +52 -0
  429. package/agent/memory/agents-codemod.ts +443 -0
  430. package/agent/memory/connector-memory.ts +137 -0
  431. package/agent/memory/domain.ts +1276 -0
  432. package/agent/memory/dream/candidates.ts +187 -0
  433. package/agent/memory/dream/correction.ts +133 -0
  434. package/agent/memory/dream/judge.ts +174 -0
  435. package/agent/memory/dream/learn.ts +299 -0
  436. package/agent/memory/dream/mode3-cluster.ts +151 -0
  437. package/agent/memory/dream/mode3-last-mile.ts +365 -0
  438. package/agent/memory/dream/mode3.ts +311 -0
  439. package/agent/memory/dream/ops.ts +321 -0
  440. package/agent/memory/dream/proposal.ts +83 -0
  441. package/agent/memory/dream/recurrence.ts +132 -0
  442. package/agent/memory/dream/salience.ts +24 -0
  443. package/agent/memory/dream/skill-proposal-pr.ts +323 -0
  444. package/agent/memory/dream/supersede-apply.ts +94 -0
  445. package/agent/memory/dream/tidy.ts +162 -0
  446. package/agent/memory/graph.ts +178 -0
  447. package/agent/memory/host-owned-files.ts +3 -0
  448. package/agent/memory/layout.ts +85 -0
  449. package/agent/memory/listing.ts +199 -0
  450. package/agent/memory/markdown.ts +211 -0
  451. package/agent/memory/partition.ts +66 -0
  452. package/agent/memory/postgres.ts +497 -0
  453. package/agent/memory/provenance-mark.ts +318 -0
  454. package/agent/memory/provenance.ts +28 -0
  455. package/agent/memory/provider.ts +186 -0
  456. package/agent/memory/purge-redaction.ts +68 -0
  457. package/agent/memory/readonly.ts +57 -0
  458. package/agent/memory/resolve.ts +181 -0
  459. package/agent/memory/root-fence.ts +54 -0
  460. package/agent/memory/sandbox-sync.ts +84 -0
  461. package/agent/memory/selection.ts +120 -0
  462. package/agent/memory/silo.ts +71 -0
  463. package/agent/memory/sqlite.ts +206 -0
  464. package/agent/memory/store.ts +162 -0
  465. package/agent/memory/sync-timing.ts +223 -0
  466. package/agent/memory/wake-delta.ts +239 -0
  467. package/agent/memory/write-evidence.ts +150 -0
  468. package/agent/memory/write-fence.ts +145 -0
  469. package/agent/memory/write-intent.ts +205 -0
  470. package/agent/memory/write-road.ts +159 -0
  471. package/agent/model/ab-test.ts +374 -0
  472. package/agent/model/call-capture.ts +414 -0
  473. package/agent/model/default-model.ts +63 -0
  474. package/agent/model/model-stamp.ts +162 -0
  475. package/agent/model/policy.ts +378 -0
  476. package/agent/model/routing.ts +834 -0
  477. package/agent/model/step-boundary.ts +560 -0
  478. package/agent/model/stream-drop-retry.ts +334 -0
  479. package/agent/model/turn-closeout.ts +299 -0
  480. package/agent/model/turn-state.ts +461 -0
  481. package/agent/model/vision.ts +112 -0
  482. package/agent/observability/ship.ts +394 -0
  483. package/agent/observability/telemetry.ts +819 -0
  484. package/agent/observability/turn-clock.ts +96 -0
  485. package/agent/onboarding/onboarding.ts +98 -0
  486. package/agent/operational/credential-grant-rows.ts +944 -0
  487. package/agent/operational/pglite-client.ts +282 -0
  488. package/agent/operational/post-once.ts +146 -0
  489. package/agent/operational/postgres.ts +5030 -0
  490. package/agent/operational/provider.ts +190 -0
  491. package/agent/operational/sqlite.ts +4007 -0
  492. package/agent/operational/store.ts +2346 -0
  493. package/agent/ops/census.ts +1076 -0
  494. package/agent/ops/probes.ts +69 -0
  495. package/agent/ops/quickstart.ts +296 -0
  496. package/agent/ops/server.ts +485 -0
  497. package/agent/ops/surface-manifest.ts +111 -0
  498. package/agent/ops/two-role.ts +75 -0
  499. package/agent/pages/policy-pages.ts +79 -0
  500. package/agent/plugins/extract.ts +381 -0
  501. package/agent/plugins/parse.ts +122 -0
  502. package/agent/plugins/types.ts +147 -0
  503. package/agent/publish/eve-patch-pack.ts +461 -0
  504. package/agent/review/blast-radius.ts +282 -0
  505. package/agent/review/config-facts.ts +200 -0
  506. package/agent/review/facts-artifact.ts +377 -0
  507. package/agent/review/facts-cloud-status.ts +288 -0
  508. package/agent/review/pr-walkthrough.ts +772 -0
  509. package/agent/review/zip.ts +154 -0
  510. package/agent/roles/role.ts +228 -0
  511. package/agent/routines/bound.ts +262 -0
  512. package/agent/routines/check-in.ts +54 -0
  513. package/agent/routines/collector.ts +497 -0
  514. package/agent/routines/declared-permissions.ts +578 -0
  515. package/agent/routines/disable-notice.ts +181 -0
  516. package/agent/routines/entity-read.ts +305 -0
  517. package/agent/routines/event-authz.ts +268 -0
  518. package/agent/routines/event-match.ts +200 -0
  519. package/agent/routines/event-model.ts +744 -0
  520. package/agent/routines/events.ts +201 -0
  521. package/agent/routines/fire-audit.ts +823 -0
  522. package/agent/routines/fire-auth.ts +280 -0
  523. package/agent/routines/fire-carriage.ts +126 -0
  524. package/agent/routines/fire-creator.ts +86 -0
  525. package/agent/routines/fire-disclosure.ts +233 -0
  526. package/agent/routines/fire-eligibility.ts +280 -0
  527. package/agent/routines/fire-halt.ts +57 -0
  528. package/agent/routines/fire-message.ts +76 -0
  529. package/agent/routines/fire-toolset.ts +179 -0
  530. package/agent/routines/fire-window.ts +604 -0
  531. package/agent/routines/follow-ups.ts +173 -0
  532. package/agent/routines/gate.ts +251 -0
  533. package/agent/routines/github-entity-read.ts +120 -0
  534. package/agent/routines/github-fanout.ts +88 -0
  535. package/agent/routines/github-normalizer.ts +248 -0
  536. package/agent/routines/ingress.ts +855 -0
  537. package/agent/routines/job.ts +140 -0
  538. package/agent/routines/jq-filter.ts +387 -0
  539. package/agent/routines/lifecycle.ts +248 -0
  540. package/agent/routines/match-stamp.ts +131 -0
  541. package/agent/routines/outcome-fold.ts +302 -0
  542. package/agent/routines/partition.ts +27 -0
  543. package/agent/routines/permission-card-wait.ts +281 -0
  544. package/agent/routines/permission-card.ts +496 -0
  545. package/agent/routines/permission-key.ts +54 -0
  546. package/agent/routines/permission-review.ts +318 -0
  547. package/agent/routines/policy.ts +304 -0
  548. package/agent/routines/pre-fire.ts +133 -0
  549. package/agent/routines/provider-events.ts +430 -0
  550. package/agent/routines/report.ts +148 -0
  551. package/agent/routines/routine.ts +949 -0
  552. package/agent/routines/schedule.ts +209 -0
  553. package/agent/routines/scheme-name.ts +96 -0
  554. package/agent/routines/stall.ts +153 -0
  555. package/agent/routines/store.ts +100 -0
  556. package/agent/routines/watch.ts +328 -0
  557. package/agent/sandbox/backend-select.ts +58 -0
  558. package/agent/sandbox/vercel-create.ts +211 -0
  559. package/agent/scaffold/app-root.ts +104 -0
  560. package/agent/scaffold/roster-config.ts +187 -0
  561. package/agent/scaffold/roster-fs.ts +202 -0
  562. package/agent/scaffold/roster-plan.ts +880 -0
  563. package/agent/scaffold/templates.ts +85 -0
  564. package/agent/scaffold/tool-roster-read.ts +79 -0
  565. package/agent/scaffold/tool-roster.ts +214 -0
  566. package/agent/schedules/directory-sync.ts +37 -0
  567. package/agent/schedules/dispatch.ts +798 -0
  568. package/agent/schedules/dream-mode3.ts +311 -0
  569. package/agent/schedules/routine-dispatch.ts +213 -0
  570. package/agent/schedules/tidy.ts +321 -0
  571. package/agent/scm/app.ts +150 -0
  572. package/agent/scm/broker-audit.ts +107 -0
  573. package/agent/scm/broker.ts +130 -0
  574. package/agent/scm/capability-fit.ts +164 -0
  575. package/agent/scm/config-repo-token.ts +44 -0
  576. package/agent/scm/config.ts +37 -0
  577. package/agent/scm/contents.ts +162 -0
  578. package/agent/scm/git.ts +383 -0
  579. package/agent/scm/github-acting-identity.ts +127 -0
  580. package/agent/scm/github-search.ts +144 -0
  581. package/agent/scm/github-work.ts +44 -0
  582. package/agent/scm/installations.ts +155 -0
  583. package/agent/scm/issue-actions.ts +234 -0
  584. package/agent/scm/mint.ts +299 -0
  585. package/agent/scm/pr-activity.ts +130 -0
  586. package/agent/scm/pr-diff.ts +143 -0
  587. package/agent/scm/pr-feedback.ts +335 -0
  588. package/agent/scm/pr-status.ts +299 -0
  589. package/agent/scm/pr-watch.ts +162 -0
  590. package/agent/scm/pr.ts +114 -0
  591. package/agent/scm/provider.ts +46 -0
  592. package/agent/scm/refs.ts +142 -0
  593. package/agent/scm/repo-skills.ts +212 -0
  594. package/agent/scm/types.ts +50 -0
  595. package/agent/scm/write-token.ts +41 -0
  596. package/agent/settings/settings.ts +1525 -0
  597. package/agent/skills/domain-skills.ts +206 -0
  598. package/agent/skills/scoped.ts +172 -0
  599. package/agent/spend/bypass.ts +133 -0
  600. package/agent/spend/caps.ts +361 -0
  601. package/agent/spend/check.ts +164 -0
  602. package/agent/spend/checkpoint.ts +673 -0
  603. package/agent/spend/dm-mask.ts +134 -0
  604. package/agent/spend/ingress-gate.ts +349 -0
  605. package/agent/spend/pricing.ts +584 -0
  606. package/agent/spend/reporting.ts +900 -0
  607. package/agent/spend/sandbox-pricing.ts +53 -0
  608. package/agent/spend/spend.ts +480 -0
  609. package/agent/spend/stack-pricing.ts +205 -0
  610. package/agent/spend/store.ts +263 -0
  611. package/agent/spend/subagent-runs.ts +166 -0
  612. package/agent/spend/usage-events.ts +144 -0
  613. package/agent/stall/bash-hang-guard.ts +326 -0
  614. package/agent/stall/guard.ts +285 -0
  615. package/agent/status/status.ts +128 -0
  616. package/agent/subagents/contracts.ts +147 -0
  617. package/agent/subagents/declared.ts +201 -0
  618. package/agent/testing/driver-allowlist.ts +239 -0
  619. package/agent/tools/add_label.ts +68 -0
  620. package/agent/tools/add_routine_rule.ts +215 -0
  621. package/agent/tools/agent_version.ts +46 -0
  622. package/agent/tools/assign.ts +182 -0
  623. package/agent/tools/aws.ts +175 -0
  624. package/agent/tools/browser_tools.ts +22 -0
  625. package/agent/tools/cancel_routine.ts +133 -0
  626. package/agent/tools/capture_events.ts +54 -0
  627. package/agent/tools/check_pr_status.ts +72 -0
  628. package/agent/tools/checkout_repo.ts +172 -0
  629. package/agent/tools/clear_connector_override.ts +159 -0
  630. package/agent/tools/clear_spend_limit.ts +199 -0
  631. package/agent/tools/complete_job.ts +64 -0
  632. package/agent/tools/complete_thread.ts +134 -0
  633. package/agent/tools/confirm_link.ts +503 -0
  634. package/agent/tools/connector.ts +230 -0
  635. package/agent/tools/create_agent.ts +305 -0
  636. package/agent/tools/create_routine.ts +487 -0
  637. package/agent/tools/create_skill.ts +178 -0
  638. package/agent/tools/create_ticket.ts +187 -0
  639. package/agent/tools/declare_webhook.ts +362 -0
  640. package/agent/tools/delete_skill.ts +135 -0
  641. package/agent/tools/describe_image.ts +302 -0
  642. package/agent/tools/dm_person.ts +203 -0
  643. package/agent/tools/edit_reply.ts +195 -0
  644. package/agent/tools/edit_routine.ts +159 -0
  645. package/agent/tools/enable_routine.ts +162 -0
  646. package/agent/tools/explain_permission.ts +59 -0
  647. package/agent/tools/get_pr_feedback.ts +84 -0
  648. package/agent/tools/grant_tools.ts +443 -0
  649. package/agent/tools/halt.ts +172 -0
  650. package/agent/tools/link_identity.ts +308 -0
  651. package/agent/tools/list_recent_events.ts +58 -0
  652. package/agent/tools/list_repos.ts +24 -0
  653. package/agent/tools/list_routines.ts +152 -0
  654. package/agent/tools/list_skills.ts +38 -0
  655. package/agent/tools/list_webhooks.ts +72 -0
  656. package/agent/tools/memory_admin_list.ts +79 -0
  657. package/agent/tools/memory_admin_read.ts +95 -0
  658. package/agent/tools/message_thread_seat.ts +145 -0
  659. package/agent/tools/no_reply.ts +272 -0
  660. package/agent/tools/open_pull_request.ts +348 -0
  661. package/agent/tools/permission_fit_report.ts +190 -0
  662. package/agent/tools/post_file.ts +416 -0
  663. package/agent/tools/post_message.ts +169 -0
  664. package/agent/tools/post_pr_walkthrough.ts +220 -0
  665. package/agent/tools/purge_memory.ts +361 -0
  666. package/agent/tools/query_analytics.ts +83 -0
  667. package/agent/tools/react.ts +201 -0
  668. package/agent/tools/read_channel.ts +121 -0
  669. package/agent/tools/read_docs.ts +50 -0
  670. package/agent/tools/read_file_upload.ts +190 -0
  671. package/agent/tools/read_routine_transcript.ts +88 -0
  672. package/agent/tools/read_thread.ts +103 -0
  673. package/agent/tools/read_thread_seat.ts +91 -0
  674. package/agent/tools/read_webhook_history.ts +46 -0
  675. package/agent/tools/read_work_channel.ts +109 -0
  676. package/agent/tools/read_work_thread.ts +90 -0
  677. package/agent/tools/record_follow_up.ts +84 -0
  678. package/agent/tools/record_job_state.ts +49 -0
  679. package/agent/tools/record_watch_state.ts +47 -0
  680. package/agent/tools/remove_routine_rule.ts +158 -0
  681. package/agent/tools/reply.ts +757 -0
  682. package/agent/tools/report_run_failed.ts +79 -0
  683. package/agent/tools/request_access.ts +518 -0
  684. package/agent/tools/request_credential_grant.ts +550 -0
  685. package/agent/tools/resume.ts +148 -0
  686. package/agent/tools/revoke_connector.ts +155 -0
  687. package/agent/tools/revoke_credential_grant.ts +108 -0
  688. package/agent/tools/revoke_routine_permissions.ts +81 -0
  689. package/agent/tools/rotate_webhook.ts +185 -0
  690. package/agent/tools/run_routine_now.ts +120 -0
  691. package/agent/tools/sandbox_tools.ts +94 -0
  692. package/agent/tools/search.ts +121 -0
  693. package/agent/tools/session_cost.ts +135 -0
  694. package/agent/tools/set_dm_delivery.ts +115 -0
  695. package/agent/tools/set_spend_limit.ts +529 -0
  696. package/agent/tools/set_state.ts +179 -0
  697. package/agent/tools/spawn_thread_session.ts +223 -0
  698. package/agent/tools/spend_report.ts +440 -0
  699. package/agent/tools/stand_down.ts +260 -0
  700. package/agent/tools/subscribe_pr.ts +253 -0
  701. package/agent/tools/unlink_identity.ts +100 -0
  702. package/agent/tools/update_status.ts +65 -0
  703. package/agent/tools/usage_report.ts +103 -0
  704. package/agent/tools/walk_pr.ts +150 -0
  705. package/agent/webhooks/achievability.ts +235 -0
  706. package/agent/webhooks/capture-window.ts +220 -0
  707. package/agent/webhooks/config.ts +556 -0
  708. package/agent/webhooks/dispatch.ts +418 -0
  709. package/agent/webhooks/gate.ts +392 -0
  710. package/agent/webhooks/handshake-capture.ts +189 -0
  711. package/agent/webhooks/hooks-codemod.ts +266 -0
  712. package/agent/webhooks/oe-standard-webhook.ts +563 -0
  713. package/agent/webhooks/reject-audit.ts +134 -0
  714. package/agent/webhooks/replay-dedupe.ts +183 -0
  715. package/agent/webhooks/reveal-page.ts +507 -0
  716. package/agent/webhooks/secrets.ts +81 -0
  717. package/agent/webhooks/source-vocabulary.ts +333 -0
  718. package/agent/webhooks/verifier.ts +324 -0
  719. package/bin/oe-eve-patch.js +205 -0
  720. package/bin/oe.js +19 -0
  721. package/dist/agent/access/access-referenced-link-sets.d.ts +8 -0
  722. package/dist/agent/access/access-referenced-link-sets.d.ts.map +1 -0
  723. package/dist/agent/access/access-referenced-link-sets.js +20 -0
  724. package/dist/agent/access/access-referenced-link-sets.js.map +1 -0
  725. package/dist/agent/access/admin-read-venue.d.ts +48 -0
  726. package/dist/agent/access/admin-read-venue.d.ts.map +1 -0
  727. package/dist/agent/access/admin-read-venue.js +109 -0
  728. package/dist/agent/access/admin-read-venue.js.map +1 -0
  729. package/dist/agent/access/admin-standing.d.ts +16 -0
  730. package/dist/agent/access/admin-standing.d.ts.map +1 -0
  731. package/dist/agent/access/admin-standing.js +89 -0
  732. package/dist/agent/access/admin-standing.js.map +1 -0
  733. package/dist/agent/access/analytics-scope.d.ts +24 -0
  734. package/dist/agent/access/analytics-scope.d.ts.map +1 -0
  735. package/dist/agent/access/analytics-scope.js +62 -0
  736. package/dist/agent/access/analytics-scope.js.map +1 -0
  737. package/dist/agent/access/approval-dedupe.d.ts +29 -0
  738. package/dist/agent/access/approval-dedupe.d.ts.map +1 -0
  739. package/dist/agent/access/approval-dedupe.js +99 -0
  740. package/dist/agent/access/approval-dedupe.js.map +1 -0
  741. package/dist/agent/access/approval-judge.d.ts +186 -0
  742. package/dist/agent/access/approval-judge.d.ts.map +1 -0
  743. package/dist/agent/access/approval-judge.js +482 -0
  744. package/dist/agent/access/approval-judge.js.map +1 -0
  745. package/dist/agent/access/approval-preview.d.ts +27 -0
  746. package/dist/agent/access/approval-preview.d.ts.map +1 -0
  747. package/dist/agent/access/approval-preview.js +90 -0
  748. package/dist/agent/access/approval-preview.js.map +1 -0
  749. package/dist/agent/access/approval-scenarios.d.ts +18 -0
  750. package/dist/agent/access/approval-scenarios.d.ts.map +1 -0
  751. package/dist/agent/access/approval-scenarios.js +27 -0
  752. package/dist/agent/access/approval-scenarios.js.map +1 -0
  753. package/dist/agent/access/approver-chain.d.ts +210 -0
  754. package/dist/agent/access/approver-chain.d.ts.map +1 -0
  755. package/dist/agent/access/approver-chain.js +585 -0
  756. package/dist/agent/access/approver-chain.js.map +1 -0
  757. package/dist/agent/access/audience-floor.d.ts +69 -0
  758. package/dist/agent/access/audience-floor.d.ts.map +1 -0
  759. package/dist/agent/access/audience-floor.js +189 -0
  760. package/dist/agent/access/audience-floor.js.map +1 -0
  761. package/dist/agent/access/aws-output.d.ts +39 -0
  762. package/dist/agent/access/aws-output.d.ts.map +1 -0
  763. package/dist/agent/access/aws-output.js +94 -0
  764. package/dist/agent/access/aws-output.js.map +1 -0
  765. package/dist/agent/access/aws-screen.d.ts +24 -0
  766. package/dist/agent/access/aws-screen.d.ts.map +1 -0
  767. package/dist/agent/access/aws-screen.js +177 -0
  768. package/dist/agent/access/aws-screen.js.map +1 -0
  769. package/dist/agent/access/background-tasks.d.ts +100 -0
  770. package/dist/agent/access/background-tasks.d.ts.map +1 -0
  771. package/dist/agent/access/background-tasks.js +288 -0
  772. package/dist/agent/access/background-tasks.js.map +1 -0
  773. package/dist/agent/access/browser-hosts.d.ts +37 -0
  774. package/dist/agent/access/browser-hosts.d.ts.map +1 -0
  775. package/dist/agent/access/browser-hosts.js +127 -0
  776. package/dist/agent/access/browser-hosts.js.map +1 -0
  777. package/dist/agent/access/browser-toolkit.d.ts +48 -0
  778. package/dist/agent/access/browser-toolkit.d.ts.map +1 -0
  779. package/dist/agent/access/browser-toolkit.js +240 -0
  780. package/dist/agent/access/browser-toolkit.js.map +1 -0
  781. package/dist/agent/access/bundle.d.ts +239 -0
  782. package/dist/agent/access/bundle.d.ts.map +1 -0
  783. package/dist/agent/access/bundle.js +454 -0
  784. package/dist/agent/access/bundle.js.map +1 -0
  785. package/dist/agent/access/capabilities.d.ts +5 -0
  786. package/dist/agent/access/capabilities.d.ts.map +1 -0
  787. package/dist/agent/access/capabilities.js +9 -0
  788. package/dist/agent/access/capabilities.js.map +1 -0
  789. package/dist/agent/access/chat-dm-grant.d.ts +47 -0
  790. package/dist/agent/access/chat-dm-grant.d.ts.map +1 -0
  791. package/dist/agent/access/chat-dm-grant.js +185 -0
  792. package/dist/agent/access/chat-dm-grant.js.map +1 -0
  793. package/dist/agent/access/chat-write-grant.d.ts +35 -0
  794. package/dist/agent/access/chat-write-grant.d.ts.map +1 -0
  795. package/dist/agent/access/chat-write-grant.js +153 -0
  796. package/dist/agent/access/chat-write-grant.js.map +1 -0
  797. package/dist/agent/access/config.d.ts +117 -0
  798. package/dist/agent/access/config.d.ts.map +1 -0
  799. package/dist/agent/access/config.js +16 -0
  800. package/dist/agent/access/config.js.map +1 -0
  801. package/dist/agent/access/connector-content-origin-state.d.ts +17 -0
  802. package/dist/agent/access/connector-content-origin-state.d.ts.map +1 -0
  803. package/dist/agent/access/connector-content-origin-state.js +73 -0
  804. package/dist/agent/access/connector-content-origin-state.js.map +1 -0
  805. package/dist/agent/access/connector-credentials.d.ts +186 -0
  806. package/dist/agent/access/connector-credentials.d.ts.map +1 -0
  807. package/dist/agent/access/connector-credentials.js +258 -0
  808. package/dist/agent/access/connector-credentials.js.map +1 -0
  809. package/dist/agent/access/connector-disclosure.d.ts +66 -0
  810. package/dist/agent/access/connector-disclosure.d.ts.map +1 -0
  811. package/dist/agent/access/connector-disclosure.js +194 -0
  812. package/dist/agent/access/connector-disclosure.js.map +1 -0
  813. package/dist/agent/access/connector-op-gating.d.ts +32 -0
  814. package/dist/agent/access/connector-op-gating.d.ts.map +1 -0
  815. package/dist/agent/access/connector-op-gating.js +178 -0
  816. package/dist/agent/access/connector-op-gating.js.map +1 -0
  817. package/dist/agent/access/connector-scope.d.ts +42 -0
  818. package/dist/agent/access/connector-scope.d.ts.map +1 -0
  819. package/dist/agent/access/connector-scope.js +258 -0
  820. package/dist/agent/access/connector-scope.js.map +1 -0
  821. package/dist/agent/access/consequence.d.ts +205 -0
  822. package/dist/agent/access/consequence.d.ts.map +1 -0
  823. package/dist/agent/access/consequence.js +816 -0
  824. package/dist/agent/access/consequence.js.map +1 -0
  825. package/dist/agent/access/credential-bindings-codemod.d.ts +63 -0
  826. package/dist/agent/access/credential-bindings-codemod.d.ts.map +1 -0
  827. package/dist/agent/access/credential-bindings-codemod.js +179 -0
  828. package/dist/agent/access/credential-bindings-codemod.js.map +1 -0
  829. package/dist/agent/access/credential-endpoints.d.ts +47 -0
  830. package/dist/agent/access/credential-endpoints.d.ts.map +1 -0
  831. package/dist/agent/access/credential-endpoints.js +211 -0
  832. package/dist/agent/access/credential-endpoints.js.map +1 -0
  833. package/dist/agent/access/credential-grant-ask.d.ts +22 -0
  834. package/dist/agent/access/credential-grant-ask.d.ts.map +1 -0
  835. package/dist/agent/access/credential-grant-ask.js +82 -0
  836. package/dist/agent/access/credential-grant-ask.js.map +1 -0
  837. package/dist/agent/access/credential-grant-broker.d.ts +85 -0
  838. package/dist/agent/access/credential-grant-broker.d.ts.map +1 -0
  839. package/dist/agent/access/credential-grant-broker.js +252 -0
  840. package/dist/agent/access/credential-grant-broker.js.map +1 -0
  841. package/dist/agent/access/credential-grant-card.d.ts +98 -0
  842. package/dist/agent/access/credential-grant-card.d.ts.map +1 -0
  843. package/dist/agent/access/credential-grant-card.js +447 -0
  844. package/dist/agent/access/credential-grant-card.js.map +1 -0
  845. package/dist/agent/access/credential-grant-click.d.ts +43 -0
  846. package/dist/agent/access/credential-grant-click.d.ts.map +1 -0
  847. package/dist/agent/access/credential-grant-click.js +190 -0
  848. package/dist/agent/access/credential-grant-click.js.map +1 -0
  849. package/dist/agent/access/credential-grant-copy.d.ts +135 -0
  850. package/dist/agent/access/credential-grant-copy.d.ts.map +1 -0
  851. package/dist/agent/access/credential-grant-copy.js +276 -0
  852. package/dist/agent/access/credential-grant-copy.js.map +1 -0
  853. package/dist/agent/access/credential-grant-flow.d.ts +174 -0
  854. package/dist/agent/access/credential-grant-flow.d.ts.map +1 -0
  855. package/dist/agent/access/credential-grant-flow.js +503 -0
  856. package/dist/agent/access/credential-grant-flow.js.map +1 -0
  857. package/dist/agent/access/credential-grant-key-shape.d.ts +37 -0
  858. package/dist/agent/access/credential-grant-key-shape.d.ts.map +1 -0
  859. package/dist/agent/access/credential-grant-key-shape.js +51 -0
  860. package/dist/agent/access/credential-grant-key-shape.js.map +1 -0
  861. package/dist/agent/access/credential-grant-notice.d.ts +29 -0
  862. package/dist/agent/access/credential-grant-notice.d.ts.map +1 -0
  863. package/dist/agent/access/credential-grant-notice.js +187 -0
  864. package/dist/agent/access/credential-grant-notice.js.map +1 -0
  865. package/dist/agent/access/credential-grant-owner.d.ts +10 -0
  866. package/dist/agent/access/credential-grant-owner.d.ts.map +1 -0
  867. package/dist/agent/access/credential-grant-owner.js +16 -0
  868. package/dist/agent/access/credential-grant-owner.js.map +1 -0
  869. package/dist/agent/access/credential-grant-reach.d.ts +46 -0
  870. package/dist/agent/access/credential-grant-reach.d.ts.map +1 -0
  871. package/dist/agent/access/credential-grant-reach.js +77 -0
  872. package/dist/agent/access/credential-grant-reach.js.map +1 -0
  873. package/dist/agent/access/credential-grant-resolution.d.ts +30 -0
  874. package/dist/agent/access/credential-grant-resolution.d.ts.map +1 -0
  875. package/dist/agent/access/credential-grant-resolution.js +107 -0
  876. package/dist/agent/access/credential-grant-resolution.js.map +1 -0
  877. package/dist/agent/access/credential-grant-revoke.d.ts +33 -0
  878. package/dist/agent/access/credential-grant-revoke.d.ts.map +1 -0
  879. package/dist/agent/access/credential-grant-revoke.js +62 -0
  880. package/dist/agent/access/credential-grant-revoke.js.map +1 -0
  881. package/dist/agent/access/credential-grant-scope.d.ts +206 -0
  882. package/dist/agent/access/credential-grant-scope.d.ts.map +1 -0
  883. package/dist/agent/access/credential-grant-scope.js +282 -0
  884. package/dist/agent/access/credential-grant-scope.js.map +1 -0
  885. package/dist/agent/access/credential-grant.d.ts +94 -0
  886. package/dist/agent/access/credential-grant.d.ts.map +1 -0
  887. package/dist/agent/access/credential-grant.js +198 -0
  888. package/dist/agent/access/credential-grant.js.map +1 -0
  889. package/dist/agent/access/credentials.d.ts +41 -0
  890. package/dist/agent/access/credentials.d.ts.map +1 -0
  891. package/dist/agent/access/credentials.js +112 -0
  892. package/dist/agent/access/credentials.js.map +1 -0
  893. package/dist/agent/access/dated-read.d.ts +3 -0
  894. package/dist/agent/access/dated-read.d.ts.map +1 -0
  895. package/dist/agent/access/dated-read.js +24 -0
  896. package/dist/agent/access/dated-read.js.map +1 -0
  897. package/dist/agent/access/delegation-flag.d.ts +5 -0
  898. package/dist/agent/access/delegation-flag.d.ts.map +1 -0
  899. package/dist/agent/access/delegation-flag.js +10 -0
  900. package/dist/agent/access/delegation-flag.js.map +1 -0
  901. package/dist/agent/access/delegation-mount.d.ts +6 -0
  902. package/dist/agent/access/delegation-mount.d.ts.map +1 -0
  903. package/dist/agent/access/delegation-mount.js +30 -0
  904. package/dist/agent/access/delegation-mount.js.map +1 -0
  905. package/dist/agent/access/delta.d.ts +103 -0
  906. package/dist/agent/access/delta.d.ts.map +1 -0
  907. package/dist/agent/access/delta.js +267 -0
  908. package/dist/agent/access/delta.js.map +1 -0
  909. package/dist/agent/access/dispatch-origin-signal.d.ts +19 -0
  910. package/dist/agent/access/dispatch-origin-signal.d.ts.map +1 -0
  911. package/dist/agent/access/dispatch-origin-signal.js +130 -0
  912. package/dist/agent/access/dispatch-origin-signal.js.map +1 -0
  913. package/dist/agent/access/domain-credentials.d.ts +32 -0
  914. package/dist/agent/access/domain-credentials.d.ts.map +1 -0
  915. package/dist/agent/access/domain-credentials.js +78 -0
  916. package/dist/agent/access/domain-credentials.js.map +1 -0
  917. package/dist/agent/access/egress-denial-log.d.ts +28 -0
  918. package/dist/agent/access/egress-denial-log.d.ts.map +1 -0
  919. package/dist/agent/access/egress-denial-log.js +96 -0
  920. package/dist/agent/access/egress-denial-log.js.map +1 -0
  921. package/dist/agent/access/egress-denial-poller.d.ts +56 -0
  922. package/dist/agent/access/egress-denial-poller.d.ts.map +1 -0
  923. package/dist/agent/access/egress-denial-poller.js +184 -0
  924. package/dist/agent/access/egress-denial-poller.js.map +1 -0
  925. package/dist/agent/access/egress-status.d.ts +61 -0
  926. package/dist/agent/access/egress-status.d.ts.map +1 -0
  927. package/dist/agent/access/egress-status.js +130 -0
  928. package/dist/agent/access/egress-status.js.map +1 -0
  929. package/dist/agent/access/egress.d.ts +86 -0
  930. package/dist/agent/access/egress.d.ts.map +1 -0
  931. package/dist/agent/access/egress.js +236 -0
  932. package/dist/agent/access/egress.js.map +1 -0
  933. package/dist/agent/access/enforcement.d.ts +8 -0
  934. package/dist/agent/access/enforcement.d.ts.map +1 -0
  935. package/dist/agent/access/enforcement.js +24 -0
  936. package/dist/agent/access/enforcement.js.map +1 -0
  937. package/dist/agent/access/eve-patch-probe-boot.d.ts +2 -0
  938. package/dist/agent/access/eve-patch-probe-boot.d.ts.map +1 -0
  939. package/dist/agent/access/eve-patch-probe-boot.js +91 -0
  940. package/dist/agent/access/eve-patch-probe-boot.js.map +1 -0
  941. package/dist/agent/access/eve-patch-probe.d.ts +57 -0
  942. package/dist/agent/access/eve-patch-probe.d.ts.map +1 -0
  943. package/dist/agent/access/eve-patch-probe.js +225 -0
  944. package/dist/agent/access/eve-patch-probe.js.map +1 -0
  945. package/dist/agent/access/external-policy.d.ts +95 -0
  946. package/dist/agent/access/external-policy.d.ts.map +1 -0
  947. package/dist/agent/access/external-policy.js +154 -0
  948. package/dist/agent/access/external-policy.js.map +1 -0
  949. package/dist/agent/access/extra-hosts.d.ts +10 -0
  950. package/dist/agent/access/extra-hosts.d.ts.map +1 -0
  951. package/dist/agent/access/extra-hosts.js +28 -0
  952. package/dist/agent/access/extra-hosts.js.map +1 -0
  953. package/dist/agent/access/grant-borrow-transport-registry.internal.d.ts +21 -0
  954. package/dist/agent/access/grant-borrow-transport-registry.internal.d.ts.map +1 -0
  955. package/dist/agent/access/grant-borrow-transport-registry.internal.js +63 -0
  956. package/dist/agent/access/grant-borrow-transport-registry.internal.js.map +1 -0
  957. package/dist/agent/access/grant-room-notice-registry.internal.d.ts +20 -0
  958. package/dist/agent/access/grant-room-notice-registry.internal.d.ts.map +1 -0
  959. package/dist/agent/access/grant-room-notice-registry.internal.js +59 -0
  960. package/dist/agent/access/grant-room-notice-registry.internal.js.map +1 -0
  961. package/dist/agent/access/grant-schema-pin.d.ts +15 -0
  962. package/dist/agent/access/grant-schema-pin.d.ts.map +1 -0
  963. package/dist/agent/access/grant-schema-pin.js +29 -0
  964. package/dist/agent/access/grant-schema-pin.js.map +1 -0
  965. package/dist/agent/access/grants-codemod.d.ts +32 -0
  966. package/dist/agent/access/grants-codemod.d.ts.map +1 -0
  967. package/dist/agent/access/grants-codemod.js +306 -0
  968. package/dist/agent/access/grants-codemod.js.map +1 -0
  969. package/dist/agent/access/group-request.d.ts +13 -0
  970. package/dist/agent/access/group-request.d.ts.map +1 -0
  971. package/dist/agent/access/group-request.js +67 -0
  972. package/dist/agent/access/group-request.js.map +1 -0
  973. package/dist/agent/access/halt-state.d.ts +7 -0
  974. package/dist/agent/access/halt-state.d.ts.map +1 -0
  975. package/dist/agent/access/halt-state.js +23 -0
  976. package/dist/agent/access/halt-state.js.map +1 -0
  977. package/dist/agent/access/halt.d.ts +90 -0
  978. package/dist/agent/access/halt.d.ts.map +1 -0
  979. package/dist/agent/access/halt.js +239 -0
  980. package/dist/agent/access/halt.js.map +1 -0
  981. package/dist/agent/access/host-egress.d.ts +71 -0
  982. package/dist/agent/access/host-egress.d.ts.map +1 -0
  983. package/dist/agent/access/host-egress.js +384 -0
  984. package/dist/agent/access/host-egress.js.map +1 -0
  985. package/dist/agent/access/human-only-invariants-manifest.d.ts +20 -0
  986. package/dist/agent/access/human-only-invariants-manifest.d.ts.map +1 -0
  987. package/dist/agent/access/human-only-invariants-manifest.js +144 -0
  988. package/dist/agent/access/human-only-invariants-manifest.js.map +1 -0
  989. package/dist/agent/access/ingestion-binding-manifest.d.ts +41 -0
  990. package/dist/agent/access/ingestion-binding-manifest.d.ts.map +1 -0
  991. package/dist/agent/access/ingestion-binding-manifest.js +214 -0
  992. package/dist/agent/access/ingestion-binding-manifest.js.map +1 -0
  993. package/dist/agent/access/ingestion-route-inventory.generated.d.ts +13 -0
  994. package/dist/agent/access/ingestion-route-inventory.generated.d.ts.map +1 -0
  995. package/dist/agent/access/ingestion-route-inventory.generated.js +46 -0
  996. package/dist/agent/access/ingestion-route-inventory.generated.js.map +1 -0
  997. package/dist/agent/access/instructions.d.ts +5 -0
  998. package/dist/agent/access/instructions.d.ts.map +1 -0
  999. package/dist/agent/access/instructions.js +72 -0
  1000. package/dist/agent/access/instructions.js.map +1 -0
  1001. package/dist/agent/access/invoker-posture-state.d.ts +8 -0
  1002. package/dist/agent/access/invoker-posture-state.d.ts.map +1 -0
  1003. package/dist/agent/access/invoker-posture-state.js +23 -0
  1004. package/dist/agent/access/invoker-posture-state.js.map +1 -0
  1005. package/dist/agent/access/invoker-posture.d.ts +29 -0
  1006. package/dist/agent/access/invoker-posture.d.ts.map +1 -0
  1007. package/dist/agent/access/invoker-posture.js +70 -0
  1008. package/dist/agent/access/invoker-posture.js.map +1 -0
  1009. package/dist/agent/access/job-posture.d.ts +37 -0
  1010. package/dist/agent/access/job-posture.d.ts.map +1 -0
  1011. package/dist/agent/access/job-posture.js +65 -0
  1012. package/dist/agent/access/job-posture.js.map +1 -0
  1013. package/dist/agent/access/job-session-state.d.ts +13 -0
  1014. package/dist/agent/access/job-session-state.d.ts.map +1 -0
  1015. package/dist/agent/access/job-session-state.js +57 -0
  1016. package/dist/agent/access/job-session-state.js.map +1 -0
  1017. package/dist/agent/access/lean-seat-state.d.ts +12 -0
  1018. package/dist/agent/access/lean-seat-state.d.ts.map +1 -0
  1019. package/dist/agent/access/lean-seat-state.js +35 -0
  1020. package/dist/agent/access/lean-seat-state.js.map +1 -0
  1021. package/dist/agent/access/lean-seat.d.ts +25 -0
  1022. package/dist/agent/access/lean-seat.d.ts.map +1 -0
  1023. package/dist/agent/access/lean-seat.js +66 -0
  1024. package/dist/agent/access/lean-seat.js.map +1 -0
  1025. package/dist/agent/access/lint.d.ts +39 -0
  1026. package/dist/agent/access/lint.d.ts.map +1 -0
  1027. package/dist/agent/access/lint.js +556 -0
  1028. package/dist/agent/access/lint.js.map +1 -0
  1029. package/dist/agent/access/live-delegated-tasks.d.ts +20 -0
  1030. package/dist/agent/access/live-delegated-tasks.d.ts.map +1 -0
  1031. package/dist/agent/access/live-delegated-tasks.js +96 -0
  1032. package/dist/agent/access/live-delegated-tasks.js.map +1 -0
  1033. package/dist/agent/access/loop-breaker.d.ts +26 -0
  1034. package/dist/agent/access/loop-breaker.d.ts.map +1 -0
  1035. package/dist/agent/access/loop-breaker.js +77 -0
  1036. package/dist/agent/access/loop-breaker.js.map +1 -0
  1037. package/dist/agent/access/mcp-call-fence.d.ts +19 -0
  1038. package/dist/agent/access/mcp-call-fence.d.ts.map +1 -0
  1039. package/dist/agent/access/mcp-call-fence.js +180 -0
  1040. package/dist/agent/access/mcp-call-fence.js.map +1 -0
  1041. package/dist/agent/access/member-grant.d.ts +16 -0
  1042. package/dist/agent/access/member-grant.d.ts.map +1 -0
  1043. package/dist/agent/access/member-grant.js +34 -0
  1044. package/dist/agent/access/member-grant.js.map +1 -0
  1045. package/dist/agent/access/member-plane.d.ts +91 -0
  1046. package/dist/agent/access/member-plane.d.ts.map +1 -0
  1047. package/dist/agent/access/member-plane.js +114 -0
  1048. package/dist/agent/access/member-plane.js.map +1 -0
  1049. package/dist/agent/access/native-admin.d.ts +13 -0
  1050. package/dist/agent/access/native-admin.d.ts.map +1 -0
  1051. package/dist/agent/access/native-admin.js +23 -0
  1052. package/dist/agent/access/native-admin.js.map +1 -0
  1053. package/dist/agent/access/native-delegation-state.d.ts +16 -0
  1054. package/dist/agent/access/native-delegation-state.d.ts.map +1 -0
  1055. package/dist/agent/access/native-delegation-state.js +26 -0
  1056. package/dist/agent/access/native-delegation-state.js.map +1 -0
  1057. package/dist/agent/access/network-access.d.ts +23 -0
  1058. package/dist/agent/access/network-access.d.ts.map +1 -0
  1059. package/dist/agent/access/network-access.js +108 -0
  1060. package/dist/agent/access/network-access.js.map +1 -0
  1061. package/dist/agent/access/nullable-optional-fields.d.ts +13 -0
  1062. package/dist/agent/access/nullable-optional-fields.d.ts.map +1 -0
  1063. package/dist/agent/access/nullable-optional-fields.js +190 -0
  1064. package/dist/agent/access/nullable-optional-fields.js.map +1 -0
  1065. package/dist/agent/access/overlay-module.d.ts +20 -0
  1066. package/dist/agent/access/overlay-module.d.ts.map +1 -0
  1067. package/dist/agent/access/overlay-module.js +47 -0
  1068. package/dist/agent/access/overlay-module.js.map +1 -0
  1069. package/dist/agent/access/own-account-gate-manifest.d.ts +23 -0
  1070. package/dist/agent/access/own-account-gate-manifest.d.ts.map +1 -0
  1071. package/dist/agent/access/own-account-gate-manifest.js +109 -0
  1072. package/dist/agent/access/own-account-gate-manifest.js.map +1 -0
  1073. package/dist/agent/access/pane-venue.d.ts +58 -0
  1074. package/dist/agent/access/pane-venue.d.ts.map +1 -0
  1075. package/dist/agent/access/pane-venue.js +177 -0
  1076. package/dist/agent/access/pane-venue.js.map +1 -0
  1077. package/dist/agent/access/pending-delegation-signal.d.ts +38 -0
  1078. package/dist/agent/access/pending-delegation-signal.d.ts.map +1 -0
  1079. package/dist/agent/access/pending-delegation-signal.js +268 -0
  1080. package/dist/agent/access/pending-delegation-signal.js.map +1 -0
  1081. package/dist/agent/access/permission-evidence.d.ts +184 -0
  1082. package/dist/agent/access/permission-evidence.d.ts.map +1 -0
  1083. package/dist/agent/access/permission-evidence.js +412 -0
  1084. package/dist/agent/access/permission-evidence.js.map +1 -0
  1085. package/dist/agent/access/permission-proposal.d.ts +33 -0
  1086. package/dist/agent/access/permission-proposal.d.ts.map +1 -0
  1087. package/dist/agent/access/permission-proposal.js +319 -0
  1088. package/dist/agent/access/permission-proposal.js.map +1 -0
  1089. package/dist/agent/access/platform.d.ts +5 -0
  1090. package/dist/agent/access/platform.d.ts.map +1 -0
  1091. package/dist/agent/access/platform.js +15 -0
  1092. package/dist/agent/access/platform.js.map +1 -0
  1093. package/dist/agent/access/pre-approval-rules.d.ts +44 -0
  1094. package/dist/agent/access/pre-approval-rules.d.ts.map +1 -0
  1095. package/dist/agent/access/pre-approval-rules.js +86 -0
  1096. package/dist/agent/access/pre-approval-rules.js.map +1 -0
  1097. package/dist/agent/access/principal-gate-manifest.d.ts +111 -0
  1098. package/dist/agent/access/principal-gate-manifest.d.ts.map +1 -0
  1099. package/dist/agent/access/principal-gate-manifest.js +718 -0
  1100. package/dist/agent/access/principal-gate-manifest.js.map +1 -0
  1101. package/dist/agent/access/provider-selection-check.d.ts +24 -0
  1102. package/dist/agent/access/provider-selection-check.d.ts.map +1 -0
  1103. package/dist/agent/access/provider-selection-check.js +97 -0
  1104. package/dist/agent/access/provider-selection-check.js.map +1 -0
  1105. package/dist/agent/access/provider-selection.d.ts +21 -0
  1106. package/dist/agent/access/provider-selection.d.ts.map +1 -0
  1107. package/dist/agent/access/provider-selection.js +76 -0
  1108. package/dist/agent/access/provider-selection.js.map +1 -0
  1109. package/dist/agent/access/read-grant.d.ts +13 -0
  1110. package/dist/agent/access/read-grant.d.ts.map +1 -0
  1111. package/dist/agent/access/read-grant.js +96 -0
  1112. package/dist/agent/access/read-grant.js.map +1 -0
  1113. package/dist/agent/access/repo-capabilities.d.ts +30 -0
  1114. package/dist/agent/access/repo-capabilities.d.ts.map +1 -0
  1115. package/dist/agent/access/repo-capabilities.js +60 -0
  1116. package/dist/agent/access/repo-capabilities.js.map +1 -0
  1117. package/dist/agent/access/request.d.ts +17 -0
  1118. package/dist/agent/access/request.d.ts.map +1 -0
  1119. package/dist/agent/access/request.js +110 -0
  1120. package/dist/agent/access/request.js.map +1 -0
  1121. package/dist/agent/access/requester-identity.d.ts +82 -0
  1122. package/dist/agent/access/requester-identity.d.ts.map +1 -0
  1123. package/dist/agent/access/requester-identity.js +275 -0
  1124. package/dist/agent/access/requester-identity.js.map +1 -0
  1125. package/dist/agent/access/requester-messages.d.ts +7 -0
  1126. package/dist/agent/access/requester-messages.d.ts.map +1 -0
  1127. package/dist/agent/access/requester-messages.js +45 -0
  1128. package/dist/agent/access/requester-messages.js.map +1 -0
  1129. package/dist/agent/access/reserved-hosts.d.ts +5 -0
  1130. package/dist/agent/access/reserved-hosts.d.ts.map +1 -0
  1131. package/dist/agent/access/reserved-hosts.js +9 -0
  1132. package/dist/agent/access/reserved-hosts.js.map +1 -0
  1133. package/dist/agent/access/resolver.d.ts +120 -0
  1134. package/dist/agent/access/resolver.d.ts.map +1 -0
  1135. package/dist/agent/access/resolver.js +447 -0
  1136. package/dist/agent/access/resolver.js.map +1 -0
  1137. package/dist/agent/access/resource-capabilities.d.ts +37 -0
  1138. package/dist/agent/access/resource-capabilities.d.ts.map +1 -0
  1139. package/dist/agent/access/resource-capabilities.js +77 -0
  1140. package/dist/agent/access/resource-capabilities.js.map +1 -0
  1141. package/dist/agent/access/resource-grant-manifest.d.ts +21 -0
  1142. package/dist/agent/access/resource-grant-manifest.d.ts.map +1 -0
  1143. package/dist/agent/access/resource-grant-manifest.js +93 -0
  1144. package/dist/agent/access/resource-grant-manifest.js.map +1 -0
  1145. package/dist/agent/access/resource-grant.d.ts +33 -0
  1146. package/dist/agent/access/resource-grant.d.ts.map +1 -0
  1147. package/dist/agent/access/resource-grant.js +131 -0
  1148. package/dist/agent/access/resource-grant.js.map +1 -0
  1149. package/dist/agent/access/result-cap.d.ts +11 -0
  1150. package/dist/agent/access/result-cap.d.ts.map +1 -0
  1151. package/dist/agent/access/result-cap.js +31 -0
  1152. package/dist/agent/access/result-cap.js.map +1 -0
  1153. package/dist/agent/access/result-reduce-model-arm.d.ts +25 -0
  1154. package/dist/agent/access/result-reduce-model-arm.d.ts.map +1 -0
  1155. package/dist/agent/access/result-reduce-model-arm.js +73 -0
  1156. package/dist/agent/access/result-reduce-model-arm.js.map +1 -0
  1157. package/dist/agent/access/result-reduce.d.ts +13 -0
  1158. package/dist/agent/access/result-reduce.d.ts.map +1 -0
  1159. package/dist/agent/access/result-reduce.js +86 -0
  1160. package/dist/agent/access/result-reduce.js.map +1 -0
  1161. package/dist/agent/access/roles.d.ts +26 -0
  1162. package/dist/agent/access/roles.d.ts.map +1 -0
  1163. package/dist/agent/access/roles.js +78 -0
  1164. package/dist/agent/access/roles.js.map +1 -0
  1165. package/dist/agent/access/scope-key.d.ts +43 -0
  1166. package/dist/agent/access/scope-key.d.ts.map +1 -0
  1167. package/dist/agent/access/scope-key.js +36 -0
  1168. package/dist/agent/access/scope-key.js.map +1 -0
  1169. package/dist/agent/access/seat-read-budget.d.ts +17 -0
  1170. package/dist/agent/access/seat-read-budget.d.ts.map +1 -0
  1171. package/dist/agent/access/seat-read-budget.js +53 -0
  1172. package/dist/agent/access/seat-read-budget.js.map +1 -0
  1173. package/dist/agent/access/self-host-egress.d.ts +37 -0
  1174. package/dist/agent/access/self-host-egress.d.ts.map +1 -0
  1175. package/dist/agent/access/self-host-egress.js +63 -0
  1176. package/dist/agent/access/self-host-egress.js.map +1 -0
  1177. package/dist/agent/access/settlement-dispatch-signal.d.ts +22 -0
  1178. package/dist/agent/access/settlement-dispatch-signal.d.ts.map +1 -0
  1179. package/dist/agent/access/settlement-dispatch-signal.js +76 -0
  1180. package/dist/agent/access/settlement-dispatch-signal.js.map +1 -0
  1181. package/dist/agent/access/skill-taint-envelope.d.ts +31 -0
  1182. package/dist/agent/access/skill-taint-envelope.d.ts.map +1 -0
  1183. package/dist/agent/access/skill-taint-envelope.js +80 -0
  1184. package/dist/agent/access/skill-taint-envelope.js.map +1 -0
  1185. package/dist/agent/access/source-gate-manifest.d.ts +14 -0
  1186. package/dist/agent/access/source-gate-manifest.d.ts.map +1 -0
  1187. package/dist/agent/access/source-gate-manifest.js +111 -0
  1188. package/dist/agent/access/source-gate-manifest.js.map +1 -0
  1189. package/dist/agent/access/source-scoped-mount.d.ts +7 -0
  1190. package/dist/agent/access/source-scoped-mount.d.ts.map +1 -0
  1191. package/dist/agent/access/source-scoped-mount.js +26 -0
  1192. package/dist/agent/access/source-scoped-mount.js.map +1 -0
  1193. package/dist/agent/access/subagent-taint.d.ts +44 -0
  1194. package/dist/agent/access/subagent-taint.d.ts.map +1 -0
  1195. package/dist/agent/access/subagent-taint.js +175 -0
  1196. package/dist/agent/access/subagent-taint.js.map +1 -0
  1197. package/dist/agent/access/surface-work-grant.d.ts +20 -0
  1198. package/dist/agent/access/surface-work-grant.d.ts.map +1 -0
  1199. package/dist/agent/access/surface-work-grant.js +84 -0
  1200. package/dist/agent/access/surface-work-grant.js.map +1 -0
  1201. package/dist/agent/access/taint-enforcement.d.ts +46 -0
  1202. package/dist/agent/access/taint-enforcement.d.ts.map +1 -0
  1203. package/dist/agent/access/taint-enforcement.js +141 -0
  1204. package/dist/agent/access/taint-enforcement.js.map +1 -0
  1205. package/dist/agent/access/taint-signal.d.ts +100 -0
  1206. package/dist/agent/access/taint-signal.d.ts.map +1 -0
  1207. package/dist/agent/access/taint-signal.js +236 -0
  1208. package/dist/agent/access/taint-signal.js.map +1 -0
  1209. package/dist/agent/access/taint-tiers.d.ts +64 -0
  1210. package/dist/agent/access/taint-tiers.d.ts.map +1 -0
  1211. package/dist/agent/access/taint-tiers.js +93 -0
  1212. package/dist/agent/access/taint-tiers.js.map +1 -0
  1213. package/dist/agent/access/task-wake-signal.d.ts +9 -0
  1214. package/dist/agent/access/task-wake-signal.d.ts.map +1 -0
  1215. package/dist/agent/access/task-wake-signal.js +86 -0
  1216. package/dist/agent/access/task-wake-signal.js.map +1 -0
  1217. package/dist/agent/access/tenant-admission.d.ts +52 -0
  1218. package/dist/agent/access/tenant-admission.d.ts.map +1 -0
  1219. package/dist/agent/access/tenant-admission.js +154 -0
  1220. package/dist/agent/access/tenant-admission.js.map +1 -0
  1221. package/dist/agent/access/untrusted-projection.d.ts +23 -0
  1222. package/dist/agent/access/untrusted-projection.d.ts.map +1 -0
  1223. package/dist/agent/access/untrusted-projection.js +258 -0
  1224. package/dist/agent/access/untrusted-projection.js.map +1 -0
  1225. package/dist/agent/access/untrusted.d.ts +34 -0
  1226. package/dist/agent/access/untrusted.d.ts.map +1 -0
  1227. package/dist/agent/access/untrusted.js +100 -0
  1228. package/dist/agent/access/untrusted.js.map +1 -0
  1229. package/dist/agent/access/wake-mapping.d.ts +22 -0
  1230. package/dist/agent/access/wake-mapping.d.ts.map +1 -0
  1231. package/dist/agent/access/wake-mapping.js +19 -0
  1232. package/dist/agent/access/wake-mapping.js.map +1 -0
  1233. package/dist/agent/access/web-fetch-fence.d.ts +8 -0
  1234. package/dist/agent/access/web-fetch-fence.d.ts.map +1 -0
  1235. package/dist/agent/access/web-fetch-fence.js +55 -0
  1236. package/dist/agent/access/web-fetch-fence.js.map +1 -0
  1237. package/dist/agent/access/window-gate-manifest.d.ts +75 -0
  1238. package/dist/agent/access/window-gate-manifest.d.ts.map +1 -0
  1239. package/dist/agent/access/window-gate-manifest.js +474 -0
  1240. package/dist/agent/access/window-gate-manifest.js.map +1 -0
  1241. package/dist/agent/access/window-gated.d.ts +111 -0
  1242. package/dist/agent/access/window-gated.d.ts.map +1 -0
  1243. package/dist/agent/access/window-gated.js +611 -0
  1244. package/dist/agent/access/window-gated.js.map +1 -0
  1245. package/dist/agent/access/window-routing.d.ts +16 -0
  1246. package/dist/agent/access/window-routing.d.ts.map +1 -0
  1247. package/dist/agent/access/window-routing.js +11 -0
  1248. package/dist/agent/access/window-routing.js.map +1 -0
  1249. package/dist/agent/access/work-grant.d.ts +39 -0
  1250. package/dist/agent/access/work-grant.d.ts.map +1 -0
  1251. package/dist/agent/access/work-grant.js +76 -0
  1252. package/dist/agent/access/work-grant.js.map +1 -0
  1253. package/dist/agent/access/work-mount-manifest.d.ts +21 -0
  1254. package/dist/agent/access/work-mount-manifest.d.ts.map +1 -0
  1255. package/dist/agent/access/work-mount-manifest.js +149 -0
  1256. package/dist/agent/access/work-mount-manifest.js.map +1 -0
  1257. package/dist/agent/access/worker-capabilities.d.ts +60 -0
  1258. package/dist/agent/access/worker-capabilities.d.ts.map +1 -0
  1259. package/dist/agent/access/worker-capabilities.js +318 -0
  1260. package/dist/agent/access/worker-capabilities.js.map +1 -0
  1261. package/dist/agent/access/worker-capability-index.generated.d.ts +7 -0
  1262. package/dist/agent/access/worker-capability-index.generated.d.ts.map +1 -0
  1263. package/dist/agent/access/worker-capability-index.generated.js +188 -0
  1264. package/dist/agent/access/worker-capability-index.generated.js.map +1 -0
  1265. package/dist/agent/access/worker-continuation.d.ts +7 -0
  1266. package/dist/agent/access/worker-continuation.d.ts.map +1 -0
  1267. package/dist/agent/access/worker-continuation.js +180 -0
  1268. package/dist/agent/access/worker-continuation.js.map +1 -0
  1269. package/dist/agent/access/worker-seat-state.d.ts +8 -0
  1270. package/dist/agent/access/worker-seat-state.d.ts.map +1 -0
  1271. package/dist/agent/access/worker-seat-state.js +24 -0
  1272. package/dist/agent/access/worker-seat-state.js.map +1 -0
  1273. package/dist/agent/access/worker-seat.d.ts +23 -0
  1274. package/dist/agent/access/worker-seat.d.ts.map +1 -0
  1275. package/dist/agent/access/worker-seat.js +47 -0
  1276. package/dist/agent/access/worker-seat.js.map +1 -0
  1277. package/dist/agent/access/worker-toolset-state.d.ts +32 -0
  1278. package/dist/agent/access/worker-toolset-state.d.ts.map +1 -0
  1279. package/dist/agent/access/worker-toolset-state.js +40 -0
  1280. package/dist/agent/access/worker-toolset-state.js.map +1 -0
  1281. package/dist/agent/adapter-api.d.ts +416 -0
  1282. package/dist/agent/adapter-api.d.ts.map +1 -0
  1283. package/dist/agent/adapter-api.js +1147 -0
  1284. package/dist/agent/adapter-api.js.map +1 -0
  1285. package/dist/agent/analytics/compile.d.ts +127 -0
  1286. package/dist/agent/analytics/compile.d.ts.map +1 -0
  1287. package/dist/agent/analytics/compile.js +406 -0
  1288. package/dist/agent/analytics/compile.js.map +1 -0
  1289. package/dist/agent/analytics/execute.d.ts +20 -0
  1290. package/dist/agent/analytics/execute.d.ts.map +1 -0
  1291. package/dist/agent/analytics/execute.js +146 -0
  1292. package/dist/agent/analytics/execute.js.map +1 -0
  1293. package/dist/agent/analytics/registry.d.ts +89 -0
  1294. package/dist/agent/analytics/registry.d.ts.map +1 -0
  1295. package/dist/agent/analytics/registry.js +216 -0
  1296. package/dist/agent/analytics/registry.js.map +1 -0
  1297. package/dist/agent/approvals/access-request.d.ts +53 -0
  1298. package/dist/agent/approvals/access-request.d.ts.map +1 -0
  1299. package/dist/agent/approvals/access-request.js +186 -0
  1300. package/dist/agent/approvals/access-request.js.map +1 -0
  1301. package/dist/agent/approvals/actions.d.ts +95 -0
  1302. package/dist/agent/approvals/actions.d.ts.map +1 -0
  1303. package/dist/agent/approvals/actions.js +293 -0
  1304. package/dist/agent/approvals/actions.js.map +1 -0
  1305. package/dist/agent/approvals/agent-create.d.ts +44 -0
  1306. package/dist/agent/approvals/agent-create.d.ts.map +1 -0
  1307. package/dist/agent/approvals/agent-create.js +205 -0
  1308. package/dist/agent/approvals/agent-create.js.map +1 -0
  1309. package/dist/agent/approvals/arming-context.d.ts +13 -0
  1310. package/dist/agent/approvals/arming-context.d.ts.map +1 -0
  1311. package/dist/agent/approvals/arming-context.js +17 -0
  1312. package/dist/agent/approvals/arming-context.js.map +1 -0
  1313. package/dist/agent/approvals/card-disclosure.d.ts +28 -0
  1314. package/dist/agent/approvals/card-disclosure.d.ts.map +1 -0
  1315. package/dist/agent/approvals/card-disclosure.js +31 -0
  1316. package/dist/agent/approvals/card-disclosure.js.map +1 -0
  1317. package/dist/agent/approvals/card-signal.d.ts +41 -0
  1318. package/dist/agent/approvals/card-signal.d.ts.map +1 -0
  1319. package/dist/agent/approvals/card-signal.js +115 -0
  1320. package/dist/agent/approvals/card-signal.js.map +1 -0
  1321. package/dist/agent/approvals/card-venue.d.ts +55 -0
  1322. package/dist/agent/approvals/card-venue.d.ts.map +1 -0
  1323. package/dist/agent/approvals/card-venue.js +106 -0
  1324. package/dist/agent/approvals/card-venue.js.map +1 -0
  1325. package/dist/agent/approvals/card.d.ts +23 -0
  1326. package/dist/agent/approvals/card.d.ts.map +1 -0
  1327. package/dist/agent/approvals/card.js +99 -0
  1328. package/dist/agent/approvals/card.js.map +1 -0
  1329. package/dist/agent/approvals/chat-dm.d.ts +19 -0
  1330. package/dist/agent/approvals/chat-dm.d.ts.map +1 -0
  1331. package/dist/agent/approvals/chat-dm.js +41 -0
  1332. package/dist/agent/approvals/chat-dm.js.map +1 -0
  1333. package/dist/agent/approvals/chat-post.d.ts +15 -0
  1334. package/dist/agent/approvals/chat-post.d.ts.map +1 -0
  1335. package/dist/agent/approvals/chat-post.js +43 -0
  1336. package/dist/agent/approvals/chat-post.js.map +1 -0
  1337. package/dist/agent/approvals/clicker-floor.d.ts +48 -0
  1338. package/dist/agent/approvals/clicker-floor.d.ts.map +1 -0
  1339. package/dist/agent/approvals/clicker-floor.js +58 -0
  1340. package/dist/agent/approvals/clicker-floor.js.map +1 -0
  1341. package/dist/agent/approvals/decision-authority.internal.d.ts +19 -0
  1342. package/dist/agent/approvals/decision-authority.internal.d.ts.map +1 -0
  1343. package/dist/agent/approvals/decision-authority.internal.js +107 -0
  1344. package/dist/agent/approvals/decision-authority.internal.js.map +1 -0
  1345. package/dist/agent/approvals/decision-wake.d.ts +28 -0
  1346. package/dist/agent/approvals/decision-wake.d.ts.map +1 -0
  1347. package/dist/agent/approvals/decision-wake.js +84 -0
  1348. package/dist/agent/approvals/decision-wake.js.map +1 -0
  1349. package/dist/agent/approvals/domain-exposure.d.ts +27 -0
  1350. package/dist/agent/approvals/domain-exposure.d.ts.map +1 -0
  1351. package/dist/agent/approvals/domain-exposure.js +145 -0
  1352. package/dist/agent/approvals/domain-exposure.js.map +1 -0
  1353. package/dist/agent/approvals/eve-response-policy.d.ts +22 -0
  1354. package/dist/agent/approvals/eve-response-policy.d.ts.map +1 -0
  1355. package/dist/agent/approvals/eve-response-policy.js +27 -0
  1356. package/dist/agent/approvals/eve-response-policy.js.map +1 -0
  1357. package/dist/agent/approvals/flow.d.ts +398 -0
  1358. package/dist/agent/approvals/flow.d.ts.map +1 -0
  1359. package/dist/agent/approvals/flow.js +1722 -0
  1360. package/dist/agent/approvals/flow.js.map +1 -0
  1361. package/dist/agent/approvals/input-response-floor.d.ts +47 -0
  1362. package/dist/agent/approvals/input-response-floor.d.ts.map +1 -0
  1363. package/dist/agent/approvals/input-response-floor.js +56 -0
  1364. package/dist/agent/approvals/input-response-floor.js.map +1 -0
  1365. package/dist/agent/approvals/judge-contradiction.d.ts +56 -0
  1366. package/dist/agent/approvals/judge-contradiction.d.ts.map +1 -0
  1367. package/dist/agent/approvals/judge-contradiction.js +90 -0
  1368. package/dist/agent/approvals/judge-contradiction.js.map +1 -0
  1369. package/dist/agent/approvals/memory-purge.d.ts +2 -0
  1370. package/dist/agent/approvals/memory-purge.d.ts.map +1 -0
  1371. package/dist/agent/approvals/memory-purge.js +128 -0
  1372. package/dist/agent/approvals/memory-purge.js.map +1 -0
  1373. package/dist/agent/approvals/pr-open.d.ts +36 -0
  1374. package/dist/agent/approvals/pr-open.d.ts.map +1 -0
  1375. package/dist/agent/approvals/pr-open.js +134 -0
  1376. package/dist/agent/approvals/pr-open.js.map +1 -0
  1377. package/dist/agent/approvals/review-surface.d.ts +3 -0
  1378. package/dist/agent/approvals/review-surface.d.ts.map +1 -0
  1379. package/dist/agent/approvals/review-surface.js +7 -0
  1380. package/dist/agent/approvals/review-surface.js.map +1 -0
  1381. package/dist/agent/approvals/routine-cancel.d.ts +2 -0
  1382. package/dist/agent/approvals/routine-cancel.d.ts.map +1 -0
  1383. package/dist/agent/approvals/routine-cancel.js +39 -0
  1384. package/dist/agent/approvals/routine-cancel.js.map +1 -0
  1385. package/dist/agent/approvals/routine-create.d.ts +38 -0
  1386. package/dist/agent/approvals/routine-create.d.ts.map +1 -0
  1387. package/dist/agent/approvals/routine-create.js +171 -0
  1388. package/dist/agent/approvals/routine-create.js.map +1 -0
  1389. package/dist/agent/approvals/routine-lifecycle.d.ts +2 -0
  1390. package/dist/agent/approvals/routine-lifecycle.d.ts.map +1 -0
  1391. package/dist/agent/approvals/routine-lifecycle.js +135 -0
  1392. package/dist/agent/approvals/routine-lifecycle.js.map +1 -0
  1393. package/dist/agent/approvals/routine-permission-offer.d.ts +35 -0
  1394. package/dist/agent/approvals/routine-permission-offer.d.ts.map +1 -0
  1395. package/dist/agent/approvals/routine-permission-offer.js +90 -0
  1396. package/dist/agent/approvals/routine-permission-offer.js.map +1 -0
  1397. package/dist/agent/approvals/routine-permission.d.ts +51 -0
  1398. package/dist/agent/approvals/routine-permission.d.ts.map +1 -0
  1399. package/dist/agent/approvals/routine-permission.js +173 -0
  1400. package/dist/agent/approvals/routine-permission.js.map +1 -0
  1401. package/dist/agent/approvals/routine-policy.d.ts +2 -0
  1402. package/dist/agent/approvals/routine-policy.d.ts.map +1 -0
  1403. package/dist/agent/approvals/routine-policy.js +133 -0
  1404. package/dist/agent/approvals/routine-policy.js.map +1 -0
  1405. package/dist/agent/approvals/scope-label.d.ts +11 -0
  1406. package/dist/agent/approvals/scope-label.d.ts.map +1 -0
  1407. package/dist/agent/approvals/scope-label.js +43 -0
  1408. package/dist/agent/approvals/scope-label.js.map +1 -0
  1409. package/dist/agent/approvals/session-checkpoint.d.ts +11 -0
  1410. package/dist/agent/approvals/session-checkpoint.d.ts.map +1 -0
  1411. package/dist/agent/approvals/session-checkpoint.js +60 -0
  1412. package/dist/agent/approvals/session-checkpoint.js.map +1 -0
  1413. package/dist/agent/approvals/session-grant.d.ts +46 -0
  1414. package/dist/agent/approvals/session-grant.d.ts.map +1 -0
  1415. package/dist/agent/approvals/session-grant.js +153 -0
  1416. package/dist/agent/approvals/session-grant.js.map +1 -0
  1417. package/dist/agent/approvals/skill-create.d.ts +2 -0
  1418. package/dist/agent/approvals/skill-create.d.ts.map +1 -0
  1419. package/dist/agent/approvals/skill-create.js +42 -0
  1420. package/dist/agent/approvals/skill-create.js.map +1 -0
  1421. package/dist/agent/approvals/skill-delete.d.ts +2 -0
  1422. package/dist/agent/approvals/skill-delete.d.ts.map +1 -0
  1423. package/dist/agent/approvals/skill-delete.js +38 -0
  1424. package/dist/agent/approvals/skill-delete.js.map +1 -0
  1425. package/dist/agent/approvals/taint-disclosure.d.ts +10 -0
  1426. package/dist/agent/approvals/taint-disclosure.d.ts.map +1 -0
  1427. package/dist/agent/approvals/taint-disclosure.js +36 -0
  1428. package/dist/agent/approvals/taint-disclosure.js.map +1 -0
  1429. package/dist/agent/approvals/ticket-actions.d.ts +27 -0
  1430. package/dist/agent/approvals/ticket-actions.d.ts.map +1 -0
  1431. package/dist/agent/approvals/ticket-actions.js +47 -0
  1432. package/dist/agent/approvals/ticket-actions.js.map +1 -0
  1433. package/dist/agent/approvals/ticket-create.d.ts +19 -0
  1434. package/dist/agent/approvals/ticket-create.d.ts.map +1 -0
  1435. package/dist/agent/approvals/ticket-create.js +46 -0
  1436. package/dist/agent/approvals/ticket-create.js.map +1 -0
  1437. package/dist/agent/approvals/types.d.ts +42 -0
  1438. package/dist/agent/approvals/types.d.ts.map +1 -0
  1439. package/dist/agent/approvals/types.js +3 -0
  1440. package/dist/agent/approvals/types.js.map +1 -0
  1441. package/dist/agent/approvals/webhook-declare.d.ts +55 -0
  1442. package/dist/agent/approvals/webhook-declare.d.ts.map +1 -0
  1443. package/dist/agent/approvals/webhook-declare.js +239 -0
  1444. package/dist/agent/approvals/webhook-declare.js.map +1 -0
  1445. package/dist/agent/approvals/webhook.d.ts +25 -0
  1446. package/dist/agent/approvals/webhook.d.ts.map +1 -0
  1447. package/dist/agent/approvals/webhook.js +156 -0
  1448. package/dist/agent/approvals/webhook.js.map +1 -0
  1449. package/dist/agent/audit/action-registry.d.ts +78 -0
  1450. package/dist/agent/audit/action-registry.d.ts.map +1 -0
  1451. package/dist/agent/audit/action-registry.js +996 -0
  1452. package/dist/agent/audit/action-registry.js.map +1 -0
  1453. package/dist/agent/audit/audit.d.ts +32 -0
  1454. package/dist/agent/audit/audit.d.ts.map +1 -0
  1455. package/dist/agent/audit/audit.js +100 -0
  1456. package/dist/agent/audit/audit.js.map +1 -0
  1457. package/dist/agent/audit/chain.d.ts +196 -0
  1458. package/dist/agent/audit/chain.d.ts.map +1 -0
  1459. package/dist/agent/audit/chain.js +462 -0
  1460. package/dist/agent/audit/chain.js.map +1 -0
  1461. package/dist/agent/audit/tool-action.d.ts +26 -0
  1462. package/dist/agent/audit/tool-action.d.ts.map +1 -0
  1463. package/dist/agent/audit/tool-action.js +271 -0
  1464. package/dist/agent/audit/tool-action.js.map +1 -0
  1465. package/dist/agent/audit/window-tool-gate.d.ts +21 -0
  1466. package/dist/agent/audit/window-tool-gate.d.ts.map +1 -0
  1467. package/dist/agent/audit/window-tool-gate.js +40 -0
  1468. package/dist/agent/audit/window-tool-gate.js.map +1 -0
  1469. package/dist/agent/audit/worker-toolset.d.ts +25 -0
  1470. package/dist/agent/audit/worker-toolset.d.ts.map +1 -0
  1471. package/dist/agent/audit/worker-toolset.js +108 -0
  1472. package/dist/agent/audit/worker-toolset.js.map +1 -0
  1473. package/dist/agent/blob/hosting.d.ts +61 -0
  1474. package/dist/agent/blob/hosting.d.ts.map +1 -0
  1475. package/dist/agent/blob/hosting.js +142 -0
  1476. package/dist/agent/blob/hosting.js.map +1 -0
  1477. package/dist/agent/channels/access-request-ledger.d.ts +36 -0
  1478. package/dist/agent/channels/access-request-ledger.d.ts.map +1 -0
  1479. package/dist/agent/channels/access-request-ledger.js +123 -0
  1480. package/dist/agent/channels/access-request-ledger.js.map +1 -0
  1481. package/dist/agent/channels/ambient-skip.d.ts +19 -0
  1482. package/dist/agent/channels/ambient-skip.d.ts.map +1 -0
  1483. package/dist/agent/channels/ambient-skip.js +88 -0
  1484. package/dist/agent/channels/ambient-skip.js.map +1 -0
  1485. package/dist/agent/channels/answered-container-ledger.d.ts +32 -0
  1486. package/dist/agent/channels/answered-container-ledger.d.ts.map +1 -0
  1487. package/dist/agent/channels/answered-container-ledger.js +70 -0
  1488. package/dist/agent/channels/answered-container-ledger.js.map +1 -0
  1489. package/dist/agent/channels/approval-card.d.ts +266 -0
  1490. package/dist/agent/channels/approval-card.d.ts.map +1 -0
  1491. package/dist/agent/channels/approval-card.js +328 -0
  1492. package/dist/agent/channels/approval-card.js.map +1 -0
  1493. package/dist/agent/channels/approval-claim-guard.d.ts +112 -0
  1494. package/dist/agent/channels/approval-claim-guard.d.ts.map +1 -0
  1495. package/dist/agent/channels/approval-claim-guard.js +324 -0
  1496. package/dist/agent/channels/approval-claim-guard.js.map +1 -0
  1497. package/dist/agent/channels/attachments.d.ts +113 -0
  1498. package/dist/agent/channels/attachments.d.ts.map +1 -0
  1499. package/dist/agent/channels/attachments.js +157 -0
  1500. package/dist/agent/channels/attachments.js.map +1 -0
  1501. package/dist/agent/channels/aws-sso-callback.d.ts +3 -0
  1502. package/dist/agent/channels/aws-sso-callback.d.ts.map +1 -0
  1503. package/dist/agent/channels/aws-sso-callback.js +8 -0
  1504. package/dist/agent/channels/aws-sso-callback.js.map +1 -0
  1505. package/dist/agent/channels/backscroll-window.d.ts +76 -0
  1506. package/dist/agent/channels/backscroll-window.d.ts.map +1 -0
  1507. package/dist/agent/channels/backscroll-window.js +106 -0
  1508. package/dist/agent/channels/backscroll-window.js.map +1 -0
  1509. package/dist/agent/channels/cancel-note.d.ts +45 -0
  1510. package/dist/agent/channels/cancel-note.d.ts.map +1 -0
  1511. package/dist/agent/channels/cancel-note.js +99 -0
  1512. package/dist/agent/channels/cancel-note.js.map +1 -0
  1513. package/dist/agent/channels/channel-key.d.ts +19 -0
  1514. package/dist/agent/channels/channel-key.d.ts.map +1 -0
  1515. package/dist/agent/channels/channel-key.js +53 -0
  1516. package/dist/agent/channels/channel-key.js.map +1 -0
  1517. package/dist/agent/channels/channel-read.d.ts +203 -0
  1518. package/dist/agent/channels/channel-read.d.ts.map +1 -0
  1519. package/dist/agent/channels/channel-read.js +294 -0
  1520. package/dist/agent/channels/channel-read.js.map +1 -0
  1521. package/dist/agent/channels/chat-turn-audit.d.ts +9 -0
  1522. package/dist/agent/channels/chat-turn-audit.d.ts.map +1 -0
  1523. package/dist/agent/channels/chat-turn-audit.js +18 -0
  1524. package/dist/agent/channels/chat-turn-audit.js.map +1 -0
  1525. package/dist/agent/channels/closing-prose-drop.d.ts +34 -0
  1526. package/dist/agent/channels/closing-prose-drop.d.ts.map +1 -0
  1527. package/dist/agent/channels/closing-prose-drop.js +29 -0
  1528. package/dist/agent/channels/closing-prose-drop.js.map +1 -0
  1529. package/dist/agent/channels/command-registration.d.ts +62 -0
  1530. package/dist/agent/channels/command-registration.d.ts.map +1 -0
  1531. package/dist/agent/channels/command-registration.js +128 -0
  1532. package/dist/agent/channels/command-registration.js.map +1 -0
  1533. package/dist/agent/channels/context-render.d.ts +111 -0
  1534. package/dist/agent/channels/context-render.d.ts.map +1 -0
  1535. package/dist/agent/channels/context-render.js +148 -0
  1536. package/dist/agent/channels/context-render.js.map +1 -0
  1537. package/dist/agent/channels/control-mcp.d.ts +3 -0
  1538. package/dist/agent/channels/control-mcp.d.ts.map +1 -0
  1539. package/dist/agent/channels/control-mcp.js +35 -0
  1540. package/dist/agent/channels/control-mcp.js.map +1 -0
  1541. package/dist/agent/channels/control-read.d.ts +3 -0
  1542. package/dist/agent/channels/control-read.d.ts.map +1 -0
  1543. package/dist/agent/channels/control-read.js +21 -0
  1544. package/dist/agent/channels/control-read.js.map +1 -0
  1545. package/dist/agent/channels/credential-intake-page.d.ts +3 -0
  1546. package/dist/agent/channels/credential-intake-page.d.ts.map +1 -0
  1547. package/dist/agent/channels/credential-intake-page.js +11 -0
  1548. package/dist/agent/channels/credential-intake-page.js.map +1 -0
  1549. package/dist/agent/channels/delegated-provenance.d.ts +129 -0
  1550. package/dist/agent/channels/delegated-provenance.d.ts.map +1 -0
  1551. package/dist/agent/channels/delegated-provenance.js +418 -0
  1552. package/dist/agent/channels/delegated-provenance.js.map +1 -0
  1553. package/dist/agent/channels/dm-audience.d.ts +157 -0
  1554. package/dist/agent/channels/dm-audience.d.ts.map +1 -0
  1555. package/dist/agent/channels/dm-audience.js +234 -0
  1556. package/dist/agent/channels/dm-audience.js.map +1 -0
  1557. package/dist/agent/channels/dm-seat.d.ts +68 -0
  1558. package/dist/agent/channels/dm-seat.d.ts.map +1 -0
  1559. package/dist/agent/channels/dm-seat.js +87 -0
  1560. package/dist/agent/channels/dm-seat.js.map +1 -0
  1561. package/dist/agent/channels/domain-fingerprint.d.ts +40 -0
  1562. package/dist/agent/channels/domain-fingerprint.d.ts.map +1 -0
  1563. package/dist/agent/channels/domain-fingerprint.js +94 -0
  1564. package/dist/agent/channels/domain-fingerprint.js.map +1 -0
  1565. package/dist/agent/channels/egress-spoof.d.ts +11 -0
  1566. package/dist/agent/channels/egress-spoof.d.ts.map +1 -0
  1567. package/dist/agent/channels/egress-spoof.js +36 -0
  1568. package/dist/agent/channels/egress-spoof.js.map +1 -0
  1569. package/dist/agent/channels/engaged-wake.d.ts +86 -0
  1570. package/dist/agent/channels/engaged-wake.d.ts.map +1 -0
  1571. package/dist/agent/channels/engaged-wake.js +146 -0
  1572. package/dist/agent/channels/engaged-wake.js.map +1 -0
  1573. package/dist/agent/channels/engagement.d.ts +132 -0
  1574. package/dist/agent/channels/engagement.d.ts.map +1 -0
  1575. package/dist/agent/channels/engagement.js +182 -0
  1576. package/dist/agent/channels/engagement.js.map +1 -0
  1577. package/dist/agent/channels/entity-actions.d.ts +80 -0
  1578. package/dist/agent/channels/entity-actions.d.ts.map +1 -0
  1579. package/dist/agent/channels/entity-actions.js +94 -0
  1580. package/dist/agent/channels/entity-actions.js.map +1 -0
  1581. package/dist/agent/channels/front-queue.d.ts +31 -0
  1582. package/dist/agent/channels/front-queue.d.ts.map +1 -0
  1583. package/dist/agent/channels/front-queue.js +86 -0
  1584. package/dist/agent/channels/front-queue.js.map +1 -0
  1585. package/dist/agent/channels/generation-retirement.d.ts +189 -0
  1586. package/dist/agent/channels/generation-retirement.d.ts.map +1 -0
  1587. package/dist/agent/channels/generation-retirement.js +473 -0
  1588. package/dist/agent/channels/generation-retirement.js.map +1 -0
  1589. package/dist/agent/channels/halt-per-wake.d.ts +53 -0
  1590. package/dist/agent/channels/halt-per-wake.d.ts.map +1 -0
  1591. package/dist/agent/channels/halt-per-wake.js +148 -0
  1592. package/dist/agent/channels/halt-per-wake.js.map +1 -0
  1593. package/dist/agent/channels/memory-claim-guard.d.ts +77 -0
  1594. package/dist/agent/channels/memory-claim-guard.d.ts.map +1 -0
  1595. package/dist/agent/channels/memory-claim-guard.js +389 -0
  1596. package/dist/agent/channels/memory-claim-guard.js.map +1 -0
  1597. package/dist/agent/channels/name-drop-wake-audit.d.ts +93 -0
  1598. package/dist/agent/channels/name-drop-wake-audit.d.ts.map +1 -0
  1599. package/dist/agent/channels/name-drop-wake-audit.js +92 -0
  1600. package/dist/agent/channels/name-drop-wake-audit.js.map +1 -0
  1601. package/dist/agent/channels/native-wake-retry.d.ts +16 -0
  1602. package/dist/agent/channels/native-wake-retry.d.ts.map +1 -0
  1603. package/dist/agent/channels/native-wake-retry.js +44 -0
  1604. package/dist/agent/channels/native-wake-retry.js.map +1 -0
  1605. package/dist/agent/channels/no-reply-signal.d.ts +12 -0
  1606. package/dist/agent/channels/no-reply-signal.d.ts.map +1 -0
  1607. package/dist/agent/channels/no-reply-signal.js +37 -0
  1608. package/dist/agent/channels/no-reply-signal.js.map +1 -0
  1609. package/dist/agent/channels/normalized-wake.d.ts +129 -0
  1610. package/dist/agent/channels/normalized-wake.d.ts.map +1 -0
  1611. package/dist/agent/channels/normalized-wake.js +153 -0
  1612. package/dist/agent/channels/normalized-wake.js.map +1 -0
  1613. package/dist/agent/channels/oe-oauth-callback.d.ts +3 -0
  1614. package/dist/agent/channels/oe-oauth-callback.d.ts.map +1 -0
  1615. package/dist/agent/channels/oe-oauth-callback.js +8 -0
  1616. package/dist/agent/channels/oe-oauth-callback.js.map +1 -0
  1617. package/dist/agent/channels/own-post-ledger.d.ts +35 -0
  1618. package/dist/agent/channels/own-post-ledger.d.ts.map +1 -0
  1619. package/dist/agent/channels/own-post-ledger.js +57 -0
  1620. package/dist/agent/channels/own-post-ledger.js.map +1 -0
  1621. package/dist/agent/channels/platform-failure.d.ts +20 -0
  1622. package/dist/agent/channels/platform-failure.d.ts.map +1 -0
  1623. package/dist/agent/channels/platform-failure.js +42 -0
  1624. package/dist/agent/channels/platform-failure.js.map +1 -0
  1625. package/dist/agent/channels/policy-pages.d.ts +3 -0
  1626. package/dist/agent/channels/policy-pages.d.ts.map +1 -0
  1627. package/dist/agent/channels/policy-pages.js +14 -0
  1628. package/dist/agent/channels/policy-pages.js.map +1 -0
  1629. package/dist/agent/channels/post-arms.d.ts +202 -0
  1630. package/dist/agent/channels/post-arms.d.ts.map +1 -0
  1631. package/dist/agent/channels/post-arms.js +146 -0
  1632. package/dist/agent/channels/post-arms.js.map +1 -0
  1633. package/dist/agent/channels/proactive-dm-manifest.d.ts +28 -0
  1634. package/dist/agent/channels/proactive-dm-manifest.d.ts.map +1 -0
  1635. package/dist/agent/channels/proactive-dm-manifest.js +80 -0
  1636. package/dist/agent/channels/proactive-dm-manifest.js.map +1 -0
  1637. package/dist/agent/channels/propose-scope.d.ts +18 -0
  1638. package/dist/agent/channels/propose-scope.d.ts.map +1 -0
  1639. package/dist/agent/channels/propose-scope.js +91 -0
  1640. package/dist/agent/channels/propose-scope.js.map +1 -0
  1641. package/dist/agent/channels/question-bridge.d.ts +291 -0
  1642. package/dist/agent/channels/question-bridge.d.ts.map +1 -0
  1643. package/dist/agent/channels/question-bridge.js +412 -0
  1644. package/dist/agent/channels/question-bridge.js.map +1 -0
  1645. package/dist/agent/channels/rate-limit-retry.d.ts +157 -0
  1646. package/dist/agent/channels/rate-limit-retry.d.ts.map +1 -0
  1647. package/dist/agent/channels/rate-limit-retry.js +256 -0
  1648. package/dist/agent/channels/rate-limit-retry.js.map +1 -0
  1649. package/dist/agent/channels/react-signal.d.ts +5 -0
  1650. package/dist/agent/channels/react-signal.d.ts.map +1 -0
  1651. package/dist/agent/channels/react-signal.js +25 -0
  1652. package/dist/agent/channels/react-signal.js.map +1 -0
  1653. package/dist/agent/channels/reaction-ingest.d.ts +87 -0
  1654. package/dist/agent/channels/reaction-ingest.d.ts.map +1 -0
  1655. package/dist/agent/channels/reaction-ingest.js +138 -0
  1656. package/dist/agent/channels/reaction-ingest.js.map +1 -0
  1657. package/dist/agent/channels/read-author-trust.d.ts +26 -0
  1658. package/dist/agent/channels/read-author-trust.d.ts.map +1 -0
  1659. package/dist/agent/channels/read-author-trust.js +56 -0
  1660. package/dist/agent/channels/read-author-trust.js.map +1 -0
  1661. package/dist/agent/channels/read-reach.d.ts +156 -0
  1662. package/dist/agent/channels/read-reach.d.ts.map +1 -0
  1663. package/dist/agent/channels/read-reach.js +293 -0
  1664. package/dist/agent/channels/read-reach.js.map +1 -0
  1665. package/dist/agent/channels/read-scope-audit.d.ts +39 -0
  1666. package/dist/agent/channels/read-scope-audit.d.ts.map +1 -0
  1667. package/dist/agent/channels/read-scope-audit.js +88 -0
  1668. package/dist/agent/channels/read-scope-audit.js.map +1 -0
  1669. package/dist/agent/channels/read-scope-error.d.ts +4 -0
  1670. package/dist/agent/channels/read-scope-error.d.ts.map +1 -0
  1671. package/dist/agent/channels/read-scope-error.js +6 -0
  1672. package/dist/agent/channels/read-scope-error.js.map +1 -0
  1673. package/dist/agent/channels/read-spool.d.ts +38 -0
  1674. package/dist/agent/channels/read-spool.d.ts.map +1 -0
  1675. package/dist/agent/channels/read-spool.js +97 -0
  1676. package/dist/agent/channels/read-spool.js.map +1 -0
  1677. package/dist/agent/channels/reply-edit.d.ts +47 -0
  1678. package/dist/agent/channels/reply-edit.d.ts.map +1 -0
  1679. package/dist/agent/channels/reply-edit.js +173 -0
  1680. package/dist/agent/channels/reply-edit.js.map +1 -0
  1681. package/dist/agent/channels/reply-fold.d.ts +186 -0
  1682. package/dist/agent/channels/reply-fold.d.ts.map +1 -0
  1683. package/dist/agent/channels/reply-fold.js +427 -0
  1684. package/dist/agent/channels/reply-fold.js.map +1 -0
  1685. package/dist/agent/channels/reply-freshness.d.ts +69 -0
  1686. package/dist/agent/channels/reply-freshness.d.ts.map +1 -0
  1687. package/dist/agent/channels/reply-freshness.js +208 -0
  1688. package/dist/agent/channels/reply-freshness.js.map +1 -0
  1689. package/dist/agent/channels/reply-post.d.ts +176 -0
  1690. package/dist/agent/channels/reply-post.d.ts.map +1 -0
  1691. package/dist/agent/channels/reply-post.js +407 -0
  1692. package/dist/agent/channels/reply-post.js.map +1 -0
  1693. package/dist/agent/channels/reply-provenance.d.ts +172 -0
  1694. package/dist/agent/channels/reply-provenance.d.ts.map +1 -0
  1695. package/dist/agent/channels/reply-provenance.js +662 -0
  1696. package/dist/agent/channels/reply-provenance.js.map +1 -0
  1697. package/dist/agent/channels/reply-signal.d.ts +141 -0
  1698. package/dist/agent/channels/reply-signal.d.ts.map +1 -0
  1699. package/dist/agent/channels/reply-signal.js +554 -0
  1700. package/dist/agent/channels/reply-signal.js.map +1 -0
  1701. package/dist/agent/channels/request-claim-guard.d.ts +91 -0
  1702. package/dist/agent/channels/request-claim-guard.d.ts.map +1 -0
  1703. package/dist/agent/channels/request-claim-guard.js +457 -0
  1704. package/dist/agent/channels/request-claim-guard.js.map +1 -0
  1705. package/dist/agent/channels/runtime-code-fingerprint.generated.d.ts +2 -0
  1706. package/dist/agent/channels/runtime-code-fingerprint.generated.d.ts.map +1 -0
  1707. package/dist/agent/channels/runtime-code-fingerprint.generated.js +9 -0
  1708. package/dist/agent/channels/runtime-code-fingerprint.generated.js.map +1 -0
  1709. package/dist/agent/channels/runtime-rotation.d.ts +98 -0
  1710. package/dist/agent/channels/runtime-rotation.d.ts.map +1 -0
  1711. package/dist/agent/channels/runtime-rotation.js +178 -0
  1712. package/dist/agent/channels/runtime-rotation.js.map +1 -0
  1713. package/dist/agent/channels/seat-admission.d.ts +61 -0
  1714. package/dist/agent/channels/seat-admission.d.ts.map +1 -0
  1715. package/dist/agent/channels/seat-admission.js +64 -0
  1716. package/dist/agent/channels/seat-admission.js.map +1 -0
  1717. package/dist/agent/channels/seat-catch-up.d.ts +240 -0
  1718. package/dist/agent/channels/seat-catch-up.d.ts.map +1 -0
  1719. package/dist/agent/channels/seat-catch-up.js +353 -0
  1720. package/dist/agent/channels/seat-catch-up.js.map +1 -0
  1721. package/dist/agent/channels/self-dispatch.d.ts +89 -0
  1722. package/dist/agent/channels/self-dispatch.d.ts.map +1 -0
  1723. package/dist/agent/channels/self-dispatch.js +310 -0
  1724. package/dist/agent/channels/self-dispatch.js.map +1 -0
  1725. package/dist/agent/channels/session-park.d.ts +120 -0
  1726. package/dist/agent/channels/session-park.d.ts.map +1 -0
  1727. package/dist/agent/channels/session-park.js +170 -0
  1728. package/dist/agent/channels/session-park.js.map +1 -0
  1729. package/dist/agent/channels/session-resume.d.ts +26 -0
  1730. package/dist/agent/channels/session-resume.d.ts.map +1 -0
  1731. package/dist/agent/channels/session-resume.js +34 -0
  1732. package/dist/agent/channels/session-resume.js.map +1 -0
  1733. package/dist/agent/channels/session-tail-record.d.ts +65 -0
  1734. package/dist/agent/channels/session-tail-record.d.ts.map +1 -0
  1735. package/dist/agent/channels/session-tail-record.js +129 -0
  1736. package/dist/agent/channels/session-tail-record.js.map +1 -0
  1737. package/dist/agent/channels/session-tail.d.ts +90 -0
  1738. package/dist/agent/channels/session-tail.d.ts.map +1 -0
  1739. package/dist/agent/channels/session-tail.js +79 -0
  1740. package/dist/agent/channels/session-tail.js.map +1 -0
  1741. package/dist/agent/channels/slack-bridge.d.ts +56 -0
  1742. package/dist/agent/channels/slack-bridge.d.ts.map +1 -0
  1743. package/dist/agent/channels/slack-bridge.js +80 -0
  1744. package/dist/agent/channels/slack-bridge.js.map +1 -0
  1745. package/dist/agent/channels/stand-down-silence.d.ts +49 -0
  1746. package/dist/agent/channels/stand-down-silence.d.ts.map +1 -0
  1747. package/dist/agent/channels/stand-down-silence.js +101 -0
  1748. package/dist/agent/channels/stand-down-silence.js.map +1 -0
  1749. package/dist/agent/channels/standing-authority.d.ts +69 -0
  1750. package/dist/agent/channels/standing-authority.d.ts.map +1 -0
  1751. package/dist/agent/channels/standing-authority.js +205 -0
  1752. package/dist/agent/channels/standing-authority.js.map +1 -0
  1753. package/dist/agent/channels/stranded-seat.d.ts +73 -0
  1754. package/dist/agent/channels/stranded-seat.d.ts.map +1 -0
  1755. package/dist/agent/channels/stranded-seat.js +107 -0
  1756. package/dist/agent/channels/stranded-seat.js.map +1 -0
  1757. package/dist/agent/channels/supervisor-complete.d.ts +61 -0
  1758. package/dist/agent/channels/supervisor-complete.d.ts.map +1 -0
  1759. package/dist/agent/channels/supervisor-complete.js +86 -0
  1760. package/dist/agent/channels/supervisor-complete.js.map +1 -0
  1761. package/dist/agent/channels/surface-message-ops.d.ts +100 -0
  1762. package/dist/agent/channels/surface-message-ops.d.ts.map +1 -0
  1763. package/dist/agent/channels/surface-message-ops.js +156 -0
  1764. package/dist/agent/channels/surface-message-ops.js.map +1 -0
  1765. package/dist/agent/channels/task-wake.d.ts +116 -0
  1766. package/dist/agent/channels/task-wake.d.ts.map +1 -0
  1767. package/dist/agent/channels/task-wake.js +390 -0
  1768. package/dist/agent/channels/task-wake.js.map +1 -0
  1769. package/dist/agent/channels/teams-bridge.d.ts +55 -0
  1770. package/dist/agent/channels/teams-bridge.d.ts.map +1 -0
  1771. package/dist/agent/channels/teams-bridge.js +25 -0
  1772. package/dist/agent/channels/teams-bridge.js.map +1 -0
  1773. package/dist/agent/channels/test-wake.d.ts +3 -0
  1774. package/dist/agent/channels/test-wake.d.ts.map +1 -0
  1775. package/dist/agent/channels/test-wake.js +11 -0
  1776. package/dist/agent/channels/test-wake.js.map +1 -0
  1777. package/dist/agent/channels/thread-ownership.d.ts +38 -0
  1778. package/dist/agent/channels/thread-ownership.d.ts.map +1 -0
  1779. package/dist/agent/channels/thread-ownership.js +53 -0
  1780. package/dist/agent/channels/thread-ownership.js.map +1 -0
  1781. package/dist/agent/channels/thread-seat-state.d.ts +35 -0
  1782. package/dist/agent/channels/thread-seat-state.d.ts.map +1 -0
  1783. package/dist/agent/channels/thread-seat-state.js +64 -0
  1784. package/dist/agent/channels/thread-seat-state.js.map +1 -0
  1785. package/dist/agent/channels/ticket-create.d.ts +77 -0
  1786. package/dist/agent/channels/ticket-create.d.ts.map +1 -0
  1787. package/dist/agent/channels/ticket-create.js +83 -0
  1788. package/dist/agent/channels/ticket-create.js.map +1 -0
  1789. package/dist/agent/channels/transcript-relay.d.ts +3 -0
  1790. package/dist/agent/channels/transcript-relay.d.ts.map +1 -0
  1791. package/dist/agent/channels/transcript-relay.js +8 -0
  1792. package/dist/agent/channels/transcript-relay.js.map +1 -0
  1793. package/dist/agent/channels/turn-cancel.d.ts +188 -0
  1794. package/dist/agent/channels/turn-cancel.d.ts.map +1 -0
  1795. package/dist/agent/channels/turn-cancel.js +310 -0
  1796. package/dist/agent/channels/turn-cancel.js.map +1 -0
  1797. package/dist/agent/channels/turn-delivery.d.ts +213 -0
  1798. package/dist/agent/channels/turn-delivery.d.ts.map +1 -0
  1799. package/dist/agent/channels/turn-delivery.js +384 -0
  1800. package/dist/agent/channels/turn-delivery.js.map +1 -0
  1801. package/dist/agent/channels/turn-registry.d.ts +47 -0
  1802. package/dist/agent/channels/turn-registry.d.ts.map +1 -0
  1803. package/dist/agent/channels/turn-registry.js +93 -0
  1804. package/dist/agent/channels/turn-registry.js.map +1 -0
  1805. package/dist/agent/channels/turn-terminal-actions.d.ts +22 -0
  1806. package/dist/agent/channels/turn-terminal-actions.d.ts.map +1 -0
  1807. package/dist/agent/channels/turn-terminal-actions.js +128 -0
  1808. package/dist/agent/channels/turn-terminal-actions.js.map +1 -0
  1809. package/dist/agent/channels/unified-redrive.d.ts +74 -0
  1810. package/dist/agent/channels/unified-redrive.d.ts.map +1 -0
  1811. package/dist/agent/channels/unified-redrive.js +141 -0
  1812. package/dist/agent/channels/unified-redrive.js.map +1 -0
  1813. package/dist/agent/channels/unified-reply.d.ts +102 -0
  1814. package/dist/agent/channels/unified-reply.d.ts.map +1 -0
  1815. package/dist/agent/channels/unified-reply.js +247 -0
  1816. package/dist/agent/channels/unified-reply.js.map +1 -0
  1817. package/dist/agent/channels/unified-supervisor.d.ts +100 -0
  1818. package/dist/agent/channels/unified-supervisor.d.ts.map +1 -0
  1819. package/dist/agent/channels/unified-supervisor.js +143 -0
  1820. package/dist/agent/channels/unified-supervisor.js.map +1 -0
  1821. package/dist/agent/channels/unified-window.d.ts +550 -0
  1822. package/dist/agent/channels/unified-window.d.ts.map +1 -0
  1823. package/dist/agent/channels/unified-window.js +731 -0
  1824. package/dist/agent/channels/unified-window.js.map +1 -0
  1825. package/dist/agent/channels/unified.d.ts +251 -0
  1826. package/dist/agent/channels/unified.d.ts.map +1 -0
  1827. package/dist/agent/channels/unified.js +1333 -0
  1828. package/dist/agent/channels/unified.js.map +1 -0
  1829. package/dist/agent/channels/wake-accounting.d.ts +57 -0
  1830. package/dist/agent/channels/wake-accounting.d.ts.map +1 -0
  1831. package/dist/agent/channels/wake-accounting.js +87 -0
  1832. package/dist/agent/channels/wake-accounting.js.map +1 -0
  1833. package/dist/agent/channels/wake-arm.d.ts +80 -0
  1834. package/dist/agent/channels/wake-arm.d.ts.map +1 -0
  1835. package/dist/agent/channels/wake-arm.js +173 -0
  1836. package/dist/agent/channels/wake-arm.js.map +1 -0
  1837. package/dist/agent/channels/wake-container.d.ts +27 -0
  1838. package/dist/agent/channels/wake-container.d.ts.map +1 -0
  1839. package/dist/agent/channels/wake-container.js +33 -0
  1840. package/dist/agent/channels/wake-container.js.map +1 -0
  1841. package/dist/agent/channels/wake-envelope.d.ts +252 -0
  1842. package/dist/agent/channels/wake-envelope.d.ts.map +1 -0
  1843. package/dist/agent/channels/wake-envelope.js +364 -0
  1844. package/dist/agent/channels/wake-envelope.js.map +1 -0
  1845. package/dist/agent/channels/wake-origin-codec.d.ts +77 -0
  1846. package/dist/agent/channels/wake-origin-codec.d.ts.map +1 -0
  1847. package/dist/agent/channels/wake-origin-codec.js +21 -0
  1848. package/dist/agent/channels/wake-origin-codec.js.map +1 -0
  1849. package/dist/agent/channels/wake-origin-codecs.d.ts +2 -0
  1850. package/dist/agent/channels/wake-origin-codecs.d.ts.map +1 -0
  1851. package/dist/agent/channels/wake-origin-codecs.js +4 -0
  1852. package/dist/agent/channels/wake-origin-codecs.js.map +1 -0
  1853. package/dist/agent/channels/wake-timing.d.ts +230 -0
  1854. package/dist/agent/channels/wake-timing.d.ts.map +1 -0
  1855. package/dist/agent/channels/wake-timing.js +256 -0
  1856. package/dist/agent/channels/wake-timing.js.map +1 -0
  1857. package/dist/agent/channels/webhook-reveal-page.d.ts +3 -0
  1858. package/dist/agent/channels/webhook-reveal-page.d.ts.map +1 -0
  1859. package/dist/agent/channels/webhook-reveal-page.js +11 -0
  1860. package/dist/agent/channels/webhook-reveal-page.js.map +1 -0
  1861. package/dist/agent/channels/webhooks.d.ts +5 -0
  1862. package/dist/agent/channels/webhooks.d.ts.map +1 -0
  1863. package/dist/agent/channels/webhooks.js +197 -0
  1864. package/dist/agent/channels/webhooks.js.map +1 -0
  1865. package/dist/agent/channels/window-key.d.ts +187 -0
  1866. package/dist/agent/channels/window-key.d.ts.map +1 -0
  1867. package/dist/agent/channels/window-key.js +379 -0
  1868. package/dist/agent/channels/window-key.js.map +1 -0
  1869. package/dist/agent/channels/window-sources.d.ts +17 -0
  1870. package/dist/agent/channels/window-sources.d.ts.map +1 -0
  1871. package/dist/agent/channels/window-sources.js +86 -0
  1872. package/dist/agent/channels/window-sources.js.map +1 -0
  1873. package/dist/agent/channels/work-destinations.d.ts +8 -0
  1874. package/dist/agent/channels/work-destinations.d.ts.map +1 -0
  1875. package/dist/agent/channels/work-destinations.js +45 -0
  1876. package/dist/agent/channels/work-destinations.js.map +1 -0
  1877. package/dist/agent/channels/work-registry.d.ts +13 -0
  1878. package/dist/agent/channels/work-registry.d.ts.map +1 -0
  1879. package/dist/agent/channels/work-registry.js +23 -0
  1880. package/dist/agent/channels/work-registry.js.map +1 -0
  1881. package/dist/agent/channels/work-search.d.ts +52 -0
  1882. package/dist/agent/channels/work-search.d.ts.map +1 -0
  1883. package/dist/agent/channels/work-search.js +54 -0
  1884. package/dist/agent/channels/work-search.js.map +1 -0
  1885. package/dist/agent/commands/core.d.ts +184 -0
  1886. package/dist/agent/commands/core.d.ts.map +1 -0
  1887. package/dist/agent/commands/core.js +541 -0
  1888. package/dist/agent/commands/core.js.map +1 -0
  1889. package/dist/agent/commands/rate.d.ts +55 -0
  1890. package/dist/agent/commands/rate.d.ts.map +1 -0
  1891. package/dist/agent/commands/rate.js +146 -0
  1892. package/dist/agent/commands/rate.js.map +1 -0
  1893. package/dist/agent/connections/auth-retry-memo.d.ts +28 -0
  1894. package/dist/agent/connections/auth-retry-memo.d.ts.map +1 -0
  1895. package/dist/agent/connections/auth-retry-memo.js +109 -0
  1896. package/dist/agent/connections/auth-retry-memo.js.map +1 -0
  1897. package/dist/agent/connections/aws-exec.d.ts +27 -0
  1898. package/dist/agent/connections/aws-exec.d.ts.map +1 -0
  1899. package/dist/agent/connections/aws-exec.js +22 -0
  1900. package/dist/agent/connections/aws-exec.js.map +1 -0
  1901. package/dist/agent/connections/aws-identity.d.ts +138 -0
  1902. package/dist/agent/connections/aws-identity.d.ts.map +1 -0
  1903. package/dist/agent/connections/aws-identity.js +163 -0
  1904. package/dist/agent/connections/aws-identity.js.map +1 -0
  1905. package/dist/agent/connections/aws-sso-callback.d.ts +33 -0
  1906. package/dist/agent/connections/aws-sso-callback.d.ts.map +1 -0
  1907. package/dist/agent/connections/aws-sso-callback.js +68 -0
  1908. package/dist/agent/connections/aws-sso-callback.js.map +1 -0
  1909. package/dist/agent/connections/aws-sso-identity-binding.d.ts +30 -0
  1910. package/dist/agent/connections/aws-sso-identity-binding.d.ts.map +1 -0
  1911. package/dist/agent/connections/aws-sso-identity-binding.js +95 -0
  1912. package/dist/agent/connections/aws-sso-identity-binding.js.map +1 -0
  1913. package/dist/agent/connections/aws-sso-link.d.ts +18 -0
  1914. package/dist/agent/connections/aws-sso-link.d.ts.map +1 -0
  1915. package/dist/agent/connections/aws-sso-link.js +22 -0
  1916. package/dist/agent/connections/aws-sso-link.js.map +1 -0
  1917. package/dist/agent/connections/connector-auth.d.ts +216 -0
  1918. package/dist/agent/connections/connector-auth.d.ts.map +1 -0
  1919. package/dist/agent/connections/connector-auth.js +745 -0
  1920. package/dist/agent/connections/connector-auth.js.map +1 -0
  1921. package/dist/agent/connections/connector-card.d.ts +61 -0
  1922. package/dist/agent/connections/connector-card.d.ts.map +1 -0
  1923. package/dist/agent/connections/connector-card.js +361 -0
  1924. package/dist/agent/connections/connector-card.js.map +1 -0
  1925. package/dist/agent/connections/connector-flags.d.ts +22 -0
  1926. package/dist/agent/connections/connector-flags.d.ts.map +1 -0
  1927. package/dist/agent/connections/connector-flags.js +40 -0
  1928. package/dist/agent/connections/connector-flags.js.map +1 -0
  1929. package/dist/agent/connections/connector-offer.d.ts +122 -0
  1930. package/dist/agent/connections/connector-offer.d.ts.map +1 -0
  1931. package/dist/agent/connections/connector-offer.js +145 -0
  1932. package/dist/agent/connections/connector-offer.js.map +1 -0
  1933. package/dist/agent/connections/connector-transport.d.ts +55 -0
  1934. package/dist/agent/connections/connector-transport.d.ts.map +1 -0
  1935. package/dist/agent/connections/connector-transport.js +80 -0
  1936. package/dist/agent/connections/connector-transport.js.map +1 -0
  1937. package/dist/agent/connections/consent-resume.d.ts +81 -0
  1938. package/dist/agent/connections/consent-resume.d.ts.map +1 -0
  1939. package/dist/agent/connections/consent-resume.js +142 -0
  1940. package/dist/agent/connections/consent-resume.js.map +1 -0
  1941. package/dist/agent/connections/grant-mcp-borrow.d.ts +116 -0
  1942. package/dist/agent/connections/grant-mcp-borrow.d.ts.map +1 -0
  1943. package/dist/agent/connections/grant-mcp-borrow.js +256 -0
  1944. package/dist/agent/connections/grant-mcp-borrow.js.map +1 -0
  1945. package/dist/agent/connections/grant-mcp-transport.d.ts +13 -0
  1946. package/dist/agent/connections/grant-mcp-transport.d.ts.map +1 -0
  1947. package/dist/agent/connections/grant-mcp-transport.js +50 -0
  1948. package/dist/agent/connections/grant-mcp-transport.js.map +1 -0
  1949. package/dist/agent/connections/notion.d.ts +3 -0
  1950. package/dist/agent/connections/notion.d.ts.map +1 -0
  1951. package/dist/agent/connections/notion.js +35 -0
  1952. package/dist/agent/connections/notion.js.map +1 -0
  1953. package/dist/agent/connections/oe-oauth-callback.d.ts +61 -0
  1954. package/dist/agent/connections/oe-oauth-callback.d.ts.map +1 -0
  1955. package/dist/agent/connections/oe-oauth-callback.js +142 -0
  1956. package/dist/agent/connections/oe-oauth-callback.js.map +1 -0
  1957. package/dist/agent/connections/own-account-ask.d.ts +120 -0
  1958. package/dist/agent/connections/own-account-ask.d.ts.map +1 -0
  1959. package/dist/agent/connections/own-account-ask.js +204 -0
  1960. package/dist/agent/connections/own-account-ask.js.map +1 -0
  1961. package/dist/agent/connections/own-account-carriage.d.ts +33 -0
  1962. package/dist/agent/connections/own-account-carriage.d.ts.map +1 -0
  1963. package/dist/agent/connections/own-account-carriage.js +102 -0
  1964. package/dist/agent/connections/own-account-carriage.js.map +1 -0
  1965. package/dist/agent/connections/own-account-gate.d.ts +105 -0
  1966. package/dist/agent/connections/own-account-gate.d.ts.map +1 -0
  1967. package/dist/agent/connections/own-account-gate.js +305 -0
  1968. package/dist/agent/connections/own-account-gate.js.map +1 -0
  1969. package/dist/agent/connections/own-account-vendors.d.ts +40 -0
  1970. package/dist/agent/connections/own-account-vendors.d.ts.map +1 -0
  1971. package/dist/agent/connections/own-account-vendors.js +106 -0
  1972. package/dist/agent/connections/own-account-vendors.js.map +1 -0
  1973. package/dist/agent/connections/user-auth-flow.d.ts +78 -0
  1974. package/dist/agent/connections/user-auth-flow.d.ts.map +1 -0
  1975. package/dist/agent/connections/user-auth-flow.js +41 -0
  1976. package/dist/agent/connections/user-auth-flow.js.map +1 -0
  1977. package/dist/agent/contributions.d.ts +671 -0
  1978. package/dist/agent/contributions.d.ts.map +1 -0
  1979. package/dist/agent/contributions.js +192 -0
  1980. package/dist/agent/contributions.js.map +1 -0
  1981. package/dist/agent/control/auth.d.ts +291 -0
  1982. package/dist/agent/control/auth.d.ts.map +1 -0
  1983. package/dist/agent/control/auth.js +533 -0
  1984. package/dist/agent/control/auth.js.map +1 -0
  1985. package/dist/agent/control/capture-window-read.d.ts +115 -0
  1986. package/dist/agent/control/capture-window-read.d.ts.map +1 -0
  1987. package/dist/agent/control/capture-window-read.js +302 -0
  1988. package/dist/agent/control/capture-window-read.js.map +1 -0
  1989. package/dist/agent/control/delivery-history.d.ts +163 -0
  1990. package/dist/agent/control/delivery-history.d.ts.map +1 -0
  1991. package/dist/agent/control/delivery-history.js +397 -0
  1992. package/dist/agent/control/delivery-history.js.map +1 -0
  1993. package/dist/agent/control/http.d.ts +13 -0
  1994. package/dist/agent/control/http.d.ts.map +1 -0
  1995. package/dist/agent/control/http.js +131 -0
  1996. package/dist/agent/control/http.js.map +1 -0
  1997. package/dist/agent/control/mcp-route.d.ts +13 -0
  1998. package/dist/agent/control/mcp-route.d.ts.map +1 -0
  1999. package/dist/agent/control/mcp-route.js +100 -0
  2000. package/dist/agent/control/mcp-route.js.map +1 -0
  2001. package/dist/agent/control/oauth-clients.d.ts +145 -0
  2002. package/dist/agent/control/oauth-clients.d.ts.map +1 -0
  2003. package/dist/agent/control/oauth-clients.js +229 -0
  2004. package/dist/agent/control/oauth-clients.js.map +1 -0
  2005. package/dist/agent/control/oauth-resource.d.ts +59 -0
  2006. package/dist/agent/control/oauth-resource.d.ts.map +1 -0
  2007. package/dist/agent/control/oauth-resource.js +168 -0
  2008. package/dist/agent/control/oauth-resource.js.map +1 -0
  2009. package/dist/agent/control/oauth-route.d.ts +50 -0
  2010. package/dist/agent/control/oauth-route.d.ts.map +1 -0
  2011. package/dist/agent/control/oauth-route.js +343 -0
  2012. package/dist/agent/control/oauth-route.js.map +1 -0
  2013. package/dist/agent/control/oauth-tokens.d.ts +88 -0
  2014. package/dist/agent/control/oauth-tokens.d.ts.map +1 -0
  2015. package/dist/agent/control/oauth-tokens.js +171 -0
  2016. package/dist/agent/control/oauth-tokens.js.map +1 -0
  2017. package/dist/agent/control/read-route.d.ts +278 -0
  2018. package/dist/agent/control/read-route.d.ts.map +1 -0
  2019. package/dist/agent/control/read-route.js +761 -0
  2020. package/dist/agent/control/read-route.js.map +1 -0
  2021. package/dist/agent/control/server.d.ts +49 -0
  2022. package/dist/agent/control/server.d.ts.map +1 -0
  2023. package/dist/agent/control/server.js +405 -0
  2024. package/dist/agent/control/server.js.map +1 -0
  2025. package/dist/agent/control/test-route.d.ts +85 -0
  2026. package/dist/agent/control/test-route.d.ts.map +1 -0
  2027. package/dist/agent/control/test-route.js +426 -0
  2028. package/dist/agent/control/test-route.js.map +1 -0
  2029. package/dist/agent/control/transcript-export.d.ts +68 -0
  2030. package/dist/agent/control/transcript-export.d.ts.map +1 -0
  2031. package/dist/agent/control/transcript-export.js +145 -0
  2032. package/dist/agent/control/transcript-export.js.map +1 -0
  2033. package/dist/agent/control/transcript-relay.d.ts +104 -0
  2034. package/dist/agent/control/transcript-relay.d.ts.map +1 -0
  2035. package/dist/agent/control/transcript-relay.js +314 -0
  2036. package/dist/agent/control/transcript-relay.js.map +1 -0
  2037. package/dist/agent/control/transcript-render.d.ts +43 -0
  2038. package/dist/agent/control/transcript-render.d.ts.map +1 -0
  2039. package/dist/agent/control/transcript-render.js +142 -0
  2040. package/dist/agent/control/transcript-render.js.map +1 -0
  2041. package/dist/agent/control/views.d.ts +511 -0
  2042. package/dist/agent/control/views.d.ts.map +1 -0
  2043. package/dist/agent/control/views.js +743 -0
  2044. package/dist/agent/control/views.js.map +1 -0
  2045. package/dist/agent/control/writes.d.ts +15 -0
  2046. package/dist/agent/control/writes.d.ts.map +1 -0
  2047. package/dist/agent/control/writes.js +1309 -0
  2048. package/dist/agent/control/writes.js.map +1 -0
  2049. package/dist/agent/credentials/binding-pr.d.ts +51 -0
  2050. package/dist/agent/credentials/binding-pr.d.ts.map +1 -0
  2051. package/dist/agent/credentials/binding-pr.js +178 -0
  2052. package/dist/agent/credentials/binding-pr.js.map +1 -0
  2053. package/dist/agent/credentials/config-pr-github.d.ts +24 -0
  2054. package/dist/agent/credentials/config-pr-github.d.ts.map +1 -0
  2055. package/dist/agent/credentials/config-pr-github.js +160 -0
  2056. package/dist/agent/credentials/config-pr-github.js.map +1 -0
  2057. package/dist/agent/credentials/config-pr.d.ts +148 -0
  2058. package/dist/agent/credentials/config-pr.d.ts.map +1 -0
  2059. package/dist/agent/credentials/config-pr.js +45 -0
  2060. package/dist/agent/credentials/config-pr.js.map +1 -0
  2061. package/dist/agent/credentials/db-broker.d.ts +82 -0
  2062. package/dist/agent/credentials/db-broker.d.ts.map +1 -0
  2063. package/dist/agent/credentials/db-broker.js +231 -0
  2064. package/dist/agent/credentials/db-broker.js.map +1 -0
  2065. package/dist/agent/credentials/home.d.ts +51 -0
  2066. package/dist/agent/credentials/home.d.ts.map +1 -0
  2067. package/dist/agent/credentials/home.js +43 -0
  2068. package/dist/agent/credentials/home.js.map +1 -0
  2069. package/dist/agent/credentials/intake-page.d.ts +54 -0
  2070. package/dist/agent/credentials/intake-page.d.ts.map +1 -0
  2071. package/dist/agent/credentials/intake-page.js +238 -0
  2072. package/dist/agent/credentials/intake-page.js.map +1 -0
  2073. package/dist/agent/credentials/intake.d.ts +147 -0
  2074. package/dist/agent/credentials/intake.d.ts.map +1 -0
  2075. package/dist/agent/credentials/intake.js +404 -0
  2076. package/dist/agent/credentials/intake.js.map +1 -0
  2077. package/dist/agent/credentials/kv-vault.d.ts +69 -0
  2078. package/dist/agent/credentials/kv-vault.d.ts.map +1 -0
  2079. package/dist/agent/credentials/kv-vault.js +121 -0
  2080. package/dist/agent/credentials/kv-vault.js.map +1 -0
  2081. package/dist/agent/credentials/operator-secrets.d.ts +169 -0
  2082. package/dist/agent/credentials/operator-secrets.d.ts.map +1 -0
  2083. package/dist/agent/credentials/operator-secrets.js +316 -0
  2084. package/dist/agent/credentials/operator-secrets.js.map +1 -0
  2085. package/dist/agent/credentials/page-chrome.d.ts +11 -0
  2086. package/dist/agent/credentials/page-chrome.d.ts.map +1 -0
  2087. package/dist/agent/credentials/page-chrome.js +52 -0
  2088. package/dist/agent/credentials/page-chrome.js.map +1 -0
  2089. package/dist/agent/credentials/page-token.d.ts +73 -0
  2090. package/dist/agent/credentials/page-token.d.ts.map +1 -0
  2091. package/dist/agent/credentials/page-token.js +197 -0
  2092. package/dist/agent/credentials/page-token.js.map +1 -0
  2093. package/dist/agent/credentials/purge.d.ts +54 -0
  2094. package/dist/agent/credentials/purge.d.ts.map +1 -0
  2095. package/dist/agent/credentials/purge.js +82 -0
  2096. package/dist/agent/credentials/purge.js.map +1 -0
  2097. package/dist/agent/credentials/ref.d.ts +72 -0
  2098. package/dist/agent/credentials/ref.d.ts.map +1 -0
  2099. package/dist/agent/credentials/ref.js +110 -0
  2100. package/dist/agent/credentials/ref.js.map +1 -0
  2101. package/dist/agent/credentials/reserved-refs.d.ts +31 -0
  2102. package/dist/agent/credentials/reserved-refs.d.ts.map +1 -0
  2103. package/dist/agent/credentials/reserved-refs.js +70 -0
  2104. package/dist/agent/credentials/reserved-refs.js.map +1 -0
  2105. package/dist/agent/credentials/self-secrets.d.ts +24 -0
  2106. package/dist/agent/credentials/self-secrets.d.ts.map +1 -0
  2107. package/dist/agent/credentials/self-secrets.js +138 -0
  2108. package/dist/agent/credentials/self-secrets.js.map +1 -0
  2109. package/dist/agent/credentials/warm.d.ts +77 -0
  2110. package/dist/agent/credentials/warm.d.ts.map +1 -0
  2111. package/dist/agent/credentials/warm.js +136 -0
  2112. package/dist/agent/credentials/warm.js.map +1 -0
  2113. package/dist/agent/docs/approver-policy.d.ts +70 -0
  2114. package/dist/agent/docs/approver-policy.d.ts.map +1 -0
  2115. package/dist/agent/docs/approver-policy.js +193 -0
  2116. package/dist/agent/docs/approver-policy.js.map +1 -0
  2117. package/dist/agent/docs/capability-map.d.ts +69 -0
  2118. package/dist/agent/docs/capability-map.d.ts.map +1 -0
  2119. package/dist/agent/docs/capability-map.js +142 -0
  2120. package/dist/agent/docs/capability-map.js.map +1 -0
  2121. package/dist/agent/docs/counted-claims.d.ts +61 -0
  2122. package/dist/agent/docs/counted-claims.d.ts.map +1 -0
  2123. package/dist/agent/docs/counted-claims.js +363 -0
  2124. package/dist/agent/docs/counted-claims.js.map +1 -0
  2125. package/dist/agent/docs/registry.d.ts +73 -0
  2126. package/dist/agent/docs/registry.d.ts.map +1 -0
  2127. package/dist/agent/docs/registry.js +157 -0
  2128. package/dist/agent/docs/registry.js.map +1 -0
  2129. package/dist/agent/docs/source-map.d.ts +69 -0
  2130. package/dist/agent/docs/source-map.d.ts.map +1 -0
  2131. package/dist/agent/docs/source-map.js +156 -0
  2132. package/dist/agent/docs/source-map.js.map +1 -0
  2133. package/dist/agent/hooks/approval-raised.d.ts +3 -0
  2134. package/dist/agent/hooks/approval-raised.d.ts.map +1 -0
  2135. package/dist/agent/hooks/approval-raised.js +31 -0
  2136. package/dist/agent/hooks/approval-raised.js.map +1 -0
  2137. package/dist/agent/hooks/approval-settlement.d.ts +5 -0
  2138. package/dist/agent/hooks/approval-settlement.d.ts.map +1 -0
  2139. package/dist/agent/hooks/approval-settlement.js +90 -0
  2140. package/dist/agent/hooks/approval-settlement.js.map +1 -0
  2141. package/dist/agent/hooks/binding-bridge.d.ts +3 -0
  2142. package/dist/agent/hooks/binding-bridge.d.ts.map +1 -0
  2143. package/dist/agent/hooks/binding-bridge.js +63 -0
  2144. package/dist/agent/hooks/binding-bridge.js.map +1 -0
  2145. package/dist/agent/hooks/connector-audit.d.ts +3 -0
  2146. package/dist/agent/hooks/connector-audit.d.ts.map +1 -0
  2147. package/dist/agent/hooks/connector-audit.js +103 -0
  2148. package/dist/agent/hooks/connector-audit.js.map +1 -0
  2149. package/dist/agent/hooks/egress.d.ts +150 -0
  2150. package/dist/agent/hooks/egress.d.ts.map +1 -0
  2151. package/dist/agent/hooks/egress.js +546 -0
  2152. package/dist/agent/hooks/egress.js.map +1 -0
  2153. package/dist/agent/hooks/eve-patch-gate.d.ts +3 -0
  2154. package/dist/agent/hooks/eve-patch-gate.d.ts.map +1 -0
  2155. package/dist/agent/hooks/eve-patch-gate.js +51 -0
  2156. package/dist/agent/hooks/eve-patch-gate.js.map +1 -0
  2157. package/dist/agent/hooks/fire-carriage.d.ts +3 -0
  2158. package/dist/agent/hooks/fire-carriage.d.ts.map +1 -0
  2159. package/dist/agent/hooks/fire-carriage.js +32 -0
  2160. package/dist/agent/hooks/fire-carriage.js.map +1 -0
  2161. package/dist/agent/hooks/fire-toolset.d.ts +48 -0
  2162. package/dist/agent/hooks/fire-toolset.d.ts.map +1 -0
  2163. package/dist/agent/hooks/fire-toolset.js +275 -0
  2164. package/dist/agent/hooks/fire-toolset.js.map +1 -0
  2165. package/dist/agent/hooks/job-posture.d.ts +3 -0
  2166. package/dist/agent/hooks/job-posture.d.ts.map +1 -0
  2167. package/dist/agent/hooks/job-posture.js +82 -0
  2168. package/dist/agent/hooks/job-posture.js.map +1 -0
  2169. package/dist/agent/hooks/lean-seat.d.ts +3 -0
  2170. package/dist/agent/hooks/lean-seat.d.ts.map +1 -0
  2171. package/dist/agent/hooks/lean-seat.js +229 -0
  2172. package/dist/agent/hooks/lean-seat.js.map +1 -0
  2173. package/dist/agent/hooks/learn.d.ts +3 -0
  2174. package/dist/agent/hooks/learn.d.ts.map +1 -0
  2175. package/dist/agent/hooks/learn.js +193 -0
  2176. package/dist/agent/hooks/learn.js.map +1 -0
  2177. package/dist/agent/hooks/link-claim.d.ts +63 -0
  2178. package/dist/agent/hooks/link-claim.d.ts.map +1 -0
  2179. package/dist/agent/hooks/link-claim.js +215 -0
  2180. package/dist/agent/hooks/link-claim.js.map +1 -0
  2181. package/dist/agent/hooks/log-flush.d.ts +3 -0
  2182. package/dist/agent/hooks/log-flush.d.ts.map +1 -0
  2183. package/dist/agent/hooks/log-flush.js +28 -0
  2184. package/dist/agent/hooks/log-flush.js.map +1 -0
  2185. package/dist/agent/hooks/loop-breaker.d.ts +3 -0
  2186. package/dist/agent/hooks/loop-breaker.d.ts.map +1 -0
  2187. package/dist/agent/hooks/loop-breaker.js +16 -0
  2188. package/dist/agent/hooks/loop-breaker.js.map +1 -0
  2189. package/dist/agent/hooks/memory.d.ts +112 -0
  2190. package/dist/agent/hooks/memory.d.ts.map +1 -0
  2191. package/dist/agent/hooks/memory.js +1191 -0
  2192. package/dist/agent/hooks/memory.js.map +1 -0
  2193. package/dist/agent/hooks/native-input-audit.d.ts +7 -0
  2194. package/dist/agent/hooks/native-input-audit.d.ts.map +1 -0
  2195. package/dist/agent/hooks/native-input-audit.js +44 -0
  2196. package/dist/agent/hooks/native-input-audit.js.map +1 -0
  2197. package/dist/agent/hooks/own-account-ask.d.ts +52 -0
  2198. package/dist/agent/hooks/own-account-ask.d.ts.map +1 -0
  2199. package/dist/agent/hooks/own-account-ask.js +162 -0
  2200. package/dist/agent/hooks/own-account-ask.js.map +1 -0
  2201. package/dist/agent/hooks/requester-identity.d.ts +3 -0
  2202. package/dist/agent/hooks/requester-identity.d.ts.map +1 -0
  2203. package/dist/agent/hooks/requester-identity.js +24 -0
  2204. package/dist/agent/hooks/requester-identity.js.map +1 -0
  2205. package/dist/agent/hooks/requester-messages.d.ts +9 -0
  2206. package/dist/agent/hooks/requester-messages.d.ts.map +1 -0
  2207. package/dist/agent/hooks/requester-messages.js +57 -0
  2208. package/dist/agent/hooks/requester-messages.js.map +1 -0
  2209. package/dist/agent/hooks/routine-outcome.d.ts +29 -0
  2210. package/dist/agent/hooks/routine-outcome.d.ts.map +1 -0
  2211. package/dist/agent/hooks/routine-outcome.js +211 -0
  2212. package/dist/agent/hooks/routine-outcome.js.map +1 -0
  2213. package/dist/agent/hooks/routine-silence.d.ts +3 -0
  2214. package/dist/agent/hooks/routine-silence.d.ts.map +1 -0
  2215. package/dist/agent/hooks/routine-silence.js +30 -0
  2216. package/dist/agent/hooks/routine-silence.js.map +1 -0
  2217. package/dist/agent/hooks/session-park.d.ts +3 -0
  2218. package/dist/agent/hooks/session-park.d.ts.map +1 -0
  2219. package/dist/agent/hooks/session-park.js +43 -0
  2220. package/dist/agent/hooks/session-park.js.map +1 -0
  2221. package/dist/agent/hooks/settlement-flush.d.ts +45 -0
  2222. package/dist/agent/hooks/settlement-flush.d.ts.map +1 -0
  2223. package/dist/agent/hooks/settlement-flush.js +146 -0
  2224. package/dist/agent/hooks/settlement-flush.js.map +1 -0
  2225. package/dist/agent/hooks/spawn-taint.d.ts +154 -0
  2226. package/dist/agent/hooks/spawn-taint.d.ts.map +1 -0
  2227. package/dist/agent/hooks/spawn-taint.js +1200 -0
  2228. package/dist/agent/hooks/spawn-taint.js.map +1 -0
  2229. package/dist/agent/hooks/spend.d.ts +92 -0
  2230. package/dist/agent/hooks/spend.d.ts.map +1 -0
  2231. package/dist/agent/hooks/spend.js +343 -0
  2232. package/dist/agent/hooks/spend.js.map +1 -0
  2233. package/dist/agent/hooks/stall-guard.d.ts +3 -0
  2234. package/dist/agent/hooks/stall-guard.d.ts.map +1 -0
  2235. package/dist/agent/hooks/stall-guard.js +22 -0
  2236. package/dist/agent/hooks/stall-guard.js.map +1 -0
  2237. package/dist/agent/hooks/telemetry.d.ts +3 -0
  2238. package/dist/agent/hooks/telemetry.d.ts.map +1 -0
  2239. package/dist/agent/hooks/telemetry.js +93 -0
  2240. package/dist/agent/hooks/telemetry.js.map +1 -0
  2241. package/dist/agent/hooks/turn-anchor.d.ts +35 -0
  2242. package/dist/agent/hooks/turn-anchor.d.ts.map +1 -0
  2243. package/dist/agent/hooks/turn-anchor.js +647 -0
  2244. package/dist/agent/hooks/turn-anchor.js.map +1 -0
  2245. package/dist/agent/hooks/turn-tally.d.ts +32 -0
  2246. package/dist/agent/hooks/turn-tally.d.ts.map +1 -0
  2247. package/dist/agent/hooks/turn-tally.js +69 -0
  2248. package/dist/agent/hooks/turn-tally.js.map +1 -0
  2249. package/dist/agent/hooks/wake-accounting-turn.d.ts +8 -0
  2250. package/dist/agent/hooks/wake-accounting-turn.d.ts.map +1 -0
  2251. package/dist/agent/hooks/wake-accounting-turn.js +88 -0
  2252. package/dist/agent/hooks/wake-accounting-turn.js.map +1 -0
  2253. package/dist/agent/hooks/wake-turn-start.d.ts +3 -0
  2254. package/dist/agent/hooks/wake-turn-start.d.ts.map +1 -0
  2255. package/dist/agent/hooks/wake-turn-start.js +44 -0
  2256. package/dist/agent/hooks/wake-turn-start.js.map +1 -0
  2257. package/dist/agent/hooks/window-routing.d.ts +3 -0
  2258. package/dist/agent/hooks/window-routing.d.ts.map +1 -0
  2259. package/dist/agent/hooks/window-routing.js +52 -0
  2260. package/dist/agent/hooks/window-routing.js.map +1 -0
  2261. package/dist/agent/identity/account-directory.d.ts +52 -0
  2262. package/dist/agent/identity/account-directory.d.ts.map +1 -0
  2263. package/dist/agent/identity/account-directory.js +110 -0
  2264. package/dist/agent/identity/account-directory.js.map +1 -0
  2265. package/dist/agent/identity/account-display-name.d.ts +65 -0
  2266. package/dist/agent/identity/account-display-name.d.ts.map +1 -0
  2267. package/dist/agent/identity/account-display-name.js +156 -0
  2268. package/dist/agent/identity/account-display-name.js.map +1 -0
  2269. package/dist/agent/identity/author-trust.d.ts +106 -0
  2270. package/dist/agent/identity/author-trust.d.ts.map +1 -0
  2271. package/dist/agent/identity/author-trust.js +209 -0
  2272. package/dist/agent/identity/author-trust.js.map +1 -0
  2273. package/dist/agent/identity/binding-bridge.d.ts +26 -0
  2274. package/dist/agent/identity/binding-bridge.d.ts.map +1 -0
  2275. package/dist/agent/identity/binding-bridge.js +75 -0
  2276. package/dist/agent/identity/binding-bridge.js.map +1 -0
  2277. package/dist/agent/identity/binding.d.ts +567 -0
  2278. package/dist/agent/identity/binding.d.ts.map +1 -0
  2279. package/dist/agent/identity/binding.js +1050 -0
  2280. package/dist/agent/identity/binding.js.map +1 -0
  2281. package/dist/agent/identity/bot-display-name.d.ts +19 -0
  2282. package/dist/agent/identity/bot-display-name.d.ts.map +1 -0
  2283. package/dist/agent/identity/bot-display-name.js +47 -0
  2284. package/dist/agent/identity/bot-display-name.js.map +1 -0
  2285. package/dist/agent/identity/bot-name.d.ts +39 -0
  2286. package/dist/agent/identity/bot-name.d.ts.map +1 -0
  2287. package/dist/agent/identity/bot-name.js +77 -0
  2288. package/dist/agent/identity/bot-name.js.map +1 -0
  2289. package/dist/agent/identity/capabilities.d.ts +52 -0
  2290. package/dist/agent/identity/capabilities.d.ts.map +1 -0
  2291. package/dist/agent/identity/capabilities.js +39 -0
  2292. package/dist/agent/identity/capabilities.js.map +1 -0
  2293. package/dist/agent/identity/delegated-binding.d.ts +59 -0
  2294. package/dist/agent/identity/delegated-binding.d.ts.map +1 -0
  2295. package/dist/agent/identity/delegated-binding.js +116 -0
  2296. package/dist/agent/identity/delegated-binding.js.map +1 -0
  2297. package/dist/agent/identity/deployment-identity.d.ts +61 -0
  2298. package/dist/agent/identity/deployment-identity.d.ts.map +1 -0
  2299. package/dist/agent/identity/deployment-identity.js +75 -0
  2300. package/dist/agent/identity/deployment-identity.js.map +1 -0
  2301. package/dist/agent/identity/directory-sync.d.ts +195 -0
  2302. package/dist/agent/identity/directory-sync.d.ts.map +1 -0
  2303. package/dist/agent/identity/directory-sync.js +623 -0
  2304. package/dist/agent/identity/directory-sync.js.map +1 -0
  2305. package/dist/agent/identity/directory.d.ts +73 -0
  2306. package/dist/agent/identity/directory.d.ts.map +1 -0
  2307. package/dist/agent/identity/directory.js +19 -0
  2308. package/dist/agent/identity/directory.js.map +1 -0
  2309. package/dist/agent/identity/display-title.d.ts +12 -0
  2310. package/dist/agent/identity/display-title.d.ts.map +1 -0
  2311. package/dist/agent/identity/display-title.js +14 -0
  2312. package/dist/agent/identity/display-title.js.map +1 -0
  2313. package/dist/agent/identity/frozen-surface-binding.internal.d.ts +8 -0
  2314. package/dist/agent/identity/frozen-surface-binding.internal.d.ts.map +1 -0
  2315. package/dist/agent/identity/frozen-surface-binding.internal.js +90 -0
  2316. package/dist/agent/identity/frozen-surface-binding.internal.js.map +1 -0
  2317. package/dist/agent/identity/group-sync.d.ts +77 -0
  2318. package/dist/agent/identity/group-sync.d.ts.map +1 -0
  2319. package/dist/agent/identity/group-sync.js +128 -0
  2320. package/dist/agent/identity/group-sync.js.map +1 -0
  2321. package/dist/agent/identity/groups-codemod.d.ts +52 -0
  2322. package/dist/agent/identity/groups-codemod.d.ts.map +1 -0
  2323. package/dist/agent/identity/groups-codemod.js +129 -0
  2324. package/dist/agent/identity/groups-codemod.js.map +1 -0
  2325. package/dist/agent/identity/groups-delivery.d.ts +56 -0
  2326. package/dist/agent/identity/groups-delivery.d.ts.map +1 -0
  2327. package/dist/agent/identity/groups-delivery.js +116 -0
  2328. package/dist/agent/identity/groups-delivery.js.map +1 -0
  2329. package/dist/agent/identity/groups.d.ts +74 -0
  2330. package/dist/agent/identity/groups.d.ts.map +1 -0
  2331. package/dist/agent/identity/groups.js +124 -0
  2332. package/dist/agent/identity/groups.js.map +1 -0
  2333. package/dist/agent/identity/link-challenge.d.ts +58 -0
  2334. package/dist/agent/identity/link-challenge.d.ts.map +1 -0
  2335. package/dist/agent/identity/link-challenge.js +136 -0
  2336. package/dist/agent/identity/link-challenge.js.map +1 -0
  2337. package/dist/agent/identity/link-consent.d.ts +79 -0
  2338. package/dist/agent/identity/link-consent.d.ts.map +1 -0
  2339. package/dist/agent/identity/link-consent.js +179 -0
  2340. package/dist/agent/identity/link-consent.js.map +1 -0
  2341. package/dist/agent/identity/link-flow.d.ts +260 -0
  2342. package/dist/agent/identity/link-flow.d.ts.map +1 -0
  2343. package/dist/agent/identity/link-flow.js +327 -0
  2344. package/dist/agent/identity/link-flow.js.map +1 -0
  2345. package/dist/agent/identity/link-initiator.d.ts +16 -0
  2346. package/dist/agent/identity/link-initiator.d.ts.map +1 -0
  2347. package/dist/agent/identity/link-initiator.js +25 -0
  2348. package/dist/agent/identity/link-initiator.js.map +1 -0
  2349. package/dist/agent/identity/link-resolve.d.ts +40 -0
  2350. package/dist/agent/identity/link-resolve.d.ts.map +1 -0
  2351. package/dist/agent/identity/link-resolve.js +195 -0
  2352. package/dist/agent/identity/link-resolve.js.map +1 -0
  2353. package/dist/agent/identity/link-set-ref.d.ts +16 -0
  2354. package/dist/agent/identity/link-set-ref.d.ts.map +1 -0
  2355. package/dist/agent/identity/link-set-ref.js +32 -0
  2356. package/dist/agent/identity/link-set-ref.js.map +1 -0
  2357. package/dist/agent/identity/link-store.d.ts +400 -0
  2358. package/dist/agent/identity/link-store.d.ts.map +1 -0
  2359. package/dist/agent/identity/link-store.js +725 -0
  2360. package/dist/agent/identity/link-store.js.map +1 -0
  2361. package/dist/agent/identity/link-tenant-backfill.d.ts +39 -0
  2362. package/dist/agent/identity/link-tenant-backfill.d.ts.map +1 -0
  2363. package/dist/agent/identity/link-tenant-backfill.js +67 -0
  2364. package/dist/agent/identity/link-tenant-backfill.js.map +1 -0
  2365. package/dist/agent/identity/link-tenant.d.ts +28 -0
  2366. package/dist/agent/identity/link-tenant.d.ts.map +1 -0
  2367. package/dist/agent/identity/link-tenant.js +51 -0
  2368. package/dist/agent/identity/link-tenant.js.map +1 -0
  2369. package/dist/agent/identity/oauth-vault-share.d.ts +29 -0
  2370. package/dist/agent/identity/oauth-vault-share.d.ts.map +1 -0
  2371. package/dist/agent/identity/oauth-vault-share.js +36 -0
  2372. package/dist/agent/identity/oauth-vault-share.js.map +1 -0
  2373. package/dist/agent/identity/platform.d.ts +9 -0
  2374. package/dist/agent/identity/platform.d.ts.map +1 -0
  2375. package/dist/agent/identity/platform.js +48 -0
  2376. package/dist/agent/identity/platform.js.map +1 -0
  2377. package/dist/agent/identity/principal-key-rules.d.ts +23 -0
  2378. package/dist/agent/identity/principal-key-rules.d.ts.map +1 -0
  2379. package/dist/agent/identity/principal-key-rules.js +91 -0
  2380. package/dist/agent/identity/principal-key-rules.js.map +1 -0
  2381. package/dist/agent/identity/principal-key.d.ts +92 -0
  2382. package/dist/agent/identity/principal-key.d.ts.map +1 -0
  2383. package/dist/agent/identity/principal-key.js +197 -0
  2384. package/dist/agent/identity/principal-key.js.map +1 -0
  2385. package/dist/agent/identity/principals.d.ts +145 -0
  2386. package/dist/agent/identity/principals.d.ts.map +1 -0
  2387. package/dist/agent/identity/principals.js +303 -0
  2388. package/dist/agent/identity/principals.js.map +1 -0
  2389. package/dist/agent/identity/surface-key-grammar.d.ts +83 -0
  2390. package/dist/agent/identity/surface-key-grammar.d.ts.map +1 -0
  2391. package/dist/agent/identity/surface-key-grammar.js +138 -0
  2392. package/dist/agent/identity/surface-key-grammar.js.map +1 -0
  2393. package/dist/agent/identity/surface-parity.d.ts +274 -0
  2394. package/dist/agent/identity/surface-parity.d.ts.map +1 -0
  2395. package/dist/agent/identity/surface-parity.js +357 -0
  2396. package/dist/agent/identity/surface-parity.js.map +1 -0
  2397. package/dist/agent/identity/trust-preflight.d.ts +83 -0
  2398. package/dist/agent/identity/trust-preflight.d.ts.map +1 -0
  2399. package/dist/agent/identity/trust-preflight.js +196 -0
  2400. package/dist/agent/identity/trust-preflight.js.map +1 -0
  2401. package/dist/agent/identity/trust.d.ts +217 -0
  2402. package/dist/agent/identity/trust.d.ts.map +1 -0
  2403. package/dist/agent/identity/trust.js +300 -0
  2404. package/dist/agent/identity/trust.js.map +1 -0
  2405. package/dist/agent/identity/wake-trust.d.ts +129 -0
  2406. package/dist/agent/identity/wake-trust.d.ts.map +1 -0
  2407. package/dist/agent/identity/wake-trust.js +159 -0
  2408. package/dist/agent/identity/wake-trust.js.map +1 -0
  2409. package/dist/agent/instructions/access.d.ts +252 -0
  2410. package/dist/agent/instructions/access.d.ts.map +1 -0
  2411. package/dist/agent/instructions/access.js +1200 -0
  2412. package/dist/agent/instructions/access.js.map +1 -0
  2413. package/dist/agent/instructions/seat-prompt.d.ts +354 -0
  2414. package/dist/agent/instructions/seat-prompt.d.ts.map +1 -0
  2415. package/dist/agent/instructions/seat-prompt.js +1143 -0
  2416. package/dist/agent/instructions/seat-prompt.js.map +1 -0
  2417. package/dist/agent/lib/process-registry.d.ts +8 -0
  2418. package/dist/agent/lib/process-registry.d.ts.map +1 -0
  2419. package/dist/agent/lib/process-registry.js +53 -0
  2420. package/dist/agent/lib/process-registry.js.map +1 -0
  2421. package/dist/agent/memory/agents-codemod.d.ts +92 -0
  2422. package/dist/agent/memory/agents-codemod.d.ts.map +1 -0
  2423. package/dist/agent/memory/agents-codemod.js +366 -0
  2424. package/dist/agent/memory/agents-codemod.js.map +1 -0
  2425. package/dist/agent/memory/connector-memory.d.ts +54 -0
  2426. package/dist/agent/memory/connector-memory.d.ts.map +1 -0
  2427. package/dist/agent/memory/connector-memory.js +80 -0
  2428. package/dist/agent/memory/connector-memory.js.map +1 -0
  2429. package/dist/agent/memory/domain.d.ts +384 -0
  2430. package/dist/agent/memory/domain.d.ts.map +1 -0
  2431. package/dist/agent/memory/domain.js +911 -0
  2432. package/dist/agent/memory/domain.js.map +1 -0
  2433. package/dist/agent/memory/dream/candidates.d.ts +35 -0
  2434. package/dist/agent/memory/dream/candidates.d.ts.map +1 -0
  2435. package/dist/agent/memory/dream/candidates.js +149 -0
  2436. package/dist/agent/memory/dream/candidates.js.map +1 -0
  2437. package/dist/agent/memory/dream/correction.d.ts +56 -0
  2438. package/dist/agent/memory/dream/correction.d.ts.map +1 -0
  2439. package/dist/agent/memory/dream/correction.js +109 -0
  2440. package/dist/agent/memory/dream/correction.js.map +1 -0
  2441. package/dist/agent/memory/dream/judge.d.ts +47 -0
  2442. package/dist/agent/memory/dream/judge.d.ts.map +1 -0
  2443. package/dist/agent/memory/dream/judge.js +135 -0
  2444. package/dist/agent/memory/dream/judge.js.map +1 -0
  2445. package/dist/agent/memory/dream/learn.d.ts +79 -0
  2446. package/dist/agent/memory/dream/learn.d.ts.map +1 -0
  2447. package/dist/agent/memory/dream/learn.js +243 -0
  2448. package/dist/agent/memory/dream/learn.js.map +1 -0
  2449. package/dist/agent/memory/dream/mode3-cluster.d.ts +37 -0
  2450. package/dist/agent/memory/dream/mode3-cluster.d.ts.map +1 -0
  2451. package/dist/agent/memory/dream/mode3-cluster.js +123 -0
  2452. package/dist/agent/memory/dream/mode3-cluster.js.map +1 -0
  2453. package/dist/agent/memory/dream/mode3-last-mile.d.ts +134 -0
  2454. package/dist/agent/memory/dream/mode3-last-mile.d.ts.map +1 -0
  2455. package/dist/agent/memory/dream/mode3-last-mile.js +262 -0
  2456. package/dist/agent/memory/dream/mode3-last-mile.js.map +1 -0
  2457. package/dist/agent/memory/dream/mode3.d.ts +82 -0
  2458. package/dist/agent/memory/dream/mode3.d.ts.map +1 -0
  2459. package/dist/agent/memory/dream/mode3.js +236 -0
  2460. package/dist/agent/memory/dream/mode3.js.map +1 -0
  2461. package/dist/agent/memory/dream/ops.d.ts +75 -0
  2462. package/dist/agent/memory/dream/ops.d.ts.map +1 -0
  2463. package/dist/agent/memory/dream/ops.js +302 -0
  2464. package/dist/agent/memory/dream/ops.js.map +1 -0
  2465. package/dist/agent/memory/dream/proposal.d.ts +22 -0
  2466. package/dist/agent/memory/dream/proposal.d.ts.map +1 -0
  2467. package/dist/agent/memory/dream/proposal.js +66 -0
  2468. package/dist/agent/memory/dream/proposal.js.map +1 -0
  2469. package/dist/agent/memory/dream/recurrence.d.ts +38 -0
  2470. package/dist/agent/memory/dream/recurrence.d.ts.map +1 -0
  2471. package/dist/agent/memory/dream/recurrence.js +106 -0
  2472. package/dist/agent/memory/dream/recurrence.js.map +1 -0
  2473. package/dist/agent/memory/dream/salience.d.ts +10 -0
  2474. package/dist/agent/memory/dream/salience.d.ts.map +1 -0
  2475. package/dist/agent/memory/dream/salience.js +16 -0
  2476. package/dist/agent/memory/dream/salience.js.map +1 -0
  2477. package/dist/agent/memory/dream/skill-proposal-pr.d.ts +63 -0
  2478. package/dist/agent/memory/dream/skill-proposal-pr.d.ts.map +1 -0
  2479. package/dist/agent/memory/dream/skill-proposal-pr.js +245 -0
  2480. package/dist/agent/memory/dream/skill-proposal-pr.js.map +1 -0
  2481. package/dist/agent/memory/dream/supersede-apply.d.ts +40 -0
  2482. package/dist/agent/memory/dream/supersede-apply.d.ts.map +1 -0
  2483. package/dist/agent/memory/dream/supersede-apply.js +78 -0
  2484. package/dist/agent/memory/dream/supersede-apply.js.map +1 -0
  2485. package/dist/agent/memory/dream/tidy.d.ts +60 -0
  2486. package/dist/agent/memory/dream/tidy.d.ts.map +1 -0
  2487. package/dist/agent/memory/dream/tidy.js +96 -0
  2488. package/dist/agent/memory/dream/tidy.js.map +1 -0
  2489. package/dist/agent/memory/graph.d.ts +46 -0
  2490. package/dist/agent/memory/graph.d.ts.map +1 -0
  2491. package/dist/agent/memory/graph.js +130 -0
  2492. package/dist/agent/memory/graph.js.map +1 -0
  2493. package/dist/agent/memory/host-owned-files.d.ts +2 -0
  2494. package/dist/agent/memory/host-owned-files.d.ts.map +1 -0
  2495. package/dist/agent/memory/host-owned-files.js +4 -0
  2496. package/dist/agent/memory/host-owned-files.js.map +1 -0
  2497. package/dist/agent/memory/layout.d.ts +8 -0
  2498. package/dist/agent/memory/layout.d.ts.map +1 -0
  2499. package/dist/agent/memory/layout.js +77 -0
  2500. package/dist/agent/memory/layout.js.map +1 -0
  2501. package/dist/agent/memory/listing.d.ts +11 -0
  2502. package/dist/agent/memory/listing.d.ts.map +1 -0
  2503. package/dist/agent/memory/listing.js +169 -0
  2504. package/dist/agent/memory/listing.js.map +1 -0
  2505. package/dist/agent/memory/markdown.d.ts +73 -0
  2506. package/dist/agent/memory/markdown.d.ts.map +1 -0
  2507. package/dist/agent/memory/markdown.js +190 -0
  2508. package/dist/agent/memory/markdown.js.map +1 -0
  2509. package/dist/agent/memory/partition.d.ts +34 -0
  2510. package/dist/agent/memory/partition.d.ts.map +1 -0
  2511. package/dist/agent/memory/partition.js +41 -0
  2512. package/dist/agent/memory/partition.js.map +1 -0
  2513. package/dist/agent/memory/postgres.d.ts +73 -0
  2514. package/dist/agent/memory/postgres.d.ts.map +1 -0
  2515. package/dist/agent/memory/postgres.js +411 -0
  2516. package/dist/agent/memory/postgres.js.map +1 -0
  2517. package/dist/agent/memory/provenance-mark.d.ts +77 -0
  2518. package/dist/agent/memory/provenance-mark.d.ts.map +1 -0
  2519. package/dist/agent/memory/provenance-mark.js +276 -0
  2520. package/dist/agent/memory/provenance-mark.js.map +1 -0
  2521. package/dist/agent/memory/provenance.d.ts +8 -0
  2522. package/dist/agent/memory/provenance.d.ts.map +1 -0
  2523. package/dist/agent/memory/provenance.js +25 -0
  2524. package/dist/agent/memory/provenance.js.map +1 -0
  2525. package/dist/agent/memory/provider.d.ts +76 -0
  2526. package/dist/agent/memory/provider.d.ts.map +1 -0
  2527. package/dist/agent/memory/provider.js +96 -0
  2528. package/dist/agent/memory/provider.js.map +1 -0
  2529. package/dist/agent/memory/purge-redaction.d.ts +29 -0
  2530. package/dist/agent/memory/purge-redaction.d.ts.map +1 -0
  2531. package/dist/agent/memory/purge-redaction.js +65 -0
  2532. package/dist/agent/memory/purge-redaction.js.map +1 -0
  2533. package/dist/agent/memory/readonly.d.ts +25 -0
  2534. package/dist/agent/memory/readonly.d.ts.map +1 -0
  2535. package/dist/agent/memory/readonly.js +46 -0
  2536. package/dist/agent/memory/readonly.js.map +1 -0
  2537. package/dist/agent/memory/resolve.d.ts +49 -0
  2538. package/dist/agent/memory/resolve.d.ts.map +1 -0
  2539. package/dist/agent/memory/resolve.js +136 -0
  2540. package/dist/agent/memory/resolve.js.map +1 -0
  2541. package/dist/agent/memory/root-fence.d.ts +24 -0
  2542. package/dist/agent/memory/root-fence.d.ts.map +1 -0
  2543. package/dist/agent/memory/root-fence.js +46 -0
  2544. package/dist/agent/memory/root-fence.js.map +1 -0
  2545. package/dist/agent/memory/sandbox-sync.d.ts +17 -0
  2546. package/dist/agent/memory/sandbox-sync.d.ts.map +1 -0
  2547. package/dist/agent/memory/sandbox-sync.js +61 -0
  2548. package/dist/agent/memory/sandbox-sync.js.map +1 -0
  2549. package/dist/agent/memory/selection.d.ts +29 -0
  2550. package/dist/agent/memory/selection.d.ts.map +1 -0
  2551. package/dist/agent/memory/selection.js +82 -0
  2552. package/dist/agent/memory/selection.js.map +1 -0
  2553. package/dist/agent/memory/silo.d.ts +39 -0
  2554. package/dist/agent/memory/silo.d.ts.map +1 -0
  2555. package/dist/agent/memory/silo.js +36 -0
  2556. package/dist/agent/memory/silo.js.map +1 -0
  2557. package/dist/agent/memory/sqlite.d.ts +4 -0
  2558. package/dist/agent/memory/sqlite.d.ts.map +1 -0
  2559. package/dist/agent/memory/sqlite.js +196 -0
  2560. package/dist/agent/memory/sqlite.js.map +1 -0
  2561. package/dist/agent/memory/store.d.ts +36 -0
  2562. package/dist/agent/memory/store.d.ts.map +1 -0
  2563. package/dist/agent/memory/store.js +144 -0
  2564. package/dist/agent/memory/store.js.map +1 -0
  2565. package/dist/agent/memory/sync-timing.d.ts +83 -0
  2566. package/dist/agent/memory/sync-timing.d.ts.map +1 -0
  2567. package/dist/agent/memory/sync-timing.js +166 -0
  2568. package/dist/agent/memory/sync-timing.js.map +1 -0
  2569. package/dist/agent/memory/wake-delta.d.ts +96 -0
  2570. package/dist/agent/memory/wake-delta.d.ts.map +1 -0
  2571. package/dist/agent/memory/wake-delta.js +176 -0
  2572. package/dist/agent/memory/wake-delta.js.map +1 -0
  2573. package/dist/agent/memory/write-evidence.d.ts +30 -0
  2574. package/dist/agent/memory/write-evidence.d.ts.map +1 -0
  2575. package/dist/agent/memory/write-evidence.js +137 -0
  2576. package/dist/agent/memory/write-evidence.js.map +1 -0
  2577. package/dist/agent/memory/write-fence.d.ts +30 -0
  2578. package/dist/agent/memory/write-fence.d.ts.map +1 -0
  2579. package/dist/agent/memory/write-fence.js +123 -0
  2580. package/dist/agent/memory/write-fence.js.map +1 -0
  2581. package/dist/agent/memory/write-intent.d.ts +72 -0
  2582. package/dist/agent/memory/write-intent.d.ts.map +1 -0
  2583. package/dist/agent/memory/write-intent.js +197 -0
  2584. package/dist/agent/memory/write-intent.js.map +1 -0
  2585. package/dist/agent/memory/write-road.d.ts +60 -0
  2586. package/dist/agent/memory/write-road.d.ts.map +1 -0
  2587. package/dist/agent/memory/write-road.js +96 -0
  2588. package/dist/agent/memory/write-road.js.map +1 -0
  2589. package/dist/agent/model/ab-test.d.ts +132 -0
  2590. package/dist/agent/model/ab-test.d.ts.map +1 -0
  2591. package/dist/agent/model/ab-test.js +321 -0
  2592. package/dist/agent/model/ab-test.js.map +1 -0
  2593. package/dist/agent/model/call-capture.d.ts +140 -0
  2594. package/dist/agent/model/call-capture.d.ts.map +1 -0
  2595. package/dist/agent/model/call-capture.js +374 -0
  2596. package/dist/agent/model/call-capture.js.map +1 -0
  2597. package/dist/agent/model/default-model.d.ts +13 -0
  2598. package/dist/agent/model/default-model.d.ts.map +1 -0
  2599. package/dist/agent/model/default-model.js +58 -0
  2600. package/dist/agent/model/default-model.js.map +1 -0
  2601. package/dist/agent/model/model-stamp.d.ts +41 -0
  2602. package/dist/agent/model/model-stamp.d.ts.map +1 -0
  2603. package/dist/agent/model/model-stamp.js +160 -0
  2604. package/dist/agent/model/model-stamp.js.map +1 -0
  2605. package/dist/agent/model/policy.d.ts +150 -0
  2606. package/dist/agent/model/policy.d.ts.map +1 -0
  2607. package/dist/agent/model/policy.js +309 -0
  2608. package/dist/agent/model/policy.js.map +1 -0
  2609. package/dist/agent/model/routing.d.ts +210 -0
  2610. package/dist/agent/model/routing.d.ts.map +1 -0
  2611. package/dist/agent/model/routing.js +694 -0
  2612. package/dist/agent/model/routing.js.map +1 -0
  2613. package/dist/agent/model/step-boundary.d.ts +163 -0
  2614. package/dist/agent/model/step-boundary.d.ts.map +1 -0
  2615. package/dist/agent/model/step-boundary.js +491 -0
  2616. package/dist/agent/model/step-boundary.js.map +1 -0
  2617. package/dist/agent/model/stream-drop-retry.d.ts +24 -0
  2618. package/dist/agent/model/stream-drop-retry.d.ts.map +1 -0
  2619. package/dist/agent/model/stream-drop-retry.js +316 -0
  2620. package/dist/agent/model/stream-drop-retry.js.map +1 -0
  2621. package/dist/agent/model/turn-closeout.d.ts +61 -0
  2622. package/dist/agent/model/turn-closeout.d.ts.map +1 -0
  2623. package/dist/agent/model/turn-closeout.js +289 -0
  2624. package/dist/agent/model/turn-closeout.js.map +1 -0
  2625. package/dist/agent/model/turn-state.d.ts +119 -0
  2626. package/dist/agent/model/turn-state.d.ts.map +1 -0
  2627. package/dist/agent/model/turn-state.js +423 -0
  2628. package/dist/agent/model/turn-state.js.map +1 -0
  2629. package/dist/agent/model/vision.d.ts +75 -0
  2630. package/dist/agent/model/vision.d.ts.map +1 -0
  2631. package/dist/agent/model/vision.js +39 -0
  2632. package/dist/agent/model/vision.js.map +1 -0
  2633. package/dist/agent/observability/ship.d.ts +87 -0
  2634. package/dist/agent/observability/ship.d.ts.map +1 -0
  2635. package/dist/agent/observability/ship.js +354 -0
  2636. package/dist/agent/observability/ship.js.map +1 -0
  2637. package/dist/agent/observability/telemetry.d.ts +154 -0
  2638. package/dist/agent/observability/telemetry.d.ts.map +1 -0
  2639. package/dist/agent/observability/telemetry.js +764 -0
  2640. package/dist/agent/observability/telemetry.js.map +1 -0
  2641. package/dist/agent/observability/turn-clock.d.ts +41 -0
  2642. package/dist/agent/observability/turn-clock.d.ts.map +1 -0
  2643. package/dist/agent/observability/turn-clock.js +75 -0
  2644. package/dist/agent/observability/turn-clock.js.map +1 -0
  2645. package/dist/agent/onboarding/onboarding.d.ts +30 -0
  2646. package/dist/agent/onboarding/onboarding.d.ts.map +1 -0
  2647. package/dist/agent/onboarding/onboarding.js +94 -0
  2648. package/dist/agent/onboarding/onboarding.js.map +1 -0
  2649. package/dist/agent/operational/credential-grant-rows.d.ts +626 -0
  2650. package/dist/agent/operational/credential-grant-rows.d.ts.map +1 -0
  2651. package/dist/agent/operational/credential-grant-rows.js +634 -0
  2652. package/dist/agent/operational/credential-grant-rows.js.map +1 -0
  2653. package/dist/agent/operational/pglite-client.d.ts +81 -0
  2654. package/dist/agent/operational/pglite-client.d.ts.map +1 -0
  2655. package/dist/agent/operational/pglite-client.js +255 -0
  2656. package/dist/agent/operational/pglite-client.js.map +1 -0
  2657. package/dist/agent/operational/post-once.d.ts +74 -0
  2658. package/dist/agent/operational/post-once.d.ts.map +1 -0
  2659. package/dist/agent/operational/post-once.js +92 -0
  2660. package/dist/agent/operational/post-once.js.map +1 -0
  2661. package/dist/agent/operational/postgres.d.ts +55 -0
  2662. package/dist/agent/operational/postgres.d.ts.map +1 -0
  2663. package/dist/agent/operational/postgres.js +4052 -0
  2664. package/dist/agent/operational/postgres.js.map +1 -0
  2665. package/dist/agent/operational/provider.d.ts +52 -0
  2666. package/dist/agent/operational/provider.d.ts.map +1 -0
  2667. package/dist/agent/operational/provider.js +166 -0
  2668. package/dist/agent/operational/provider.js.map +1 -0
  2669. package/dist/agent/operational/sqlite.d.ts +21 -0
  2670. package/dist/agent/operational/sqlite.d.ts.map +1 -0
  2671. package/dist/agent/operational/sqlite.js +3170 -0
  2672. package/dist/agent/operational/sqlite.js.map +1 -0
  2673. package/dist/agent/operational/store.d.ts +1953 -0
  2674. package/dist/agent/operational/store.d.ts.map +1 -0
  2675. package/dist/agent/operational/store.js +302 -0
  2676. package/dist/agent/operational/store.js.map +1 -0
  2677. package/dist/agent/ops/census.d.ts +411 -0
  2678. package/dist/agent/ops/census.d.ts.map +1 -0
  2679. package/dist/agent/ops/census.js +701 -0
  2680. package/dist/agent/ops/census.js.map +1 -0
  2681. package/dist/agent/ops/probes.d.ts +20 -0
  2682. package/dist/agent/ops/probes.d.ts.map +1 -0
  2683. package/dist/agent/ops/probes.js +59 -0
  2684. package/dist/agent/ops/probes.js.map +1 -0
  2685. package/dist/agent/ops/quickstart.d.ts +53 -0
  2686. package/dist/agent/ops/quickstart.d.ts.map +1 -0
  2687. package/dist/agent/ops/quickstart.js +247 -0
  2688. package/dist/agent/ops/quickstart.js.map +1 -0
  2689. package/dist/agent/ops/server.d.ts +16 -0
  2690. package/dist/agent/ops/server.d.ts.map +1 -0
  2691. package/dist/agent/ops/server.js +414 -0
  2692. package/dist/agent/ops/server.js.map +1 -0
  2693. package/dist/agent/ops/surface-manifest.d.ts +60 -0
  2694. package/dist/agent/ops/surface-manifest.d.ts.map +1 -0
  2695. package/dist/agent/ops/surface-manifest.js +79 -0
  2696. package/dist/agent/ops/surface-manifest.js.map +1 -0
  2697. package/dist/agent/ops/two-role.d.ts +26 -0
  2698. package/dist/agent/ops/two-role.d.ts.map +1 -0
  2699. package/dist/agent/ops/two-role.js +71 -0
  2700. package/dist/agent/ops/two-role.js.map +1 -0
  2701. package/dist/agent/pages/policy-pages.d.ts +14 -0
  2702. package/dist/agent/pages/policy-pages.d.ts.map +1 -0
  2703. package/dist/agent/pages/policy-pages.js +69 -0
  2704. package/dist/agent/pages/policy-pages.js.map +1 -0
  2705. package/dist/agent/plugins/extract.d.ts +31 -0
  2706. package/dist/agent/plugins/extract.d.ts.map +1 -0
  2707. package/dist/agent/plugins/extract.js +328 -0
  2708. package/dist/agent/plugins/extract.js.map +1 -0
  2709. package/dist/agent/plugins/parse.d.ts +3 -0
  2710. package/dist/agent/plugins/parse.d.ts.map +1 -0
  2711. package/dist/agent/plugins/parse.js +112 -0
  2712. package/dist/agent/plugins/parse.js.map +1 -0
  2713. package/dist/agent/plugins/types.d.ts +105 -0
  2714. package/dist/agent/plugins/types.d.ts.map +1 -0
  2715. package/dist/agent/plugins/types.js +30 -0
  2716. package/dist/agent/plugins/types.js.map +1 -0
  2717. package/dist/agent/publish/eve-patch-pack.d.ts +210 -0
  2718. package/dist/agent/publish/eve-patch-pack.d.ts.map +1 -0
  2719. package/dist/agent/publish/eve-patch-pack.js +377 -0
  2720. package/dist/agent/publish/eve-patch-pack.js.map +1 -0
  2721. package/dist/agent/review/blast-radius.d.ts +83 -0
  2722. package/dist/agent/review/blast-radius.d.ts.map +1 -0
  2723. package/dist/agent/review/blast-radius.js +224 -0
  2724. package/dist/agent/review/blast-radius.js.map +1 -0
  2725. package/dist/agent/review/config-facts.d.ts +69 -0
  2726. package/dist/agent/review/config-facts.d.ts.map +1 -0
  2727. package/dist/agent/review/config-facts.js +155 -0
  2728. package/dist/agent/review/config-facts.js.map +1 -0
  2729. package/dist/agent/review/facts-artifact.d.ts +108 -0
  2730. package/dist/agent/review/facts-artifact.d.ts.map +1 -0
  2731. package/dist/agent/review/facts-artifact.js +288 -0
  2732. package/dist/agent/review/facts-artifact.js.map +1 -0
  2733. package/dist/agent/review/facts-cloud-status.d.ts +90 -0
  2734. package/dist/agent/review/facts-cloud-status.d.ts.map +1 -0
  2735. package/dist/agent/review/facts-cloud-status.js +226 -0
  2736. package/dist/agent/review/facts-cloud-status.js.map +1 -0
  2737. package/dist/agent/review/pr-walkthrough.d.ts +134 -0
  2738. package/dist/agent/review/pr-walkthrough.d.ts.map +1 -0
  2739. package/dist/agent/review/pr-walkthrough.js +641 -0
  2740. package/dist/agent/review/pr-walkthrough.js.map +1 -0
  2741. package/dist/agent/review/zip.d.ts +26 -0
  2742. package/dist/agent/review/zip.d.ts.map +1 -0
  2743. package/dist/agent/review/zip.js +147 -0
  2744. package/dist/agent/review/zip.js.map +1 -0
  2745. package/dist/agent/roles/role.d.ts +95 -0
  2746. package/dist/agent/roles/role.d.ts.map +1 -0
  2747. package/dist/agent/roles/role.js +188 -0
  2748. package/dist/agent/roles/role.js.map +1 -0
  2749. package/dist/agent/routines/bound.d.ts +90 -0
  2750. package/dist/agent/routines/bound.d.ts.map +1 -0
  2751. package/dist/agent/routines/bound.js +233 -0
  2752. package/dist/agent/routines/bound.js.map +1 -0
  2753. package/dist/agent/routines/check-in.d.ts +10 -0
  2754. package/dist/agent/routines/check-in.d.ts.map +1 -0
  2755. package/dist/agent/routines/check-in.js +50 -0
  2756. package/dist/agent/routines/check-in.js.map +1 -0
  2757. package/dist/agent/routines/collector.d.ts +214 -0
  2758. package/dist/agent/routines/collector.d.ts.map +1 -0
  2759. package/dist/agent/routines/collector.js +389 -0
  2760. package/dist/agent/routines/collector.js.map +1 -0
  2761. package/dist/agent/routines/declared-permissions.d.ts +302 -0
  2762. package/dist/agent/routines/declared-permissions.d.ts.map +1 -0
  2763. package/dist/agent/routines/declared-permissions.js +548 -0
  2764. package/dist/agent/routines/declared-permissions.js.map +1 -0
  2765. package/dist/agent/routines/disable-notice.d.ts +75 -0
  2766. package/dist/agent/routines/disable-notice.d.ts.map +1 -0
  2767. package/dist/agent/routines/disable-notice.js +152 -0
  2768. package/dist/agent/routines/disable-notice.js.map +1 -0
  2769. package/dist/agent/routines/entity-read.d.ts +177 -0
  2770. package/dist/agent/routines/entity-read.d.ts.map +1 -0
  2771. package/dist/agent/routines/entity-read.js +178 -0
  2772. package/dist/agent/routines/entity-read.js.map +1 -0
  2773. package/dist/agent/routines/event-authz.d.ts +76 -0
  2774. package/dist/agent/routines/event-authz.d.ts.map +1 -0
  2775. package/dist/agent/routines/event-authz.js +229 -0
  2776. package/dist/agent/routines/event-authz.js.map +1 -0
  2777. package/dist/agent/routines/event-match.d.ts +50 -0
  2778. package/dist/agent/routines/event-match.d.ts.map +1 -0
  2779. package/dist/agent/routines/event-match.js +190 -0
  2780. package/dist/agent/routines/event-match.js.map +1 -0
  2781. package/dist/agent/routines/event-model.d.ts +463 -0
  2782. package/dist/agent/routines/event-model.d.ts.map +1 -0
  2783. package/dist/agent/routines/event-model.js +367 -0
  2784. package/dist/agent/routines/event-model.js.map +1 -0
  2785. package/dist/agent/routines/events.d.ts +85 -0
  2786. package/dist/agent/routines/events.d.ts.map +1 -0
  2787. package/dist/agent/routines/events.js +167 -0
  2788. package/dist/agent/routines/events.js.map +1 -0
  2789. package/dist/agent/routines/fire-audit.d.ts +409 -0
  2790. package/dist/agent/routines/fire-audit.d.ts.map +1 -0
  2791. package/dist/agent/routines/fire-audit.js +571 -0
  2792. package/dist/agent/routines/fire-audit.js.map +1 -0
  2793. package/dist/agent/routines/fire-auth.d.ts +114 -0
  2794. package/dist/agent/routines/fire-auth.d.ts.map +1 -0
  2795. package/dist/agent/routines/fire-auth.js +254 -0
  2796. package/dist/agent/routines/fire-auth.js.map +1 -0
  2797. package/dist/agent/routines/fire-carriage.d.ts +37 -0
  2798. package/dist/agent/routines/fire-carriage.d.ts.map +1 -0
  2799. package/dist/agent/routines/fire-carriage.js +115 -0
  2800. package/dist/agent/routines/fire-carriage.js.map +1 -0
  2801. package/dist/agent/routines/fire-creator.d.ts +26 -0
  2802. package/dist/agent/routines/fire-creator.d.ts.map +1 -0
  2803. package/dist/agent/routines/fire-creator.js +78 -0
  2804. package/dist/agent/routines/fire-creator.js.map +1 -0
  2805. package/dist/agent/routines/fire-disclosure.d.ts +70 -0
  2806. package/dist/agent/routines/fire-disclosure.d.ts.map +1 -0
  2807. package/dist/agent/routines/fire-disclosure.js +193 -0
  2808. package/dist/agent/routines/fire-disclosure.js.map +1 -0
  2809. package/dist/agent/routines/fire-eligibility.d.ts +87 -0
  2810. package/dist/agent/routines/fire-eligibility.d.ts.map +1 -0
  2811. package/dist/agent/routines/fire-eligibility.js +220 -0
  2812. package/dist/agent/routines/fire-eligibility.js.map +1 -0
  2813. package/dist/agent/routines/fire-halt.d.ts +16 -0
  2814. package/dist/agent/routines/fire-halt.d.ts.map +1 -0
  2815. package/dist/agent/routines/fire-halt.js +49 -0
  2816. package/dist/agent/routines/fire-halt.js.map +1 -0
  2817. package/dist/agent/routines/fire-message.d.ts +31 -0
  2818. package/dist/agent/routines/fire-message.d.ts.map +1 -0
  2819. package/dist/agent/routines/fire-message.js +51 -0
  2820. package/dist/agent/routines/fire-message.js.map +1 -0
  2821. package/dist/agent/routines/fire-toolset.d.ts +94 -0
  2822. package/dist/agent/routines/fire-toolset.d.ts.map +1 -0
  2823. package/dist/agent/routines/fire-toolset.js +128 -0
  2824. package/dist/agent/routines/fire-toolset.js.map +1 -0
  2825. package/dist/agent/routines/fire-window.d.ts +230 -0
  2826. package/dist/agent/routines/fire-window.d.ts.map +1 -0
  2827. package/dist/agent/routines/fire-window.js +517 -0
  2828. package/dist/agent/routines/fire-window.js.map +1 -0
  2829. package/dist/agent/routines/follow-ups.d.ts +77 -0
  2830. package/dist/agent/routines/follow-ups.d.ts.map +1 -0
  2831. package/dist/agent/routines/follow-ups.js +134 -0
  2832. package/dist/agent/routines/follow-ups.js.map +1 -0
  2833. package/dist/agent/routines/gate.d.ts +133 -0
  2834. package/dist/agent/routines/gate.d.ts.map +1 -0
  2835. package/dist/agent/routines/gate.js +196 -0
  2836. package/dist/agent/routines/gate.js.map +1 -0
  2837. package/dist/agent/routines/github-entity-read.d.ts +26 -0
  2838. package/dist/agent/routines/github-entity-read.d.ts.map +1 -0
  2839. package/dist/agent/routines/github-entity-read.js +107 -0
  2840. package/dist/agent/routines/github-entity-read.js.map +1 -0
  2841. package/dist/agent/routines/github-fanout.d.ts +23 -0
  2842. package/dist/agent/routines/github-fanout.d.ts.map +1 -0
  2843. package/dist/agent/routines/github-fanout.js +67 -0
  2844. package/dist/agent/routines/github-fanout.js.map +1 -0
  2845. package/dist/agent/routines/github-normalizer.d.ts +20 -0
  2846. package/dist/agent/routines/github-normalizer.d.ts.map +1 -0
  2847. package/dist/agent/routines/github-normalizer.js +253 -0
  2848. package/dist/agent/routines/github-normalizer.js.map +1 -0
  2849. package/dist/agent/routines/ingress.d.ts +128 -0
  2850. package/dist/agent/routines/ingress.d.ts.map +1 -0
  2851. package/dist/agent/routines/ingress.js +703 -0
  2852. package/dist/agent/routines/ingress.js.map +1 -0
  2853. package/dist/agent/routines/job.d.ts +49 -0
  2854. package/dist/agent/routines/job.d.ts.map +1 -0
  2855. package/dist/agent/routines/job.js +122 -0
  2856. package/dist/agent/routines/job.js.map +1 -0
  2857. package/dist/agent/routines/jq-filter.d.ts +94 -0
  2858. package/dist/agent/routines/jq-filter.d.ts.map +1 -0
  2859. package/dist/agent/routines/jq-filter.js +322 -0
  2860. package/dist/agent/routines/jq-filter.js.map +1 -0
  2861. package/dist/agent/routines/lifecycle.d.ts +101 -0
  2862. package/dist/agent/routines/lifecycle.d.ts.map +1 -0
  2863. package/dist/agent/routines/lifecycle.js +231 -0
  2864. package/dist/agent/routines/lifecycle.js.map +1 -0
  2865. package/dist/agent/routines/match-stamp.d.ts +26 -0
  2866. package/dist/agent/routines/match-stamp.d.ts.map +1 -0
  2867. package/dist/agent/routines/match-stamp.js +121 -0
  2868. package/dist/agent/routines/match-stamp.js.map +1 -0
  2869. package/dist/agent/routines/outcome-fold.d.ts +115 -0
  2870. package/dist/agent/routines/outcome-fold.d.ts.map +1 -0
  2871. package/dist/agent/routines/outcome-fold.js +244 -0
  2872. package/dist/agent/routines/outcome-fold.js.map +1 -0
  2873. package/dist/agent/routines/partition.d.ts +5 -0
  2874. package/dist/agent/routines/partition.d.ts.map +1 -0
  2875. package/dist/agent/routines/partition.js +24 -0
  2876. package/dist/agent/routines/partition.js.map +1 -0
  2877. package/dist/agent/routines/permission-card-wait.d.ts +150 -0
  2878. package/dist/agent/routines/permission-card-wait.d.ts.map +1 -0
  2879. package/dist/agent/routines/permission-card-wait.js +213 -0
  2880. package/dist/agent/routines/permission-card-wait.js.map +1 -0
  2881. package/dist/agent/routines/permission-card.d.ts +196 -0
  2882. package/dist/agent/routines/permission-card.d.ts.map +1 -0
  2883. package/dist/agent/routines/permission-card.js +397 -0
  2884. package/dist/agent/routines/permission-card.js.map +1 -0
  2885. package/dist/agent/routines/permission-key.d.ts +25 -0
  2886. package/dist/agent/routines/permission-key.d.ts.map +1 -0
  2887. package/dist/agent/routines/permission-key.js +53 -0
  2888. package/dist/agent/routines/permission-key.js.map +1 -0
  2889. package/dist/agent/routines/permission-review.d.ts +108 -0
  2890. package/dist/agent/routines/permission-review.d.ts.map +1 -0
  2891. package/dist/agent/routines/permission-review.js +215 -0
  2892. package/dist/agent/routines/permission-review.js.map +1 -0
  2893. package/dist/agent/routines/policy.d.ts +146 -0
  2894. package/dist/agent/routines/policy.d.ts.map +1 -0
  2895. package/dist/agent/routines/policy.js +241 -0
  2896. package/dist/agent/routines/policy.js.map +1 -0
  2897. package/dist/agent/routines/pre-fire.d.ts +46 -0
  2898. package/dist/agent/routines/pre-fire.d.ts.map +1 -0
  2899. package/dist/agent/routines/pre-fire.js +111 -0
  2900. package/dist/agent/routines/pre-fire.js.map +1 -0
  2901. package/dist/agent/routines/provider-events.d.ts +115 -0
  2902. package/dist/agent/routines/provider-events.d.ts.map +1 -0
  2903. package/dist/agent/routines/provider-events.js +307 -0
  2904. package/dist/agent/routines/provider-events.js.map +1 -0
  2905. package/dist/agent/routines/report.d.ts +33 -0
  2906. package/dist/agent/routines/report.d.ts.map +1 -0
  2907. package/dist/agent/routines/report.js +122 -0
  2908. package/dist/agent/routines/report.js.map +1 -0
  2909. package/dist/agent/routines/routine.d.ts +774 -0
  2910. package/dist/agent/routines/routine.d.ts.map +1 -0
  2911. package/dist/agent/routines/routine.js +385 -0
  2912. package/dist/agent/routines/routine.js.map +1 -0
  2913. package/dist/agent/routines/schedule.d.ts +70 -0
  2914. package/dist/agent/routines/schedule.d.ts.map +1 -0
  2915. package/dist/agent/routines/schedule.js +187 -0
  2916. package/dist/agent/routines/schedule.js.map +1 -0
  2917. package/dist/agent/routines/scheme-name.d.ts +43 -0
  2918. package/dist/agent/routines/scheme-name.d.ts.map +1 -0
  2919. package/dist/agent/routines/scheme-name.js +73 -0
  2920. package/dist/agent/routines/scheme-name.js.map +1 -0
  2921. package/dist/agent/routines/stall.d.ts +46 -0
  2922. package/dist/agent/routines/stall.d.ts.map +1 -0
  2923. package/dist/agent/routines/stall.js +143 -0
  2924. package/dist/agent/routines/stall.js.map +1 -0
  2925. package/dist/agent/routines/store.d.ts +47 -0
  2926. package/dist/agent/routines/store.d.ts.map +1 -0
  2927. package/dist/agent/routines/store.js +82 -0
  2928. package/dist/agent/routines/store.js.map +1 -0
  2929. package/dist/agent/routines/watch.d.ts +134 -0
  2930. package/dist/agent/routines/watch.d.ts.map +1 -0
  2931. package/dist/agent/routines/watch.js +266 -0
  2932. package/dist/agent/routines/watch.js.map +1 -0
  2933. package/dist/agent/sandbox/backend-select.d.ts +19 -0
  2934. package/dist/agent/sandbox/backend-select.d.ts.map +1 -0
  2935. package/dist/agent/sandbox/backend-select.js +46 -0
  2936. package/dist/agent/sandbox/backend-select.js.map +1 -0
  2937. package/dist/agent/sandbox/vercel-create.d.ts +99 -0
  2938. package/dist/agent/sandbox/vercel-create.d.ts.map +1 -0
  2939. package/dist/agent/sandbox/vercel-create.js +151 -0
  2940. package/dist/agent/sandbox/vercel-create.js.map +1 -0
  2941. package/dist/agent/scaffold/app-root.d.ts +18 -0
  2942. package/dist/agent/scaffold/app-root.d.ts.map +1 -0
  2943. package/dist/agent/scaffold/app-root.js +97 -0
  2944. package/dist/agent/scaffold/app-root.js.map +1 -0
  2945. package/dist/agent/scaffold/roster-config.d.ts +130 -0
  2946. package/dist/agent/scaffold/roster-config.d.ts.map +1 -0
  2947. package/dist/agent/scaffold/roster-config.js +46 -0
  2948. package/dist/agent/scaffold/roster-config.js.map +1 -0
  2949. package/dist/agent/scaffold/roster-fs.d.ts +45 -0
  2950. package/dist/agent/scaffold/roster-fs.d.ts.map +1 -0
  2951. package/dist/agent/scaffold/roster-fs.js +195 -0
  2952. package/dist/agent/scaffold/roster-fs.js.map +1 -0
  2953. package/dist/agent/scaffold/roster-plan.d.ts +167 -0
  2954. package/dist/agent/scaffold/roster-plan.d.ts.map +1 -0
  2955. package/dist/agent/scaffold/roster-plan.js +668 -0
  2956. package/dist/agent/scaffold/roster-plan.js.map +1 -0
  2957. package/dist/agent/scaffold/templates.d.ts +13 -0
  2958. package/dist/agent/scaffold/templates.d.ts.map +1 -0
  2959. package/dist/agent/scaffold/templates.js +73 -0
  2960. package/dist/agent/scaffold/templates.js.map +1 -0
  2961. package/dist/agent/scaffold/tool-roster-read.d.ts +24 -0
  2962. package/dist/agent/scaffold/tool-roster-read.d.ts.map +1 -0
  2963. package/dist/agent/scaffold/tool-roster-read.js +68 -0
  2964. package/dist/agent/scaffold/tool-roster-read.js.map +1 -0
  2965. package/dist/agent/scaffold/tool-roster.d.ts +90 -0
  2966. package/dist/agent/scaffold/tool-roster.d.ts.map +1 -0
  2967. package/dist/agent/scaffold/tool-roster.js +128 -0
  2968. package/dist/agent/scaffold/tool-roster.js.map +1 -0
  2969. package/dist/agent/schedules/directory-sync.d.ts +6 -0
  2970. package/dist/agent/schedules/directory-sync.d.ts.map +1 -0
  2971. package/dist/agent/schedules/directory-sync.js +36 -0
  2972. package/dist/agent/schedules/directory-sync.js.map +1 -0
  2973. package/dist/agent/schedules/dispatch.d.ts +34 -0
  2974. package/dist/agent/schedules/dispatch.d.ts.map +1 -0
  2975. package/dist/agent/schedules/dispatch.js +749 -0
  2976. package/dist/agent/schedules/dispatch.js.map +1 -0
  2977. package/dist/agent/schedules/dream-mode3.d.ts +28 -0
  2978. package/dist/agent/schedules/dream-mode3.d.ts.map +1 -0
  2979. package/dist/agent/schedules/dream-mode3.js +261 -0
  2980. package/dist/agent/schedules/dream-mode3.js.map +1 -0
  2981. package/dist/agent/schedules/routine-dispatch.d.ts +125 -0
  2982. package/dist/agent/schedules/routine-dispatch.d.ts.map +1 -0
  2983. package/dist/agent/schedules/routine-dispatch.js +139 -0
  2984. package/dist/agent/schedules/routine-dispatch.js.map +1 -0
  2985. package/dist/agent/schedules/tidy.d.ts +39 -0
  2986. package/dist/agent/schedules/tidy.d.ts.map +1 -0
  2987. package/dist/agent/schedules/tidy.js +292 -0
  2988. package/dist/agent/schedules/tidy.js.map +1 -0
  2989. package/dist/agent/scm/app.d.ts +55 -0
  2990. package/dist/agent/scm/app.d.ts.map +1 -0
  2991. package/dist/agent/scm/app.js +120 -0
  2992. package/dist/agent/scm/app.js.map +1 -0
  2993. package/dist/agent/scm/broker-audit.d.ts +35 -0
  2994. package/dist/agent/scm/broker-audit.d.ts.map +1 -0
  2995. package/dist/agent/scm/broker-audit.js +94 -0
  2996. package/dist/agent/scm/broker-audit.js.map +1 -0
  2997. package/dist/agent/scm/broker.d.ts +56 -0
  2998. package/dist/agent/scm/broker.d.ts.map +1 -0
  2999. package/dist/agent/scm/broker.js +113 -0
  3000. package/dist/agent/scm/broker.js.map +1 -0
  3001. package/dist/agent/scm/capability-fit.d.ts +59 -0
  3002. package/dist/agent/scm/capability-fit.d.ts.map +1 -0
  3003. package/dist/agent/scm/capability-fit.js +122 -0
  3004. package/dist/agent/scm/capability-fit.js.map +1 -0
  3005. package/dist/agent/scm/config-repo-token.d.ts +3 -0
  3006. package/dist/agent/scm/config-repo-token.d.ts.map +1 -0
  3007. package/dist/agent/scm/config-repo-token.js +43 -0
  3008. package/dist/agent/scm/config-repo-token.js.map +1 -0
  3009. package/dist/agent/scm/config.d.ts +3 -0
  3010. package/dist/agent/scm/config.d.ts.map +1 -0
  3011. package/dist/agent/scm/config.js +36 -0
  3012. package/dist/agent/scm/config.js.map +1 -0
  3013. package/dist/agent/scm/contents.d.ts +54 -0
  3014. package/dist/agent/scm/contents.d.ts.map +1 -0
  3015. package/dist/agent/scm/contents.js +117 -0
  3016. package/dist/agent/scm/contents.js.map +1 -0
  3017. package/dist/agent/scm/git.d.ts +157 -0
  3018. package/dist/agent/scm/git.d.ts.map +1 -0
  3019. package/dist/agent/scm/git.js +318 -0
  3020. package/dist/agent/scm/git.js.map +1 -0
  3021. package/dist/agent/scm/github-acting-identity.d.ts +38 -0
  3022. package/dist/agent/scm/github-acting-identity.d.ts.map +1 -0
  3023. package/dist/agent/scm/github-acting-identity.js +121 -0
  3024. package/dist/agent/scm/github-acting-identity.js.map +1 -0
  3025. package/dist/agent/scm/github-search.d.ts +23 -0
  3026. package/dist/agent/scm/github-search.d.ts.map +1 -0
  3027. package/dist/agent/scm/github-search.js +122 -0
  3028. package/dist/agent/scm/github-search.js.map +1 -0
  3029. package/dist/agent/scm/github-work.d.ts +17 -0
  3030. package/dist/agent/scm/github-work.d.ts.map +1 -0
  3031. package/dist/agent/scm/github-work.js +43 -0
  3032. package/dist/agent/scm/github-work.js.map +1 -0
  3033. package/dist/agent/scm/installations.d.ts +46 -0
  3034. package/dist/agent/scm/installations.d.ts.map +1 -0
  3035. package/dist/agent/scm/installations.js +144 -0
  3036. package/dist/agent/scm/installations.js.map +1 -0
  3037. package/dist/agent/scm/issue-actions.d.ts +41 -0
  3038. package/dist/agent/scm/issue-actions.d.ts.map +1 -0
  3039. package/dist/agent/scm/issue-actions.js +173 -0
  3040. package/dist/agent/scm/issue-actions.js.map +1 -0
  3041. package/dist/agent/scm/mint.d.ts +76 -0
  3042. package/dist/agent/scm/mint.d.ts.map +1 -0
  3043. package/dist/agent/scm/mint.js +253 -0
  3044. package/dist/agent/scm/mint.js.map +1 -0
  3045. package/dist/agent/scm/pr-activity.d.ts +50 -0
  3046. package/dist/agent/scm/pr-activity.d.ts.map +1 -0
  3047. package/dist/agent/scm/pr-activity.js +102 -0
  3048. package/dist/agent/scm/pr-activity.js.map +1 -0
  3049. package/dist/agent/scm/pr-diff.d.ts +61 -0
  3050. package/dist/agent/scm/pr-diff.d.ts.map +1 -0
  3051. package/dist/agent/scm/pr-diff.js +104 -0
  3052. package/dist/agent/scm/pr-diff.js.map +1 -0
  3053. package/dist/agent/scm/pr-feedback.d.ts +87 -0
  3054. package/dist/agent/scm/pr-feedback.d.ts.map +1 -0
  3055. package/dist/agent/scm/pr-feedback.js +230 -0
  3056. package/dist/agent/scm/pr-feedback.js.map +1 -0
  3057. package/dist/agent/scm/pr-status.d.ts +120 -0
  3058. package/dist/agent/scm/pr-status.d.ts.map +1 -0
  3059. package/dist/agent/scm/pr-status.js +199 -0
  3060. package/dist/agent/scm/pr-status.js.map +1 -0
  3061. package/dist/agent/scm/pr-watch.d.ts +26 -0
  3062. package/dist/agent/scm/pr-watch.d.ts.map +1 -0
  3063. package/dist/agent/scm/pr-watch.js +165 -0
  3064. package/dist/agent/scm/pr-watch.js.map +1 -0
  3065. package/dist/agent/scm/pr.d.ts +42 -0
  3066. package/dist/agent/scm/pr.d.ts.map +1 -0
  3067. package/dist/agent/scm/pr.js +73 -0
  3068. package/dist/agent/scm/pr.js.map +1 -0
  3069. package/dist/agent/scm/provider.d.ts +13 -0
  3070. package/dist/agent/scm/provider.d.ts.map +1 -0
  3071. package/dist/agent/scm/provider.js +39 -0
  3072. package/dist/agent/scm/provider.js.map +1 -0
  3073. package/dist/agent/scm/refs.d.ts +65 -0
  3074. package/dist/agent/scm/refs.d.ts.map +1 -0
  3075. package/dist/agent/scm/refs.js +89 -0
  3076. package/dist/agent/scm/refs.js.map +1 -0
  3077. package/dist/agent/scm/repo-skills.d.ts +69 -0
  3078. package/dist/agent/scm/repo-skills.d.ts.map +1 -0
  3079. package/dist/agent/scm/repo-skills.js +170 -0
  3080. package/dist/agent/scm/repo-skills.js.map +1 -0
  3081. package/dist/agent/scm/types.d.ts +40 -0
  3082. package/dist/agent/scm/types.d.ts.map +1 -0
  3083. package/dist/agent/scm/types.js +9 -0
  3084. package/dist/agent/scm/types.js.map +1 -0
  3085. package/dist/agent/scm/write-token.d.ts +10 -0
  3086. package/dist/agent/scm/write-token.d.ts.map +1 -0
  3087. package/dist/agent/scm/write-token.js +40 -0
  3088. package/dist/agent/scm/write-token.js.map +1 -0
  3089. package/dist/agent/settings/settings.d.ts +935 -0
  3090. package/dist/agent/settings/settings.d.ts.map +1 -0
  3091. package/dist/agent/settings/settings.js +1104 -0
  3092. package/dist/agent/settings/settings.js.map +1 -0
  3093. package/dist/agent/skills/domain-skills.d.ts +61 -0
  3094. package/dist/agent/skills/domain-skills.d.ts.map +1 -0
  3095. package/dist/agent/skills/domain-skills.js +174 -0
  3096. package/dist/agent/skills/domain-skills.js.map +1 -0
  3097. package/dist/agent/skills/scoped.d.ts +21 -0
  3098. package/dist/agent/skills/scoped.d.ts.map +1 -0
  3099. package/dist/agent/skills/scoped.js +152 -0
  3100. package/dist/agent/skills/scoped.js.map +1 -0
  3101. package/dist/agent/spend/bypass.d.ts +30 -0
  3102. package/dist/agent/spend/bypass.d.ts.map +1 -0
  3103. package/dist/agent/spend/bypass.js +117 -0
  3104. package/dist/agent/spend/bypass.js.map +1 -0
  3105. package/dist/agent/spend/caps.d.ts +173 -0
  3106. package/dist/agent/spend/caps.d.ts.map +1 -0
  3107. package/dist/agent/spend/caps.js +323 -0
  3108. package/dist/agent/spend/caps.js.map +1 -0
  3109. package/dist/agent/spend/check.d.ts +54 -0
  3110. package/dist/agent/spend/check.d.ts.map +1 -0
  3111. package/dist/agent/spend/check.js +157 -0
  3112. package/dist/agent/spend/check.js.map +1 -0
  3113. package/dist/agent/spend/checkpoint.d.ts +158 -0
  3114. package/dist/agent/spend/checkpoint.d.ts.map +1 -0
  3115. package/dist/agent/spend/checkpoint.js +559 -0
  3116. package/dist/agent/spend/checkpoint.js.map +1 -0
  3117. package/dist/agent/spend/dm-mask.d.ts +61 -0
  3118. package/dist/agent/spend/dm-mask.d.ts.map +1 -0
  3119. package/dist/agent/spend/dm-mask.js +113 -0
  3120. package/dist/agent/spend/dm-mask.js.map +1 -0
  3121. package/dist/agent/spend/ingress-gate.d.ts +143 -0
  3122. package/dist/agent/spend/ingress-gate.d.ts.map +1 -0
  3123. package/dist/agent/spend/ingress-gate.js +217 -0
  3124. package/dist/agent/spend/ingress-gate.js.map +1 -0
  3125. package/dist/agent/spend/pricing.d.ts +251 -0
  3126. package/dist/agent/spend/pricing.d.ts.map +1 -0
  3127. package/dist/agent/spend/pricing.js +454 -0
  3128. package/dist/agent/spend/pricing.js.map +1 -0
  3129. package/dist/agent/spend/reporting.d.ts +313 -0
  3130. package/dist/agent/spend/reporting.d.ts.map +1 -0
  3131. package/dist/agent/spend/reporting.js +674 -0
  3132. package/dist/agent/spend/reporting.js.map +1 -0
  3133. package/dist/agent/spend/sandbox-pricing.d.ts +19 -0
  3134. package/dist/agent/spend/sandbox-pricing.d.ts.map +1 -0
  3135. package/dist/agent/spend/sandbox-pricing.js +50 -0
  3136. package/dist/agent/spend/sandbox-pricing.js.map +1 -0
  3137. package/dist/agent/spend/spend.d.ts +283 -0
  3138. package/dist/agent/spend/spend.d.ts.map +1 -0
  3139. package/dist/agent/spend/spend.js +255 -0
  3140. package/dist/agent/spend/spend.js.map +1 -0
  3141. package/dist/agent/spend/stack-pricing.d.ts +94 -0
  3142. package/dist/agent/spend/stack-pricing.d.ts.map +1 -0
  3143. package/dist/agent/spend/stack-pricing.js +123 -0
  3144. package/dist/agent/spend/stack-pricing.js.map +1 -0
  3145. package/dist/agent/spend/store.d.ts +139 -0
  3146. package/dist/agent/spend/store.d.ts.map +1 -0
  3147. package/dist/agent/spend/store.js +180 -0
  3148. package/dist/agent/spend/store.js.map +1 -0
  3149. package/dist/agent/spend/subagent-runs.d.ts +79 -0
  3150. package/dist/agent/spend/subagent-runs.d.ts.map +1 -0
  3151. package/dist/agent/spend/subagent-runs.js +124 -0
  3152. package/dist/agent/spend/subagent-runs.js.map +1 -0
  3153. package/dist/agent/spend/usage-events.d.ts +79 -0
  3154. package/dist/agent/spend/usage-events.d.ts.map +1 -0
  3155. package/dist/agent/spend/usage-events.js +132 -0
  3156. package/dist/agent/spend/usage-events.js.map +1 -0
  3157. package/dist/agent/stall/bash-hang-guard.d.ts +133 -0
  3158. package/dist/agent/stall/bash-hang-guard.d.ts.map +1 -0
  3159. package/dist/agent/stall/bash-hang-guard.js +303 -0
  3160. package/dist/agent/stall/bash-hang-guard.js.map +1 -0
  3161. package/dist/agent/stall/guard.d.ts +68 -0
  3162. package/dist/agent/stall/guard.d.ts.map +1 -0
  3163. package/dist/agent/stall/guard.js +248 -0
  3164. package/dist/agent/stall/guard.js.map +1 -0
  3165. package/dist/agent/status/status.d.ts +32 -0
  3166. package/dist/agent/status/status.d.ts.map +1 -0
  3167. package/dist/agent/status/status.js +116 -0
  3168. package/dist/agent/status/status.js.map +1 -0
  3169. package/dist/agent/subagents/contracts.d.ts +82 -0
  3170. package/dist/agent/subagents/contracts.d.ts.map +1 -0
  3171. package/dist/agent/subagents/contracts.js +114 -0
  3172. package/dist/agent/subagents/contracts.js.map +1 -0
  3173. package/dist/agent/subagents/declared.d.ts +44 -0
  3174. package/dist/agent/subagents/declared.d.ts.map +1 -0
  3175. package/dist/agent/subagents/declared.js +152 -0
  3176. package/dist/agent/subagents/declared.js.map +1 -0
  3177. package/dist/agent/testing/driver-allowlist.d.ts +103 -0
  3178. package/dist/agent/testing/driver-allowlist.d.ts.map +1 -0
  3179. package/dist/agent/testing/driver-allowlist.js +193 -0
  3180. package/dist/agent/testing/driver-allowlist.js.map +1 -0
  3181. package/dist/agent/tools/add_label.d.ts +52 -0
  3182. package/dist/agent/tools/add_label.d.ts.map +1 -0
  3183. package/dist/agent/tools/add_label.js +63 -0
  3184. package/dist/agent/tools/add_label.js.map +1 -0
  3185. package/dist/agent/tools/add_routine_rule.d.ts +38 -0
  3186. package/dist/agent/tools/add_routine_rule.d.ts.map +1 -0
  3187. package/dist/agent/tools/add_routine_rule.js +182 -0
  3188. package/dist/agent/tools/add_routine_rule.js.map +1 -0
  3189. package/dist/agent/tools/agent_version.d.ts +17 -0
  3190. package/dist/agent/tools/agent_version.d.ts.map +1 -0
  3191. package/dist/agent/tools/agent_version.js +38 -0
  3192. package/dist/agent/tools/agent_version.js.map +1 -0
  3193. package/dist/agent/tools/assign.d.ts +74 -0
  3194. package/dist/agent/tools/assign.d.ts.map +1 -0
  3195. package/dist/agent/tools/assign.js +167 -0
  3196. package/dist/agent/tools/assign.js.map +1 -0
  3197. package/dist/agent/tools/aws.d.ts +33 -0
  3198. package/dist/agent/tools/aws.d.ts.map +1 -0
  3199. package/dist/agent/tools/aws.js +164 -0
  3200. package/dist/agent/tools/aws.js.map +1 -0
  3201. package/dist/agent/tools/browser_tools.d.ts +3 -0
  3202. package/dist/agent/tools/browser_tools.d.ts.map +1 -0
  3203. package/dist/agent/tools/browser_tools.js +21 -0
  3204. package/dist/agent/tools/browser_tools.js.map +1 -0
  3205. package/dist/agent/tools/cancel_routine.d.ts +27 -0
  3206. package/dist/agent/tools/cancel_routine.d.ts.map +1 -0
  3207. package/dist/agent/tools/cancel_routine.js +123 -0
  3208. package/dist/agent/tools/cancel_routine.js.map +1 -0
  3209. package/dist/agent/tools/capture_events.d.ts +17 -0
  3210. package/dist/agent/tools/capture_events.d.ts.map +1 -0
  3211. package/dist/agent/tools/capture_events.js +51 -0
  3212. package/dist/agent/tools/capture_events.js.map +1 -0
  3213. package/dist/agent/tools/check_pr_status.d.ts +52 -0
  3214. package/dist/agent/tools/check_pr_status.d.ts.map +1 -0
  3215. package/dist/agent/tools/check_pr_status.js +66 -0
  3216. package/dist/agent/tools/check_pr_status.js.map +1 -0
  3217. package/dist/agent/tools/checkout_repo.d.ts +3 -0
  3218. package/dist/agent/tools/checkout_repo.d.ts.map +1 -0
  3219. package/dist/agent/tools/checkout_repo.js +158 -0
  3220. package/dist/agent/tools/checkout_repo.js.map +1 -0
  3221. package/dist/agent/tools/clear_connector_override.d.ts +48 -0
  3222. package/dist/agent/tools/clear_connector_override.d.ts.map +1 -0
  3223. package/dist/agent/tools/clear_connector_override.js +134 -0
  3224. package/dist/agent/tools/clear_connector_override.js.map +1 -0
  3225. package/dist/agent/tools/clear_spend_limit.d.ts +51 -0
  3226. package/dist/agent/tools/clear_spend_limit.d.ts.map +1 -0
  3227. package/dist/agent/tools/clear_spend_limit.js +162 -0
  3228. package/dist/agent/tools/clear_spend_limit.js.map +1 -0
  3229. package/dist/agent/tools/complete_job.d.ts +15 -0
  3230. package/dist/agent/tools/complete_job.d.ts.map +1 -0
  3231. package/dist/agent/tools/complete_job.js +59 -0
  3232. package/dist/agent/tools/complete_job.js.map +1 -0
  3233. package/dist/agent/tools/complete_thread.d.ts +8 -0
  3234. package/dist/agent/tools/complete_thread.d.ts.map +1 -0
  3235. package/dist/agent/tools/complete_thread.js +125 -0
  3236. package/dist/agent/tools/complete_thread.js.map +1 -0
  3237. package/dist/agent/tools/confirm_link.d.ts +84 -0
  3238. package/dist/agent/tools/confirm_link.d.ts.map +1 -0
  3239. package/dist/agent/tools/confirm_link.js +437 -0
  3240. package/dist/agent/tools/confirm_link.js.map +1 -0
  3241. package/dist/agent/tools/connector.d.ts +34 -0
  3242. package/dist/agent/tools/connector.d.ts.map +1 -0
  3243. package/dist/agent/tools/connector.js +212 -0
  3244. package/dist/agent/tools/connector.js.map +1 -0
  3245. package/dist/agent/tools/create_agent.d.ts +77 -0
  3246. package/dist/agent/tools/create_agent.d.ts.map +1 -0
  3247. package/dist/agent/tools/create_agent.js +261 -0
  3248. package/dist/agent/tools/create_agent.js.map +1 -0
  3249. package/dist/agent/tools/create_routine.d.ts +95 -0
  3250. package/dist/agent/tools/create_routine.d.ts.map +1 -0
  3251. package/dist/agent/tools/create_routine.js +437 -0
  3252. package/dist/agent/tools/create_routine.js.map +1 -0
  3253. package/dist/agent/tools/create_skill.d.ts +3 -0
  3254. package/dist/agent/tools/create_skill.d.ts.map +1 -0
  3255. package/dist/agent/tools/create_skill.js +157 -0
  3256. package/dist/agent/tools/create_skill.js.map +1 -0
  3257. package/dist/agent/tools/create_ticket.d.ts +70 -0
  3258. package/dist/agent/tools/create_ticket.d.ts.map +1 -0
  3259. package/dist/agent/tools/create_ticket.js +171 -0
  3260. package/dist/agent/tools/create_ticket.js.map +1 -0
  3261. package/dist/agent/tools/declare_webhook.d.ts +70 -0
  3262. package/dist/agent/tools/declare_webhook.d.ts.map +1 -0
  3263. package/dist/agent/tools/declare_webhook.js +321 -0
  3264. package/dist/agent/tools/declare_webhook.js.map +1 -0
  3265. package/dist/agent/tools/delete_skill.d.ts +3 -0
  3266. package/dist/agent/tools/delete_skill.d.ts.map +1 -0
  3267. package/dist/agent/tools/delete_skill.js +125 -0
  3268. package/dist/agent/tools/delete_skill.js.map +1 -0
  3269. package/dist/agent/tools/describe_image.d.ts +72 -0
  3270. package/dist/agent/tools/describe_image.d.ts.map +1 -0
  3271. package/dist/agent/tools/describe_image.js +269 -0
  3272. package/dist/agent/tools/describe_image.js.map +1 -0
  3273. package/dist/agent/tools/dm_person.d.ts +43 -0
  3274. package/dist/agent/tools/dm_person.d.ts.map +1 -0
  3275. package/dist/agent/tools/dm_person.js +190 -0
  3276. package/dist/agent/tools/dm_person.js.map +1 -0
  3277. package/dist/agent/tools/edit_reply.d.ts +56 -0
  3278. package/dist/agent/tools/edit_reply.d.ts.map +1 -0
  3279. package/dist/agent/tools/edit_reply.js +169 -0
  3280. package/dist/agent/tools/edit_reply.js.map +1 -0
  3281. package/dist/agent/tools/edit_routine.d.ts +32 -0
  3282. package/dist/agent/tools/edit_routine.d.ts.map +1 -0
  3283. package/dist/agent/tools/edit_routine.js +143 -0
  3284. package/dist/agent/tools/edit_routine.js.map +1 -0
  3285. package/dist/agent/tools/enable_routine.d.ts +30 -0
  3286. package/dist/agent/tools/enable_routine.d.ts.map +1 -0
  3287. package/dist/agent/tools/enable_routine.js +148 -0
  3288. package/dist/agent/tools/enable_routine.js.map +1 -0
  3289. package/dist/agent/tools/explain_permission.d.ts +27 -0
  3290. package/dist/agent/tools/explain_permission.d.ts.map +1 -0
  3291. package/dist/agent/tools/explain_permission.js +51 -0
  3292. package/dist/agent/tools/explain_permission.js.map +1 -0
  3293. package/dist/agent/tools/get_pr_feedback.d.ts +184 -0
  3294. package/dist/agent/tools/get_pr_feedback.d.ts.map +1 -0
  3295. package/dist/agent/tools/get_pr_feedback.js +77 -0
  3296. package/dist/agent/tools/get_pr_feedback.js.map +1 -0
  3297. package/dist/agent/tools/grant_tools.d.ts +27 -0
  3298. package/dist/agent/tools/grant_tools.d.ts.map +1 -0
  3299. package/dist/agent/tools/grant_tools.js +417 -0
  3300. package/dist/agent/tools/grant_tools.js.map +1 -0
  3301. package/dist/agent/tools/halt.d.ts +71 -0
  3302. package/dist/agent/tools/halt.d.ts.map +1 -0
  3303. package/dist/agent/tools/halt.js +157 -0
  3304. package/dist/agent/tools/halt.js.map +1 -0
  3305. package/dist/agent/tools/link_identity.d.ts +48 -0
  3306. package/dist/agent/tools/link_identity.d.ts.map +1 -0
  3307. package/dist/agent/tools/link_identity.js +283 -0
  3308. package/dist/agent/tools/link_identity.js.map +1 -0
  3309. package/dist/agent/tools/list_recent_events.d.ts +19 -0
  3310. package/dist/agent/tools/list_recent_events.d.ts.map +1 -0
  3311. package/dist/agent/tools/list_recent_events.js +55 -0
  3312. package/dist/agent/tools/list_recent_events.js.map +1 -0
  3313. package/dist/agent/tools/list_repos.d.ts +11 -0
  3314. package/dist/agent/tools/list_repos.d.ts.map +1 -0
  3315. package/dist/agent/tools/list_repos.js +22 -0
  3316. package/dist/agent/tools/list_repos.js.map +1 -0
  3317. package/dist/agent/tools/list_routines.d.ts +88 -0
  3318. package/dist/agent/tools/list_routines.d.ts.map +1 -0
  3319. package/dist/agent/tools/list_routines.js +143 -0
  3320. package/dist/agent/tools/list_routines.js.map +1 -0
  3321. package/dist/agent/tools/list_skills.d.ts +21 -0
  3322. package/dist/agent/tools/list_skills.d.ts.map +1 -0
  3323. package/dist/agent/tools/list_skills.js +34 -0
  3324. package/dist/agent/tools/list_skills.js.map +1 -0
  3325. package/dist/agent/tools/list_webhooks.d.ts +27 -0
  3326. package/dist/agent/tools/list_webhooks.d.ts.map +1 -0
  3327. package/dist/agent/tools/list_webhooks.js +66 -0
  3328. package/dist/agent/tools/list_webhooks.js.map +1 -0
  3329. package/dist/agent/tools/memory_admin_list.d.ts +10 -0
  3330. package/dist/agent/tools/memory_admin_list.d.ts.map +1 -0
  3331. package/dist/agent/tools/memory_admin_list.js +72 -0
  3332. package/dist/agent/tools/memory_admin_list.js.map +1 -0
  3333. package/dist/agent/tools/memory_admin_read.d.ts +17 -0
  3334. package/dist/agent/tools/memory_admin_read.d.ts.map +1 -0
  3335. package/dist/agent/tools/memory_admin_read.js +85 -0
  3336. package/dist/agent/tools/memory_admin_read.js.map +1 -0
  3337. package/dist/agent/tools/message_thread_seat.d.ts +7 -0
  3338. package/dist/agent/tools/message_thread_seat.d.ts.map +1 -0
  3339. package/dist/agent/tools/message_thread_seat.js +133 -0
  3340. package/dist/agent/tools/message_thread_seat.js.map +1 -0
  3341. package/dist/agent/tools/no_reply.d.ts +31 -0
  3342. package/dist/agent/tools/no_reply.d.ts.map +1 -0
  3343. package/dist/agent/tools/no_reply.js +251 -0
  3344. package/dist/agent/tools/no_reply.js.map +1 -0
  3345. package/dist/agent/tools/open_pull_request.d.ts +23 -0
  3346. package/dist/agent/tools/open_pull_request.d.ts.map +1 -0
  3347. package/dist/agent/tools/open_pull_request.js +323 -0
  3348. package/dist/agent/tools/open_pull_request.js.map +1 -0
  3349. package/dist/agent/tools/permission_fit_report.d.ts +63 -0
  3350. package/dist/agent/tools/permission_fit_report.d.ts.map +1 -0
  3351. package/dist/agent/tools/permission_fit_report.js +173 -0
  3352. package/dist/agent/tools/permission_fit_report.js.map +1 -0
  3353. package/dist/agent/tools/post_file.d.ts +7 -0
  3354. package/dist/agent/tools/post_file.d.ts.map +1 -0
  3355. package/dist/agent/tools/post_file.js +372 -0
  3356. package/dist/agent/tools/post_file.js.map +1 -0
  3357. package/dist/agent/tools/post_message.d.ts +32 -0
  3358. package/dist/agent/tools/post_message.d.ts.map +1 -0
  3359. package/dist/agent/tools/post_message.js +158 -0
  3360. package/dist/agent/tools/post_message.js.map +1 -0
  3361. package/dist/agent/tools/post_pr_walkthrough.d.ts +126 -0
  3362. package/dist/agent/tools/post_pr_walkthrough.d.ts.map +1 -0
  3363. package/dist/agent/tools/post_pr_walkthrough.js +200 -0
  3364. package/dist/agent/tools/post_pr_walkthrough.js.map +1 -0
  3365. package/dist/agent/tools/purge_memory.d.ts +105 -0
  3366. package/dist/agent/tools/purge_memory.d.ts.map +1 -0
  3367. package/dist/agent/tools/purge_memory.js +271 -0
  3368. package/dist/agent/tools/purge_memory.js.map +1 -0
  3369. package/dist/agent/tools/query_analytics.d.ts +59 -0
  3370. package/dist/agent/tools/query_analytics.d.ts.map +1 -0
  3371. package/dist/agent/tools/query_analytics.js +80 -0
  3372. package/dist/agent/tools/query_analytics.js.map +1 -0
  3373. package/dist/agent/tools/react.d.ts +23 -0
  3374. package/dist/agent/tools/react.d.ts.map +1 -0
  3375. package/dist/agent/tools/react.js +185 -0
  3376. package/dist/agent/tools/react.js.map +1 -0
  3377. package/dist/agent/tools/read_channel.d.ts +28 -0
  3378. package/dist/agent/tools/read_channel.d.ts.map +1 -0
  3379. package/dist/agent/tools/read_channel.js +118 -0
  3380. package/dist/agent/tools/read_channel.js.map +1 -0
  3381. package/dist/agent/tools/read_docs.d.ts +27 -0
  3382. package/dist/agent/tools/read_docs.d.ts.map +1 -0
  3383. package/dist/agent/tools/read_docs.js +43 -0
  3384. package/dist/agent/tools/read_docs.js.map +1 -0
  3385. package/dist/agent/tools/read_file_upload.d.ts +32 -0
  3386. package/dist/agent/tools/read_file_upload.d.ts.map +1 -0
  3387. package/dist/agent/tools/read_file_upload.js +175 -0
  3388. package/dist/agent/tools/read_file_upload.js.map +1 -0
  3389. package/dist/agent/tools/read_routine_transcript.d.ts +31 -0
  3390. package/dist/agent/tools/read_routine_transcript.d.ts.map +1 -0
  3391. package/dist/agent/tools/read_routine_transcript.js +79 -0
  3392. package/dist/agent/tools/read_routine_transcript.js.map +1 -0
  3393. package/dist/agent/tools/read_thread.d.ts +29 -0
  3394. package/dist/agent/tools/read_thread.d.ts.map +1 -0
  3395. package/dist/agent/tools/read_thread.js +100 -0
  3396. package/dist/agent/tools/read_thread.js.map +1 -0
  3397. package/dist/agent/tools/read_thread_seat.d.ts +7 -0
  3398. package/dist/agent/tools/read_thread_seat.d.ts.map +1 -0
  3399. package/dist/agent/tools/read_thread_seat.js +84 -0
  3400. package/dist/agent/tools/read_thread_seat.js.map +1 -0
  3401. package/dist/agent/tools/read_webhook_history.d.ts +17 -0
  3402. package/dist/agent/tools/read_webhook_history.d.ts.map +1 -0
  3403. package/dist/agent/tools/read_webhook_history.js +45 -0
  3404. package/dist/agent/tools/read_webhook_history.js.map +1 -0
  3405. package/dist/agent/tools/read_work_channel.d.ts +26 -0
  3406. package/dist/agent/tools/read_work_channel.d.ts.map +1 -0
  3407. package/dist/agent/tools/read_work_channel.js +108 -0
  3408. package/dist/agent/tools/read_work_channel.js.map +1 -0
  3409. package/dist/agent/tools/read_work_thread.d.ts +27 -0
  3410. package/dist/agent/tools/read_work_thread.d.ts.map +1 -0
  3411. package/dist/agent/tools/read_work_thread.js +89 -0
  3412. package/dist/agent/tools/read_work_thread.js.map +1 -0
  3413. package/dist/agent/tools/record_follow_up.d.ts +19 -0
  3414. package/dist/agent/tools/record_follow_up.d.ts.map +1 -0
  3415. package/dist/agent/tools/record_follow_up.js +74 -0
  3416. package/dist/agent/tools/record_follow_up.js.map +1 -0
  3417. package/dist/agent/tools/record_job_state.d.ts +15 -0
  3418. package/dist/agent/tools/record_job_state.d.ts.map +1 -0
  3419. package/dist/agent/tools/record_job_state.js +47 -0
  3420. package/dist/agent/tools/record_job_state.js.map +1 -0
  3421. package/dist/agent/tools/record_watch_state.d.ts +15 -0
  3422. package/dist/agent/tools/record_watch_state.d.ts.map +1 -0
  3423. package/dist/agent/tools/record_watch_state.js +45 -0
  3424. package/dist/agent/tools/record_watch_state.js.map +1 -0
  3425. package/dist/agent/tools/remove_routine_rule.d.ts +32 -0
  3426. package/dist/agent/tools/remove_routine_rule.d.ts.map +1 -0
  3427. package/dist/agent/tools/remove_routine_rule.js +142 -0
  3428. package/dist/agent/tools/remove_routine_rule.js.map +1 -0
  3429. package/dist/agent/tools/reply.d.ts +73 -0
  3430. package/dist/agent/tools/reply.d.ts.map +1 -0
  3431. package/dist/agent/tools/reply.js +664 -0
  3432. package/dist/agent/tools/reply.js.map +1 -0
  3433. package/dist/agent/tools/report_run_failed.d.ts +17 -0
  3434. package/dist/agent/tools/report_run_failed.d.ts.map +1 -0
  3435. package/dist/agent/tools/report_run_failed.js +71 -0
  3436. package/dist/agent/tools/report_run_failed.js.map +1 -0
  3437. package/dist/agent/tools/request_access.d.ts +118 -0
  3438. package/dist/agent/tools/request_access.d.ts.map +1 -0
  3439. package/dist/agent/tools/request_access.js +408 -0
  3440. package/dist/agent/tools/request_access.js.map +1 -0
  3441. package/dist/agent/tools/request_credential_grant.d.ts +101 -0
  3442. package/dist/agent/tools/request_credential_grant.d.ts.map +1 -0
  3443. package/dist/agent/tools/request_credential_grant.js +525 -0
  3444. package/dist/agent/tools/request_credential_grant.js.map +1 -0
  3445. package/dist/agent/tools/resume.d.ts +27 -0
  3446. package/dist/agent/tools/resume.d.ts.map +1 -0
  3447. package/dist/agent/tools/resume.js +137 -0
  3448. package/dist/agent/tools/resume.js.map +1 -0
  3449. package/dist/agent/tools/revoke_connector.d.ts +52 -0
  3450. package/dist/agent/tools/revoke_connector.d.ts.map +1 -0
  3451. package/dist/agent/tools/revoke_connector.js +129 -0
  3452. package/dist/agent/tools/revoke_connector.js.map +1 -0
  3453. package/dist/agent/tools/revoke_credential_grant.d.ts +12 -0
  3454. package/dist/agent/tools/revoke_credential_grant.d.ts.map +1 -0
  3455. package/dist/agent/tools/revoke_credential_grant.js +97 -0
  3456. package/dist/agent/tools/revoke_credential_grant.js.map +1 -0
  3457. package/dist/agent/tools/revoke_routine_permissions.d.ts +21 -0
  3458. package/dist/agent/tools/revoke_routine_permissions.d.ts.map +1 -0
  3459. package/dist/agent/tools/revoke_routine_permissions.js +72 -0
  3460. package/dist/agent/tools/revoke_routine_permissions.js.map +1 -0
  3461. package/dist/agent/tools/rotate_webhook.d.ts +37 -0
  3462. package/dist/agent/tools/rotate_webhook.d.ts.map +1 -0
  3463. package/dist/agent/tools/rotate_webhook.js +170 -0
  3464. package/dist/agent/tools/rotate_webhook.js.map +1 -0
  3465. package/dist/agent/tools/run_routine_now.d.ts +23 -0
  3466. package/dist/agent/tools/run_routine_now.d.ts.map +1 -0
  3467. package/dist/agent/tools/run_routine_now.js +106 -0
  3468. package/dist/agent/tools/run_routine_now.js.map +1 -0
  3469. package/dist/agent/tools/sandbox_tools.d.ts +11 -0
  3470. package/dist/agent/tools/sandbox_tools.d.ts.map +1 -0
  3471. package/dist/agent/tools/sandbox_tools.js +75 -0
  3472. package/dist/agent/tools/sandbox_tools.js.map +1 -0
  3473. package/dist/agent/tools/search.d.ts +65 -0
  3474. package/dist/agent/tools/search.d.ts.map +1 -0
  3475. package/dist/agent/tools/search.js +114 -0
  3476. package/dist/agent/tools/search.js.map +1 -0
  3477. package/dist/agent/tools/session_cost.d.ts +39 -0
  3478. package/dist/agent/tools/session_cost.d.ts.map +1 -0
  3479. package/dist/agent/tools/session_cost.js +124 -0
  3480. package/dist/agent/tools/session_cost.js.map +1 -0
  3481. package/dist/agent/tools/set_dm_delivery.d.ts +23 -0
  3482. package/dist/agent/tools/set_dm_delivery.d.ts.map +1 -0
  3483. package/dist/agent/tools/set_dm_delivery.js +106 -0
  3484. package/dist/agent/tools/set_dm_delivery.js.map +1 -0
  3485. package/dist/agent/tools/set_spend_limit.d.ts +156 -0
  3486. package/dist/agent/tools/set_spend_limit.d.ts.map +1 -0
  3487. package/dist/agent/tools/set_spend_limit.js +437 -0
  3488. package/dist/agent/tools/set_spend_limit.js.map +1 -0
  3489. package/dist/agent/tools/set_state.d.ts +74 -0
  3490. package/dist/agent/tools/set_state.d.ts.map +1 -0
  3491. package/dist/agent/tools/set_state.js +166 -0
  3492. package/dist/agent/tools/set_state.js.map +1 -0
  3493. package/dist/agent/tools/spawn_thread_session.d.ts +9 -0
  3494. package/dist/agent/tools/spawn_thread_session.d.ts.map +1 -0
  3495. package/dist/agent/tools/spawn_thread_session.js +204 -0
  3496. package/dist/agent/tools/spawn_thread_session.js.map +1 -0
  3497. package/dist/agent/tools/spend_report.d.ts +180 -0
  3498. package/dist/agent/tools/spend_report.d.ts.map +1 -0
  3499. package/dist/agent/tools/spend_report.js +372 -0
  3500. package/dist/agent/tools/spend_report.js.map +1 -0
  3501. package/dist/agent/tools/stand_down.d.ts +91 -0
  3502. package/dist/agent/tools/stand_down.d.ts.map +1 -0
  3503. package/dist/agent/tools/stand_down.js +245 -0
  3504. package/dist/agent/tools/stand_down.js.map +1 -0
  3505. package/dist/agent/tools/subscribe_pr.d.ts +104 -0
  3506. package/dist/agent/tools/subscribe_pr.d.ts.map +1 -0
  3507. package/dist/agent/tools/subscribe_pr.js +213 -0
  3508. package/dist/agent/tools/subscribe_pr.js.map +1 -0
  3509. package/dist/agent/tools/unlink_identity.d.ts +19 -0
  3510. package/dist/agent/tools/unlink_identity.d.ts.map +1 -0
  3511. package/dist/agent/tools/unlink_identity.js +97 -0
  3512. package/dist/agent/tools/unlink_identity.js.map +1 -0
  3513. package/dist/agent/tools/update_status.d.ts +17 -0
  3514. package/dist/agent/tools/update_status.d.ts.map +1 -0
  3515. package/dist/agent/tools/update_status.js +59 -0
  3516. package/dist/agent/tools/update_status.js.map +1 -0
  3517. package/dist/agent/tools/usage_report.d.ts +59 -0
  3518. package/dist/agent/tools/usage_report.d.ts.map +1 -0
  3519. package/dist/agent/tools/usage_report.js +91 -0
  3520. package/dist/agent/tools/usage_report.js.map +1 -0
  3521. package/dist/agent/tools/walk_pr.d.ts +79 -0
  3522. package/dist/agent/tools/walk_pr.d.ts.map +1 -0
  3523. package/dist/agent/tools/walk_pr.js +133 -0
  3524. package/dist/agent/tools/walk_pr.js.map +1 -0
  3525. package/dist/agent/webhooks/achievability.d.ts +80 -0
  3526. package/dist/agent/webhooks/achievability.d.ts.map +1 -0
  3527. package/dist/agent/webhooks/achievability.js +216 -0
  3528. package/dist/agent/webhooks/achievability.js.map +1 -0
  3529. package/dist/agent/webhooks/capture-window.d.ts +86 -0
  3530. package/dist/agent/webhooks/capture-window.d.ts.map +1 -0
  3531. package/dist/agent/webhooks/capture-window.js +194 -0
  3532. package/dist/agent/webhooks/capture-window.js.map +1 -0
  3533. package/dist/agent/webhooks/config.d.ts +326 -0
  3534. package/dist/agent/webhooks/config.d.ts.map +1 -0
  3535. package/dist/agent/webhooks/config.js +280 -0
  3536. package/dist/agent/webhooks/config.js.map +1 -0
  3537. package/dist/agent/webhooks/dispatch.d.ts +103 -0
  3538. package/dist/agent/webhooks/dispatch.d.ts.map +1 -0
  3539. package/dist/agent/webhooks/dispatch.js +358 -0
  3540. package/dist/agent/webhooks/dispatch.js.map +1 -0
  3541. package/dist/agent/webhooks/gate.d.ts +128 -0
  3542. package/dist/agent/webhooks/gate.d.ts.map +1 -0
  3543. package/dist/agent/webhooks/gate.js +296 -0
  3544. package/dist/agent/webhooks/gate.js.map +1 -0
  3545. package/dist/agent/webhooks/handshake-capture.d.ts +66 -0
  3546. package/dist/agent/webhooks/handshake-capture.d.ts.map +1 -0
  3547. package/dist/agent/webhooks/handshake-capture.js +126 -0
  3548. package/dist/agent/webhooks/handshake-capture.js.map +1 -0
  3549. package/dist/agent/webhooks/hooks-codemod.d.ts +73 -0
  3550. package/dist/agent/webhooks/hooks-codemod.d.ts.map +1 -0
  3551. package/dist/agent/webhooks/hooks-codemod.js +231 -0
  3552. package/dist/agent/webhooks/hooks-codemod.js.map +1 -0
  3553. package/dist/agent/webhooks/oe-standard-webhook.d.ts +153 -0
  3554. package/dist/agent/webhooks/oe-standard-webhook.d.ts.map +1 -0
  3555. package/dist/agent/webhooks/oe-standard-webhook.js +498 -0
  3556. package/dist/agent/webhooks/oe-standard-webhook.js.map +1 -0
  3557. package/dist/agent/webhooks/reject-audit.d.ts +40 -0
  3558. package/dist/agent/webhooks/reject-audit.d.ts.map +1 -0
  3559. package/dist/agent/webhooks/reject-audit.js +99 -0
  3560. package/dist/agent/webhooks/reject-audit.js.map +1 -0
  3561. package/dist/agent/webhooks/replay-dedupe.d.ts +58 -0
  3562. package/dist/agent/webhooks/replay-dedupe.d.ts.map +1 -0
  3563. package/dist/agent/webhooks/replay-dedupe.js +159 -0
  3564. package/dist/agent/webhooks/replay-dedupe.js.map +1 -0
  3565. package/dist/agent/webhooks/reveal-page.d.ts +116 -0
  3566. package/dist/agent/webhooks/reveal-page.d.ts.map +1 -0
  3567. package/dist/agent/webhooks/reveal-page.js +443 -0
  3568. package/dist/agent/webhooks/reveal-page.js.map +1 -0
  3569. package/dist/agent/webhooks/secrets.d.ts +17 -0
  3570. package/dist/agent/webhooks/secrets.d.ts.map +1 -0
  3571. package/dist/agent/webhooks/secrets.js +73 -0
  3572. package/dist/agent/webhooks/secrets.js.map +1 -0
  3573. package/dist/agent/webhooks/source-vocabulary.d.ts +131 -0
  3574. package/dist/agent/webhooks/source-vocabulary.d.ts.map +1 -0
  3575. package/dist/agent/webhooks/source-vocabulary.js +315 -0
  3576. package/dist/agent/webhooks/source-vocabulary.js.map +1 -0
  3577. package/dist/agent/webhooks/verifier.d.ts +251 -0
  3578. package/dist/agent/webhooks/verifier.d.ts.map +1 -0
  3579. package/dist/agent/webhooks/verifier.js +109 -0
  3580. package/dist/agent/webhooks/verifier.js.map +1 -0
  3581. package/dist/scripts/operator-store-connect.d.ts +86 -0
  3582. package/dist/scripts/operator-store-connect.d.ts.map +1 -0
  3583. package/dist/scripts/operator-store-connect.js +218 -0
  3584. package/dist/scripts/operator-store-connect.js.map +1 -0
  3585. package/package.json +3397 -0
  3586. package/patches/eve+0.54.3.patch +129 -0
  3587. package/scripts/eve-framework-tools.ts +367 -0
  3588. package/scripts/oe-cli.ts +293 -0
  3589. package/scripts/oe-secret.ts +278 -0
  3590. package/scripts/oe-wrap-untrusted.ts +63 -0
  3591. package/scripts/operator-store-connect.ts +246 -0
  3592. package/templates/subagents/fresh_eyes_review/agent.ts +37 -0
  3593. package/templates/subagents/fresh_eyes_review/hooks/spend.ts +16 -0
  3594. package/templates/subagents/fresh_eyes_review/instructions.md +52 -0
  3595. package/templates/subagents/fresh_eyes_review/tools/ask_question.ts +13 -0
  3596. package/templates/subagents/fresh_eyes_review/tools/bash.ts +13 -0
  3597. package/templates/subagents/fresh_eyes_review/tools/connection_search.ts +52 -0
  3598. package/templates/subagents/fresh_eyes_review/tools/load_skill.ts +13 -0
  3599. package/templates/subagents/fresh_eyes_review/tools/read_file.ts +13 -0
  3600. package/templates/subagents/fresh_eyes_review/tools/task_cancel.ts +20 -0
  3601. package/templates/subagents/fresh_eyes_review/tools/todo.ts +13 -0
  3602. package/templates/subagents/fresh_eyes_review/tools/web_fetch.ts +13 -0
  3603. package/templates/subagents/fresh_eyes_review/tools/web_search.ts +13 -0
  3604. package/templates/subagents/fresh_eyes_review/tools/write_file.ts +13 -0
  3605. package/tsconfig.build.json +24 -0
  3606. package/tsconfig.json +15 -0
@@ -0,0 +1,3170 @@
1
+ // The SQLite adapter behind the operational store seam: local and small self-host installs, on Node's built-in node:sqlite, sharing one DB file with the memory provider.
2
+ // Audit is append-only BY CONTRACT here — this module has no delete path — while Postgres enforces append-only at the DB layer.
3
+ import { mkdirSync } from "node:fs";
4
+ import { dirname, join } from "node:path";
5
+ import { DatabaseSync } from "node:sqlite";
6
+ // A VALUE import, deliberately: the assertions and the retention ceiling are ONE definition shared
7
+ // by both backends, so a bound cannot drift between two hand-copied SQL statements.
8
+ // (Webhook hooks are not stored here at all: OPE-224 left ONE config-declared class, so a hook's
9
+ // identity is whatever a merged PR says and uniqueness is a boot check, not an index.)
10
+ import { asSurfaceMode, auditSurfaceMode, auditReadOrg, likePrefixPattern, assertIngressDeliveryRetainUntil, assertSpendLimitAmount, assertDomainModelPick, assertHaltAddress, haltAddressColumns, haltAddressFromColumns, framePromoterId, promoterListField, proactiveAddressRow, routinePromptRevisionWrites, spendLedgerConjuncts, CAPTURE_MAX_RETENTION_MS, EVENT_DEDUPE_MAX_RETENTION_MS, PROMOTER_LIST_MAX } from "./store.js";
11
+ import { grantBorrowColumnsProblem, grantFrozenArgsDigest, grantJsonColumn, grantJsonFromColumn, grantRefundTurnOrdinal } from "./credential-grant-rows.js";
12
+ // Both prefixes are imported, never respelled, so the legacy-connector sweep's key prefix and kind prefix keep one spelling in the file that defines them.
13
+ import { CONNECTOR_OP_KIND_PREFIX, ROUTINE_PERMISSION_PREFIX } from "../approvals/session-grant.js";
14
+ import { SESSION_TAIL_MAX_ENTRIES } from "../channels/session-tail.js";
15
+ import { AUDIT_CHAIN_EPOCH_ACTION, auditEpochDetail, auditEpochSealFor, auditRowSha, withOrgAuditLock } from "../audit/chain.js";
16
+ import { assembleAnalyticsSql } from "../analytics/compile.js";
17
+ // Shares memory's DB-file convention so both land in one file; override with
18
+ // OE_SQLITE_PATH (memory + operational then share it — table names don't clash).
19
+ /** The resolved file, and WHETHER `OE_SQLITE_PATH` named it. The flag is what {@link getDb} needs:
20
+ * the fallback branch is derived from `OE_MEMORY_DIR`, else the process's cwd, and neither may
21
+ * displace a handle the env already pinned — so the guard pins against an `OE_MEMORY_DIR` change
22
+ * mid-process too, not only against a blocked `OE_SQLITE_PATH` read. */
23
+ function dbPath() {
24
+ if (process.env.OE_SQLITE_PATH)
25
+ return { path: process.env.OE_SQLITE_PATH, fromEnv: true };
26
+ const root = process.env.OE_MEMORY_DIR ?? join(process.cwd(), ".open-everywhere-memory");
27
+ return { path: join(root, "open-everywhere.sqlite3"), fromEnv: false };
28
+ }
29
+ let db = null;
30
+ let openedPath = null;
31
+ function getDb() {
32
+ const resolved = dbPath();
33
+ // 🔴 AN ABSENT `OE_SQLITE_PATH` NEVER MOVES AN OPEN HANDLE (OPE-1933). This function re-reads the
34
+ // env on EVERY call, so any scope that hides `process.env` turns the env read into `undefined` —
35
+ // and the fallback above then computes a DIFFERENT file from `process.cwd()`. The old code closed
36
+ // the open DB and reopened at that file, silently, mid-process: every row written afterwards
37
+ // landed in a store nothing would ever read again. just-bash's DefenseInDepthBox is one such
38
+ // scope (its ALS wraps `process.env` in a blocking Proxy), and a store call made inside it is all
39
+ // it takes. An absent env read is NOT an instruction to switch files, so it keeps the handle.
40
+ // A PRESENT value naming a different file still switches — that is an explicit instruction, not
41
+ // a guess — and a test that genuinely wants a different path uses `_resetOperationalDbForTest`.
42
+ if (db && !resolved.fromEnv)
43
+ return db;
44
+ const path = resolved.path;
45
+ if (db && openedPath !== path) {
46
+ db.close();
47
+ db = null;
48
+ }
49
+ if (db)
50
+ return db;
51
+ if (path !== ":memory:")
52
+ mkdirSync(dirname(path), { recursive: true });
53
+ const handle = new DatabaseSync(path);
54
+ // busy_timeout: WAL allows one writer; a second process (the integration tier reads/tampers the
55
+ // store through its own handle) would otherwise get an immediate SQLITE_BUSY instead of a retry.
56
+ handle.exec("PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 5000;");
57
+ // An old-shape spend_ledger is DROPPED and recreated, never migrated: cost_source sits in the primary key and SQLite cannot ALTER a key.
58
+ // The accepted cost is at most the current month's cap accounting; usd_micros_measured is the shape probe, because no old table can have it.
59
+ const spendCols = handle.prepare("SELECT name FROM pragma_table_info('spend_ledger')").all();
60
+ if (spendCols.length > 0 && !spendCols.some((c) => c.name === "usd_micros_measured"))
61
+ handle.exec("DROP TABLE spend_ledger");
62
+ // An existing identity_linked_ids crosses to the tenant-in-key shape by rename-create-copy-drop, and ITS ROWS ARE KEPT, unlike the spend_ledger case above.
63
+ // The index must be dropped FIRST: SQLite index names are schema-global, so a renamed table keeps the name the CREATE INDEX below needs.
64
+ const linkedIdCols = handle.prepare("SELECT name FROM pragma_table_info('identity_linked_ids')").all();
65
+ const needsLinkedIdTenantRebuild = linkedIdCols.length > 0 && !linkedIdCols.some((c) => c.name === "tenant");
66
+ if (needsLinkedIdTenantRebuild) {
67
+ handle.exec("DROP INDEX IF EXISTS identity_linked_ids_org_set; ALTER TABLE identity_linked_ids RENAME TO identity_linked_ids__pre_tenant;");
68
+ }
69
+ handle.exec(`
70
+ CREATE TABLE IF NOT EXISTS spend_ledger (
71
+ org_id TEXT NOT NULL,
72
+ surface_key TEXT NOT NULL,
73
+ principal_id TEXT NOT NULL DEFAULT '', -- '' = unattributed (PK columns can't be NULL)
74
+ routine_id TEXT NOT NULL DEFAULT '', -- '' = not a routine turn
75
+ model TEXT NOT NULL DEFAULT '', -- '' = no model (unstamped call; sandbox runtime)
76
+ period TEXT NOT NULL, -- "YYYY-MM"
77
+ -- OPE-1862 (mirrored in the ALTER list below): WHICH KIND OF CONVERSATION this row's spend
78
+ -- happened in — 'dm' | 'mpim' | 'channel', or '' when nothing stamped it. The anti-doxxing
79
+ -- mask reads THIS and never the shape of a surface id, so Discord and Teams DMs mask exactly
80
+ -- as Slack's do. Deliberately OUTSIDE the primary key: a surface's mode never changes, so
81
+ -- keying on it would split a month for nothing — and would force the table drop an additive
82
+ -- column avoids.
83
+ surface_mode TEXT NOT NULL DEFAULT '',
84
+ input_tokens INTEGER NOT NULL DEFAULT 0,
85
+ output_tokens INTEGER NOT NULL DEFAULT 0,
86
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
87
+ cache_write_tokens INTEGER NOT NULL DEFAULT 0,
88
+ -- OPE-1611 (mirrored in the ALTER list below): reasoning tokens, ATTRIBUTION only. No rate
89
+ -- table names a reasoning rate, so this never reaches usd_micros and no cap sees it.
90
+ reasoning_tokens INTEGER NOT NULL DEFAULT 0,
91
+ usd_micros INTEGER NOT NULL DEFAULT 0, -- millionths of a dollar, DERIVED at write from the rate table (what caps sum)
92
+ -- OPE-369: the GATEWAY's own billed figure for these same calls, when it published one.
93
+ -- 0 on a cost_source='derived' row. Never read by a cap — see store.ts's CostSource section.
94
+ usd_micros_measured INTEGER NOT NULL DEFAULT 0,
95
+ cost_source TEXT NOT NULL DEFAULT 'derived', -- 'measured' | 'derived'; in the PK so a row is homogeneous
96
+ calls INTEGER NOT NULL DEFAULT 0,
97
+ PRIMARY KEY (org_id, surface_key, principal_id, routine_id, model, period, cost_source)
98
+ );
99
+ -- OPE-1677: the PERIOD index the primary key cannot be. The bounded spend reads are shaped
100
+ -- "WHERE org_id = ? AND period ..." (spendLedgerConjuncts in store.ts). period is the SIXTH
101
+ -- primary-key column, and a btree bounds its scan only up to the first column the query
102
+ -- leaves unconstrained -- so the automatic primary-key index bounds on org_id, and everything
103
+ -- after it is a per-row test over every row the org ever wrote. This index puts period
104
+ -- second, which makes the range a plan-level narrowing rather than a transfer saving. It
105
+ -- matters most on the "/oe budget raise" domain scan, which answers a Discord interaction
106
+ -- inside 3 seconds. This statement is also the MIGRATION: the CREATE block runs on every
107
+ -- database open, so an existing file builds the index in place, with no drop-and-recreate.
108
+ CREATE INDEX IF NOT EXISTS spend_ledger_org_period ON spend_ledger (org_id, period);
109
+ CREATE TABLE IF NOT EXISTS routine (
110
+ org_id TEXT NOT NULL,
111
+ id TEXT NOT NULL,
112
+ surface_key TEXT NOT NULL,
113
+ data TEXT NOT NULL, -- JSON of the full Routine
114
+ PRIMARY KEY (org_id, id)
115
+ );
116
+ -- APPEND-ONLY prompt history for the mutable routine row (OPE-242). Written by
117
+ -- updateRoutine on a patch that REPLACES the prompt, never updated, never deleted, never
118
+ -- pruned — see RoutinePromptRevisionRow in store.ts for why a routine's prompt history is an
119
+ -- audit artefact (an edit revokes standing authority), why the log begins at the first EDIT
120
+ -- rather than at creation, and for the retention position. Append-only here is BY CONTRACT
121
+ -- only: sqlite has no RLS, so unlike Postgres (SELECT+INSERT policies under FORCE) nothing at
122
+ -- the engine stops a rewrite. Same caveat audit_entry carries on this deprecated backend,
123
+ -- stated rather than implied.
124
+ CREATE TABLE IF NOT EXISTS routine_prompt_revisions (
125
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
126
+ org_id TEXT NOT NULL,
127
+ surface_key TEXT NOT NULL,
128
+ routine_id TEXT NOT NULL,
129
+ prompt TEXT NOT NULL, -- the exact text the routine ran under
130
+ generation INTEGER, -- the promptGeneration it ran under (joins routinePermissionKey)
131
+ authored_by TEXT, -- createdBy on the genesis row, the edit's requestedBy after
132
+ armed_by TEXT, -- the approver whose click armed it (never on genesis)
133
+ approval_id TEXT, -- pending_actions.id of the card that armed it
134
+ recorded_at TEXT NOT NULL -- ISO-8601 (the routine's createdAt on the genesis row)
135
+ );
136
+ CREATE INDEX IF NOT EXISTS routine_prompt_revisions_org_surface_routine ON routine_prompt_revisions (org_id, surface_key, routine_id, seq);
137
+ CREATE TABLE IF NOT EXISTS audit_entry (
138
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
139
+ ts TEXT NOT NULL,
140
+ org_id TEXT NOT NULL,
141
+ platform TEXT NOT NULL,
142
+ workspace TEXT NOT NULL,
143
+ surface TEXT,
144
+ surface_mode TEXT, -- OPE-1866: the conversation the surface names; NULL = unclassified, which MASKS
145
+ principal_id TEXT,
146
+ action TEXT NOT NULL,
147
+ detail TEXT, -- JSON
148
+ prev_sha TEXT -- sha256 of the org's previous row (OPE-52 hash chain); NULL = genesis
149
+ );
150
+ CREATE INDEX IF NOT EXISTS audit_org_ts ON audit_entry (org_id, ts);
151
+ CREATE TABLE IF NOT EXISTS spend_limit (
152
+ org_id TEXT NOT NULL,
153
+ scope_key TEXT NOT NULL,
154
+ level TEXT NOT NULL, -- "surface" | "workspace" | "domain" | "user" (free-text, no CHECK — see store.ts CapLevel)
155
+ monthly_tokens INTEGER NOT NULL, -- -1 = no token component (legacy NOT NULL; see setSpendLimit)
156
+ monthly_usd REAL, -- NULL = no USD component
157
+ expires_at INTEGER, -- epoch ms; NULL = no auto-expiry
158
+ reason TEXT,
159
+ set_by TEXT,
160
+ PRIMARY KEY (org_id, scope_key, level)
161
+ );
162
+ CREATE TABLE IF NOT EXISTS halt (
163
+ org_id TEXT NOT NULL,
164
+ level TEXT NOT NULL, -- "" on an org-wide row: FILLER, never an address (store.ts haltAddressColumns)
165
+ scope_key TEXT NOT NULL, -- "" on an org-wide row, same reason
166
+ org_wide INTEGER NOT NULL, -- 1 = the org-wide MARKER; the column every match branches on first
167
+ active INTEGER NOT NULL, -- 1 = halted; a cleared row stays for the trail
168
+ set_by TEXT,
169
+ set_at TEXT NOT NULL, -- ISO-8601
170
+ set_ref TEXT, -- host wake owning a chat-set halt; NULL for operator/legacy rows
171
+ cleared_by TEXT,
172
+ cleared_at TEXT, -- ISO-8601; NULL until a resume clears it
173
+ PRIMARY KEY (org_id, level, scope_key, org_wide)
174
+ );
175
+ CREATE TABLE IF NOT EXISTS connector_override (
176
+ org_id TEXT NOT NULL,
177
+ scope_key TEXT NOT NULL,
178
+ connector TEXT NOT NULL,
179
+ granted INTEGER NOT NULL, -- 1 = grant, 0 = revoke
180
+ reason TEXT, -- no expires_at: auto-expiry would re-open access
181
+ set_by TEXT,
182
+ PRIMARY KEY (org_id, scope_key, connector)
183
+ );
184
+ CREATE TABLE IF NOT EXISTS thread_engagement (
185
+ org_id TEXT NOT NULL,
186
+ surface_key TEXT NOT NULL, -- platform/workspace/surface (the channel)
187
+ thread_ts TEXT NOT NULL,
188
+ engaged_at TEXT NOT NULL, -- ISO-8601, set once
189
+ last_turn_at TEXT NOT NULL, -- ISO-8601, refreshed each engaged turn
190
+ participating INTEGER NOT NULL DEFAULT 0, -- 1 = invited participant (replied/@mentioned); 0 = warm watcher
191
+ silent_streak INTEGER NOT NULL DEFAULT 0, -- consecutive silent woken turns since last engage/participation
192
+ stopped INTEGER NOT NULL DEFAULT 0, -- 1 = an explicit stop landed (task #100 window path); suppress non-mention wakes until re-invited
193
+ engaged_by TEXT, -- SEPARATOR-FRAMED list of the ids of events that PROMOTED this row, most recent last, bounded; a re-promotion from ANY id the list holds never clears stopped (store.ts PROMOTER_SEP)
194
+ PRIMARY KEY (org_id, surface_key, thread_ts)
195
+ );
196
+ CREATE TABLE IF NOT EXISTS channel_session (
197
+ org_id TEXT NOT NULL,
198
+ surface_key TEXT NOT NULL, -- the channel (platform/workspace/surface)
199
+ token TEXT NOT NULL, -- caller-minted continuation token for the CURRENT generation
200
+ generation INTEGER NOT NULL, -- 1 on first mint, +1 on every rotation
201
+ created_at TEXT NOT NULL, -- ISO-8601, reset on rotation
202
+ last_wake_at TEXT NOT NULL, -- ISO-8601, bumped by touchChannelSession, reset on rotation
203
+ turn_count INTEGER NOT NULL DEFAULT 0, -- bumped by touchChannelSession, reset to 0 on rotation (BACKSTOP trigger)
204
+ input_tokens_total INTEGER, -- measured cumulative input+cacheRead this generation (§2 #551); NULL = unknown ⇒ rotate
205
+ first_wake_at TEXT, -- ISO-8601 of the first delivered wake (H7c); NULL = none yet ⇒ still fresh
206
+ last_input_tokens INTEGER, -- OPE-794: measured input+cacheRead of the LATEST request (SET, not summed); NULL = none yet ⇒ rung skipped
207
+ rotate_marked_at TEXT, -- OPE-820: ISO-8601 an operator marked this generation for retirement; NULL = unmarked. Set ONLY by the ops sweep; cleared by every rotation
208
+ served_code_fingerprint TEXT, -- OPE-1821: the runtime CODE hash this seat was last served with; NULL = never stamped. Written ONLY by stampChannelSessionRuntime, and deliberately NOT reset by a rotation
209
+ served_domain_fingerprint TEXT, -- OPE-1821: the DOMAIN declaration hash this seat was last served with. Same writer, same NULL meaning — the pair moves together
210
+ PRIMARY KEY (org_id, surface_key)
211
+ );
212
+ -- session_tail (OPE-794): the standing-seat TAIL ring. One row per recorded conversational
213
+ -- event on ONE generation — the wake messages the deployment delivered and the posts the seat
214
+ -- made. The rotate leg reads the OUTGOING generation's rows and renders them into the fresh
215
+ -- generation's first wake. Keyed by the generation's live TOKEN, so a straggler write from a
216
+ -- retired generation files under the retired token and is simply never read again.
217
+ -- Bounded on write (channels/session-tail.ts SESSION_TAIL_MAX_ENTRIES) and dropped once carried.
218
+ CREATE TABLE IF NOT EXISTS session_tail (
219
+ org_id TEXT NOT NULL,
220
+ surface_key TEXT NOT NULL, -- the channel_session registry key this generation lives under
221
+ token TEXT NOT NULL, -- the generation's continuation token (the read + prune key)
222
+ seq INTEGER NOT NULL, -- insertion ordinal within the token; ties broken by the at column at render
223
+ at TEXT NOT NULL, -- ISO-8601 of the event (the ORDERING key the render sorts on)
224
+ entry_json TEXT NOT NULL, -- serialized SessionTailEntry (opaque to the store)
225
+ PRIMARY KEY (org_id, surface_key, token, seq)
226
+ );
227
+ CREATE TABLE IF NOT EXISTS event_dedupe (
228
+ org_id TEXT NOT NULL,
229
+ key TEXT NOT NULL, -- Slack event_id (or channel:ts fallback)
230
+ seen_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological)
231
+ PRIMARY KEY (org_id, key)
232
+ );
233
+ -- Durable provider inbox. The verified signer id is part of the immutable delivery identity;
234
+ -- payload_json contains a versioned provider envelope but never the raw signature or secret.
235
+ -- Pending rows have retain_until NULL and survive arbitrarily long outages. Completion erases
236
+ -- payload_json and starts the bounded tombstone clock in the SAME fenced UPDATE.
237
+ CREATE TABLE IF NOT EXISTS ingress_delivery (
238
+ org_id TEXT NOT NULL,
239
+ source TEXT NOT NULL,
240
+ authority_id TEXT NOT NULL,
241
+ delivery_id TEXT NOT NULL,
242
+ payload_json TEXT,
243
+ received_at TEXT NOT NULL,
244
+ available_at TEXT NOT NULL,
245
+ claim_id TEXT,
246
+ claimed_at TEXT,
247
+ completed_at TEXT,
248
+ retain_until TEXT,
249
+ PRIMARY KEY (org_id, source, authority_id, delivery_id)
250
+ );
251
+ CREATE INDEX IF NOT EXISTS ingress_delivery_due ON ingress_delivery (org_id, source, completed_at, available_at, claimed_at);
252
+ -- webhook_capture: the BOUNDED CAPTURE WINDOW (OPE-211 + OPE-184 Half 2). The only table here
253
+ -- that holds bytes an outside party authored — see webhooks/capture-window.ts for what the
254
+ -- document column is (the jq filter document, NOT the raw body) and why that is the safety
255
+ -- property rather than a redaction step. Mutable + self-pruning, like event_dedupe: rows are
256
+ -- swept on write and a whole window is cleared on re-arm. Never UPDATEd.
257
+ -- (No backticks in this block: it is inside a template literal and one would close it.)
258
+ CREATE TABLE IF NOT EXISTS webhook_capture (
259
+ org_id TEXT NOT NULL,
260
+ source TEXT NOT NULL, -- the hook HANDLE a routine subscribes to (= the declared id)
261
+ seq INTEGER NOT NULL, -- 1-based ordinal within the current window; the number a human says
262
+ captured_at TEXT NOT NULL, -- ISO-8601 receive time (OUR clock; prune key)
263
+ document TEXT NOT NULL, -- serialized EventFilterDocument (opaque to the store)
264
+ PRIMARY KEY (org_id, source, seq)
265
+ );
266
+ CREATE TABLE IF NOT EXISTS unified_wake_target (
267
+ org_id TEXT NOT NULL,
268
+ wake_id TEXT NOT NULL, -- host-minted per-wake id (rides the wake envelope)
269
+ target_json TEXT NOT NULL, -- serialized UnifiedWakeOrigin (opaque to the store)
270
+ created_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
271
+ window_token TEXT, -- OPE-161: the BARE window token dispatched to; NULL = legacy row (never answerable via the pending arm)
272
+ answered_at TEXT, -- OPE-161: ISO-8601 when a reply answered this wake; NULL = still pending
273
+ answered_turn_id TEXT, -- OPE-161: the turn that answered it (the same-turn re-accept key)
274
+ inbound INTEGER, -- OPE-767: 1 = this wake carries a real message from the room; NULL/0 = a wake the deployment minted for itself
275
+ audited_at TEXT, -- OPE-836: ISO-8601 when the turn-end wake-accounting audit considered this wake; NULL = not yet audited. Read ONLY by listUnauditedUnifiedWakes.
276
+ PRIMARY KEY (org_id, wake_id)
277
+ );
278
+ CREATE TABLE IF NOT EXISTS thread_ownership (
279
+ org_id TEXT NOT NULL,
280
+ channel_key TEXT NOT NULL, -- the container (unifiedThreadRef.channelKey)
281
+ thread_key TEXT NOT NULL, -- the thread within it (unifiedThreadRef.threadKey)
282
+ task_token TEXT NOT NULL, -- the owning task window token (embeds its generation)
283
+ created_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
284
+ PRIMARY KEY (org_id, channel_key, thread_key)
285
+ );
286
+ CREATE TABLE IF NOT EXISTS thread_seat_state (
287
+ org_id TEXT NOT NULL,
288
+ channel_key TEXT NOT NULL, -- the container (unifiedThreadRef.channelKey)
289
+ thread_key TEXT NOT NULL, -- the thread within it (unifiedThreadRef.threadKey)
290
+ seat_token TEXT NOT NULL, -- the thread seat's own window token
291
+ parent_key TEXT NOT NULL, -- the PARENT seat's channel_session registry key
292
+ state TEXT NOT NULL, -- 'open' | 'completed'
293
+ origin_json TEXT NOT NULL, -- the thread's own wake origin (UnifiedWakeOrigin JSON)
294
+ report TEXT, -- the seat's closing report, in its own words
295
+ opened_at TEXT NOT NULL, -- ISO-8601 of the spawn
296
+ updated_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
297
+ PRIMARY KEY (org_id, channel_key, thread_key)
298
+ );
299
+ CREATE TABLE IF NOT EXISTS turn_anchor (
300
+ org_id TEXT NOT NULL,
301
+ window_key TEXT NOT NULL, -- the continuation token / window this turn belongs to
302
+ anchor_key TEXT, -- "<platform>:<channelId>:<messageId>" where the surface knows it
303
+ channel_key TEXT, -- "<platform>:<channelId>" — the slash-command arm (NOT unique)
304
+ session_id TEXT NOT NULL, -- → attachSession(session_id)
305
+ turn_id TEXT NOT NULL, -- → cancel({turnId})
306
+ surface_key TEXT NOT NULL,
307
+ created_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
308
+ PRIMARY KEY (org_id, window_key)
309
+ );
310
+ -- An org-scoped, TTL-pruned, OPAQUE key-value scratch table. The NAME is historical (see the
311
+ -- store interface's note): minted for the deleted roll-own delegation regime, now shared by the
312
+ -- native-subagent taint markers, the question bridge and the task-wake join, each under its own
313
+ -- key prefix.
314
+ CREATE TABLE IF NOT EXISTS task_result (
315
+ org_id TEXT NOT NULL,
316
+ task_id TEXT NOT NULL, -- the consumer's own namespaced key
317
+ result_json TEXT NOT NULL, -- opaque to the store; each consumer owns its shape
318
+ created_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
319
+ PRIMARY KEY (org_id, task_id)
320
+ );
321
+ CREATE TABLE IF NOT EXISTS slack_attachment (
322
+ org_id TEXT NOT NULL,
323
+ file_id TEXT NOT NULL, -- Slack file id (the model-named ref; trusted-provenance key)
324
+ url_private TEXT NOT NULL, -- event-supplied url_private (opaque; never a model string)
325
+ mime_type TEXT, -- IANA media type from the event, when known
326
+ name TEXT, -- original filename, when known (extension fallback for the read path)
327
+ team_id TEXT, -- Slack team id, when known
328
+ created_at TEXT NOT NULL, -- ISO-8601 (lexicographic = chronological; TTL prune key)
329
+ PRIMARY KEY (org_id, file_id)
330
+ );
331
+ -- stored_credential (task #113): ciphertext store behind the "db" credential broker. NEVER
332
+ -- plaintext — ciphertext is an AES-256-GCM envelope, opaque here. Mutable (re-store replaces).
333
+ CREATE TABLE IF NOT EXISTS stored_credential (
334
+ org_id TEXT NOT NULL,
335
+ ref TEXT NOT NULL, -- unique lookup key, e.g. "db:notion-<domain>-key"
336
+ ciphertext TEXT NOT NULL, -- AES-256-GCM envelope (iv‖tag‖ct, base64); NEVER logged
337
+ connector TEXT, -- label only (audit/admin views), never the value
338
+ domain TEXT, -- label only
339
+ created_by TEXT NOT NULL, -- storing principal (the intake requester)
340
+ created_at TEXT NOT NULL, -- ISO-8601
341
+ PRIMARY KEY (org_id, ref)
342
+ );
343
+ -- credential_intake (task #113): the single-use, TTL'd binding a "Set API key" button carries.
344
+ -- Mutable; the ONE unused→used transition is CAS-guarded (WHERE used_at IS NULL). NEVER holds
345
+ -- the secret value — only where it goes (ref), who may store it (requested_by), and labels.
346
+ CREATE TABLE IF NOT EXISTS credential_intake (
347
+ org_id TEXT NOT NULL,
348
+ id TEXT NOT NULL, -- opaque intake id (embedded in the button action_id)
349
+ ref TEXT NOT NULL, -- the stored_credential ref the value is written under
350
+ connector TEXT NOT NULL, -- label shown in the modal
351
+ domain TEXT, -- label shown in the modal
352
+ requested_by TEXT NOT NULL, -- the ONLY principal permitted to open + submit
353
+ channel_id TEXT NOT NULL, -- where the button lives (wrong-clicker notice + confirm)
354
+ thread_ts TEXT,
355
+ created_at TEXT NOT NULL, -- ISO-8601
356
+ expires_at TEXT NOT NULL, -- ISO-8601 TTL bound (~15 min)
357
+ used_at TEXT, -- ISO-8601 when consumed; NULL = still open (single-use)
358
+ PRIMARY KEY (org_id, id)
359
+ );
360
+ -- webhook_capture_window (OPE-211, re-homed by OPE-224): the ONLY mutable state a DECLARED
361
+ -- webhook has -- when its capture window closes and who opened it. Keyed by (org_id, hook_id):
362
+ -- a hook id is unique within an org's config, unlike the deleted chat-created class's ids which
363
+ -- were globally-unique URL segments and therefore keyed on the bare id. Nothing here is secret
364
+ -- and nothing here is authority -- the hook's identity, posture and read grant are re-read from
365
+ -- the config registry at arm and at delivery time. See the postgres twin.
366
+ CREATE TABLE IF NOT EXISTS webhook_capture_window (
367
+ org_id TEXT NOT NULL,
368
+ hook_id TEXT NOT NULL, -- the DECLARED hook's id (= webhook_capture.source)
369
+ capture_until TEXT NOT NULL, -- ISO-8601, already clamped by the arming path
370
+ armed_by TEXT NOT NULL,
371
+ armed_at TEXT NOT NULL,
372
+ PRIMARY KEY (org_id, hook_id)
373
+ );
374
+ -- github_installation (scm/installations.ts): owner → installation id, learned from the App's own
375
+ -- signature-verified "installation" webhook so a new org installing the App self-registers instead
376
+ -- of needing an OE_GITHUB_INSTALLATIONS env edit + redeploy. NOT a secret (an installation id is a
377
+ -- public routing number; the App private key stays in env). The env map is composed OVER these
378
+ -- rows — env stays authoritative, this only augments.
379
+ CREATE TABLE IF NOT EXISTS github_installation (
380
+ org_id TEXT NOT NULL,
381
+ owner TEXT NOT NULL, -- installation.account.login (the SCM map's key)
382
+ installation_id TEXT NOT NULL, -- installation.id, stringified
383
+ account_type TEXT, -- "Organization" | "User" (diagnostics)
384
+ repository_selection TEXT, -- "all" | "selected" (refreshed by installation_repositories)
385
+ updated_at TEXT NOT NULL, -- ISO-8601 of the delivery that last wrote this row
386
+ PRIMARY KEY (org_id, owner)
387
+ );
388
+ -- pr_session_approval (OPE-53): the "Approve for session" grant on a pr.open card. Keyed by the
389
+ -- bare session/window token (embeds the generation ⇒ the memo dies with the session). Scoped to
390
+ -- kind="pr.open" by the callers. NEVER holds PR content — only who granted the skip + when.
391
+ CREATE TABLE IF NOT EXISTS pr_session_approval (
392
+ org_id TEXT NOT NULL,
393
+ session_id TEXT NOT NULL, -- the bare session/window token of the granting turn
394
+ kind TEXT NOT NULL, -- always "pr.open" (the only session-skippable kind)
395
+ granted_by TEXT NOT NULL, -- the member who clicked "Approve for session"
396
+ created_at TEXT NOT NULL, -- ISO-8601
397
+ expires_at TEXT NOT NULL, -- ISO-8601 GC bound (prune-on-write); death is via session_id
398
+ PRIMARY KEY (org_id, session_id, kind)
399
+ );
400
+ CREATE TABLE IF NOT EXISTS pending_actions (
401
+ org_id TEXT NOT NULL,
402
+ id TEXT NOT NULL,
403
+ kind TEXT NOT NULL, -- e.g. "spend.set" (agent/approvals/actions.ts registry key)
404
+ args_json TEXT NOT NULL, -- FROZEN mutation args, JSON
405
+ scope_key TEXT NOT NULL, -- the scope the mutation targets
406
+ domain TEXT, -- memory domain resolved at propose time (NULL if none)
407
+ requested_by TEXT NOT NULL, -- proposing session's verified principal id
408
+ channel_id TEXT NOT NULL, -- where the card is posted
409
+ thread_ts TEXT,
410
+ message_ts TEXT, -- the card's ts, set after post
411
+ posted_to TEXT, -- proposing surfaceKey frozen at mint (task #105); NULL = no sweep feedback
412
+ status TEXT NOT NULL, -- pending|approved|rejected|expired
413
+ created_at TEXT NOT NULL,
414
+ expires_at TEXT NOT NULL,
415
+ decided_by TEXT,
416
+ decided_at TEXT,
417
+ PRIMARY KEY (org_id, id)
418
+ );
419
+ CREATE INDEX IF NOT EXISTS pending_actions_org_status ON pending_actions (org_id, status);
420
+ CREATE TABLE IF NOT EXISTS domain_skill (
421
+ org_id TEXT NOT NULL,
422
+ domain TEXT NOT NULL,
423
+ name TEXT NOT NULL, -- bare (no repo-style namespace)
424
+ content TEXT NOT NULL, -- model-facing markdown, verbatim
425
+ updated_by TEXT, -- authoring principalId, when known
426
+ updated_at TEXT NOT NULL, -- ISO-8601
427
+ PRIMARY KEY (org_id, domain, name)
428
+ );
429
+ -- APPEND-ONLY content history for domain_skill (OPE-237). Written by putDomainSkill on
430
+ -- every write, never updated, never deleted, never pruned — see DomainSkillRevisionRow in
431
+ -- store.ts for why a domain skill's history is an audit artefact, and for the retention
432
+ -- position. Append-only here is BY CONTRACT only: sqlite has no RLS, so unlike Postgres
433
+ -- (SELECT+INSERT policies under FORCE) nothing at the engine stops a rewrite. That is the
434
+ -- same caveat audit_entry carries on this deprecated backend, stated rather than implied.
435
+ CREATE TABLE IF NOT EXISTS domain_skill_revisions (
436
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
437
+ org_id TEXT NOT NULL,
438
+ domain TEXT NOT NULL,
439
+ name TEXT NOT NULL,
440
+ content TEXT NOT NULL, -- the exact body written to domain_skill
441
+ authored_by TEXT, -- authoring principalId, when known
442
+ armed_by TEXT, -- the approver whose click armed it, when known
443
+ approval_id TEXT, -- pending_actions.id of the card that armed it
444
+ recorded_at TEXT NOT NULL -- ISO-8601 (= the live row's updated_at)
445
+ );
446
+ CREATE INDEX IF NOT EXISTS domain_skill_revisions_org_domain_name ON domain_skill_revisions (org_id, domain, name, seq);
447
+ CREATE TABLE IF NOT EXISTS domain_model (
448
+ org_id TEXT NOT NULL,
449
+ domain TEXT NOT NULL,
450
+ model_id TEXT, -- NULL = no modelId component (reasoning-only pick)
451
+ reasoning TEXT, -- NULL = no reasoning component (modelId-only pick)
452
+ set_by TEXT,
453
+ updated_at TEXT NOT NULL, -- ISO-8601
454
+ PRIMARY KEY (org_id, domain)
455
+ );
456
+ CREATE TABLE IF NOT EXISTS usage_events (
457
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
458
+ org_id TEXT NOT NULL,
459
+ surface_key TEXT NOT NULL,
460
+ session_id TEXT NOT NULL,
461
+ principal_id TEXT,
462
+ ts TEXT NOT NULL, -- ISO-8601
463
+ kind TEXT, -- "dm" | "channel" | "routine" | "sandbox" | ...
464
+ routine_id TEXT, -- OPE-145: set iff kind = "routine"
465
+ input_tokens INTEGER NOT NULL DEFAULT 0,
466
+ output_tokens INTEGER NOT NULL DEFAULT 0,
467
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
468
+ cache_write_tokens INTEGER NOT NULL DEFAULT 0,
469
+ model TEXT,
470
+ detail TEXT, -- JSON
471
+ -- OPE-1611 (mirrored in the ALTER list below): the cache/reasoning ATTRIBUTION pair. Both
472
+ -- NULLABLE on purpose — NULL is "the source reported nothing", a different fact from a
473
+ -- reported zero, and keeping the two apart is the whole point of the dimension.
474
+ -- OPE-1862 (mirrored in the ALTER list below): the conversation this event happened in —
475
+ -- 'dm' | 'mpim' | 'channel'; NULL = unstamped. The kind column above cannot answer this: a routine,
476
+ -- supervisor or subagent turn wins that tag before the DM test runs, so a routine fired in a
477
+ -- DM is stamped kind 'routine'. Reports mask an unstamped row rather than guess.
478
+ surface_mode TEXT,
479
+ cache_tokens_reported INTEGER, -- 1 = the call reported a cache split; 0 = it did not; NULL = never asked
480
+ reasoning_tokens INTEGER, -- NULL = unreported; a number (0 included) = reported
481
+ -- OPE-369 (mirrored in the ALTER list below, which is what an existing DB takes)
482
+ usd_micros_measured INTEGER, -- the gateway's billed figure for THIS call; NULL = nothing measured it
483
+ cost_source TEXT, -- 'measured' | 'derived'; NULL on pre-migration/non-model rows
484
+ delegation_depth INTEGER, -- 0 = root turn, 1 = direct child, 2 = two-or-more hops (a BAND — see store.ts)
485
+ root_session_id TEXT -- top of this call's delegation chain (its own session id on a root turn)
486
+ );
487
+ CREATE INDEX IF NOT EXISTS usage_events_org_session ON usage_events (org_id, session_id);
488
+ CREATE INDEX IF NOT EXISTS usage_events_org_surface_ts ON usage_events (org_id, surface_key, ts);
489
+ -- identity link-sets (P1): the three tables behind DB-backed cross-surface identity. See the
490
+ -- LinkSetRow section in store.ts for what they are, and the postgres twin for the RLS half.
491
+ -- Read-write (a person severs an account, an admin suspends a set); the immutable HISTORY is
492
+ -- audit_entry, which identity/link-store.ts appends on every mutation. The handle column is
493
+ -- DISPLAY ONLY -- no index, no uniqueness, no lookup -- because a name/handle join is exactly the
494
+ -- attacker-controllable merge the fail-closed-on-merge doctrine forbids.
495
+ CREATE TABLE IF NOT EXISTS identity_link_sets (
496
+ org_id TEXT NOT NULL,
497
+ id TEXT NOT NULL, -- opaque, host-minted; the ONLY join key for a set
498
+ handle TEXT NOT NULL, -- DISPLAY ONLY: admin lists + audit rows
499
+ status TEXT NOT NULL, -- active | suspended | revoked ("revoked" is terminal)
500
+ created_at TEXT NOT NULL,
501
+ updated_at TEXT NOT NULL,
502
+ PRIMARY KEY (org_id, id)
503
+ );
504
+ -- PRIMARY KEY (org_id, platform, tenant, native_id) IS the "an account is exactly one person"
505
+ -- invariant -- assertPrincipalsValid's rule, moved from config load to write time. tenant joined
506
+ -- the key in OPE-309 phase 2: on a tenant-scoped platform a person id is issued PER WORKSPACE, so
507
+ -- the 3-column key made two workspaces' members one row -- i.e. one person. See the postgres twin
508
+ -- and identity/link-tenant.ts. SQLite cannot ALTER a PRIMARY KEY, so an existing table crosses over
509
+ -- by the rename-and-copy rebuild either side of this exec (needsLinkedIdTenantRebuild).
510
+ CREATE TABLE IF NOT EXISTS identity_linked_ids (
511
+ org_id TEXT NOT NULL,
512
+ platform TEXT NOT NULL,
513
+ tenant TEXT NOT NULL DEFAULT '', -- OPE-309: '' = vendor-global platform, or not yet backfilled
514
+ native_id TEXT NOT NULL,
515
+ link_set_id TEXT NOT NULL,
516
+ status TEXT NOT NULL, -- suggested | confirmed | revoked ("revoked" terminal)
517
+ established_by TEXT NOT NULL, -- "challenge:<id>" | "config-import" | "directory-sync:<p>"
518
+ evidence TEXT, -- structured evidence record as JSON; opaque here
519
+ created_at TEXT NOT NULL,
520
+ updated_at TEXT NOT NULL,
521
+ PRIMARY KEY (org_id, platform, tenant, native_id)
522
+ );
523
+ CREATE INDEX IF NOT EXISTS identity_linked_ids_org_set ON identity_linked_ids (org_id, link_set_id);
524
+ -- The proof-of-control nonce ledger. nonce_hash is a sha-256 -- the RAW code is NEVER stored,
525
+ -- so a copy of this file yields no usable codes. Single-use is the pending-only claim CAS.
526
+ CREATE TABLE IF NOT EXISTS identity_link_challenges (
527
+ org_id TEXT NOT NULL,
528
+ id TEXT NOT NULL,
529
+ nonce_hash TEXT NOT NULL, -- sha-256 hex of the uppercased code; NEVER the code
530
+ initiating_platform TEXT NOT NULL,
531
+ initiating_tenant TEXT NOT NULL DEFAULT '', -- OPE-309; '' off a tenant-scoped platform
532
+ initiating_native_id TEXT NOT NULL,
533
+ initiating_surface_key TEXT NOT NULL, -- the DM the ratification must come back to
534
+ claimed_platform TEXT, -- stamped from the WAKE's own captured author
535
+ claimed_tenant TEXT, -- ...in the same CAS, so a claimed row names a whole account
536
+ claimed_native_id TEXT,
537
+ claimed_at TEXT,
538
+ transport TEXT NOT NULL DEFAULT 'code', -- OPE-617; code | directory
539
+ target_platform TEXT, -- the directory transport's NAMED target ...
540
+ target_tenant TEXT, -- ...matched inside the consent CAS, so a consent
541
+ target_native_id TEXT, -- ...from any other account matches no row
542
+ back_nonce_hash TEXT, -- sha-256 of code-2; its PRESENCE forces the code-back
543
+ status TEXT NOT NULL, -- pending | claimed | ratified | denied | expired
544
+ created_at TEXT NOT NULL,
545
+ expires_at TEXT NOT NULL,
546
+ decided_at TEXT,
547
+ PRIMARY KEY (org_id, id)
548
+ );
549
+ CREATE INDEX IF NOT EXISTS identity_link_challenges_org_nonce ON identity_link_challenges (org_id, nonce_hash);
550
+ -- credential_grant_ask (OPE-1060): one person's REQUEST for another person's credential, pending
551
+ -- the owner's answer in their own DM. The purpose is MODEL-AUTHORED and is stored as data -- every
552
+ -- reader renders it escaped and quoted. Single-answer is the pending-only approve CAS.
553
+ CREATE TABLE IF NOT EXISTS credential_grant_ask (
554
+ org_id TEXT NOT NULL,
555
+ id TEXT NOT NULL,
556
+ requester_principal_id TEXT NOT NULL,
557
+ owner_principal_id TEXT NOT NULL,
558
+ owner_slug TEXT NOT NULL, -- the eventual tool name's owner segment, PINNED here
559
+ owner_platform TEXT NOT NULL, -- where the owner's card is delivered
560
+ owner_native_id TEXT NOT NULL, -- the bare platform id the DM arm addresses
561
+ connector TEXT NOT NULL,
562
+ verb TEXT NOT NULL, -- the vendor tool SLUGIFIED, as a name segment; a label, never the wire name
563
+ resource TEXT NOT NULL, -- the host-composed DISPLAY LABEL, holding model-authored text and the frozen VALUES
564
+ mcp_tool TEXT, -- OPE-1136: the vendor MCP tool, in the vendor's exact bytes
565
+ frozen_args TEXT, -- OPE-1136: canonical JSON; '{}' is "nothing frozen", NULL is "no borrow"
566
+ tool_name TEXT, -- OPE-1136: the full mounted name, PINNED here with the ordinal
567
+ scope_key TEXT NOT NULL, -- the CHAT this would serve (the session id)
568
+ domain_scope_key TEXT, -- OPE-1950: the room's domain-shaped seat key; a STANDING grant binds here instead
569
+ purpose TEXT NOT NULL, -- model-authored; untrusted content
570
+ requester_target TEXT, -- JSON ReplyTarget: where the owner's answer is reported back
571
+ card_surface_id TEXT, -- where the owner's card landed -- the lapse sweep rewrites it
572
+ card_message_id TEXT,
573
+ requested_mode TEXT NOT NULL, -- once | session | standing
574
+ status TEXT NOT NULL, -- pending | approved | declined | expired
575
+ created_at TEXT NOT NULL,
576
+ expires_at TEXT NOT NULL, -- the ASK's own short TTL, NOT the grant's
577
+ decided_at TEXT,
578
+ grant_id TEXT, -- stamped by the approve CAS
579
+ PRIMARY KEY (org_id, id)
580
+ );
581
+ CREATE INDEX IF NOT EXISTS credential_grant_ask_org_scope ON credential_grant_ask (org_id, scope_key);
582
+ -- credential_grant (OPE-1060): the owner-approved grant a chat spends. The tier is decided ONCE at
583
+ -- mint -- from the verb definition on the registry path, from classifyConnectorOpTier on the
584
+ -- OPE-1136 borrow path -- and is never re-derived from the mounted tool name (a grant__… name
585
+ -- carries a person's handle where a classifier looks for a verb).
586
+ -- Rows are NEVER deleted: the mount projects every row for a scope and the broker refuses on
587
+ -- state, so a removed row would make a tool vanish mid-plan instead of refusing.
588
+ -- 🔴 NO UNIQUE INDEX ON (org_id, scope_key, tool_name), and the reason is stated once here
589
+ -- (OPE-1136). Uniqueness inside one chat is held by the ORDINAL: nextGrantBorrowToolName reads
590
+ -- every row in the scope, dead ones included, and picks the lowest free ordinal. The only hole
591
+ -- that leaves is two asks composing at the same instant, and the mount-side dedupe closes that
592
+ -- one. A unique index would ALSO refuse a write, and it would start doing so before any writer
593
+ -- of tool_name exists to be tested against it -- so the constraint waits for the transport
594
+ -- slice, where a real writer can be proven against it.
595
+ CREATE TABLE IF NOT EXISTS credential_grant (
596
+ org_id TEXT NOT NULL,
597
+ id TEXT NOT NULL,
598
+ ask_id TEXT NOT NULL,
599
+ requester_principal_id TEXT NOT NULL,
600
+ owner_principal_id TEXT NOT NULL,
601
+ owner_slug TEXT NOT NULL, -- the mounted name's owner segment, PINNED at mint
602
+ connector TEXT NOT NULL,
603
+ verb TEXT NOT NULL,
604
+ resource TEXT NOT NULL,
605
+ mcp_tool TEXT, -- OPE-1136: the vendor MCP tool, in the vendor's exact bytes
606
+ frozen_args TEXT, -- OPE-1136: canonical JSON; '{}' is "nothing frozen", NULL is "no borrow"
607
+ tool_name TEXT, -- OPE-1136: the full mounted name, copied from the ask
608
+ input_schema TEXT, -- OPE-1136: the post-bake schema snapshot, taken at approve
609
+ scope_key TEXT NOT NULL,
610
+ mode TEXT NOT NULL, -- once | session | standing
611
+ tier TEXT NOT NULL, -- read | write | destructive, pinned at mint
612
+ status TEXT NOT NULL, -- active | used | revoked | expired
613
+ purpose TEXT NOT NULL, -- model-authored; untrusted content
614
+ created_at TEXT NOT NULL,
615
+ expires_at TEXT NOT NULL,
616
+ used_at TEXT,
617
+ revoked_at TEXT,
618
+ refund_turn TEXT, -- OPE-1264: the turn key the refund count below belongs to
619
+ refund_turn_seq INTEGER, -- OPE-1281: that key's eve turn ordinal; only a LATER one rolls the count
620
+ refund_count INTEGER NOT NULL DEFAULT 0, -- OPE-1264: refunds already claimed on that turn
621
+ PRIMARY KEY (org_id, id)
622
+ );
623
+ CREATE INDEX IF NOT EXISTS credential_grant_org_scope ON credential_grant (org_id, scope_key);
624
+ -- notice_claim: LIFETIME at-most-once claims (store.ts claimNotice), four key families. NO TTL
625
+ -- and NO DELETE at all, on purpose: the one thing it records is "this already happened", and
626
+ -- dropping that would make an announcement periodic and a recorded reaction repeatable. Every
627
+ -- family is bounded by the thing it records (one room, one grant, one reaction), never by the
628
+ -- number of ships. Two families are traffic-derived; store.ts's own section states what bounds
629
+ -- each. The fifth family, OPE-1751's runtime-rotation claim, was the one entry that grew per
630
+ -- ship per standing seat, and OPE-1821 retired it with the sweep it needed.
631
+ CREATE TABLE IF NOT EXISTS notice_claim (
632
+ org_id TEXT NOT NULL,
633
+ key TEXT NOT NULL,
634
+ claimed_at TEXT NOT NULL, -- ISO-8601
635
+ PRIMARY KEY (org_id, key)
636
+ );
637
+ -- proactive_address (OPE-887): where this deployment may reach somebody with no live turn.
638
+ -- UPSERTED, never appended — one row per (platform, kind, ref_key), re-stamped by every inbound
639
+ -- activity, so a moved serviceUrl region corrects itself. The address column is a provider-shaped
640
+ -- JSON bag core never reads inside. No TTL: see store.ts's PROACTIVE ADDRESSES section.
641
+ CREATE TABLE IF NOT EXISTS proactive_address (
642
+ org_id TEXT NOT NULL,
643
+ platform TEXT NOT NULL,
644
+ kind TEXT NOT NULL, -- the provider's own record species
645
+ ref_key TEXT NOT NULL, -- the provider's own key inside (platform, kind)
646
+ tenant TEXT NOT NULL, -- "" when the platform has no tenant
647
+ address TEXT NOT NULL, -- provider-shaped JSON
648
+ updated_at TEXT NOT NULL, -- ISO-8601
649
+ PRIMARY KEY (org_id, platform, kind, ref_key)
650
+ );
651
+ -- model_call_capture (OPE-846): the soak lane's byte-exact model-call recorder. MUTABLE and
652
+ -- deliberately so — retention here is an explicit delete-by-session, not a TTL (store.ts's
653
+ -- MODEL-CALL CAPTURE section carries the whole posture). Written only while soak.capture is
654
+ -- armed; a deployment that never arms it never grows a row. body_gzip_b64 is gzip(body)
655
+ -- base64'd, TRANSCRIPT-GRADE: it holds the composed prompt verbatim. Never logged.
656
+ CREATE TABLE IF NOT EXISTS model_call_capture (
657
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
658
+ org_id TEXT NOT NULL,
659
+ surface_key TEXT NOT NULL, -- spend grain (domainKeyOf), joins to usage_events
660
+ session_id TEXT NOT NULL, -- eve's durable session id (wrun_…)
661
+ turn_id TEXT NOT NULL, -- eve turn id; '' when none was resolvable
662
+ step_index INTEGER NOT NULL, -- 0-based, within the turn
663
+ ts TEXT NOT NULL, -- ISO-8601
664
+ model TEXT NOT NULL, -- the id the router resolved for THIS call
665
+ provider TEXT NOT NULL,
666
+ schema_version INTEGER NOT NULL, -- serialised-shape version (replay validates on read)
667
+ sha256 TEXT NOT NULL, -- sha256 of the UNCOMPRESSED body
668
+ body_bytes INTEGER NOT NULL, -- uncompressed length
669
+ body_gzip_b64 TEXT NOT NULL, -- '' when truncated
670
+ truncated INTEGER NOT NULL DEFAULT 0
671
+ );
672
+ CREATE INDEX IF NOT EXISTS model_call_capture_org_session ON model_call_capture (org_id, session_id, seq);
673
+ -- memory_proposal (OPE-957): the dream cycle's proposal review queue, moved off the audit log
674
+ -- (store.ts's MEMORY PROPOSALS section carries the whole posture). MUTABLE, like
675
+ -- model_call_capture — a store holding member text needs a real erasure path.
676
+ CREATE TABLE IF NOT EXISTS memory_proposal (
677
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
678
+ org_id TEXT NOT NULL,
679
+ kind TEXT NOT NULL,
680
+ scope TEXT NOT NULL,
681
+ summary TEXT NOT NULL,
682
+ before_text TEXT,
683
+ after_text TEXT,
684
+ detail_json TEXT,
685
+ principal_id TEXT NOT NULL,
686
+ created_at TEXT NOT NULL
687
+ );
688
+ CREATE INDEX IF NOT EXISTS memory_proposal_org ON memory_proposal (org_id, id);
689
+ -- dm_audience (OPE-1064 tier P2): who this deployment may START a direct message with, and
690
+ -- whether they have stopped it. Two nullable timestamps and no content — store.ts's DM AUDIENCE
691
+ -- section carries the whole posture, including why the key is the grant's own ARN-like address.
692
+ CREATE TABLE IF NOT EXISTS dm_audience (
693
+ org_id TEXT NOT NULL,
694
+ address TEXT NOT NULL, -- the person address, e.g. slack:person/U0123ABC
695
+ first_dm_at TEXT, -- ISO-8601 of the FIRST proactive DM; NULL = never delivered
696
+ stopped_at TEXT, -- ISO-8601 the recipient stopped it; NULL = not stopped
697
+ PRIMARY KEY (org_id, address)
698
+ );
699
+ CREATE TABLE IF NOT EXISTS instance_meta (
700
+ key TEXT PRIMARY KEY,
701
+ value TEXT NOT NULL
702
+ );
703
+ `);
704
+ // OPE-309 phase 2, second half of the linked-ids rebuild: copy every row across with the sentinel
705
+ // tenant, then drop the old table. `''` is CORRECT-and-final for a vendor-global platform and means
706
+ // "nobody has named this yet" on a tenant-scoped one — identity/link-tenant-backfill.ts fills the
707
+ // latter at boot, or says loudly that it cannot. Column list written out in full rather than
708
+ // `SELECT *` so a future column added to one side can never silently shift the copy.
709
+ if (needsLinkedIdTenantRebuild) {
710
+ handle.exec(`
711
+ INSERT INTO identity_linked_ids (org_id, platform, tenant, native_id, link_set_id, status, established_by, evidence, created_at, updated_at)
712
+ SELECT org_id, platform, '', native_id, link_set_id, status, established_by, evidence, created_at, updated_at
713
+ FROM identity_linked_ids__pre_tenant;
714
+ DROP TABLE identity_linked_ids__pre_tenant;
715
+ `);
716
+ }
717
+ // Migrate older DBs in place: CREATE TABLE IF NOT EXISTS won't add columns to a table
718
+ // that already exists, so add the override-metadata columns if missing. ALTER ... ADD
719
+ // COLUMN throws "duplicate column name" once migrated — swallow that (idempotent).
720
+ for (const ddl of [
721
+ "ALTER TABLE spend_limit ADD COLUMN expires_at INTEGER",
722
+ "ALTER TABLE spend_limit ADD COLUMN reason TEXT",
723
+ "ALTER TABLE spend_limit ADD COLUMN set_by TEXT",
724
+ "ALTER TABLE spend_limit ADD COLUMN monthly_usd REAL", // item 16: USD caps
725
+ "ALTER TABLE halt ADD COLUMN set_ref TEXT",
726
+ "ALTER TABLE connector_override ADD COLUMN reason TEXT",
727
+ "ALTER TABLE connector_override ADD COLUMN set_by TEXT",
728
+ // Warm-on-wake engagement (participating watcher + silent-streak shedding): additive
729
+ // columns on a table that predates them. NOT NULL DEFAULT is honoured for existing
730
+ // rows too (SQLite backfills the default), so a pre-migration engaged thread reads as
731
+ // a NON-participating (warm) thread with a zero streak — the fail-safe reading.
732
+ "ALTER TABLE thread_engagement ADD COLUMN participating INTEGER NOT NULL DEFAULT 0",
733
+ "ALTER TABLE thread_engagement ADD COLUMN silent_streak INTEGER NOT NULL DEFAULT 0",
734
+ // Additive columns on a pre-existing table: owner_token stays NULL until a router sets one, and SQLite backfills the DEFAULT, so every pre-migration row reads kind = thread.
735
+ "ALTER TABLE thread_engagement ADD COLUMN owner_token TEXT",
736
+ "ALTER TABLE thread_engagement ADD COLUMN kind TEXT NOT NULL DEFAULT 'thread'",
737
+ // Durable STOPPED marker (task #100 follow-up — window-riding supervisor stop): additive
738
+ // on the same pre-existing table, same fail-safe pattern. NOT NULL DEFAULT 0 backfills every
739
+ // existing row to NOT-stopped, so a pre-migration engaged thread keeps waking (the safe
740
+ // reading — a stop only ever suppresses AFTER it has been written).
741
+ "ALTER TABLE thread_engagement ADD COLUMN stopped INTEGER NOT NULL DEFAULT 0",
742
+ // Durable engage-idempotency (OPE-1527): the ids of the events that PROMOTED this row.
743
+ // Nullable, and a NULL reads as "no recorded promoter", which never blocks a clear — a
744
+ // pre-migration stopped row keeps the pre-OPE-1527 behaviour and the guard only ever engages
745
+ // once a promoter id has been recorded.
746
+ "ALTER TABLE thread_engagement ADD COLUMN engaged_by TEXT",
747
+ // OPE-1562 REFRAME: the column went from ONE bare id to a FRAMED list. A row written by
748
+ // OPE-1527 holds a bare id, so frame it in place. Idempotent and self-guarding: a framed value
749
+ // already starts with the separator, and no platform event id does, so a second run matches
750
+ // nothing. Safe on an existing row — it rewrites the encoding, never the id, so the guard the
751
+ // row already carried survives the migration unchanged.
752
+ // 🔴 AN OPTIMISATION, NOT A PRECONDITION — `markEngaged` normalises a bare value inside its own
753
+ // statement, because the Postgres twin of this list does not run on every deployment.
754
+ "UPDATE thread_engagement SET engaged_by = char(10) || engaged_by || char(10) WHERE engaged_by IS NOT NULL AND engaged_by <> '' AND substr(engaged_by, 1, 1) <> char(10)",
755
+ // Cumulative-token rotation + H7c (§2, eve #551): additive, all nullable.
756
+ // input_tokens_total stays NULL on pre-migration rows ⇒ shouldRotate fails safe and rotates
757
+ // once (self-heals — the new row starts at 0). first_wake_at stays NULL.
758
+ "ALTER TABLE channel_session ADD COLUMN input_tokens_total INTEGER",
759
+ "ALTER TABLE channel_session ADD COLUMN first_wake_at TEXT",
760
+ // A NULL last_input_tokens SKIPS the context-size rung rather than rotating: every freshly-minted generation is NULL too, and rotating on it would retire each generation before its first turn.
761
+ // handoff_note is deliberately not dropped — nothing reads it, a fresh install never grows it, and a destructive DROP on a live table buys nothing.
762
+ "ALTER TABLE channel_session ADD COLUMN last_input_tokens INTEGER",
763
+ // OPE-820 operator mark. NULL on every pre-migration row, which reads as "unmarked" — the
764
+ // rung is skipped, so the migration changes no seat's rotation behaviour on its own.
765
+ "ALTER TABLE channel_session ADD COLUMN rotate_marked_at TEXT",
766
+ // OPE-1821 runtime-rotation comparison. Additive, both nullable. NULL reads as "never stamped",
767
+ // which stampChannelSessionRuntime ADOPTS rather than rotating: a pre-migration seat keeps its
768
+ // generation on the deploy that runs this migration and rotates on the next CODE change. The
769
+ // fail-safe direction here is NOT to rotate — rotating on absence would retire every standing
770
+ // seat's generation at migration time and again on every seat's first wake after a fresh mint.
771
+ "ALTER TABLE channel_session ADD COLUMN served_code_fingerprint TEXT",
772
+ "ALTER TABLE channel_session ADD COLUMN served_domain_fingerprint TEXT",
773
+ // Answerable-wake lifecycle (OPE-161): additive, all three nullable. Pre-migration rows (6h-TTL ephemera) keep NULL window_token ⇒ they
774
+ // never qualify for the PENDING arm of the reply fence (fail-closed — an un-window-stamped row
775
+ // can't prove it belongs to the answering session), and NULL answered_at ⇒ they read as
776
+ // unanswered, which is the safe direction (worst case a duplicate reply, never a lost answer).
777
+ "ALTER TABLE unified_wake_target ADD COLUMN window_token TEXT",
778
+ "ALTER TABLE unified_wake_target ADD COLUMN answered_at TEXT",
779
+ "ALTER TABLE unified_wake_target ADD COLUMN answered_turn_id TEXT",
780
+ // OPE-767: additive, nullable. A pre-migration row reads as NOT inbound, so it never appears in
781
+ // `listPendingUnifiedWakes` and can never make a reply look stale — a missed refusal, never a
782
+ // false one, which is the direction the whole freshness gate fails in.
783
+ "ALTER TABLE unified_wake_target ADD COLUMN inbound INTEGER",
784
+ // OPE-836: additive, nullable — the turn-end wake-accounting HORIZON. A pre-migration row reads
785
+ // NULL ⇒ "not yet audited", so the first turn after the migration considers it once and stamps
786
+ // it. Only `listUnauditedUnifiedWakes` filters on this column, so adding it cannot change the
787
+ // reply-freshness gate or the answerable-reply fence — both read `listPendingUnifiedWakes`.
788
+ "ALTER TABLE unified_wake_target ADD COLUMN audited_at TEXT",
789
+ // Frozen proposing-surface identity (task #105 — sweep-expiry decision feedback): additive,
790
+ // nullable. Pre-migration rows stay NULL ⇒ the TTL sweep expires them WITHOUT notice/wake
791
+ // feedback (the fail-safe reading — feedback only ever fires on a mint that froze its target).
792
+ "ALTER TABLE pending_actions ADD COLUMN posted_to TEXT",
793
+ // Cross-process single-flight claim (OPE-91): additive, both nullable, on the stored_credential
794
+ // table. A row's ciphertext is an OPAQUE AES envelope, so the CAS can't live inside it — the
795
+ // claim gets its OWN columns (a random, non-secret claim id + an ISO-8601 lease stamp). Pre-
796
+ // migration / never-claimed rows read NULL ⇒ the row is FREE (claimable), the fail-safe reading.
797
+ "ALTER TABLE stored_credential ADD COLUMN claim_id TEXT",
798
+ "ALTER TABLE stored_credential ADD COLUMN claimed_at TEXT",
799
+ // SQLite's RENAME COLUMN has no guard clause, so it rides the same try/catch swallow as the ADD COLUMNs above: it throws "no such column" once already renamed.
800
+ // A fresh CREATE TABLE never has a provider column, so this only fires on a pre-existing DB.
801
+ "ALTER TABLE stored_credential RENAME COLUMN provider TO connector",
802
+ "ALTER TABLE credential_intake RENAME COLUMN provider TO connector",
803
+ // Audit hash chain (OPE-52, audit-wedge WS-6c): additive, nullable. The chain STARTS at
804
+ // the first row appended after this migration — pre-migration rows keep prev_sha NULL, so
805
+ // the boundary reads as a genesis (the fail-safe, backfill-free reading: a later null-prev
806
+ // row sitting AFTER non-null rows is itself a detectable break, findChainBreak flags it).
807
+ "ALTER TABLE audit_entry ADD COLUMN prev_sha TEXT",
808
+ // OPE-1866: the conversation mode the anti-doxxing mask reads on the AUDIT dataset, the last
809
+ // table that could not classify its own surfaces. Additive and nullable, exactly as the
810
+ // spend/usage pair above, and NOTHING IS BACKFILLED for the same reason: the mode was knowable
811
+ // only from the turn's binding, which no stored row carries. A pre-migration row therefore
812
+ // reads NULL and `query_analytics` masks it as `(unclassified)` — fail closed, because the
813
+ // alternative is publishing a surface id the reader cannot classify. It is OUTSIDE the hash
814
+ // prefix too (agent/audit/chain.ts), so adding the column breaks no existing chain link.
815
+ "ALTER TABLE audit_entry ADD COLUMN surface_mode TEXT",
816
+ // Per-routine cost attribution (OPE-145): additive, nullable. Pre-migration `kind = "routine"`
817
+ // rows keep routine_id NULL — they are honestly "a routine ran, we can't say which", which is
818
+ // exactly what they were. Nothing is backfilled: the marker that would name the routine only
819
+ // ever existed in the fired session's auth, never on the stored row.
820
+ "ALTER TABLE usage_events ADD COLUMN routine_id TEXT",
821
+ // Each of these records something knowable only AT THE MOMENT OF THE CALL, so a pre-migration row honestly reads NULL and nothing is backfilled.
822
+ // None of them touches the primary key, so these are ordinary ADD COLUMNs and the rows are kept.
823
+ "ALTER TABLE usage_events ADD COLUMN usd_micros_measured INTEGER",
824
+ "ALTER TABLE usage_events ADD COLUMN cost_source TEXT",
825
+ "ALTER TABLE usage_events ADD COLUMN delegation_depth INTEGER",
826
+ "ALTER TABLE usage_events ADD COLUMN root_session_id TEXT",
827
+ // Cache/reasoning ATTRIBUTION (OPE-1611): additive, and the two usage_events columns are
828
+ // NULLABLE for the same reason the four above are — each records what the call's own source
829
+ // reported at the moment of the call, so a pre-migration row honestly reads NULL rather than
830
+ // being handed a zero it never earned. spend_ledger takes a NOT NULL DEFAULT instead: it is a
831
+ // monthly SUM, and a SUM has no way to say "unreported" anyway.
832
+ "ALTER TABLE usage_events ADD COLUMN cache_tokens_reported INTEGER",
833
+ "ALTER TABLE usage_events ADD COLUMN reasoning_tokens INTEGER",
834
+ "ALTER TABLE spend_ledger ADD COLUMN reasoning_tokens INTEGER NOT NULL DEFAULT 0",
835
+ // OPE-1862: the conversation mode the anti-doxxing mask reads. Additive on both tables and
836
+ // NOT in either primary key, so existing rows are kept. Nothing is backfilled and nothing may
837
+ // be: the mode was knowable only from the turn's binding, which no stored row carries. An
838
+ // unstamped row therefore reads '' / NULL, and every report MASKS it — fail closed, because
839
+ // the alternative is publishing a surface id the reader cannot classify.
840
+ "ALTER TABLE usage_events ADD COLUMN surface_mode TEXT",
841
+ "ALTER TABLE spend_ledger ADD COLUMN surface_mode TEXT NOT NULL DEFAULT ''",
842
+ // OPE-309 phase 2: both ends of a link challenge record their tenant. Additive and ordinary —
843
+ // unlike identity_linked_ids these are not PK columns, so no rebuild is needed. Pre-migration
844
+ // rows take `''` / NULL; challenges carry a short TTL (link-challenge.ts), so in practice every
845
+ // one of them has expired before this line ever runs, and an expired challenge writes nothing.
846
+ "ALTER TABLE identity_link_challenges ADD COLUMN initiating_tenant TEXT NOT NULL DEFAULT ''",
847
+ "ALTER TABLE identity_link_challenges ADD COLUMN claimed_tenant TEXT",
848
+ // OPE-617: the transport a challenge belongs to, the directory transport's named target, and the
849
+ // code-back digest. Additive and nullable, and `transport` defaults to 'code' — which is exactly
850
+ // what every pre-migration row IS, so no backfill can be wrong. The same TTL argument as above
851
+ // applies: a challenge that outlived this migration has expired anyway.
852
+ "ALTER TABLE identity_link_challenges ADD COLUMN transport TEXT NOT NULL DEFAULT 'code'",
853
+ "ALTER TABLE identity_link_challenges ADD COLUMN target_platform TEXT",
854
+ "ALTER TABLE identity_link_challenges ADD COLUMN target_tenant TEXT",
855
+ "ALTER TABLE identity_link_challenges ADD COLUMN target_native_id TEXT",
856
+ "ALTER TABLE identity_link_challenges ADD COLUMN back_nonce_hash TEXT",
857
+ // OPE-1060 S3: where the owner's answer is reported back — a JSON ReplyTarget, pinned when the
858
+ // ask is raised. Additive and nullable. A pre-migration ask reads NULL, which is the honest
859
+ // reading: nothing recorded the requesting room, so the resolution notice is skipped rather
860
+ // than posted somewhere guessed. Asks carry a 30-minute TTL, so in practice every pre-migration
861
+ // row has already expired before this line runs.
862
+ "ALTER TABLE credential_grant_ask ADD COLUMN requester_target TEXT",
863
+ // OPE-1112: where the owner's DM card landed, so the TTL sweep can rewrite it to `expired`.
864
+ // Additive and nullable. A pre-migration ask reads NULL, which is the honest reading: nothing
865
+ // recorded the card's address, so the sweep skips the rewrite rather than editing a guessed
866
+ // message. Asks carry a 30-minute TTL, so every pre-migration row has already lapsed.
867
+ "ALTER TABLE credential_grant_ask ADD COLUMN card_surface_id TEXT",
868
+ "ALTER TABLE credential_grant_ask ADD COLUMN card_message_id TEXT",
869
+ // A pre-migration row reads NULL on all four borrow columns: it names no vendor tool, so it is read but never spendable — the broker refuses no_lent_tool and it mounts nothing.
870
+ // NULL is NOT an empty object; see credential-grant-rows.ts for why the two must never collapse.
871
+ "ALTER TABLE credential_grant_ask ADD COLUMN mcp_tool TEXT",
872
+ "ALTER TABLE credential_grant_ask ADD COLUMN frozen_args TEXT",
873
+ "ALTER TABLE credential_grant_ask ADD COLUMN tool_name TEXT",
874
+ "ALTER TABLE credential_grant ADD COLUMN mcp_tool TEXT",
875
+ "ALTER TABLE credential_grant ADD COLUMN frozen_args TEXT",
876
+ "ALTER TABLE credential_grant ADD COLUMN tool_name TEXT",
877
+ "ALTER TABLE credential_grant ADD COLUMN input_schema TEXT",
878
+ "ALTER TABLE credential_grant ADD COLUMN refund_turn TEXT",
879
+ "ALTER TABLE credential_grant ADD COLUMN refund_count INTEGER NOT NULL DEFAULT 0",
880
+ "ALTER TABLE credential_grant ADD COLUMN refund_turn_seq INTEGER",
881
+ // OPE-1950: the room's DOMAIN-shaped seat key, recorded beside the session one so the mint can
882
+ // bind a STANDING grant to the domain and every other mode to the session. Additive and
883
+ // nullable. A pre-migration ask reads NULL, which is the honest reading — nothing recorded the
884
+ // room's domain. Since OPE-2160 such an ask is offered no 30-day arm at all; before that, a
885
+ // standing grant minted from one kept the exact-session rule. Asks carry a 30-minute TTL, so every pre-migration row has
886
+ // already lapsed by the time this line runs.
887
+ "ALTER TABLE credential_grant_ask ADD COLUMN domain_scope_key TEXT",
888
+ ]) {
889
+ try {
890
+ handle.exec(ddl);
891
+ }
892
+ catch {
893
+ /* column already present — already migrated */
894
+ }
895
+ }
896
+ db = handle;
897
+ openedPath = path;
898
+ return handle;
899
+ }
900
+ /** The runtime file path the operational sqlite store opens — the SAME resolution the
901
+ * migrator uses to find the source DB (OE_SQLITE_PATH, else OE_MEMORY_DIR/open-everywhere.sqlite3).
902
+ * Exported so migrate-operational.ts reads the exact file the runtime writes, not a guess. */
903
+ export function sqliteOperationalDbPath() {
904
+ return dbPath().path;
905
+ }
906
+ /** Test seam: the file the cached handle is actually OPEN at, or `null` when nothing is open.
907
+ * {@link sqliteOperationalDbPath} answers what the env RESOLVES to right now, which is a different
908
+ * question and the one OPE-1933's silent switch turned on — a test that cannot tell them apart
909
+ * cannot prove the handle stayed put. */
910
+ export function _openedOperationalDbPathForTest() {
911
+ return openedPath;
912
+ }
913
+ /** WHERE THE ROWS ACTUALLY ARE — the store's `root`, and the provenance field `auditRoot()` puts on
914
+ * every audit view. It must name the OPEN handle's file, not the env's current resolution: since
915
+ * OPE-1933 `getDb()` deliberately keeps its handle when the env read returns `undefined`, so inside
916
+ * the very scope that guard exists for, the env resolves to a cwd-derived path while the rows come
917
+ * from the pinned one. Reporting the env's answer there would state a location the rows are not in.
918
+ * Falls back to the resolution only when nothing is open yet, which is what a caller asking before
919
+ * the first read wants. */
920
+ function operationalRoot() {
921
+ return openedPath ?? dbPath().path;
922
+ }
923
+ /** Every operational table this store actually creates (read from sqlite_master on the live
924
+ * handle) — the runtime-truth counterpart to OPERATIONAL_TABLES that migrate-operational-test.ts
925
+ * asserts against, so a new CREATE TABLE here can't drift from the migrator's canonical list.
926
+ * Excludes sqlite internal tables AND the memory tables (memory_file/memory_tier) — those share
927
+ * the file but belong to the memory provider, not the operational store, so a :memory: DB opened
928
+ * through this store alone (memory provider untouched) never creates them. */
929
+ export function sqliteOperationalTableNames() {
930
+ const rows = getDb()
931
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND name NOT IN ('memory_file', 'memory_tier') ORDER BY name")
932
+ .all();
933
+ return rows.map((r) => r.name);
934
+ }
935
+ /** Test seam: drop the cached handle so the next call reopens (e.g. new path). */
936
+ export function _resetOperationalDbForTest() {
937
+ if (db)
938
+ db.close();
939
+ db = null;
940
+ openedPath = null;
941
+ }
942
+ function modelCallCaptureFromRow(org, r) {
943
+ return {
944
+ seq: Number(r.seq),
945
+ org,
946
+ surfaceKey: r.surface_key,
947
+ sessionId: r.session_id,
948
+ turnId: r.turn_id,
949
+ stepIndex: Number(r.step_index),
950
+ ts: r.ts,
951
+ model: r.model,
952
+ provider: r.provider,
953
+ schemaVersion: Number(r.schema_version),
954
+ sha256: r.sha256,
955
+ bodyBytes: Number(r.body_bytes),
956
+ bodyGzipB64: r.body_gzip_b64,
957
+ truncated: Number(r.truncated) === 1,
958
+ };
959
+ }
960
+ function spendRowFrom(r) {
961
+ return {
962
+ org: r.org_id,
963
+ surfaceKey: r.surface_key,
964
+ principalId: r.principal_id,
965
+ routineId: r.routine_id,
966
+ model: r.model,
967
+ period: r.period,
968
+ costSource: r.cost_source === "measured" ? "measured" : "derived",
969
+ // `?? ""` covers the window between the ADD COLUMN and a write: a row read through an older
970
+ // prepared statement, or any NULL an operator's own migration left, reads as UNSTAMPED.
971
+ surfaceMode: r.surface_mode ?? "",
972
+ inputTokens: r.input_tokens,
973
+ outputTokens: r.output_tokens,
974
+ cacheReadTokens: r.cache_read_tokens,
975
+ cacheWriteTokens: r.cache_write_tokens,
976
+ reasoningTokens: r.reasoning_tokens,
977
+ usdMicros: r.usd_micros,
978
+ usdMicrosMeasured: r.usd_micros_measured,
979
+ calls: r.calls,
980
+ };
981
+ }
982
+ function usageEventFromRow(org, r) {
983
+ return {
984
+ org,
985
+ surfaceKey: r.surface_key,
986
+ sessionId: r.session_id,
987
+ ...(r.principal_id ? { principalId: r.principal_id } : {}),
988
+ ts: r.ts,
989
+ ...(r.kind ? { kind: r.kind } : {}),
990
+ ...(r.routine_id ? { routineId: r.routine_id } : {}),
991
+ inputTokens: r.input_tokens,
992
+ outputTokens: r.output_tokens,
993
+ cacheReadTokens: r.cache_read_tokens,
994
+ cacheWriteTokens: r.cache_write_tokens,
995
+ ...(r.model ? { model: r.model } : {}),
996
+ // OPE-369. `usd_micros_measured` is read back on `!= null` rather than on truthiness: a
997
+ // genuinely-measured $0.000000 call (a cached/free response the gateway still bills as zero)
998
+ // is EVIDENCE that the gateway answered, and dropping it would silently demote the row to
999
+ // "nothing measured it". `delegation_depth` reads the same way — 0 IS the root turn.
1000
+ ...(r.usd_micros_measured != null ? { usdMicrosMeasured: Number(r.usd_micros_measured) } : {}),
1001
+ ...(r.cost_source ? { costSource: r.cost_source === "measured" ? "measured" : "derived" } : {}),
1002
+ ...(r.delegation_depth != null ? { delegationDepth: Number(r.delegation_depth) } : {}),
1003
+ ...(r.root_session_id ? { rootSessionId: r.root_session_id } : {}),
1004
+ // OPE-1611, read back on `!= null` for the SAME reason: `0` here means "the source reported a
1005
+ // zero", which is real evidence, while NULL means it reported nothing at all. The flag stores
1006
+ // 1/0 (node:sqlite has no boolean) and comes back as a real boolean.
1007
+ ...(r.cache_tokens_reported != null ? { cacheTokensReported: r.cache_tokens_reported === 1 } : {}),
1008
+ ...(r.reasoning_tokens != null ? { reasoningTokens: Number(r.reasoning_tokens) } : {}),
1009
+ // OPE-1862: only the three declared spellings become a mode. Every other value — '', NULL, a
1010
+ // spelling a foreign writer invented — stays ABSENT, which the report mask treats as
1011
+ // unclassified and hides.
1012
+ ...(() => {
1013
+ const mode = asSurfaceMode(r.surface_mode);
1014
+ return mode ? { surfaceMode: mode } : {};
1015
+ })(),
1016
+ ...(r.detail ? { detail: JSON.parse(r.detail) } : {}),
1017
+ };
1018
+ }
1019
+ function pendingActionFromRow(org, r) {
1020
+ return {
1021
+ id: r.id,
1022
+ org,
1023
+ kind: r.kind,
1024
+ argsJson: r.args_json,
1025
+ scopeKey: r.scope_key,
1026
+ domain: r.domain,
1027
+ requestedBy: r.requested_by,
1028
+ channelId: r.channel_id,
1029
+ threadTs: r.thread_ts,
1030
+ messageTs: r.message_ts,
1031
+ postedTo: r.posted_to,
1032
+ status: r.status,
1033
+ createdAt: r.created_at,
1034
+ expiresAt: r.expires_at,
1035
+ decidedBy: r.decided_by,
1036
+ decidedAt: r.decided_at,
1037
+ };
1038
+ }
1039
+ /** `?, ?, …` for an `IN (…)` over a CLOSED status vocabulary — never caller text (sqlite has no
1040
+ * array-parameter form, so a status CAS list has to be spread into placeholders). */
1041
+ function placeholders(n) {
1042
+ return new Array(n).fill("?").join(", ");
1043
+ }
1044
+ const TURN_ANCHOR_SELECT = "SELECT window_key, anchor_key, channel_key, session_id, turn_id, surface_key, created_at FROM turn_anchor";
1045
+ /** Project a raw turn_anchor row (or an absent one) into {@link TurnAnchorRow}. NULL optional
1046
+ * columns are OMITTED rather than carried as null, matching getUnifiedWakeRecord's shape. */
1047
+ function readTurnAnchorRow(raw) {
1048
+ const r = raw;
1049
+ if (!r)
1050
+ return null;
1051
+ return {
1052
+ windowKey: r.window_key,
1053
+ ...(r.anchor_key !== null ? { anchorKey: r.anchor_key } : {}),
1054
+ ...(r.channel_key !== null ? { channelKey: r.channel_key } : {}),
1055
+ sessionId: r.session_id,
1056
+ turnId: r.turn_id,
1057
+ surfaceKey: r.surface_key,
1058
+ createdAt: r.created_at,
1059
+ };
1060
+ }
1061
+ function linkSetFromSqliteRow(org, r) {
1062
+ return { org, id: r.id, handle: r.handle, status: r.status, createdAt: r.created_at, updatedAt: r.updated_at };
1063
+ }
1064
+ const LINKED_ID_SQLITE_SELECT = "SELECT platform, tenant, native_id, link_set_id, status, established_by, evidence, created_at, updated_at FROM identity_linked_ids";
1065
+ function linkedIdFromSqliteRow(org, r) {
1066
+ return {
1067
+ org,
1068
+ linkSetId: r.link_set_id,
1069
+ platform: r.platform,
1070
+ tenant: r.tenant,
1071
+ nativeId: r.native_id,
1072
+ status: r.status,
1073
+ establishedBy: r.established_by,
1074
+ ...(r.evidence === null ? {} : { evidenceJson: r.evidence }),
1075
+ createdAt: r.created_at,
1076
+ updatedAt: r.updated_at,
1077
+ };
1078
+ }
1079
+ const LINK_CHALLENGE_SQLITE_SELECT = `SELECT id, nonce_hash, initiating_platform, initiating_tenant, initiating_native_id, initiating_surface_key,
1080
+ claimed_platform, claimed_tenant, claimed_native_id, claimed_at,
1081
+ transport, target_platform, target_tenant, target_native_id, back_nonce_hash,
1082
+ status, created_at, expires_at, decided_at
1083
+ FROM identity_link_challenges`;
1084
+ function linkChallengeFromSqliteRow(org, r) {
1085
+ return {
1086
+ org,
1087
+ id: r.id,
1088
+ nonceHash: r.nonce_hash,
1089
+ initiatingPlatform: r.initiating_platform,
1090
+ initiatingTenant: r.initiating_tenant,
1091
+ initiatingNativeId: r.initiating_native_id,
1092
+ initiatingSurfaceKey: r.initiating_surface_key,
1093
+ ...(r.claimed_platform === null ? {} : { claimedPlatform: r.claimed_platform }),
1094
+ ...(r.claimed_tenant === null ? {} : { claimedTenant: r.claimed_tenant }),
1095
+ ...(r.claimed_native_id === null ? {} : { claimedNativeId: r.claimed_native_id }),
1096
+ ...(r.claimed_at === null ? {} : { claimedAt: r.claimed_at }),
1097
+ // A pre-OPE-617 row (or one read through a driver that returns no such column) is a CODE-transport
1098
+ // row — that is what every row was before the column existed, so the fallback states a fact
1099
+ // rather than guessing one.
1100
+ transport: r.transport ?? "code",
1101
+ ...(r.target_platform === null || r.target_platform === undefined ? {} : { targetPlatform: r.target_platform }),
1102
+ ...(r.target_tenant === null || r.target_tenant === undefined ? {} : { targetTenant: r.target_tenant }),
1103
+ ...(r.target_native_id === null || r.target_native_id === undefined ? {} : { targetNativeId: r.target_native_id }),
1104
+ ...(r.back_nonce_hash === null || r.back_nonce_hash === undefined ? {} : { backNonceHash: r.back_nonce_hash }),
1105
+ status: r.status,
1106
+ createdAt: r.created_at,
1107
+ expiresAt: r.expires_at,
1108
+ ...(r.decided_at === null ? {} : { decidedAt: r.decided_at }),
1109
+ };
1110
+ }
1111
+ /** Refuse a half-written borrow at the INSERT, where the caller can still be fixed — see
1112
+ * {@link grantBorrowColumnsProblem} for what "half" means and why it is silent otherwise. */
1113
+ function refuseHalfBorrow(table, row) {
1114
+ const problem = grantBorrowColumnsProblem(row);
1115
+ if (problem !== undefined)
1116
+ throw new Error(`${table}: ${problem}`);
1117
+ }
1118
+ const GRANT_ASK_SQLITE_SELECT = `SELECT id, requester_principal_id, owner_principal_id, owner_slug, owner_platform, owner_native_id, connector, verb, resource,
1119
+ mcp_tool, frozen_args, tool_name,
1120
+ scope_key, domain_scope_key, purpose, requester_target, card_surface_id, card_message_id, requested_mode, status, created_at, expires_at, decided_at, grant_id
1121
+ FROM credential_grant_ask`;
1122
+ function grantAskFromSqliteRow(r) {
1123
+ const frozenArgs = grantJsonFromColumn(r.frozen_args, "credential_grant_ask.frozen_args");
1124
+ return {
1125
+ id: r.id,
1126
+ requesterPrincipalId: r.requester_principal_id,
1127
+ ownerPrincipalId: r.owner_principal_id,
1128
+ ownerSlug: r.owner_slug,
1129
+ ownerPlatform: r.owner_platform,
1130
+ ownerNativeId: r.owner_native_id,
1131
+ connector: r.connector,
1132
+ verb: r.verb,
1133
+ resource: r.resource,
1134
+ ...(r.mcp_tool === null || r.mcp_tool === undefined ? {} : { mcpTool: r.mcp_tool }),
1135
+ ...(frozenArgs === undefined ? {} : { frozenArgs }),
1136
+ ...(r.tool_name === null || r.tool_name === undefined ? {} : { toolName: r.tool_name }),
1137
+ scopeKey: r.scope_key,
1138
+ ...(r.domain_scope_key === null || r.domain_scope_key === undefined ? {} : { domainScopeKey: r.domain_scope_key }),
1139
+ purpose: r.purpose,
1140
+ ...(r.requester_target === null ? {} : { requesterTarget: r.requester_target }),
1141
+ ...(r.card_surface_id === null ? {} : { cardSurfaceId: r.card_surface_id }),
1142
+ ...(r.card_message_id === null ? {} : { cardMessageId: r.card_message_id }),
1143
+ requestedMode: r.requested_mode,
1144
+ status: r.status,
1145
+ createdAt: r.created_at,
1146
+ expiresAt: r.expires_at,
1147
+ ...(r.decided_at === null ? {} : { decidedAt: r.decided_at }),
1148
+ ...(r.grant_id === null ? {} : { grantId: r.grant_id }),
1149
+ };
1150
+ }
1151
+ const GRANT_SQLITE_SELECT = `SELECT id, ask_id, requester_principal_id, owner_principal_id, owner_slug, connector, verb, resource,
1152
+ mcp_tool, frozen_args, tool_name, input_schema,
1153
+ scope_key, mode, tier, status, purpose, created_at, expires_at, used_at, revoked_at
1154
+ FROM credential_grant`;
1155
+ function grantFromSqliteRow(r) {
1156
+ const frozenArgs = grantJsonFromColumn(r.frozen_args, "credential_grant.frozen_args");
1157
+ const inputSchema = grantJsonFromColumn(r.input_schema, "credential_grant.input_schema");
1158
+ return {
1159
+ id: r.id,
1160
+ askId: r.ask_id,
1161
+ requesterPrincipalId: r.requester_principal_id,
1162
+ ownerPrincipalId: r.owner_principal_id,
1163
+ ownerSlug: r.owner_slug,
1164
+ connector: r.connector,
1165
+ verb: r.verb,
1166
+ resource: r.resource,
1167
+ ...(r.mcp_tool === null || r.mcp_tool === undefined ? {} : { mcpTool: r.mcp_tool }),
1168
+ ...(frozenArgs === undefined ? {} : { frozenArgs }),
1169
+ ...(r.tool_name === null || r.tool_name === undefined ? {} : { toolName: r.tool_name }),
1170
+ ...(inputSchema === undefined ? {} : { inputSchema }),
1171
+ scopeKey: r.scope_key,
1172
+ mode: r.mode,
1173
+ tier: r.tier,
1174
+ status: r.status,
1175
+ purpose: r.purpose,
1176
+ createdAt: r.created_at,
1177
+ expiresAt: r.expires_at,
1178
+ ...(r.used_at === null ? {} : { usedAt: r.used_at }),
1179
+ ...(r.revoked_at === null ? {} : { revokedAt: r.revoked_at }),
1180
+ };
1181
+ }
1182
+ /** One `dm_audience` row → {@link DmAudienceRow}. A NULL timestamp is dropped rather than carried as
1183
+ * `null`, so a caller reads absence as absence and never has to test two spellings of "not set". */
1184
+ function dmAudienceRowFrom(r) {
1185
+ return {
1186
+ address: r.address,
1187
+ ...(r.first_dm_at === null ? {} : { firstDmAt: r.first_dm_at }),
1188
+ ...(r.stopped_at === null ? {} : { stoppedAt: r.stopped_at }),
1189
+ };
1190
+ }
1191
+ export const sqliteOperationalStore = {
1192
+ id: "sqlite",
1193
+ root: operationalRoot,
1194
+ async recordSpend(org, write) {
1195
+ getDb()
1196
+ .prepare(`INSERT INTO spend_ledger
1197
+ (org_id, surface_key, principal_id, routine_id, model, period, cost_source, surface_mode,
1198
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, reasoning_tokens, usd_micros, usd_micros_measured, calls)
1199
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
1200
+ ON CONFLICT(org_id, surface_key, principal_id, routine_id, model, period, cost_source) DO UPDATE SET
1201
+ -- OPE-1862: a stamped mode HEALS a row an older build (or a writer with no binding)
1202
+ -- left unstamped, and an unstamped write never erases a mode the row already holds.
1203
+ -- A surface cannot change mode, so the two spellings can only ever be '' and the truth.
1204
+ surface_mode = COALESCE(NULLIF(excluded.surface_mode, ''), spend_ledger.surface_mode),
1205
+ input_tokens = input_tokens + excluded.input_tokens,
1206
+ output_tokens = output_tokens + excluded.output_tokens,
1207
+ cache_read_tokens = cache_read_tokens + excluded.cache_read_tokens,
1208
+ cache_write_tokens = cache_write_tokens + excluded.cache_write_tokens,
1209
+ reasoning_tokens = reasoning_tokens + excluded.reasoning_tokens,
1210
+ usd_micros = usd_micros + excluded.usd_micros,
1211
+ usd_micros_measured = usd_micros_measured + excluded.usd_micros_measured,
1212
+ calls = calls + 1`)
1213
+ .run(org, write.surfaceKey, write.principalId ?? "", write.routineId ?? "", write.model ?? "", write.period, write.costSource ?? "derived", write.surfaceMode ?? "", write.inputTokens ?? 0, write.outputTokens ?? 0, write.cacheReadTokens ?? 0, write.cacheWriteTokens ?? 0, write.reasoningTokens ?? 0, write.usdMicros ?? 0, write.usdMicrosMeasured ?? 0);
1214
+ },
1215
+ async spendTotals(org, filter = {}) {
1216
+ const { conjuncts, params } = spendLedgerConjuncts(filter);
1217
+ const row = getDb()
1218
+ .prepare(`SELECT COALESCE(SUM(input_tokens), 0) AS input_tokens,
1219
+ COALESCE(SUM(output_tokens), 0) AS output_tokens,
1220
+ COALESCE(SUM(cache_read_tokens), 0) AS cache_read_tokens,
1221
+ COALESCE(SUM(cache_write_tokens), 0) AS cache_write_tokens,
1222
+ COALESCE(SUM(reasoning_tokens), 0) AS reasoning_tokens,
1223
+ COALESCE(SUM(usd_micros), 0) AS usd_micros,
1224
+ COALESCE(SUM(usd_micros_measured), 0) AS usd_micros_measured,
1225
+ COALESCE(SUM(calls), 0) AS calls
1226
+ FROM spend_ledger WHERE ${["org_id = ?", ...conjuncts].join(" AND ")}`)
1227
+ .get(org, ...params);
1228
+ return {
1229
+ inputTokens: row.input_tokens,
1230
+ outputTokens: row.output_tokens,
1231
+ cacheReadTokens: row.cache_read_tokens,
1232
+ cacheWriteTokens: row.cache_write_tokens,
1233
+ reasoningTokens: row.reasoning_tokens,
1234
+ usdMicros: row.usd_micros,
1235
+ usdMicrosMeasured: row.usd_micros_measured,
1236
+ calls: row.calls,
1237
+ };
1238
+ },
1239
+ async listSpendLedger(org, filter = {}) {
1240
+ // The filter goes into the QUERY, never into a `.filter()` over the result (OPE-1653): a
1241
+ // caller that renders one period must not pay to load every period the deployment ever
1242
+ // wrote. Same `spendLedgerConjuncts` assembly the SUM read uses, so the two reads — and the
1243
+ // two backends — agree on what each conjunct means.
1244
+ const { conjuncts, params } = spendLedgerConjuncts(filter);
1245
+ const where = [...(org !== undefined ? ["org_id = ?"] : []), ...conjuncts];
1246
+ const rows = getDb()
1247
+ .prepare(`SELECT * FROM spend_ledger${where.length ? ` WHERE ${where.join(" AND ")}` : ""}`)
1248
+ .all(...(org !== undefined ? [org] : []), ...params);
1249
+ return rows.map(spendRowFrom);
1250
+ },
1251
+ async listRoutines(org, surfaceKey) {
1252
+ const rows = getDb()
1253
+ .prepare("SELECT data FROM routine WHERE org_id = ? AND surface_key = ?")
1254
+ .all(org, surfaceKey);
1255
+ return rows.map((r) => JSON.parse(r.data));
1256
+ },
1257
+ async getRoutine(org, surfaceKey, id) {
1258
+ const row = getDb()
1259
+ .prepare("SELECT data FROM routine WHERE org_id = ? AND id = ? AND surface_key = ?")
1260
+ .get(org, id, surfaceKey);
1261
+ return row ? JSON.parse(row.data) : null;
1262
+ },
1263
+ async addRoutine(routine) {
1264
+ getDb()
1265
+ .prepare("INSERT INTO routine (org_id, id, surface_key, data) VALUES (?, ?, ?, ?)")
1266
+ .run(routine.org, routine.id, routine.surfaceKey, JSON.stringify(routine));
1267
+ return routine;
1268
+ },
1269
+ async updateRoutine(org, surfaceKey, id, patch, provenance) {
1270
+ const handle = getDb();
1271
+ const row = handle.prepare("SELECT data FROM routine WHERE org_id = ? AND id = ? AND surface_key = ?").get(org, id, surfaceKey);
1272
+ if (!row)
1273
+ return null;
1274
+ const existing = JSON.parse(row.data);
1275
+ const updated = { ...existing, ...patch, id: existing.id, org: existing.org, surfaceKey: existing.surfaceKey };
1276
+ // REVISIONS BEFORE the destructive UPDATE (OPE-242) — same reasoning as the Postgres adapter,
1277
+ // and the same shared decision (routinePromptRevisionWrites) so the two backends cannot drift
1278
+ // on WHAT gets recorded. Only a patch that REPLACES the prompt records anything.
1279
+ if (patch.prompt !== undefined && patch.prompt !== existing.prompt) {
1280
+ const prior = handle
1281
+ .prepare("SELECT 1 FROM routine_prompt_revisions WHERE org_id = ? AND surface_key = ? AND routine_id = ? LIMIT 1")
1282
+ .get(org, surfaceKey, id);
1283
+ const writes = routinePromptRevisionWrites({
1284
+ existing,
1285
+ updated,
1286
+ ...(provenance ? { provenance } : {}),
1287
+ hasPriorRevisions: prior !== undefined,
1288
+ nowIso: new Date().toISOString(),
1289
+ });
1290
+ const insert = handle.prepare(`INSERT INTO routine_prompt_revisions (org_id, surface_key, routine_id, prompt, generation, authored_by, armed_by, approval_id, recorded_at)
1291
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
1292
+ for (const w of writes) {
1293
+ insert.run(org, surfaceKey, id, w.prompt, w.generation, w.authoredBy ?? null, w.armedBy ?? null, w.approvalId ?? null, w.recordedAt);
1294
+ }
1295
+ }
1296
+ handle.prepare("UPDATE routine SET data = ? WHERE org_id = ? AND id = ?").run(JSON.stringify(updated), org, id);
1297
+ return updated;
1298
+ },
1299
+ async listRoutinePromptRevisions(org, surfaceKey, routineId) {
1300
+ const rows = getDb()
1301
+ .prepare(`SELECT seq, routine_id, prompt, generation, authored_by, armed_by, approval_id, recorded_at
1302
+ FROM routine_prompt_revisions
1303
+ WHERE org_id = ? AND surface_key = ? AND (? IS NULL OR routine_id = ?)
1304
+ ORDER BY seq`)
1305
+ .all(org, surfaceKey, routineId ?? null, routineId ?? null);
1306
+ return rows.map((r) => ({
1307
+ seq: Number(r.seq),
1308
+ org,
1309
+ surfaceKey,
1310
+ routineId: r.routine_id,
1311
+ prompt: r.prompt,
1312
+ ...(r.generation === null ? {} : { generation: Number(r.generation) }),
1313
+ ...(r.authored_by ? { authoredBy: r.authored_by } : {}),
1314
+ ...(r.armed_by ? { armedBy: r.armed_by } : {}),
1315
+ ...(r.approval_id ? { approvalId: r.approval_id } : {}),
1316
+ recordedAt: r.recorded_at,
1317
+ }));
1318
+ },
1319
+ async removeRoutine(org, surfaceKey, id) {
1320
+ const info = getDb().prepare("DELETE FROM routine WHERE org_id = ? AND id = ? AND surface_key = ?").run(org, id, surfaceKey);
1321
+ return info.changes > 0;
1322
+ },
1323
+ async listAllRoutines() {
1324
+ const rows = getDb().prepare("SELECT data FROM routine").all();
1325
+ return rows.map((r) => JSON.parse(r.data));
1326
+ },
1327
+ async appendAudit(entry) {
1328
+ // Hash-chain link (OPE-52): stamp prev_sha = sha256 of the org's current LAST row. The
1329
+ // read-last-then-insert is a race window for one org, so the whole body runs under the
1330
+ // per-org in-process lock (OPE-1636 moved that lock here from audit.ts, so a caller that
1331
+ // reaches the store directly is covered too). sqlite is one process by construction — a
1332
+ // local/self-host file — so this lock is the WHOLE serialisation the engine needs; there
1333
+ // is no cross-process layer to add. See chain.ts's concurrency stance.
1334
+ return withOrgAuditLock(entry.org, async () => {
1335
+ const handle = getDb();
1336
+ const last = handle
1337
+ .prepare(`SELECT ts, org_id, platform, workspace, surface, surface_mode, principal_id, action, detail, prev_sha
1338
+ FROM audit_entry WHERE org_id = ? ORDER BY seq DESC LIMIT 1`)
1339
+ .get(entry.org);
1340
+ // Read the predecessor's mode back through asSurfaceMode, so a stored value outside the enum
1341
+ // hashes as ABSENT here exactly as it reads as unclassified everywhere else. The predecessor's
1342
+ // sha must be recomputed from the same reading the row itself gets, or the link breaks on a
1343
+ // row nobody touched.
1344
+ const lastMode = auditSurfaceMode(last?.surface_mode);
1345
+ const prevSha = last
1346
+ ? auditRowSha({
1347
+ org: last.org_id,
1348
+ ts: last.ts,
1349
+ platform: last.platform,
1350
+ workspace: last.workspace,
1351
+ ...(last.surface ? { surface: last.surface } : {}),
1352
+ ...lastMode,
1353
+ ...(last.principal_id ? { principalId: last.principal_id } : {}),
1354
+ action: last.action,
1355
+ ...(last.detail ? { detail: JSON.parse(last.detail) } : {}),
1356
+ }, last.prev_sha)
1357
+ : null;
1358
+ handle
1359
+ .prepare(`INSERT INTO audit_entry (ts, org_id, platform, workspace, surface, surface_mode, principal_id, action, detail, prev_sha)
1360
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
1361
+ .run(entry.ts, entry.org, entry.platform, entry.workspace, entry.surface ?? null, entry.surfaceMode ?? null, entry.principalId ?? null, entry.action, entry.detail ? JSON.stringify(entry.detail) : null, prevSha);
1362
+ });
1363
+ },
1364
+ async readAudit(filter) {
1365
+ // Refuse before the builder runs (OPE-1812) — the Postgres twin does the same, through the same
1366
+ // helper, so the two query builders cannot drift on the one predicate that partitions the log.
1367
+ const org = auditReadOrg(filter);
1368
+ const where = [];
1369
+ const params = [];
1370
+ const eq = (col, val) => {
1371
+ if (val !== undefined) {
1372
+ where.push(`${col} = ?`);
1373
+ params.push(val);
1374
+ }
1375
+ };
1376
+ eq("org_id", org);
1377
+ eq("platform", filter.platform);
1378
+ eq("workspace", filter.workspace);
1379
+ eq("surface", filter.surface);
1380
+ eq("action", filter.action);
1381
+ eq("principal_id", filter.principalId);
1382
+ if (filter.since !== undefined) {
1383
+ where.push("ts >= ?");
1384
+ params.push(filter.since);
1385
+ }
1386
+ if (filter.until !== undefined) {
1387
+ where.push("ts <= ?");
1388
+ params.push(filter.until);
1389
+ }
1390
+ const clause = where.length ? `WHERE ${where.join(" AND ")}` : "";
1391
+ const limit = filter.limit && filter.limit > 0 ? filter.limit : -1; // SQLite: -1 = no limit
1392
+ const rows = getDb()
1393
+ .prepare(
1394
+ // `seq` rides along (OPE-1933): it is already the ORDER BY tiebreak, and it is the only
1395
+ // monotonic locator a reader can anchor on when the box's wall clock steps backward.
1396
+ // `surface_mode` is the anti-doxxing mask's input (OPE-1866).
1397
+ `SELECT seq, ts, org_id, platform, workspace, surface, surface_mode, principal_id, action, detail
1398
+ FROM audit_entry ${clause} ORDER BY ts DESC, seq DESC LIMIT ?`)
1399
+ .all(...params, limit);
1400
+ return rows.map((r) => ({
1401
+ seq: Number(r.seq),
1402
+ ts: r.ts,
1403
+ org: r.org_id,
1404
+ platform: r.platform,
1405
+ workspace: r.workspace,
1406
+ ...(r.surface ? { surface: r.surface } : {}),
1407
+ ...auditSurfaceMode(r.surface_mode),
1408
+ ...(r.principal_id ? { principalId: r.principal_id } : {}),
1409
+ action: r.action,
1410
+ ...(r.detail ? { detail: JSON.parse(r.detail) } : {}),
1411
+ }));
1412
+ },
1413
+ async listAuditOrgs() {
1414
+ const rows = getDb().prepare("SELECT DISTINCT org_id FROM audit_entry ORDER BY org_id").all();
1415
+ return rows.map((r) => r.org_id);
1416
+ },
1417
+ async readAuditChain(org, opts) {
1418
+ // Rows come back OLDEST-first, which is the order the hash-chain walk needs; a tailLimit takes the last N by seq and re-orders them ascending.
1419
+ const tail = opts?.tailLimit;
1420
+ const sql = tail && tail > 0
1421
+ ? `SELECT * FROM (
1422
+ SELECT seq, ts, org_id, platform, workspace, surface, surface_mode, principal_id, action, detail, prev_sha
1423
+ FROM audit_entry WHERE org_id = ? ORDER BY seq DESC LIMIT ?
1424
+ ) ORDER BY seq ASC`
1425
+ : `SELECT seq, ts, org_id, platform, workspace, surface, surface_mode, principal_id, action, detail, prev_sha
1426
+ FROM audit_entry WHERE org_id = ? ORDER BY seq ASC`;
1427
+ const rows = getDb()
1428
+ .prepare(sql)
1429
+ .all(...(tail && tail > 0 ? [org, tail] : [org]));
1430
+ return rows.map((r) => ({
1431
+ seq: Number(r.seq),
1432
+ ts: r.ts,
1433
+ org: r.org_id,
1434
+ platform: r.platform,
1435
+ workspace: r.workspace,
1436
+ ...(r.surface ? { surface: r.surface } : {}),
1437
+ ...auditSurfaceMode(r.surface_mode),
1438
+ ...(r.principal_id ? { principalId: r.principal_id } : {}),
1439
+ action: r.action,
1440
+ ...(r.detail ? { detail: JSON.parse(r.detail) } : {}),
1441
+ prevSha: r.prev_sha,
1442
+ }));
1443
+ },
1444
+ async sealAuditChainEpoch(org, sealedBy) {
1445
+ // The read and the insert run under the SAME per-org lock as an append (OPE-1636): a row
1446
+ // that landed between them would sit after the era the seal claims to cover. The org's whole
1447
+ // chain is read inside that lock, so this org's appends queue behind it for the duration.
1448
+ return withOrgAuditLock(org, async () => {
1449
+ const rows = await sqliteOperationalStore.readAuditChain(org);
1450
+ const seal = auditEpochSealFor(rows);
1451
+ if (seal === null)
1452
+ return null;
1453
+ // The marker's seq comes from the INSERT itself (`lastInsertRowid` — `seq` is the table's
1454
+ // INTEGER PRIMARY KEY AUTOINCREMENT, i.e. the rowid). Reading the chain back for it would
1455
+ // sit outside this lock and could name a row another writer appended first.
1456
+ const written = getDb()
1457
+ .prepare(`INSERT INTO audit_entry (ts, org_id, platform, workspace, principal_id, action, detail, prev_sha)
1458
+ VALUES (?, ?, 'db', 'sqlite', ?, ?, ?, NULL)`)
1459
+ .run(new Date().toISOString(), org, sealedBy, AUDIT_CHAIN_EPOCH_ACTION, JSON.stringify(auditEpochDetail(seal)));
1460
+ return { seal, markerSeq: Number(written.lastInsertRowid) };
1461
+ });
1462
+ },
1463
+ async setSpendLimit(org, scopeKey, level, limit, meta, condition) {
1464
+ assertSpendLimitAmount(limit);
1465
+ // ENCODING: monthly_tokens = -1 means "no token component". The column is NOT NULL
1466
+ // in every pre-existing DB and SQLite's ALTER TABLE can't relax that, so a sentinel
1467
+ // is the only additive migration; -1 is unambiguous because assertSpendLimitAmount
1468
+ // rejects any non-positive real limit. monthly_usd (a new, nullable column) uses a
1469
+ // plain NULL. spendLimits() below decodes both back to `undefined`.
1470
+ const conflict = condition?.ifAbsent
1471
+ ? "DO NOTHING"
1472
+ : `DO UPDATE SET
1473
+ monthly_tokens = excluded.monthly_tokens,
1474
+ monthly_usd = excluded.monthly_usd,
1475
+ expires_at = excluded.expires_at,
1476
+ reason = excluded.reason,
1477
+ set_by = excluded.set_by`;
1478
+ return (getDb()
1479
+ .prepare(`INSERT INTO spend_limit (org_id, scope_key, level, monthly_tokens, monthly_usd, expires_at, reason, set_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
1480
+ ON CONFLICT(org_id, scope_key, level) ${conflict}`)
1481
+ .run(org, scopeKey, level, limit.monthlyTokens ?? -1, limit.monthlyUsd ?? null, meta?.expiresAt ?? null, meta?.reason ?? null, meta?.setBy ?? null).changes > 0);
1482
+ },
1483
+ async clearSpendLimit(org, scopeKey, level, expected) {
1484
+ const sql = expected
1485
+ ? "DELETE FROM spend_limit WHERE org_id = ? AND scope_key = ? AND level = ? AND monthly_tokens IS ? AND monthly_usd IS ? AND expires_at IS ? AND reason IS ? AND set_by IS ?"
1486
+ : "DELETE FROM spend_limit WHERE org_id = ? AND scope_key = ? AND level = ?";
1487
+ const params = expected
1488
+ ? [org, scopeKey, level, expected.monthlyTokens ?? -1, expected.monthlyUsd ?? null, expected.expiresAt ?? null, expected.reason ?? null, expected.setBy ?? null]
1489
+ : [org, scopeKey, level];
1490
+ return getDb().prepare(sql).run(...params).changes > 0;
1491
+ },
1492
+ async spendLimits(org) {
1493
+ const rows = getDb()
1494
+ .prepare("SELECT scope_key, level, monthly_tokens, monthly_usd, expires_at, reason, set_by FROM spend_limit WHERE org_id = ?")
1495
+ .all(org);
1496
+ return rows.map((r) => ({
1497
+ org,
1498
+ scopeKey: r.scope_key,
1499
+ level: r.level,
1500
+ // Decode the storage encodings (see setSpendLimit): -1 tokens = no token
1501
+ // component; NULL usd = no USD component.
1502
+ ...(r.monthly_tokens >= 0 ? { monthlyTokens: r.monthly_tokens } : {}),
1503
+ ...(r.monthly_usd != null ? { monthlyUsd: r.monthly_usd } : {}),
1504
+ ...(r.expires_at != null ? { expiresAt: r.expires_at } : {}),
1505
+ ...(r.reason ? { reason: r.reason } : {}),
1506
+ ...(r.set_by ? { setBy: r.set_by } : {}),
1507
+ }));
1508
+ },
1509
+ async setHalt(org, address, meta) {
1510
+ assertHaltAddress(address);
1511
+ const a = haltAddressColumns(address);
1512
+ // Re-halting an already-halted address restamps who/when and DROPS the previous resume stamps:
1513
+ // a cleared_at left beside an active row would read as "resumed" to anyone scanning the table.
1514
+ getDb()
1515
+ .prepare(`INSERT INTO halt (org_id, level, scope_key, org_wide, active, set_by, set_at, set_ref, cleared_by, cleared_at) VALUES (?, ?, ?, ?, 1, ?, ?, ?, NULL, NULL)
1516
+ ON CONFLICT(org_id, level, scope_key, org_wide) DO UPDATE SET
1517
+ active = 1,
1518
+ set_by = excluded.set_by,
1519
+ set_at = excluded.set_at,
1520
+ set_ref = excluded.set_ref,
1521
+ cleared_by = NULL,
1522
+ cleared_at = NULL`)
1523
+ .run(org, a.level, a.scopeKey, a.orgWide ? 1 : 0, meta?.setBy ?? null, meta?.setAt ?? new Date().toISOString(), meta?.setRef ?? null);
1524
+ },
1525
+ async clearHalt(org, address, meta, expected) {
1526
+ assertHaltAddress(address);
1527
+ const a = haltAddressColumns(address);
1528
+ // `AND active = 1` is what makes the boolean answer honest: a second resume on an already-clear
1529
+ // address returns false rather than restamping a clear that already happened.
1530
+ const expectedSql = expected ? " AND set_at = ? AND set_by IS ? AND set_ref IS ?" : "";
1531
+ const expectedParams = expected ? [expected.setAt, expected.setBy ?? null, expected.setRef ?? null] : [];
1532
+ return (getDb()
1533
+ .prepare(`UPDATE halt SET active = 0, cleared_by = ?, cleared_at = ? WHERE org_id = ? AND level = ? AND scope_key = ? AND org_wide = ? AND active = 1${expectedSql}`)
1534
+ .run(meta?.clearedBy ?? null, new Date().toISOString(), org, a.level, a.scopeKey, a.orgWide ? 1 : 0, ...expectedParams).changes > 0);
1535
+ },
1536
+ async activeHalts(org) {
1537
+ const rows = getDb()
1538
+ .prepare("SELECT level, scope_key, org_wide, set_by, set_at, set_ref, cleared_by, cleared_at FROM halt WHERE org_id = ? AND active = 1")
1539
+ .all(org);
1540
+ return rows.map((r) => ({
1541
+ org,
1542
+ address: haltAddressFromColumns(r.level, r.scope_key, r.org_wide === 1),
1543
+ active: true,
1544
+ setAt: r.set_at,
1545
+ ...(r.set_by ? { setBy: r.set_by } : {}),
1546
+ ...(r.set_ref ? { setRef: r.set_ref } : {}),
1547
+ ...(r.cleared_by ? { clearedBy: r.cleared_by } : {}),
1548
+ ...(r.cleared_at ? { clearedAt: r.cleared_at } : {}),
1549
+ }));
1550
+ },
1551
+ async setConnectorOverride(org, scopeKey, connector, granted, meta) {
1552
+ getDb()
1553
+ .prepare(`INSERT INTO connector_override (org_id, scope_key, connector, granted, reason, set_by) VALUES (?, ?, ?, ?, ?, ?)
1554
+ ON CONFLICT(org_id, scope_key, connector) DO UPDATE SET
1555
+ granted = excluded.granted,
1556
+ reason = excluded.reason,
1557
+ set_by = excluded.set_by`)
1558
+ .run(org, scopeKey, connector, granted ? 1 : 0, meta?.reason ?? null, meta?.setBy ?? null);
1559
+ },
1560
+ async clearConnectorOverride(org, scopeKey, connector) {
1561
+ return getDb().prepare("DELETE FROM connector_override WHERE org_id = ? AND scope_key = ? AND connector = ?").run(org, scopeKey, connector).changes > 0;
1562
+ },
1563
+ async connectorOverrides(org, scopeKey) {
1564
+ // Hot gate path — only the fields the connector gate needs (stays robust even if a
1565
+ // drift-view column is missing). reason/setBy are read by allConnectorOverrides.
1566
+ const rows = getDb()
1567
+ .prepare("SELECT connector, granted FROM connector_override WHERE org_id = ? AND scope_key = ?")
1568
+ .all(org, scopeKey);
1569
+ return rows.map((r) => ({ connector: r.connector, granted: r.granted === 1 }));
1570
+ },
1571
+ async allConnectorOverrides(org) {
1572
+ const rows = getDb()
1573
+ .prepare("SELECT scope_key, connector, granted, reason, set_by FROM connector_override WHERE org_id = ?")
1574
+ .all(org);
1575
+ return rows.map((r) => ({ scopeKey: r.scope_key, connector: r.connector, granted: r.granted === 1, ...(r.reason ? { reason: r.reason } : {}), ...(r.set_by ? { setBy: r.set_by } : {}) }));
1576
+ },
1577
+ async setDomainModel(org, domain, pick, setBy) {
1578
+ assertDomainModelPick(pick);
1579
+ getDb()
1580
+ .prepare(`INSERT INTO domain_model (org_id, domain, model_id, reasoning, set_by, updated_at) VALUES (?, ?, ?, ?, ?, ?)
1581
+ ON CONFLICT(org_id, domain) DO UPDATE SET
1582
+ model_id = excluded.model_id,
1583
+ reasoning = excluded.reasoning,
1584
+ set_by = excluded.set_by,
1585
+ updated_at = excluded.updated_at`)
1586
+ .run(org, domain, pick.modelId ?? null, pick.reasoning ?? null, setBy ?? null, new Date().toISOString());
1587
+ },
1588
+ async clearDomainModel(org, domain) {
1589
+ return getDb().prepare("DELETE FROM domain_model WHERE org_id = ? AND domain = ?").run(org, domain).changes > 0;
1590
+ },
1591
+ async getDomainModel(org, domain) {
1592
+ const row = getDb()
1593
+ .prepare("SELECT model_id, reasoning, set_by, updated_at FROM domain_model WHERE org_id = ? AND domain = ?")
1594
+ .get(org, domain);
1595
+ if (!row)
1596
+ return null;
1597
+ return {
1598
+ org,
1599
+ domain,
1600
+ ...(row.model_id ? { modelId: row.model_id } : {}),
1601
+ ...(row.reasoning ? { reasoning: row.reasoning } : {}),
1602
+ ...(row.set_by ? { setBy: row.set_by } : {}),
1603
+ updatedAt: row.updated_at,
1604
+ };
1605
+ },
1606
+ async domainModels(org) {
1607
+ const rows = getDb()
1608
+ .prepare("SELECT domain, model_id, reasoning, set_by, updated_at FROM domain_model WHERE org_id = ? ORDER BY domain")
1609
+ .all(org);
1610
+ return rows.map((r) => ({
1611
+ org,
1612
+ domain: r.domain,
1613
+ ...(r.model_id ? { modelId: r.model_id } : {}),
1614
+ ...(r.reasoning ? { reasoning: r.reasoning } : {}),
1615
+ ...(r.set_by ? { setBy: r.set_by } : {}),
1616
+ updatedAt: r.updated_at,
1617
+ }));
1618
+ },
1619
+ async markEngaged(org, surfaceKey, threadTs, at, opts) {
1620
+ // A promotion from any id the row already records NEVER clears stopped: a platform that redelivers one event replays the invitation, and that must not lift a stand-down nobody asked to lift. The statement normalises a legacy bare id ITSELF and must — the boot migration does not run for a non-owner runtime role, and an un-normalised value fails OPEN.
1621
+ // The trim rides a SECOND statement on purpose: the stopped decision and the promoter append have to be ONE atomic statement, and the Postgres twin has no transaction seam. A crash between the two leaves the promoter list one entry over PROMOTER_LIST_MAX, where it stays — bounded, but never self-healed.
1622
+ const participating = opts?.participating ? 1 : 0;
1623
+ const ownerToken = opts?.ownerToken ?? null;
1624
+ const kind = opts?.kind ?? "thread";
1625
+ // FRAMED (`\nID\n`) on both sides of every comparison — see store.ts. `instr` of the framed id
1626
+ // against the framed list is therefore an EXACT membership test, and `replace(list, framed,
1627
+ // SEP) || <framed minus its leading SEP>` removes any existing entry and re-appends it last.
1628
+ const framed = participating === 1 && opts?.engagedBy ? framePromoterId(opts.engagedBy) : null;
1629
+ getDb()
1630
+ .prepare(`INSERT INTO thread_engagement (org_id, surface_key, thread_ts, engaged_at, last_turn_at, participating, silent_streak, owner_token, kind, stopped, engaged_by)
1631
+ VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, 0, ?)
1632
+ ON CONFLICT(org_id, surface_key, thread_ts) DO UPDATE SET
1633
+ last_turn_at = excluded.last_turn_at,
1634
+ participating = MAX(participating, excluded.participating),
1635
+ silent_streak = CASE WHEN excluded.participating = 1 THEN 0 ELSE silent_streak END,
1636
+ owner_token = COALESCE(excluded.owner_token, owner_token),
1637
+ stopped = CASE
1638
+ WHEN excluded.participating = 1
1639
+ AND (excluded.engaged_by IS NULL
1640
+ OR instr(CASE WHEN engaged_by IS NULL OR engaged_by = '' THEN char(10)
1641
+ WHEN substr(engaged_by, 1, 1) = char(10) THEN engaged_by
1642
+ ELSE char(10) || engaged_by || char(10) END,
1643
+ excluded.engaged_by) = 0)
1644
+ THEN 0 ELSE stopped END,
1645
+ engaged_by = CASE
1646
+ WHEN excluded.participating = 1 AND excluded.engaged_by IS NOT NULL
1647
+ THEN replace(CASE WHEN engaged_by IS NULL OR engaged_by = '' THEN char(10)
1648
+ WHEN substr(engaged_by, 1, 1) = char(10) THEN engaged_by
1649
+ ELSE char(10) || engaged_by || char(10) END,
1650
+ excluded.engaged_by, char(10)) || substr(excluded.engaged_by, 2)
1651
+ ELSE engaged_by END`)
1652
+ .run(org, surfaceKey, threadTs, at, at, participating, ownerToken, kind, framed);
1653
+ if (framed === null)
1654
+ return;
1655
+ // THE BOUND. One promotion appends at most one entry, so dropping at most one entry per
1656
+ // promotion holds the list at PROMOTER_LIST_MAX. Entry count is (separators - 1); the drop is
1657
+ // "cut everything up to and including the SECOND separator", which is the oldest entry. Safe on
1658
+ // a legacy value because the statement above has just framed it.
1659
+ getDb()
1660
+ .prepare(`UPDATE thread_engagement
1661
+ SET engaged_by = substr(engaged_by, instr(substr(engaged_by, 2), char(10)) + 1)
1662
+ WHERE org_id = ? AND surface_key = ? AND thread_ts = ?
1663
+ AND engaged_by IS NOT NULL
1664
+ AND length(engaged_by) - length(replace(engaged_by, char(10), '')) - 1 > ?`)
1665
+ .run(org, surfaceKey, threadTs, PROMOTER_LIST_MAX);
1666
+ },
1667
+ async markStopped(org, surfaceKey, threadTs) {
1668
+ // Set the durable stopped marker on an EXISTING row (task #100 follow-up). No INSERT — a
1669
+ // stop only ever applies to a thread that already carries an engagement row (the caller
1670
+ // gates on that). Missing row → 0 changes → false. Idempotent (re-stop is a no-op write).
1671
+ return getDb().prepare("UPDATE thread_engagement SET stopped = 1 WHERE org_id = ? AND surface_key = ? AND thread_ts = ?").run(org, surfaceKey, threadTs).changes > 0;
1672
+ },
1673
+ async bumpSilentStreak(org, surfaceKey, threadTs) {
1674
+ // RETURNING (SQLite ≥3.35) hands back the post-increment value in one statement; a
1675
+ // missing row matches nothing → get() is undefined → 0 (no-op, nothing to shed).
1676
+ const row = getDb()
1677
+ .prepare(`UPDATE thread_engagement SET silent_streak = silent_streak + 1
1678
+ WHERE org_id = ? AND surface_key = ? AND thread_ts = ? RETURNING silent_streak`)
1679
+ .get(org, surfaceKey, threadTs);
1680
+ return row ? row.silent_streak : 0;
1681
+ },
1682
+ async getEngagement(org, surfaceKey, threadTs) {
1683
+ const row = getDb()
1684
+ .prepare("SELECT engaged_at, last_turn_at, participating, silent_streak, owner_token, kind, stopped, engaged_by FROM thread_engagement WHERE org_id = ? AND surface_key = ? AND thread_ts = ?")
1685
+ .get(org, surfaceKey, threadTs);
1686
+ return row
1687
+ ? {
1688
+ org,
1689
+ surfaceKey,
1690
+ threadTs,
1691
+ engagedAt: row.engaged_at,
1692
+ lastTurnAt: row.last_turn_at,
1693
+ participating: row.participating === 1,
1694
+ silentStreak: row.silent_streak,
1695
+ ...(row.owner_token ? { ownerToken: row.owner_token } : {}),
1696
+ kind: row.kind ?? "thread",
1697
+ stopped: row.stopped === 1,
1698
+ ...promoterListField(row.engaged_by),
1699
+ }
1700
+ : null;
1701
+ },
1702
+ async disengage(org, surfaceKey, threadTs) {
1703
+ return getDb().prepare("DELETE FROM thread_engagement WHERE org_id = ? AND surface_key = ? AND thread_ts = ?").run(org, surfaceKey, threadTs).changes > 0;
1704
+ },
1705
+ async listEngagements(org) {
1706
+ const rows = getDb()
1707
+ .prepare("SELECT surface_key, thread_ts, engaged_at, last_turn_at, participating, silent_streak, owner_token, kind, stopped, engaged_by FROM thread_engagement WHERE org_id = ?")
1708
+ .all(org);
1709
+ return rows.map((r) => ({
1710
+ org,
1711
+ surfaceKey: r.surface_key,
1712
+ threadTs: r.thread_ts,
1713
+ engagedAt: r.engaged_at,
1714
+ lastTurnAt: r.last_turn_at,
1715
+ participating: r.participating === 1,
1716
+ silentStreak: r.silent_streak,
1717
+ ...(r.owner_token ? { ownerToken: r.owner_token } : {}),
1718
+ kind: r.kind ?? "thread",
1719
+ stopped: r.stopped === 1,
1720
+ ...promoterListField(r.engaged_by),
1721
+ }));
1722
+ },
1723
+ async getChannelSession(org, surfaceKey) {
1724
+ const row = getDb()
1725
+ .prepare("SELECT token, generation, created_at, last_wake_at, turn_count, input_tokens_total, first_wake_at, last_input_tokens, rotate_marked_at, served_code_fingerprint, served_domain_fingerprint FROM channel_session WHERE org_id = ? AND surface_key = ?")
1726
+ .get(org, surfaceKey);
1727
+ return row
1728
+ ? {
1729
+ org, surfaceKey, token: row.token, generation: row.generation, createdAt: row.created_at,
1730
+ lastWakeAt: row.last_wake_at, turnCount: row.turn_count,
1731
+ inputTokensTotal: row.input_tokens_total == null ? null : Number(row.input_tokens_total),
1732
+ firstWakeAt: row.first_wake_at ?? null,
1733
+ lastInputTokens: row.last_input_tokens == null ? null : Number(row.last_input_tokens),
1734
+ rotateMarkedAt: row.rotate_marked_at ?? null,
1735
+ servedCodeFingerprint: row.served_code_fingerprint ?? null,
1736
+ servedDomainFingerprint: row.served_domain_fingerprint ?? null,
1737
+ }
1738
+ : null;
1739
+ },
1740
+ async stampChannelSessionRuntime(org, surfaceKey, codeFingerprint, domainFingerprint) {
1741
+ // The read reports what the row HELD; the conditional UPDATE decides who ACTS on it, and only
1742
+ // the UPDATE's own `changes` is trusted for that. `IS NOT` is SQLite's null-safe comparison, so
1743
+ // a row that carries no pair at all matches the predicate.
1744
+ //
1745
+ // 🔴 WHY THIS NEEDS NO TRANSACTION. The two statements are synchronous and sit between no
1746
+ // `await`, so nothing else in this process runs between them; across processes SQLite evaluates
1747
+ // the UPDATE's WHERE under the write lock, so exactly one of two racing wakes gets changes = 1.
1748
+ // A loser whose SELECT saw the stale pair still reads changes = 0 and answers "current" — the
1749
+ // seat's generation retires ONCE. The Postgres twin gets the same guarantee from one statement.
1750
+ const handle = getDb();
1751
+ const prev = handle
1752
+ .prepare("SELECT served_code_fingerprint, served_domain_fingerprint FROM channel_session WHERE org_id = ? AND surface_key = ?")
1753
+ .get(org, surfaceKey);
1754
+ if (prev === undefined)
1755
+ return { outcome: "absent", previousCodeFingerprint: null, previousDomainFingerprint: null };
1756
+ const previousCodeFingerprint = prev.served_code_fingerprint ?? null;
1757
+ const previousDomainFingerprint = prev.served_domain_fingerprint ?? null;
1758
+ const info = handle
1759
+ .prepare(`UPDATE channel_session SET served_code_fingerprint = ?, served_domain_fingerprint = ?
1760
+ WHERE org_id = ? AND surface_key = ?
1761
+ AND (served_code_fingerprint IS NOT ? OR served_domain_fingerprint IS NOT ?)`)
1762
+ .run(codeFingerprint, domainFingerprint, org, surfaceKey, codeFingerprint, domainFingerprint);
1763
+ if (Number(info.changes ?? 0) === 0)
1764
+ return { outcome: "current", previousCodeFingerprint, previousDomainFingerprint };
1765
+ // NULL is ADOPTED, never rotated: the row was minted by this same bundle moments ago (the
1766
+ // mint arm writes no pair) or predates the columns, and neither proves the code changed.
1767
+ const outcome = previousCodeFingerprint === null ? "adopted" : "rotate";
1768
+ return { outcome, previousCodeFingerprint, previousDomainFingerprint };
1769
+ },
1770
+ async rotateChannelSession(org, surfaceKey, newToken, at) {
1771
+ const handle = getDb();
1772
+ // In a SQLite UPSERT's DO UPDATE SET an unqualified column reads the PRE-update row and excluded.x reads the proposed values, so generation = generation + 1 bumps atomically in one statement.
1773
+ // Every rotation sets rotate_marked_at = NULL, which SPENDS the operator mark; a mark that survived its own rotation would retire the seat on every wake.
1774
+ const row = handle
1775
+ .prepare(`INSERT INTO channel_session (org_id, surface_key, token, generation, created_at, last_wake_at, turn_count, input_tokens_total, first_wake_at, last_input_tokens, rotate_marked_at)
1776
+ VALUES (?, ?, ?, 1, ?, ?, 0, 0, NULL, NULL, NULL)
1777
+ ON CONFLICT(org_id, surface_key) DO UPDATE SET
1778
+ token = excluded.token,
1779
+ generation = generation + 1,
1780
+ created_at = excluded.created_at,
1781
+ last_wake_at = excluded.last_wake_at,
1782
+ turn_count = 0,
1783
+ input_tokens_total = 0,
1784
+ first_wake_at = NULL,
1785
+ last_input_tokens = NULL,
1786
+ rotate_marked_at = NULL
1787
+ RETURNING generation, served_code_fingerprint, served_domain_fingerprint`)
1788
+ .get(org, surfaceKey, newToken, at, at);
1789
+ const generation = row.generation;
1790
+ // The fingerprint pair is NOT in the INSERT column list and NOT in the DO UPDATE SET, so a fresh
1791
+ // mint starts NULL (adopted by the next wake) and a rotation KEEPS the pair the pre-dispatch
1792
+ // stamp just wrote. Resetting it here would rotate the seat again on its very next wake.
1793
+ return {
1794
+ org, surfaceKey, token: newToken, generation, createdAt: at, lastWakeAt: at, turnCount: 0, inputTokensTotal: 0, firstWakeAt: null, lastInputTokens: null, rotateMarkedAt: null,
1795
+ servedCodeFingerprint: row.served_code_fingerprint ?? null,
1796
+ servedDomainFingerprint: row.served_domain_fingerprint ?? null,
1797
+ };
1798
+ },
1799
+ async markChannelSessionRotation(org, surfaceKey, at) {
1800
+ // UPDATE, never an upsert: a registry key with no row has no generation to retire, and minting
1801
+ // one here would seat a channel nobody woke. COALESCE keeps the FIRST mark's stamp, so a
1802
+ // re-run of the sweep is idempotent and the stamp stays readable as "marked since when".
1803
+ const res = getDb()
1804
+ .prepare("UPDATE channel_session SET rotate_marked_at = COALESCE(rotate_marked_at, ?) WHERE org_id = ? AND surface_key = ?")
1805
+ .run(at, org, surfaceKey);
1806
+ return Number(res.changes ?? 0) > 0;
1807
+ },
1808
+ async touchChannelSession(org, surfaceKey, at) {
1809
+ // first_wake_at set ONCE (COALESCE) — runs only after a successful wake (H7c "delivered").
1810
+ getDb()
1811
+ .prepare("UPDATE channel_session SET last_wake_at = ?, turn_count = turn_count + 1, first_wake_at = COALESCE(first_wake_at, ?) WHERE org_id = ? AND surface_key = ?")
1812
+ .run(at, at, org, surfaceKey);
1813
+ },
1814
+ async bumpChannelSessionUsage(org, surfaceKey, token, delta) {
1815
+ // Token-guarded: only the LIVE generation's row updates, so a straggler step from a
1816
+ // retired generation is a no-op (no phantom counting across a rotation). NULL⇒0 first.
1817
+ // ONE write, TWO rungs (OPE-794): the running SUM is the cumulative backstop's input, the SET
1818
+ // value is the context-size trigger's. They share this statement so they can never disagree
1819
+ // about which step they saw, and the token guard covers both.
1820
+ const res = getDb()
1821
+ .prepare("UPDATE channel_session SET input_tokens_total = COALESCE(input_tokens_total, 0) + ?, last_input_tokens = ? WHERE org_id = ? AND surface_key = ? AND token = ?")
1822
+ .run(delta, delta, org, surfaceKey, token);
1823
+ return Number(res.changes ?? 0);
1824
+ },
1825
+ async listChannelSessions(org, keyPrefix) {
1826
+ const rows = (keyPrefix === undefined
1827
+ ? getDb()
1828
+ .prepare("SELECT surface_key, token, generation, created_at, last_wake_at, turn_count, input_tokens_total, first_wake_at, last_input_tokens, rotate_marked_at, served_code_fingerprint, served_domain_fingerprint FROM channel_session WHERE org_id = ?")
1829
+ .all(org)
1830
+ : getDb()
1831
+ // LIKE with a literal, colon/`::`-only prefix (`oe-domain::`) — no user-controlled
1832
+ // wildcard chars ever reach this call, so a plain concatenation is safe.
1833
+ .prepare("SELECT surface_key, token, generation, created_at, last_wake_at, turn_count, input_tokens_total, first_wake_at, last_input_tokens, rotate_marked_at, served_code_fingerprint, served_domain_fingerprint FROM channel_session WHERE org_id = ? AND surface_key LIKE ?")
1834
+ .all(org, `${keyPrefix}%`));
1835
+ return rows.map((r) => ({
1836
+ org, surfaceKey: r.surface_key, token: r.token, generation: r.generation, createdAt: r.created_at,
1837
+ lastWakeAt: r.last_wake_at, turnCount: r.turn_count,
1838
+ inputTokensTotal: r.input_tokens_total == null ? null : Number(r.input_tokens_total),
1839
+ firstWakeAt: r.first_wake_at ?? null,
1840
+ lastInputTokens: r.last_input_tokens == null ? null : Number(r.last_input_tokens),
1841
+ rotateMarkedAt: r.rotate_marked_at ?? null,
1842
+ servedCodeFingerprint: r.served_code_fingerprint ?? null,
1843
+ servedDomainFingerprint: r.served_domain_fingerprint ?? null,
1844
+ }));
1845
+ },
1846
+ // The tail ring is bounded ON WRITE, in the same statement batch as the insert. A ring pruned by a sweep has a window where a hot generation is unbounded, and this table takes a write on every wake and every post.
1847
+ async appendSessionTail(org, surfaceKey, token, entry) {
1848
+ const handle = getDb();
1849
+ const next = handle
1850
+ .prepare("SELECT COALESCE(MAX(seq), 0) + 1 AS seq FROM session_tail WHERE org_id = ? AND surface_key = ? AND token = ?")
1851
+ .get(org, surfaceKey, token);
1852
+ handle
1853
+ .prepare("INSERT INTO session_tail (org_id, surface_key, token, seq, at, entry_json) VALUES (?, ?, ?, ?, ?, ?)")
1854
+ .run(org, surfaceKey, token, next.seq, entry.at, JSON.stringify(entry));
1855
+ handle
1856
+ .prepare(`DELETE FROM session_tail
1857
+ WHERE org_id = ? AND surface_key = ? AND token = ?
1858
+ AND seq <= ?`)
1859
+ .run(org, surfaceKey, token, next.seq - SESSION_TAIL_MAX_ENTRIES);
1860
+ },
1861
+ async readSessionTail(org, surfaceKey, token) {
1862
+ const rows = getDb()
1863
+ .prepare("SELECT entry_json FROM session_tail WHERE org_id = ? AND surface_key = ? AND token = ? ORDER BY seq ASC")
1864
+ .all(org, surfaceKey, token);
1865
+ // A row whose JSON no longer parses is DROPPED, not thrown on: this feeds a wake, and one bad
1866
+ // row must never cost the whole tail. There is no schema version to negotiate — the entry is
1867
+ // written and read by the same deployment within one generation's lifetime.
1868
+ const out = [];
1869
+ for (const r of rows) {
1870
+ try {
1871
+ out.push(JSON.parse(r.entry_json));
1872
+ }
1873
+ catch {
1874
+ /* unreadable entry — skip it, keep the rest of the tail */
1875
+ }
1876
+ }
1877
+ return out;
1878
+ },
1879
+ async clearSessionTail(org, surfaceKey, token) {
1880
+ getDb().prepare("DELETE FROM session_tail WHERE org_id = ? AND surface_key = ? AND token = ?").run(org, surfaceKey, token);
1881
+ },
1882
+ // The ring's only mutation: rewrite ONE post row's text after edit_reply's platform-confirmed success.
1883
+ // The match runs in JS on the parsed rows because entry_json is opaque to this store, and the post-kind test guards a wake row carrying the same platform message id.
1884
+ async editSessionTailPost(org, surfaceKey, token, messageId, text) {
1885
+ const rows = getDb()
1886
+ .prepare("SELECT seq, entry_json FROM session_tail WHERE org_id = ? AND surface_key = ? AND token = ? ORDER BY seq DESC")
1887
+ .all(org, surfaceKey, token);
1888
+ for (const r of rows) {
1889
+ let entry;
1890
+ try {
1891
+ entry = JSON.parse(r.entry_json);
1892
+ }
1893
+ catch {
1894
+ continue; // an unreadable row can't be the match — readSessionTail drops it too
1895
+ }
1896
+ if (entry.kind !== "post" || entry.id !== messageId)
1897
+ continue;
1898
+ const updated = { ...entry, text };
1899
+ getDb()
1900
+ .prepare("UPDATE session_tail SET entry_json = ? WHERE org_id = ? AND surface_key = ? AND token = ? AND seq = ?")
1901
+ .run(JSON.stringify(updated), org, surfaceKey, token, r.seq);
1902
+ return true;
1903
+ }
1904
+ return false;
1905
+ },
1906
+ async listDomainSkills(org, domain) {
1907
+ const rows = getDb()
1908
+ .prepare("SELECT name, content, updated_by, updated_at FROM domain_skill WHERE org_id = ? AND domain = ? ORDER BY name")
1909
+ .all(org, domain);
1910
+ return rows.map((r) => ({
1911
+ org,
1912
+ domain,
1913
+ name: r.name,
1914
+ content: r.content,
1915
+ ...(r.updated_by ? { updatedBy: r.updated_by } : {}),
1916
+ updatedAt: r.updated_at,
1917
+ }));
1918
+ },
1919
+ async putDomainSkill(org, domain, name, content, updatedBy, updatedAt, provenance) {
1920
+ // REVISION FIRST, then the destructive upsert — same reasoning as the Postgres adapter:
1921
+ // if the two tear, over-record (an extra revision for a body that failed to arm) rather
1922
+ // than under-record (a live body with no record of what an approver agreed to).
1923
+ getDb()
1924
+ .prepare(`INSERT INTO domain_skill_revisions (org_id, domain, name, content, authored_by, armed_by, approval_id, recorded_at)
1925
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
1926
+ .run(org, domain, name, content, updatedBy ?? null, provenance?.armedBy ?? null, provenance?.approvalId ?? null, updatedAt);
1927
+ getDb()
1928
+ .prepare(`INSERT INTO domain_skill (org_id, domain, name, content, updated_by, updated_at) VALUES (?, ?, ?, ?, ?, ?)
1929
+ ON CONFLICT(org_id, domain, name) DO UPDATE SET
1930
+ content = excluded.content,
1931
+ updated_by = excluded.updated_by,
1932
+ updated_at = excluded.updated_at`)
1933
+ .run(org, domain, name, content, updatedBy ?? null, updatedAt);
1934
+ },
1935
+ async deleteDomainSkill(org, domain, name) {
1936
+ return getDb().prepare("DELETE FROM domain_skill WHERE org_id = ? AND domain = ? AND name = ?").run(org, domain, name).changes > 0;
1937
+ },
1938
+ async listDomainSkillRevisions(org, domain, name) {
1939
+ const rows = getDb()
1940
+ .prepare(`SELECT seq, name, content, authored_by, armed_by, approval_id, recorded_at
1941
+ FROM domain_skill_revisions
1942
+ WHERE org_id = ? AND domain = ? AND (? IS NULL OR name = ?)
1943
+ ORDER BY seq`)
1944
+ .all(org, domain, name ?? null, name ?? null);
1945
+ return rows.map((r) => ({
1946
+ seq: Number(r.seq),
1947
+ org,
1948
+ domain,
1949
+ name: r.name,
1950
+ content: r.content,
1951
+ ...(r.authored_by ? { authoredBy: r.authored_by } : {}),
1952
+ ...(r.armed_by ? { armedBy: r.armed_by } : {}),
1953
+ ...(r.approval_id ? { approvalId: r.approval_id } : {}),
1954
+ recordedAt: r.recorded_at,
1955
+ }));
1956
+ },
1957
+ async appendUsageEvent(entry) {
1958
+ getDb()
1959
+ .prepare(`INSERT INTO usage_events
1960
+ (org_id, surface_key, session_id, principal_id, ts, kind, routine_id,
1961
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, model, detail,
1962
+ usd_micros_measured, cost_source, delegation_depth, root_session_id,
1963
+ cache_tokens_reported, reasoning_tokens, surface_mode)
1964
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
1965
+ .run(entry.org, entry.surfaceKey, entry.sessionId, entry.principalId ?? null, entry.ts, entry.kind ?? null, entry.routineId ?? null, entry.inputTokens, entry.outputTokens, entry.cacheReadTokens, entry.cacheWriteTokens, entry.model ?? null, entry.detail ? JSON.stringify(entry.detail) : null,
1966
+ // `?? null` on all four, never `?? 0`/`?? ''`: a NULL says "this writer had nothing to
1967
+ // report", which is a different fact from a measured zero or a root turn's depth 0.
1968
+ entry.usdMicrosMeasured ?? null, entry.costSource ?? null, entry.delegationDepth ?? null, entry.rootSessionId ?? null,
1969
+ // OPE-1611, same `?? null` discipline: NULL is "nothing was reported". node:sqlite has no
1970
+ // boolean, so the flag stores 1/0 and reads back through the same `!= null` test.
1971
+ entry.cacheTokensReported === undefined ? null : entry.cacheTokensReported ? 1 : 0, entry.reasoningTokens ?? null,
1972
+ // OPE-1862, same discipline: NULL says "no binding stamped this row", and a report masks
1973
+ // such a row. It is never inferred from the surface id.
1974
+ entry.surfaceMode ?? null);
1975
+ },
1976
+ async usageForSession(org, sessionId) {
1977
+ const rows = getDb()
1978
+ .prepare(`SELECT surface_key, session_id, principal_id, ts, kind, routine_id,
1979
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, model, detail,
1980
+ usd_micros_measured, cost_source, delegation_depth, root_session_id,
1981
+ cache_tokens_reported, reasoning_tokens, surface_mode
1982
+ FROM usage_events WHERE org_id = ? AND session_id = ? ORDER BY seq ASC`)
1983
+ .all(org, sessionId);
1984
+ return rows.map((r) => usageEventFromRow(org, r));
1985
+ },
1986
+ async usageSummary(org, filter = {}) {
1987
+ const where = ["org_id = ?"];
1988
+ const params = [org];
1989
+ if (filter.surfaceKeyPrefix !== undefined) {
1990
+ where.push("surface_key LIKE ?");
1991
+ params.push(`${filter.surfaceKeyPrefix}%`);
1992
+ }
1993
+ if (filter.sinceTs !== undefined) {
1994
+ where.push("ts >= ?");
1995
+ params.push(filter.sinceTs);
1996
+ }
1997
+ if (filter.untilTs !== undefined) {
1998
+ where.push("ts <= ?");
1999
+ params.push(filter.untilTs);
2000
+ }
2001
+ // OPE-402: exclude rows whose session had ANY recorded usage event before the bound — the
2002
+ // session-scoped half of the leak sinceTs alone cannot close (see UsageSummaryFilter's doc).
2003
+ // Rides the existing (org_id, session_id) index (usage_events_org_session).
2004
+ if (filter.sessionStartedAfter !== undefined) {
2005
+ where.push("session_id IN (SELECT session_id FROM usage_events WHERE org_id = ? GROUP BY session_id HAVING MIN(ts) >= ?)");
2006
+ params.push(org, filter.sessionStartedAfter);
2007
+ }
2008
+ const rows = getDb()
2009
+ .prepare(`SELECT surface_key, principal_id, kind, routine_id, model, surface_mode,
2010
+ SUM(input_tokens) AS input_tokens, SUM(output_tokens) AS output_tokens,
2011
+ SUM(cache_read_tokens) AS cache_read_tokens, SUM(cache_write_tokens) AS cache_write_tokens,
2012
+ -- OPE-1611: the attribution dimension AND its coverage. COALESCE keeps the sum an
2013
+ -- integer when every row is NULL; the two counts say how many calls actually
2014
+ -- reported, so a reader never mistakes an all-NULL group's 0 for "no caching".
2015
+ -- (sqlite has no FILTER clause here, so the flag count is a SUM over 1/0.)
2016
+ COALESCE(SUM(reasoning_tokens), 0) AS reasoning_tokens,
2017
+ COALESCE(SUM(CASE WHEN cache_tokens_reported = 1 THEN 1 ELSE 0 END), 0) AS cache_reported_calls,
2018
+ COUNT(reasoning_tokens) AS reasoning_reported_calls,
2019
+ COUNT(*) AS events, COUNT(DISTINCT session_id) AS sessions
2020
+ FROM usage_events WHERE ${where.join(" AND ")}
2021
+ -- OPE-1862: surface_mode joins the GRAIN rather than riding along as MAX(). A group must
2022
+ -- be homogeneous in every column it reports, and one surface can hold both unstamped
2023
+ -- legacy rows and stamped new ones; those two masks differently, so they must not blend.
2024
+ GROUP BY surface_key, principal_id, kind, routine_id, model, surface_mode`)
2025
+ .all(...params);
2026
+ return rows.map((r) => ({
2027
+ surfaceKey: r.surface_key,
2028
+ ...(r.principal_id ? { principalId: r.principal_id } : {}),
2029
+ ...(r.kind ? { kind: r.kind } : {}),
2030
+ ...(r.routine_id ? { routineId: r.routine_id } : {}),
2031
+ ...(r.model ? { model: r.model } : {}),
2032
+ ...(() => {
2033
+ const mode = asSurfaceMode(r.surface_mode);
2034
+ return mode ? { surfaceMode: mode } : {};
2035
+ })(),
2036
+ inputTokens: r.input_tokens,
2037
+ outputTokens: r.output_tokens,
2038
+ cacheReadTokens: r.cache_read_tokens,
2039
+ cacheWriteTokens: r.cache_write_tokens,
2040
+ reasoningTokens: r.reasoning_tokens,
2041
+ cacheReportedCalls: r.cache_reported_calls,
2042
+ reasoningReportedCalls: r.reasoning_reported_calls,
2043
+ events: r.events,
2044
+ sessions: r.sessions,
2045
+ }));
2046
+ },
2047
+ async pruneUsageEvents(org, olderThanTs) {
2048
+ // node:sqlite types `changes` as `number | bigint`; this DB never runs with
2049
+ // BigInt result mode, but the type needs a plain Number() to satisfy the
2050
+ // Promise<number> contract.
2051
+ return Number(getDb().prepare("DELETE FROM usage_events WHERE org_id = ? AND ts < ?").run(org, olderThanTs).changes);
2052
+ },
2053
+ async appendModelCallCapture(write) {
2054
+ getDb()
2055
+ .prepare(`INSERT INTO model_call_capture
2056
+ (org_id, surface_key, session_id, turn_id, step_index, ts, model, provider,
2057
+ schema_version, sha256, body_bytes, body_gzip_b64, truncated)
2058
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2059
+ .run(write.org, write.surfaceKey, write.sessionId, write.turnId, write.stepIndex, write.ts, write.model, write.provider, write.schemaVersion, write.sha256, write.bodyBytes, write.bodyGzipB64, write.truncated ? 1 : 0);
2060
+ },
2061
+ async modelCallCapturesForSession(org, sessionId, opts = {}) {
2062
+ const includeBody = opts.includeBody !== false;
2063
+ // The body column is selected only when asked for. A metadata read of a 200-row soak session
2064
+ // otherwise drags tens of MB of prompt bytes through the process for a count.
2065
+ const bodyCol = includeBody ? "body_gzip_b64" : "'' AS body_gzip_b64";
2066
+ const where = ["org_id = ?", "session_id = ?"];
2067
+ const params = [org, sessionId];
2068
+ if (opts.turnId !== undefined) {
2069
+ where.push("turn_id = ?");
2070
+ params.push(opts.turnId);
2071
+ }
2072
+ const limit = opts.limit !== undefined ? ` LIMIT ${Math.max(0, Math.floor(opts.limit))}` : "";
2073
+ const rows = getDb()
2074
+ .prepare(`SELECT seq, surface_key, session_id, turn_id, step_index, ts, model, provider,
2075
+ schema_version, sha256, body_bytes, ${bodyCol}, truncated
2076
+ FROM model_call_capture WHERE ${where.join(" AND ")} ORDER BY seq ASC${limit}`)
2077
+ .all(...params);
2078
+ return rows.map((r) => modelCallCaptureFromRow(org, r));
2079
+ },
2080
+ async modelCallCaptureSessions(org) {
2081
+ const rows = getDb()
2082
+ .prepare(`SELECT session_id, MIN(ts) AS first_ts, MAX(ts) AS last_ts, COUNT(*) AS row_count, SUM(body_bytes) AS total_bytes
2083
+ FROM model_call_capture WHERE org_id = ?
2084
+ GROUP BY session_id
2085
+ ORDER BY MAX(ts) DESC`)
2086
+ .all(org);
2087
+ return rows.map((r) => ({
2088
+ sessionId: r.session_id,
2089
+ firstTs: r.first_ts,
2090
+ lastTs: r.last_ts,
2091
+ rowCount: Number(r.row_count),
2092
+ totalBytes: Number(r.total_bytes ?? 0),
2093
+ }));
2094
+ },
2095
+ async deleteModelCallCapturesForSession(org, sessionId) {
2096
+ return Number(getDb().prepare("DELETE FROM model_call_capture WHERE org_id = ? AND session_id = ?").run(org, sessionId).changes);
2097
+ },
2098
+ async addMemoryProposal(write) {
2099
+ const result = getDb()
2100
+ .prepare(`INSERT INTO memory_proposal (org_id, kind, scope, summary, before_text, after_text, detail_json, principal_id, created_at)
2101
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2102
+ .run(write.org, write.kind, write.scope, write.summary, write.before ?? null, write.after ?? null, write.detail ? JSON.stringify(write.detail) : null, write.principalId, write.createdAt);
2103
+ return { ...write, id: Number(result.lastInsertRowid) };
2104
+ },
2105
+ async listMemoryProposals(org) {
2106
+ const rows = getDb()
2107
+ .prepare(`SELECT id, kind, scope, summary, before_text, after_text, detail_json, principal_id, created_at
2108
+ FROM memory_proposal WHERE org_id = ? ORDER BY id DESC`)
2109
+ .all(org);
2110
+ return rows.map((r) => ({
2111
+ id: r.id,
2112
+ org,
2113
+ kind: r.kind,
2114
+ scope: r.scope,
2115
+ summary: r.summary,
2116
+ ...(r.before_text !== null ? { before: r.before_text } : {}),
2117
+ ...(r.after_text !== null ? { after: r.after_text } : {}),
2118
+ ...(r.detail_json ? { detail: JSON.parse(r.detail_json) } : {}),
2119
+ principalId: r.principal_id,
2120
+ createdAt: r.created_at,
2121
+ }));
2122
+ },
2123
+ async getDmAudience(org, address) {
2124
+ const row = getDb()
2125
+ .prepare("SELECT address, first_dm_at, stopped_at FROM dm_audience WHERE org_id = ? AND address = ?")
2126
+ .get(org, address);
2127
+ return row ? dmAudienceRowFrom(row) : null;
2128
+ },
2129
+ async markDmAudienceDelivered(org, address, at) {
2130
+ // COALESCE keeps the ORIGINAL first_dm_at — see store.ts's method doc. `stopped_at` is not in the
2131
+ // update list at all, so a delivery can never clear a stop even if a caller raced one.
2132
+ getDb()
2133
+ .prepare(`INSERT INTO dm_audience (org_id, address, first_dm_at, stopped_at) VALUES (?, ?, ?, NULL)
2134
+ ON CONFLICT (org_id, address) DO UPDATE SET first_dm_at = COALESCE(dm_audience.first_dm_at, excluded.first_dm_at)`)
2135
+ .run(org, address, at);
2136
+ },
2137
+ async setDmAudienceStopped(org, address, at) {
2138
+ // COALESCE for the same reason as above, in the other direction: a second stop keeps the FIRST
2139
+ // stopped_at, so the trail records when the boundary was first drawn rather than last repeated.
2140
+ getDb()
2141
+ .prepare(`INSERT INTO dm_audience (org_id, address, first_dm_at, stopped_at) VALUES (?, ?, NULL, ?)
2142
+ ON CONFLICT (org_id, address) DO UPDATE SET stopped_at = COALESCE(dm_audience.stopped_at, excluded.stopped_at)`)
2143
+ .run(org, address, at);
2144
+ },
2145
+ async clearDmAudienceStopped(org, address) {
2146
+ // The `stopped_at IS NOT NULL` conjunct is what makes the return value honest: `changes` counts
2147
+ // rows the UPDATE actually altered, so a row that was never stopped answers false rather than
2148
+ // reporting a resume that resumed nothing.
2149
+ return (getDb()
2150
+ .prepare("UPDATE dm_audience SET stopped_at = NULL WHERE org_id = ? AND address = ? AND stopped_at IS NOT NULL")
2151
+ .run(org, address).changes > 0);
2152
+ },
2153
+ async listDmAudience(org) {
2154
+ const rows = getDb()
2155
+ .prepare("SELECT address, first_dm_at, stopped_at FROM dm_audience WHERE org_id = ? ORDER BY address")
2156
+ .all(org);
2157
+ return rows.map(dmAudienceRowFrom);
2158
+ },
2159
+ async runAnalyticsQuery(compiled) {
2160
+ // OPE-66: assemble the SELECT-only statement with `?` placeholders (the SQLite style) and run it.
2161
+ // Every non-param token is registry-derived; only `params` bind. node:sqlite returns bigints as
2162
+ // JS numbers here (no BigInt result mode), so the plain objects need no coercion at this layer.
2163
+ const { sql, params } = assembleAnalyticsSql(compiled, "qmark");
2164
+ return getDb().prepare(sql).all(...params);
2165
+ },
2166
+ async enqueueIngressDelivery(org, write) {
2167
+ const handle = getDb();
2168
+ // Completed rows contain no payload and exist only to suppress a vendor replay. Prune them on
2169
+ // the next enqueue for this org/source; pending rows carry NULL and are never clock-expired.
2170
+ handle
2171
+ .prepare("DELETE FROM ingress_delivery WHERE org_id = ? AND source = ? AND completed_at IS NOT NULL AND retain_until IS NOT NULL AND retain_until <= ?")
2172
+ .run(org, write.source, write.receivedAt);
2173
+ const info = handle
2174
+ .prepare(`INSERT OR IGNORE INTO ingress_delivery
2175
+ (org_id, source, authority_id, delivery_id, payload_json, received_at, available_at)
2176
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
2177
+ .run(org, write.source, write.authorityId, write.deliveryId, write.payloadJson, write.receivedAt, write.receivedAt);
2178
+ return info.changes > 0;
2179
+ },
2180
+ async listDueIngressDeliveries(org, source, nowIso, staleBeforeIso, limit) {
2181
+ const rows = getDb()
2182
+ .prepare(`SELECT authority_id, delivery_id, received_at, available_at
2183
+ FROM ingress_delivery
2184
+ WHERE org_id = ? AND source = ? AND completed_at IS NULL AND payload_json IS NOT NULL
2185
+ AND available_at <= ?
2186
+ AND (claim_id IS NULL OR (claimed_at IS NOT NULL AND claimed_at <= ?))
2187
+ ORDER BY received_at ASC, authority_id ASC, delivery_id ASC
2188
+ LIMIT ?`)
2189
+ .all(org, source, nowIso, staleBeforeIso, Math.max(0, Math.trunc(limit)));
2190
+ return rows.map((row) => ({
2191
+ source,
2192
+ authorityId: row.authority_id,
2193
+ deliveryId: row.delivery_id,
2194
+ receivedAt: row.received_at,
2195
+ availableAt: row.available_at,
2196
+ }));
2197
+ },
2198
+ async claimIngressDelivery(org, key, claimId, claimedAtIso, staleBeforeIso) {
2199
+ const row = getDb()
2200
+ .prepare(`UPDATE ingress_delivery SET claim_id = ?, claimed_at = ?
2201
+ WHERE org_id = ? AND source = ? AND authority_id = ? AND delivery_id = ?
2202
+ AND completed_at IS NULL AND payload_json IS NOT NULL AND available_at <= ?
2203
+ AND (claim_id IS NULL OR (claimed_at IS NOT NULL AND claimed_at <= ?))
2204
+ RETURNING payload_json, received_at, available_at`)
2205
+ .get(claimId, claimedAtIso, org, key.source, key.authorityId, key.deliveryId, claimedAtIso, staleBeforeIso);
2206
+ return row
2207
+ ? {
2208
+ ...key,
2209
+ payloadJson: row.payload_json,
2210
+ receivedAt: row.received_at,
2211
+ availableAt: row.available_at,
2212
+ claimId,
2213
+ claimedAt: claimedAtIso,
2214
+ }
2215
+ : null;
2216
+ },
2217
+ async releaseIngressDelivery(org, key, claimId, availableAtIso) {
2218
+ const info = getDb()
2219
+ .prepare(`UPDATE ingress_delivery SET claim_id = NULL, claimed_at = NULL, available_at = ?
2220
+ WHERE org_id = ? AND source = ? AND authority_id = ? AND delivery_id = ?
2221
+ AND completed_at IS NULL AND claim_id = ?`)
2222
+ .run(availableAtIso, org, key.source, key.authorityId, key.deliveryId, claimId);
2223
+ return info.changes > 0;
2224
+ },
2225
+ async completeIngressDelivery(org, key, claimId, completedAtIso, retainUntilIso) {
2226
+ assertIngressDeliveryRetainUntil(completedAtIso, retainUntilIso);
2227
+ const info = getDb()
2228
+ .prepare(`UPDATE ingress_delivery
2229
+ SET payload_json = NULL, claim_id = NULL, claimed_at = NULL,
2230
+ completed_at = ?, retain_until = ?
2231
+ WHERE org_id = ? AND source = ? AND authority_id = ? AND delivery_id = ?
2232
+ AND completed_at IS NULL AND claim_id = ?`)
2233
+ .run(completedAtIso, retainUntilIso, org, key.source, key.authorityId, key.deliveryId, claimId);
2234
+ return info.changes > 0;
2235
+ },
2236
+ async discardIngressDelivery(org, key, claimId) {
2237
+ const info = getDb()
2238
+ .prepare(`DELETE FROM ingress_delivery
2239
+ WHERE org_id = ? AND source = ? AND authority_id = ? AND delivery_id = ?
2240
+ AND completed_at IS NULL AND claim_id = ?`)
2241
+ .run(org, key.source, key.authorityId, key.deliveryId, claimId);
2242
+ return info.changes > 0;
2243
+ },
2244
+ async markEventSeen(org, key, at, ttlMs) {
2245
+ const handle = getDb();
2246
+ // Opportunistic prune keeps the table bounded without a scheduled job; ISO timestamps compare
2247
+ // lexicographically so string < works. TWO clauses, both ORG-SCOPED (see store.ts):
2248
+ // • the caller's `ttlMs`, applied to THIS KEY ONLY — the table is shared by callers whose
2249
+ // windows differ by an order of magnitude (60 s postOnce vs 10 min Slack retry dedupe), so
2250
+ // a bare TTL sweep let the shortest-TTL caller expire everyone else's keys;
2251
+ // • a fixed 24 h housekeeping ceiling for everything else this org wrote.
2252
+ const atMs = Date.parse(at);
2253
+ const ttlCutoff = new Date(atMs - ttlMs).toISOString();
2254
+ const maxCutoff = new Date(atMs - EVENT_DEDUPE_MAX_RETENTION_MS).toISOString();
2255
+ handle
2256
+ .prepare("DELETE FROM event_dedupe WHERE org_id = ? AND (seen_at < ? OR (key = ? AND seen_at < ?))")
2257
+ .run(org, maxCutoff, key, ttlCutoff);
2258
+ // INSERT OR IGNORE is the atomic first-sighting check: exactly one of two
2259
+ // racing inserts lands (changes=1); the loser sees changes=0 → duplicate.
2260
+ const info = handle.prepare("INSERT OR IGNORE INTO event_dedupe (org_id, key, seen_at) VALUES (?, ?, ?)").run(org, key, at);
2261
+ return info.changes > 0;
2262
+ },
2263
+ async claimNotice(org, key, at) {
2264
+ // INSERT OR IGNORE is the atomic claim, exactly as markEventSeen's is: one of two racing callers
2265
+ // lands the row (changes=1) and announces; the loser sees changes=0 and stays quiet.
2266
+ // NO DELETE PATH — a claim is a lifetime record, and dropping one lets the thing it records
2267
+ // happen a second time. Every key space on this table is bounded by the thing it records.
2268
+ const info = getDb().prepare("INSERT OR IGNORE INTO notice_claim (org_id, key, claimed_at) VALUES (?, ?, ?)").run(org, key, at);
2269
+ return info.changes > 0;
2270
+ },
2271
+ async noticeClaimed(org, key) {
2272
+ const row = getDb().prepare("SELECT 1 FROM notice_claim WHERE org_id = ? AND key = ? LIMIT 1").get(org, key);
2273
+ return row !== undefined;
2274
+ },
2275
+ async recordProactiveAddress(org, row) {
2276
+ getDb()
2277
+ .prepare(`INSERT INTO proactive_address (org_id, platform, kind, ref_key, tenant, address, updated_at)
2278
+ VALUES (?, ?, ?, ?, ?, ?, ?)
2279
+ ON CONFLICT(org_id, platform, kind, ref_key) DO UPDATE SET
2280
+ tenant = excluded.tenant, address = excluded.address, updated_at = excluded.updated_at`)
2281
+ .run(org, row.platform, row.kind, row.refKey, row.tenant, JSON.stringify(row.address ?? {}), row.updatedAt);
2282
+ },
2283
+ async proactiveAddress(org, platform, kind, refKey) {
2284
+ const row = getDb()
2285
+ .prepare("SELECT tenant, address, updated_at FROM proactive_address WHERE org_id = ? AND platform = ? AND kind = ? AND ref_key = ?")
2286
+ .get(org, platform, kind, refKey);
2287
+ return row ? proactiveAddressRow(platform, kind, refKey, row.tenant, row.address, row.updated_at) : undefined;
2288
+ },
2289
+ async proactiveAddresses(org, platform, kind, limit) {
2290
+ const rows = getDb()
2291
+ .prepare(`SELECT ref_key, tenant, address, updated_at FROM proactive_address
2292
+ WHERE org_id = ? AND platform = ? AND kind = ? ORDER BY updated_at DESC LIMIT ?`)
2293
+ .all(org, platform, kind, Math.max(0, Math.trunc(limit)));
2294
+ return rows.map((r) => proactiveAddressRow(platform, kind, r.ref_key, r.tenant, r.address, r.updated_at));
2295
+ },
2296
+ async hasEventSeen(org, key, at, ttlMs) {
2297
+ // READ-ONLY twin of markEventSeen: same cutoff arithmetic, no write, no prune. A caller uses
2298
+ // this to check "is this already marked" before deciding whether marking is even safe.
2299
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2300
+ const row = getDb()
2301
+ .prepare("SELECT 1 FROM event_dedupe WHERE org_id = ? AND key = ? AND seen_at >= ? LIMIT 1")
2302
+ .get(org, key, cutoff);
2303
+ return row !== undefined;
2304
+ },
2305
+ async forgetEventSeen(org, key) {
2306
+ // ONE row, org-scoped and keyed — never a sweep. See the interface note for when a claim is
2307
+ // given back (OPE-821: a DEFINITIVE post failure, so an identical retry can really post).
2308
+ getDb().prepare("DELETE FROM event_dedupe WHERE org_id = ? AND key = ?").run(org, key);
2309
+ },
2310
+ async captureDelivery(org, source, documentJson, at, captureUntil, maxRows) {
2311
+ const handle = getDb();
2312
+ const atMs = Date.parse(at);
2313
+ // A NON-PARSEABLE `at` FAILS CLOSED. Every other TTL-pruned table in this file derives a cutoff
2314
+ // from `Date.parse(at)` and would compute `Invalid Date` on a bad stamp; here that would mean a
2315
+ // sweep that deletes nothing while the insert still lands, i.e. the one table whose bound must
2316
+ // hold silently losing it. Refusing to capture costs a sample.
2317
+ if (!Number.isFinite(atMs))
2318
+ return false;
2319
+ // BOUND 1 — the absolute age sweep, ORG-SCOPED, and FIRST so it runs even on a write the window
2320
+ // is about to refuse. This is the bound that holds when the other two are wrong.
2321
+ const maxCutoff = new Date(atMs - CAPTURE_MAX_RETENTION_MS).toISOString();
2322
+ handle.prepare("DELETE FROM webhook_capture WHERE org_id = ? AND captured_at < ?").run(org, maxCutoff);
2323
+ // BOUND 2 — the window closed on TIME. Compared as instants, not as strings: `captureUntil` is
2324
+ // minted by the arming path and a lexicographic comparison would quietly do the wrong thing on
2325
+ // any stamp that is not Z-normalised.
2326
+ const untilMs = Date.parse(captureUntil);
2327
+ if (!Number.isFinite(untilMs) || atMs >= untilMs)
2328
+ return false;
2329
+ // BOUND 3 — the window closed on VOLUME. The row count IS the counter, so there is no separate
2330
+ // tally that can drift from the rows it claims to count.
2331
+ const row = handle
2332
+ .prepare("SELECT COUNT(*) AS n, COALESCE(MAX(seq), 0) AS maxSeq FROM webhook_capture WHERE org_id = ? AND source = ?")
2333
+ .get(org, source);
2334
+ if (row.n >= maxRows)
2335
+ return false;
2336
+ handle
2337
+ .prepare("INSERT INTO webhook_capture (org_id, source, seq, captured_at, document) VALUES (?, ?, ?, ?, ?)")
2338
+ .run(org, source, row.maxSeq + 1, at, documentJson);
2339
+ return true;
2340
+ },
2341
+ async listCapturedDeliveries(org, source, limit) {
2342
+ const rows = getDb()
2343
+ .prepare("SELECT seq, captured_at, document FROM webhook_capture WHERE org_id = ? AND source = ? ORDER BY seq ASC LIMIT ?")
2344
+ .all(org, source, limit);
2345
+ return rows.map((r) => ({ seq: r.seq, capturedAt: r.captured_at, documentJson: r.document }));
2346
+ },
2347
+ async clearCapturedDeliveries(org, source) {
2348
+ getDb().prepare("DELETE FROM webhook_capture WHERE org_id = ? AND source = ?").run(org, source);
2349
+ },
2350
+ async putUnifiedWakeTarget(org, wakeId, targetJson, at, ttlMs, windowToken, inbound) {
2351
+ const handle = getDb();
2352
+ // Opportunistic TTL prune, same posture as markEventSeen (bounded table, no scheduled job).
2353
+ // ORG-SCOPED (matches the postgres backend): one org's write never touches another org's rows.
2354
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2355
+ handle.prepare("DELETE FROM unified_wake_target WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2356
+ handle
2357
+ .prepare(
2358
+ // 🔴 The conflict clause updates target_json/created_at/window_token and NEVER the answered
2359
+ // columns — a redrive/webhook-retry re-register must not clear (or resurrect) a mark.
2360
+ // 🔴 `inbound` is STICKY-TRUE (MAX over the two sides), unlike every other updated column:
2361
+ // the redrive re-registers an EXISTING wake id as an INTERNAL dispatch, and a plain
2362
+ // overwrite would clear the flag on a row a human's message created.
2363
+ `INSERT INTO unified_wake_target (org_id, wake_id, target_json, created_at, window_token, inbound) VALUES (?, ?, ?, ?, ?, ?)
2364
+ ON CONFLICT (org_id, wake_id) DO UPDATE SET target_json = excluded.target_json, created_at = excluded.created_at, window_token = excluded.window_token,
2365
+ inbound = MAX(COALESCE(excluded.inbound, 0), COALESCE(unified_wake_target.inbound, 0))`)
2366
+ .run(org, wakeId, targetJson, at, windowToken ?? null, inbound === true ? 1 : 0);
2367
+ },
2368
+ async getUnifiedWakeTarget(org, wakeId) {
2369
+ const row = getDb().prepare("SELECT target_json FROM unified_wake_target WHERE org_id = ? AND wake_id = ?").get(org, wakeId);
2370
+ return row?.target_json ?? null;
2371
+ },
2372
+ async getUnifiedWakeRecord(org, wakeId) {
2373
+ const row = getDb()
2374
+ .prepare("SELECT target_json, created_at, window_token, answered_at, answered_turn_id, audited_at, inbound FROM unified_wake_target WHERE org_id = ? AND wake_id = ?")
2375
+ .get(org, wakeId);
2376
+ if (!row)
2377
+ return null;
2378
+ return {
2379
+ targetJson: row.target_json,
2380
+ createdAt: row.created_at,
2381
+ ...(row.window_token !== null ? { windowToken: row.window_token } : {}),
2382
+ ...(row.answered_at !== null ? { answeredAt: row.answered_at } : {}),
2383
+ ...(row.answered_turn_id !== null ? { answeredTurnId: row.answered_turn_id } : {}),
2384
+ ...(row.audited_at !== null ? { auditedAt: row.audited_at } : {}),
2385
+ // A NULL column is a legacy row, and it stays ABSENT rather than becoming `false` — the two say
2386
+ // different things, and every reader treats absent as attended (OPE-2051).
2387
+ ...(row.inbound !== null ? { inbound: row.inbound === 1 } : {}),
2388
+ };
2389
+ },
2390
+ async listPendingUnifiedWakes(org, windowToken, afterIso, limit) {
2391
+ // ORDER BY created_at ASC: the gate reports the OLDEST unseen messages first, which is the order
2392
+ // a reader would meet them in. `answered_at IS NULL` is the whole "pending" definition — the same
2393
+ // column the answerable-reply fence reads, so the two can never disagree about what pending means.
2394
+ const rows = getDb()
2395
+ .prepare(`SELECT wake_id, target_json, created_at FROM unified_wake_target
2396
+ WHERE org_id = ? AND window_token = ? AND answered_at IS NULL AND inbound = 1 AND created_at > ?
2397
+ ORDER BY created_at ASC LIMIT ?`)
2398
+ .all(org, windowToken, afterIso, limit);
2399
+ return rows.map((r) => ({ wakeId: r.wake_id, targetJson: r.target_json, createdAt: r.created_at }));
2400
+ },
2401
+ async listUnauditedUnifiedWakes(org, windowToken, limit) {
2402
+ // Same pending definition as the listing above, plus the OPE-836 horizon (`audited_at IS NULL`)
2403
+ // and NO time bound below — a row an earlier turn considered is already excluded by the column.
2404
+ // The filter is in SQL so `limit` bounds the rows still to consider, never a backlog of audited
2405
+ // ones. This query is the accounting audit's alone; the freshness gate's own SQL is untouched.
2406
+ const rows = getDb()
2407
+ .prepare(`SELECT wake_id, target_json, created_at FROM unified_wake_target
2408
+ WHERE org_id = ? AND window_token = ? AND answered_at IS NULL AND inbound = 1 AND audited_at IS NULL
2409
+ ORDER BY created_at ASC LIMIT ?`)
2410
+ .all(org, windowToken, limit);
2411
+ return rows.map((r) => ({ wakeId: r.wake_id, targetJson: r.target_json, createdAt: r.created_at }));
2412
+ },
2413
+ async markUnifiedWakesAudited(org, wakeIds, at) {
2414
+ // UPDATE-only and FIRST-STAMP-WINS (`audited_at IS NULL`), so a re-run cannot move the horizon
2415
+ // stamp and a missing row inserts nothing. One statement per id keeps the parameter count fixed
2416
+ // (node:sqlite has no array binding); the caller's own cap bounds the list.
2417
+ if (wakeIds.length === 0)
2418
+ return;
2419
+ const stmt = getDb().prepare("UPDATE unified_wake_target SET audited_at = ? WHERE org_id = ? AND wake_id = ? AND audited_at IS NULL");
2420
+ for (const wakeId of wakeIds)
2421
+ stmt.run(at, org, wakeId);
2422
+ },
2423
+ async markUnifiedWakeAnswered(org, wakeId, at, turnId) {
2424
+ // UPDATE-only (never an upsert): an answered mark on a row with no origin is meaningless, and
2425
+ // inserting one would create a phantom the resolver would then have to reject.
2426
+ getDb()
2427
+ .prepare("UPDATE unified_wake_target SET answered_at = ?, answered_turn_id = ? WHERE org_id = ? AND wake_id = ?")
2428
+ .run(at, turnId ?? null, org, wakeId);
2429
+ },
2430
+ async putThreadOwner(org, channelKey, threadKey, taskToken, at, ttlMs) {
2431
+ const handle = getDb();
2432
+ // Opportunistic ORG-SCOPED TTL prune (bounded table, no scheduled job), same posture as
2433
+ // putUnifiedWakeTarget — a backstop over the explicit clears (complete_thread / generation GC).
2434
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2435
+ handle.prepare("DELETE FROM thread_ownership WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2436
+ handle
2437
+ .prepare(`INSERT INTO thread_ownership (org_id, channel_key, thread_key, task_token, created_at) VALUES (?, ?, ?, ?, ?)
2438
+ ON CONFLICT (org_id, channel_key, thread_key) DO UPDATE SET task_token = excluded.task_token, created_at = excluded.created_at`)
2439
+ .run(org, channelKey, threadKey, taskToken, at);
2440
+ },
2441
+ async getThreadOwner(org, channelKey, threadKey) {
2442
+ const row = getDb().prepare("SELECT task_token FROM thread_ownership WHERE org_id = ? AND channel_key = ? AND thread_key = ?").get(org, channelKey, threadKey);
2443
+ return row?.task_token ?? null;
2444
+ },
2445
+ async clearThreadOwner(org, channelKey, threadKey) {
2446
+ return getDb().prepare("DELETE FROM thread_ownership WHERE org_id = ? AND channel_key = ? AND thread_key = ?").run(org, channelKey, threadKey).changes > 0;
2447
+ },
2448
+ async putThreadSeatState(org, row, at, ttlMs) {
2449
+ const handle = getDb();
2450
+ // Opportunistic ORG-SCOPED TTL prune, the same posture as putThreadOwner beside it.
2451
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2452
+ handle.prepare("DELETE FROM thread_seat_state WHERE updated_at < ? AND org_id = ?").run(cutoff, org);
2453
+ handle
2454
+ .prepare(`INSERT INTO thread_seat_state (org_id, channel_key, thread_key, seat_token, parent_key, state, origin_json, report, opened_at, updated_at)
2455
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2456
+ ON CONFLICT (org_id, channel_key, thread_key) DO UPDATE SET
2457
+ seat_token = excluded.seat_token,
2458
+ parent_key = excluded.parent_key,
2459
+ state = excluded.state,
2460
+ origin_json = excluded.origin_json,
2461
+ report = excluded.report,
2462
+ opened_at = excluded.opened_at,
2463
+ updated_at = excluded.updated_at`)
2464
+ .run(org, row.channelKey, row.threadKey, row.seatToken, row.parentRegistryKey, row.state, row.originJson, row.report ?? null, row.openedAt, at);
2465
+ },
2466
+ async getThreadSeatState(org, channelKey, threadKey) {
2467
+ const row = getDb()
2468
+ .prepare("SELECT seat_token, parent_key, state, origin_json, report, opened_at, updated_at FROM thread_seat_state WHERE org_id = ? AND channel_key = ? AND thread_key = ?")
2469
+ .get(org, channelKey, threadKey);
2470
+ if (!row)
2471
+ return null;
2472
+ return {
2473
+ channelKey,
2474
+ threadKey,
2475
+ seatToken: row.seat_token,
2476
+ parentRegistryKey: row.parent_key,
2477
+ // Anything but the two written values reads as `completed`: an unreadable state must never
2478
+ // report a seat as LIVE, which is the direction that would send a steer into a dead session.
2479
+ state: row.state === "open" ? "open" : "completed",
2480
+ originJson: row.origin_json,
2481
+ ...(row.report !== null ? { report: row.report } : {}),
2482
+ openedAt: row.opened_at,
2483
+ updatedAt: row.updated_at,
2484
+ };
2485
+ },
2486
+ async putTurnAnchor(org, anchor, at, ttlMs) {
2487
+ const handle = getDb();
2488
+ // Opportunistic ORG-SCOPED TTL prune (bounded table, no scheduled job) — a BACKSTOP over the
2489
+ // explicit clear the turn-end hook does, exactly like putThreadOwner's.
2490
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2491
+ handle.prepare("DELETE FROM turn_anchor WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2492
+ handle
2493
+ .prepare(`INSERT INTO turn_anchor (org_id, window_key, anchor_key, channel_key, session_id, turn_id, surface_key, created_at)
2494
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
2495
+ ON CONFLICT (org_id, window_key) DO UPDATE SET
2496
+ anchor_key = excluded.anchor_key, channel_key = excluded.channel_key,
2497
+ session_id = excluded.session_id, turn_id = excluded.turn_id,
2498
+ surface_key = excluded.surface_key, created_at = excluded.created_at`)
2499
+ .run(org, anchor.windowKey, anchor.anchorKey ?? null, anchor.channelKey ?? null, anchor.sessionId, anchor.turnId, anchor.surfaceKey, at);
2500
+ },
2501
+ async getTurnAnchorByWindow(org, windowKey) {
2502
+ return readTurnAnchorRow(getDb().prepare(`${TURN_ANCHOR_SELECT} WHERE org_id = ? AND window_key = ?`).get(org, windowKey));
2503
+ },
2504
+ async getTurnAnchorByAnchor(org, anchorKey) {
2505
+ return readTurnAnchorRow(getDb().prepare(`${TURN_ANCHOR_SELECT} WHERE org_id = ? AND anchor_key = ?`).get(org, anchorKey));
2506
+ },
2507
+ async getLatestTurnAnchorForChannel(org, channelKey) {
2508
+ return readTurnAnchorRow(getDb().prepare(`${TURN_ANCHOR_SELECT} WHERE org_id = ? AND channel_key = ? ORDER BY created_at DESC, window_key DESC LIMIT 1`).get(org, channelKey));
2509
+ },
2510
+ async clearTurnAnchor(org, windowKey) {
2511
+ return getDb().prepare("DELETE FROM turn_anchor WHERE org_id = ? AND window_key = ?").run(org, windowKey).changes > 0;
2512
+ },
2513
+ async putTaskResult(org, taskId, resultJson, at, ttlMs) {
2514
+ const handle = getDb();
2515
+ // Opportunistic ORG-SCOPED TTL prune (bounded table, no scheduled job), same posture as
2516
+ // putUnifiedWakeTarget — one org's write never touches another org's rows.
2517
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2518
+ handle.prepare("DELETE FROM task_result WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2519
+ handle
2520
+ .prepare(`INSERT INTO task_result (org_id, task_id, result_json, created_at) VALUES (?, ?, ?, ?)
2521
+ ON CONFLICT (org_id, task_id) DO UPDATE SET result_json = excluded.result_json, created_at = excluded.created_at`)
2522
+ .run(org, taskId, resultJson, at);
2523
+ },
2524
+ async putTaskResultIfAbsent(org, taskId, resultJson, at, ttlMs) {
2525
+ const handle = getDb();
2526
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2527
+ handle.prepare("DELETE FROM task_result WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2528
+ const info = handle
2529
+ .prepare(`INSERT INTO task_result (org_id, task_id, result_json, created_at) VALUES (?, ?, ?, ?) ON CONFLICT (org_id, task_id) DO NOTHING`)
2530
+ .run(org, taskId, resultJson, at);
2531
+ return info.changes > 0;
2532
+ },
2533
+ async getTaskResult(org, taskId) {
2534
+ const row = getDb().prepare("SELECT result_json FROM task_result WHERE org_id = ? AND task_id = ?").get(org, taskId);
2535
+ return typeof row?.result_json === "string" ? row.result_json : null;
2536
+ },
2537
+ async deleteTaskResult(org, taskId) {
2538
+ return getDb().prepare("DELETE FROM task_result WHERE org_id = ? AND task_id = ?").run(org, taskId).changes > 0;
2539
+ },
2540
+ async putSlackAttachment(org, fileId, rec, at, ttlMs) {
2541
+ const handle = getDb();
2542
+ // Opportunistic ORG-SCOPED TTL prune (bounded table, no scheduled job), same posture as
2543
+ // putUnifiedWakeTarget — one org's write never touches another org's rows.
2544
+ const cutoff = new Date(Date.parse(at) - ttlMs).toISOString();
2545
+ handle.prepare("DELETE FROM slack_attachment WHERE created_at < ? AND org_id = ?").run(cutoff, org);
2546
+ handle
2547
+ .prepare(`INSERT INTO slack_attachment (org_id, file_id, url_private, mime_type, name, team_id, created_at)
2548
+ VALUES (?, ?, ?, ?, ?, ?, ?)
2549
+ ON CONFLICT (org_id, file_id) DO UPDATE SET
2550
+ url_private = excluded.url_private, mime_type = excluded.mime_type,
2551
+ name = excluded.name, team_id = excluded.team_id, created_at = excluded.created_at`)
2552
+ .run(org, fileId, rec.urlPrivate, rec.mimeType ?? null, rec.name ?? null, rec.teamId ?? null, at);
2553
+ },
2554
+ async getSlackAttachment(org, fileId) {
2555
+ const row = getDb()
2556
+ .prepare("SELECT url_private, mime_type, name, team_id FROM slack_attachment WHERE org_id = ? AND file_id = ?")
2557
+ .get(org, fileId);
2558
+ if (!row)
2559
+ return null;
2560
+ const rec = {
2561
+ urlPrivate: row.url_private,
2562
+ ...(row.mime_type ? { mimeType: row.mime_type } : {}),
2563
+ ...(row.name ? { name: row.name } : {}),
2564
+ ...(row.team_id ? { teamId: row.team_id } : {}),
2565
+ };
2566
+ return rec;
2567
+ },
2568
+ async putStoredCredential(org, rec) {
2569
+ // Upsert the ciphertext envelope. `rec.ciphertext` is opaque here — never inspected, never logged.
2570
+ getDb()
2571
+ .prepare(`INSERT INTO stored_credential (org_id, ref, ciphertext, connector, domain, created_by, created_at)
2572
+ VALUES (?, ?, ?, ?, ?, ?, ?)
2573
+ ON CONFLICT (org_id, ref) DO UPDATE SET
2574
+ ciphertext = excluded.ciphertext, connector = excluded.connector,
2575
+ domain = excluded.domain, created_by = excluded.created_by, created_at = excluded.created_at`)
2576
+ .run(org, rec.ref, rec.ciphertext, rec.connector ?? null, rec.domain ?? null, rec.createdBy, rec.createdAt);
2577
+ },
2578
+ async getStoredCredential(org, ref) {
2579
+ const row = getDb()
2580
+ .prepare("SELECT ref, ciphertext, connector, domain, created_by, created_at FROM stored_credential WHERE org_id = ? AND ref = ?")
2581
+ .get(org, ref);
2582
+ if (!row)
2583
+ return null;
2584
+ return {
2585
+ ref: row.ref,
2586
+ ciphertext: row.ciphertext,
2587
+ ...(row.connector ? { connector: row.connector } : {}),
2588
+ ...(row.domain ? { domain: row.domain } : {}),
2589
+ createdBy: row.created_by,
2590
+ createdAt: row.created_at,
2591
+ };
2592
+ },
2593
+ async deleteStoredCredential(org, ref) {
2594
+ // A REAL delete of the ciphertext row (OPE-287) — the self-host twin of the postgres path. See
2595
+ // the store port for why this table retires by destruction rather than by status.
2596
+ return getDb().prepare("DELETE FROM stored_credential WHERE org_id = ? AND ref = ?").run(org, ref).changes > 0;
2597
+ },
2598
+ async listStoredCredentialRefs(org, refPrefix) {
2599
+ // REFS ONLY (OPE-349) — the ciphertext column is deliberately not in the projection; see the
2600
+ // store port for why an enumerating caller must never be handed envelopes. `refPrefix` narrows
2601
+ // IN THE PREDICATE (OPE-1025) — the self-host twin of the postgres path, same escaping.
2602
+ if (refPrefix) {
2603
+ const rows = getDb().prepare("SELECT ref FROM stored_credential WHERE org_id = ? AND ref LIKE ? ESCAPE '\\' ORDER BY ref").all(org, likePrefixPattern(refPrefix));
2604
+ return rows.map((r) => r.ref);
2605
+ }
2606
+ const rows = getDb().prepare("SELECT ref FROM stored_credential WHERE org_id = ? ORDER BY ref").all(org);
2607
+ return rows.map((r) => r.ref);
2608
+ },
2609
+ async putGitHubInstallation(org, rec) {
2610
+ getDb()
2611
+ .prepare(`INSERT INTO github_installation (org_id, owner, installation_id, account_type, repository_selection, updated_at)
2612
+ VALUES (?, ?, ?, ?, ?, ?)
2613
+ ON CONFLICT (org_id, owner) DO UPDATE SET installation_id = excluded.installation_id,
2614
+ account_type = excluded.account_type, repository_selection = excluded.repository_selection,
2615
+ updated_at = excluded.updated_at`)
2616
+ .run(org, rec.owner, rec.installationId, rec.accountType ?? null, rec.repositorySelection ?? null, rec.updatedAt);
2617
+ },
2618
+ async deleteGitHubInstallation(org, owner) {
2619
+ return getDb().prepare("DELETE FROM github_installation WHERE org_id = ? AND owner = ?").run(org, owner).changes > 0;
2620
+ },
2621
+ async listGitHubInstallations(org) {
2622
+ const rows = getDb()
2623
+ .prepare("SELECT owner, installation_id, account_type, repository_selection, updated_at FROM github_installation WHERE org_id = ? ORDER BY owner ASC")
2624
+ .all(org);
2625
+ return rows.map((r) => ({
2626
+ owner: r.owner,
2627
+ installationId: r.installation_id,
2628
+ ...(r.account_type ? { accountType: r.account_type } : {}),
2629
+ ...(r.repository_selection ? { repositorySelection: r.repository_selection } : {}),
2630
+ updatedAt: r.updated_at,
2631
+ }));
2632
+ },
2633
+ async claimStoredCredential(org, ref, claimId, claimedAtIso, staleBeforeIso) {
2634
+ // Atomic compare-and-set on the claim columns: win iff the row is free (claim_id NULL) OR the
2635
+ // existing claim's lease is stale (claimed_at <= staleBefore). ISO-8601 compares lexicographically,
2636
+ // so `<=` is a correct time comparison. A single UPDATE ⇒ of two racing claimants exactly one
2637
+ // flips `changes` (the other loses). A missing row updates nothing ⇒ changes=0 ⇒ lost.
2638
+ const info = getDb()
2639
+ .prepare(`UPDATE stored_credential SET claim_id = ?, claimed_at = ?
2640
+ WHERE org_id = ? AND ref = ? AND (claim_id IS NULL OR claimed_at <= ?)`)
2641
+ .run(claimId, claimedAtIso, org, ref, staleBeforeIso);
2642
+ return info.changes > 0;
2643
+ },
2644
+ async releaseStoredCredential(org, ref, claimId) {
2645
+ // Guarded release: clear the claim only if THIS caller still holds it (claim_id matches). A caller
2646
+ // whose lease was stolen mismatches and no-ops — it never clears the new owner's claim.
2647
+ const info = getDb()
2648
+ .prepare("UPDATE stored_credential SET claim_id = NULL, claimed_at = NULL WHERE org_id = ? AND ref = ? AND claim_id = ?")
2649
+ .run(org, ref, claimId);
2650
+ return info.changes > 0;
2651
+ },
2652
+ async addCredentialIntake(row) {
2653
+ getDb()
2654
+ .prepare(`INSERT INTO credential_intake (org_id, id, ref, connector, domain, requested_by, channel_id, thread_ts, created_at, expires_at, used_at)
2655
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2656
+ .run(row.org, row.id, row.ref, row.connector, row.domain ?? null, row.requestedBy, row.channelId, row.threadTs ?? null, row.createdAt, row.expiresAt, row.usedAt ?? null);
2657
+ },
2658
+ async getCredentialIntake(org, id) {
2659
+ const row = getDb()
2660
+ .prepare("SELECT id, ref, connector, domain, requested_by, channel_id, thread_ts, created_at, expires_at, used_at FROM credential_intake WHERE org_id = ? AND id = ?")
2661
+ .get(org, id);
2662
+ if (!row)
2663
+ return null;
2664
+ return {
2665
+ org,
2666
+ id: row.id,
2667
+ ref: row.ref,
2668
+ connector: row.connector,
2669
+ ...(row.domain ? { domain: row.domain } : {}),
2670
+ requestedBy: row.requested_by,
2671
+ channelId: row.channel_id,
2672
+ ...(row.thread_ts ? { threadTs: row.thread_ts } : {}),
2673
+ createdAt: row.created_at,
2674
+ expiresAt: row.expires_at,
2675
+ ...(row.used_at ? { usedAt: row.used_at } : {}),
2676
+ };
2677
+ },
2678
+ async armWebhookCaptureWindow(org, hookId, captureUntil, armedBy, at) {
2679
+ // UPSERT on the whole key — re-arming replaces, never accumulates (see the store port).
2680
+ getDb()
2681
+ .prepare(`INSERT INTO webhook_capture_window (org_id, hook_id, capture_until, armed_by, armed_at) VALUES (?, ?, ?, ?, ?)
2682
+ ON CONFLICT (org_id, hook_id) DO UPDATE SET capture_until = excluded.capture_until, armed_by = excluded.armed_by, armed_at = excluded.armed_at`)
2683
+ .run(org, hookId, captureUntil, armedBy, at);
2684
+ },
2685
+ async getWebhookCaptureWindow(org, hookId) {
2686
+ const row = getDb()
2687
+ .prepare("SELECT hook_id, capture_until, armed_by, armed_at FROM webhook_capture_window WHERE org_id = ? AND hook_id = ?")
2688
+ .get(org, hookId);
2689
+ // Returned EXPIRED-AND-ALL: closing is the caller's comparison (`captureWindowOpen`).
2690
+ return row ? { hookId: row.hook_id, captureUntil: row.capture_until, armedBy: row.armed_by, armedAt: row.armed_at } : null;
2691
+ },
2692
+ async consumeCredentialIntake(org, id, usedAt) {
2693
+ // Single-use CAS: a single UPDATE gated on used_at IS NULL means of two racing submits
2694
+ // exactly one flips `changes` (the other loses and is refused).
2695
+ const info = getDb()
2696
+ .prepare("UPDATE credential_intake SET used_at = ? WHERE org_id = ? AND id = ? AND used_at IS NULL")
2697
+ .run(usedAt, org, id);
2698
+ return info.changes > 0;
2699
+ },
2700
+ async addPendingAction(row) {
2701
+ getDb()
2702
+ .prepare(`INSERT INTO pending_actions
2703
+ (org_id, id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at)
2704
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2705
+ .run(row.org, row.id, row.kind, row.argsJson, row.scopeKey, row.domain, row.requestedBy, row.channelId, row.threadTs, row.messageTs, row.postedTo, row.status, row.createdAt, row.expiresAt, row.decidedBy, row.decidedAt);
2706
+ },
2707
+ async addPendingActionIfAbsent(row) {
2708
+ // The conflict arm the derived-id wedge needs — see the store interface's note (OPE-1348).
2709
+ const info = getDb()
2710
+ .prepare(`INSERT INTO pending_actions
2711
+ (org_id, id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at)
2712
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2713
+ ON CONFLICT (org_id, id) DO NOTHING`)
2714
+ .run(row.org, row.id, row.kind, row.argsJson, row.scopeKey, row.domain, row.requestedBy, row.channelId, row.threadTs, row.messageTs, row.postedTo, row.status, row.createdAt, row.expiresAt, row.decidedBy, row.decidedAt);
2715
+ return info.changes > 0;
2716
+ },
2717
+ async getPendingAction(org, id) {
2718
+ const row = getDb()
2719
+ .prepare(`SELECT id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at
2720
+ FROM pending_actions WHERE org_id = ? AND id = ?`)
2721
+ .get(org, id);
2722
+ return row ? pendingActionFromRow(org, row) : null;
2723
+ },
2724
+ async listPendingActions(org) {
2725
+ const rows = getDb()
2726
+ .prepare(`SELECT id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at
2727
+ FROM pending_actions WHERE org_id = ? AND status = 'pending' ORDER BY created_at ASC`)
2728
+ .all(org);
2729
+ return rows.map((r) => pendingActionFromRow(org, r));
2730
+ },
2731
+ async listExpiredPendingActions(org, nowIso) {
2732
+ const rows = getDb()
2733
+ .prepare(`SELECT id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at
2734
+ FROM pending_actions WHERE org_id = ? AND status = 'pending' AND expires_at <= ? ORDER BY created_at ASC`)
2735
+ .all(org, nowIso);
2736
+ return rows.map((r) => pendingActionFromRow(org, r));
2737
+ },
2738
+ async listRejectedActionsSince(org, sinceIso) {
2739
+ const rows = getDb()
2740
+ .prepare(`SELECT id, kind, args_json, scope_key, domain, requested_by, channel_id, thread_ts, message_ts, posted_to, status, created_at, expires_at, decided_by, decided_at
2741
+ FROM pending_actions WHERE org_id = ? AND status = 'rejected' AND decided_at >= ? ORDER BY decided_at DESC`)
2742
+ .all(org, sinceIso);
2743
+ return rows.map((r) => pendingActionFromRow(org, r));
2744
+ },
2745
+ async setPendingActionMessage(org, id, messageTs) {
2746
+ getDb().prepare("UPDATE pending_actions SET message_ts = ? WHERE org_id = ? AND id = ?").run(messageTs, org, id);
2747
+ },
2748
+ async decidePendingAction(org, id, status, decidedBy, decidedAt) {
2749
+ // The CAS: a single UPDATE gated on status='pending' means of two racing decides
2750
+ // (two clicks, or a click racing a lazy-expiry sweep) exactly one flips `changes`.
2751
+ const info = getDb()
2752
+ .prepare("UPDATE pending_actions SET status = ?, decided_by = ?, decided_at = ? WHERE org_id = ? AND id = ? AND status = 'pending'")
2753
+ .run(status, decidedBy, decidedAt, org, id);
2754
+ return info.changes > 0;
2755
+ },
2756
+ async setSessionApproval(row) {
2757
+ const db = getDb();
2758
+ // Prune-on-write: drop this org's expired memos so the table can't grow unboundedly (there is no
2759
+ // sweep — the session_id generation is the real death mechanism, this is just GC).
2760
+ db.prepare("DELETE FROM pr_session_approval WHERE org_id = ? AND expires_at <= ?").run(row.org, row.createdAt);
2761
+ db.prepare(`INSERT INTO pr_session_approval (org_id, session_id, kind, granted_by, created_at, expires_at)
2762
+ VALUES (?, ?, ?, ?, ?, ?)
2763
+ ON CONFLICT(org_id, session_id, kind) DO UPDATE SET granted_by = excluded.granted_by, created_at = excluded.created_at, expires_at = excluded.expires_at`).run(row.org, row.sessionId, row.kind, row.grantedBy, row.createdAt, row.expiresAt);
2764
+ },
2765
+ async getSessionApproval(org, sessionId, kind, nowIso) {
2766
+ const row = getDb()
2767
+ .prepare("SELECT session_id, kind, granted_by, created_at, expires_at FROM pr_session_approval WHERE org_id = ? AND session_id = ? AND kind = ? AND expires_at > ?")
2768
+ .get(org, sessionId, kind, nowIso);
2769
+ if (!row)
2770
+ return null;
2771
+ return { org, sessionId: row.session_id, kind: row.kind, grantedBy: row.granted_by, createdAt: row.created_at, expiresAt: row.expires_at };
2772
+ },
2773
+ async listSessionApprovals(org, sessionId, nowIso) {
2774
+ const rows = getDb()
2775
+ .prepare("SELECT session_id, kind, granted_by, created_at, expires_at FROM pr_session_approval WHERE org_id = ? AND session_id = ? AND expires_at > ? ORDER BY kind ASC")
2776
+ .all(org, sessionId, nowIso);
2777
+ return rows.map((r) => ({ org, sessionId: r.session_id, kind: r.kind, grantedBy: r.granted_by, createdAt: r.created_at, expiresAt: r.expires_at }));
2778
+ },
2779
+ async revokeSessionApprovals(org, sessionId) {
2780
+ // `changes` is `number | bigint` on this driver (a BigInt only past 2^53 rows) — normalise.
2781
+ return Number(getDb().prepare("DELETE FROM pr_session_approval WHERE org_id = ? AND session_id = ?").run(org, sessionId).changes);
2782
+ },
2783
+ async sweepLegacyConnectorOpRows(org) {
2784
+ // Both prefixes, and no expiry clause — see the port's own comment for why each is required.
2785
+ // The two prefixes are code constants, never caller text, and carry no LIKE metacharacter.
2786
+ return Number(getDb()
2787
+ .prepare("DELETE FROM pr_session_approval WHERE org_id = ? AND session_id LIKE ? AND kind LIKE ?")
2788
+ .run(org, `${ROUTINE_PERMISSION_PREFIX}%`, `${CONNECTOR_OP_KIND_PREFIX}%`).changes);
2789
+ },
2790
+ // The Postgres twin is the reference; these are the same statements in sqlite's placeholder dialect.
2791
+ // status = ANY($n) has no sqlite equivalent, so each CAS spreads its closed status list into an IN list with one placeholder per member.
2792
+ async putLinkSet(org, row) {
2793
+ getDb()
2794
+ .prepare(`INSERT INTO identity_link_sets (org_id, id, handle, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)
2795
+ ON CONFLICT(org_id, id) DO UPDATE SET handle = excluded.handle, status = excluded.status, updated_at = excluded.updated_at`)
2796
+ .run(org, row.id, row.handle, row.status, row.createdAt, row.updatedAt);
2797
+ },
2798
+ async getLinkSet(org, id) {
2799
+ const row = getDb().prepare("SELECT id, handle, status, created_at, updated_at FROM identity_link_sets WHERE org_id = ? AND id = ?").get(org, id);
2800
+ return row ? linkSetFromSqliteRow(org, row) : null;
2801
+ },
2802
+ async listLinkSets(org) {
2803
+ const rows = getDb().prepare("SELECT id, handle, status, created_at, updated_at FROM identity_link_sets WHERE org_id = ? ORDER BY id ASC").all(org);
2804
+ return rows.map((r) => linkSetFromSqliteRow(org, r));
2805
+ },
2806
+ async updateLinkSetStatus(org, id, from, to, at) {
2807
+ const changes = getDb()
2808
+ .prepare(`UPDATE identity_link_sets SET status = ?, updated_at = ? WHERE org_id = ? AND id = ? AND status IN (${placeholders(from.length)})`)
2809
+ .run(to, at, org, id, ...from).changes;
2810
+ return Number(changes) > 0;
2811
+ },
2812
+ async insertLinkedId(org, row) {
2813
+ // DO NOTHING, never DO UPDATE — the conflict IS the answer (the account already belongs to a
2814
+ // person). See the postgres twin.
2815
+ const changes = getDb()
2816
+ .prepare(`INSERT INTO identity_linked_ids (org_id, platform, tenant, native_id, link_set_id, status, established_by, evidence, created_at, updated_at)
2817
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2818
+ ON CONFLICT(org_id, platform, tenant, native_id) DO NOTHING`)
2819
+ .run(org, row.platform, row.tenant, row.nativeId, row.linkSetId, row.status, row.establishedBy, row.evidenceJson ?? null, row.createdAt, row.updatedAt).changes;
2820
+ return Number(changes) > 0;
2821
+ },
2822
+ async getLinkedId(org, platform, tenant, nativeId) {
2823
+ const row = getDb()
2824
+ .prepare(`${LINKED_ID_SQLITE_SELECT} WHERE org_id = ? AND platform = ? AND tenant = ? AND native_id = ?`)
2825
+ .get(org, platform, tenant, nativeId);
2826
+ return row ? linkedIdFromSqliteRow(org, row) : null;
2827
+ },
2828
+ async listLinkedIds(org, linkSetId) {
2829
+ const sql = `${LINKED_ID_SQLITE_SELECT} WHERE org_id = ?${linkSetId === undefined ? "" : " AND link_set_id = ?"} ORDER BY platform ASC, tenant ASC, native_id ASC`;
2830
+ const rows = (linkSetId === undefined ? getDb().prepare(sql).all(org) : getDb().prepare(sql).all(org, linkSetId));
2831
+ return rows.map((r) => linkedIdFromSqliteRow(org, r));
2832
+ },
2833
+ async updateLinkedIdStatus(org, platform, tenant, nativeId, from, to, establishedBy, evidenceJson, at) {
2834
+ const changes = getDb()
2835
+ .prepare(`UPDATE identity_linked_ids SET status = ?, established_by = ?, evidence = ?, updated_at = ?
2836
+ WHERE org_id = ? AND platform = ? AND tenant = ? AND native_id = ? AND status IN (${placeholders(from.length)})`)
2837
+ .run(to, establishedBy, evidenceJson ?? null, at, org, platform, tenant, nativeId, ...from).changes;
2838
+ return Number(changes) > 0;
2839
+ },
2840
+ async deleteLinkedId(org, platform, tenant, nativeId) {
2841
+ return Number(getDb().prepare("DELETE FROM identity_linked_ids WHERE org_id = ? AND platform = ? AND tenant = ? AND native_id = ?").run(org, platform, tenant, nativeId).changes) > 0;
2842
+ },
2843
+ async revokeLinkedIdsForSet(org, linkSetId, at) {
2844
+ return Number(getDb().prepare("UPDATE identity_linked_ids SET status = 'revoked', updated_at = ? WHERE org_id = ? AND link_set_id = ? AND status <> 'revoked'").run(at, org, linkSetId).changes);
2845
+ },
2846
+ async unbackfilledLinkedIdPlatforms() {
2847
+ // Deployment-wide, no org filter — the tenant a row should carry is a fact about the deployment's
2848
+ // channel config, not about an org. See the seam's doc on OperationalStore.
2849
+ const rows = getDb().prepare("SELECT DISTINCT platform FROM identity_linked_ids WHERE tenant = '' ORDER BY platform ASC").all();
2850
+ return rows.map((r) => r.platform);
2851
+ },
2852
+ async backfillLinkedIdTenant(platform, tenant, at) {
2853
+ // `tenant = ''` in the predicate is what makes this fill-a-blank-only: a row that already names a
2854
+ // workspace is a delivery's own statement and is never rewritten here.
2855
+ return Number(getDb().prepare("UPDATE identity_linked_ids SET tenant = ?, updated_at = ? WHERE platform = ? AND tenant = ''").run(tenant, at, platform).changes);
2856
+ },
2857
+ async addLinkChallenge(org, row) {
2858
+ getDb()
2859
+ .prepare(`INSERT INTO identity_link_challenges
2860
+ (org_id, id, nonce_hash, initiating_platform, initiating_tenant, initiating_native_id, initiating_surface_key,
2861
+ claimed_platform, claimed_tenant, claimed_native_id, claimed_at,
2862
+ transport, target_platform, target_tenant, target_native_id, back_nonce_hash,
2863
+ status, created_at, expires_at, decided_at)
2864
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2865
+ .run(org, row.id, row.nonceHash, row.initiatingPlatform, row.initiatingTenant, row.initiatingNativeId, row.initiatingSurfaceKey, row.claimedPlatform ?? null, row.claimedTenant ?? null, row.claimedNativeId ?? null, row.claimedAt ?? null, row.transport, row.targetPlatform ?? null, row.targetTenant ?? null, row.targetNativeId ?? null, row.backNonceHash ?? null, row.status, row.createdAt, row.expiresAt, row.decidedAt ?? null);
2866
+ },
2867
+ async getLinkChallenge(org, id) {
2868
+ const row = getDb().prepare(`${LINK_CHALLENGE_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
2869
+ return row ? linkChallengeFromSqliteRow(org, row) : null;
2870
+ },
2871
+ async listLinkChallenges(org, filter) {
2872
+ const conjuncts = ["org_id = ?"];
2873
+ const params = [org];
2874
+ if (filter?.initiatingPlatform !== undefined) {
2875
+ conjuncts.push("initiating_platform = ?");
2876
+ params.push(filter.initiatingPlatform);
2877
+ }
2878
+ if (filter?.initiatingTenant !== undefined) {
2879
+ conjuncts.push("initiating_tenant = ?");
2880
+ params.push(filter.initiatingTenant);
2881
+ }
2882
+ if (filter?.initiatingNativeId !== undefined) {
2883
+ conjuncts.push("initiating_native_id = ?");
2884
+ params.push(filter.initiatingNativeId);
2885
+ }
2886
+ if (filter?.targetPlatform !== undefined) {
2887
+ conjuncts.push("target_platform = ?");
2888
+ params.push(filter.targetPlatform);
2889
+ }
2890
+ if (filter?.targetTenant !== undefined) {
2891
+ conjuncts.push("target_tenant = ?");
2892
+ params.push(filter.targetTenant);
2893
+ }
2894
+ if (filter?.targetNativeId !== undefined) {
2895
+ conjuncts.push("target_native_id = ?");
2896
+ params.push(filter.targetNativeId);
2897
+ }
2898
+ if (filter?.claimedPlatform !== undefined) {
2899
+ conjuncts.push("claimed_platform = ?");
2900
+ params.push(filter.claimedPlatform);
2901
+ }
2902
+ if (filter?.claimedTenant !== undefined) {
2903
+ conjuncts.push("claimed_tenant = ?");
2904
+ params.push(filter.claimedTenant);
2905
+ }
2906
+ if (filter?.claimedNativeId !== undefined) {
2907
+ conjuncts.push("claimed_native_id = ?");
2908
+ params.push(filter.claimedNativeId);
2909
+ }
2910
+ if (filter?.status !== undefined) {
2911
+ conjuncts.push("status = ?");
2912
+ params.push(filter.status);
2913
+ }
2914
+ const rows = getDb()
2915
+ .prepare(`${LINK_CHALLENGE_SQLITE_SELECT} WHERE ${conjuncts.join(" AND ")} ORDER BY created_at DESC`)
2916
+ .all(...params);
2917
+ return rows.map((r) => linkChallengeFromSqliteRow(org, r));
2918
+ },
2919
+ async claimLinkChallenge(org, nonceHash, platform, tenant, nativeId, at, backNonceHash) {
2920
+ // This driver's run has no RETURNING, so the claimed row is read back by id; the UPDATE alone decides the winner, so the read cannot hand a second caller the same claim.
2921
+ // The initiator exclusion is TENANT-QUALIFIED: platform plus native_id alone would treat an id-twin in another workspace as a self-claim and refuse a legitimate one.
2922
+ const db = getDb();
2923
+ const changes = db
2924
+ .prepare(`UPDATE identity_link_challenges SET claimed_platform = ?, claimed_tenant = ?, claimed_native_id = ?, claimed_at = ?, back_nonce_hash = ?, status = 'claimed'
2925
+ WHERE org_id = ? AND nonce_hash = ? AND status = 'pending' AND expires_at > ?
2926
+ AND NOT (initiating_platform = ? AND initiating_tenant = ? AND initiating_native_id = ?)`)
2927
+ .run(platform, tenant, nativeId, at, backNonceHash ?? null, org, nonceHash, at, platform, tenant, nativeId).changes;
2928
+ if (Number(changes) === 0)
2929
+ return null;
2930
+ const row = db.prepare(`${LINK_CHALLENGE_SQLITE_SELECT} WHERE org_id = ? AND nonce_hash = ? AND claimed_at = ?`).get(org, nonceHash, at);
2931
+ return row ? linkChallengeFromSqliteRow(org, row) : null;
2932
+ },
2933
+ async consentLinkChallenge(org, id, consenter, at, backNonceHash) {
2934
+ // The TARGET MATCH is a conjunct, not a caller-side check (see store.ts's contract): a consent
2935
+ // from any account but the one this challenge named matches no row and returns null. Single-use
2936
+ // rides the same `status = 'pending'` predicate the claim CAS uses, and the TTL rides
2937
+ // `expires_at > at` — all three in one statement, so none can be lost to a race.
2938
+ const db = getDb();
2939
+ const changes = db
2940
+ .prepare(`UPDATE identity_link_challenges SET claimed_platform = ?, claimed_tenant = ?, claimed_native_id = ?, claimed_at = ?, back_nonce_hash = ?, status = 'claimed'
2941
+ WHERE org_id = ? AND id = ? AND status = 'pending' AND expires_at > ?
2942
+ AND target_platform = ? AND target_tenant = ? AND target_native_id = ?`)
2943
+ .run(consenter.platform, consenter.tenant, consenter.nativeId, at, backNonceHash ?? null, org, id, at, consenter.platform, consenter.tenant, consenter.nativeId).changes;
2944
+ if (Number(changes) === 0)
2945
+ return null;
2946
+ const row = db.prepare(`${LINK_CHALLENGE_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
2947
+ return row ? linkChallengeFromSqliteRow(org, row) : null;
2948
+ },
2949
+ async decideLinkChallenge(org, id, from, to, at) {
2950
+ // TTL CONJUNCT ON RATIFY (audit finding F7) — the postgres twin's contract on the floor backend:
2951
+ // the terminal `ratified` transition (the one that writes a link) also requires `expires_at > at`
2952
+ // so a claimed-but-expired challenge cannot be ratified without a prior sweep. Deny carries no
2953
+ // TTL conjunct (it writes nothing). TTL lives INSIDE the statement, not in a caller's clock read.
2954
+ const ttlConjunct = to === "ratified" ? " AND expires_at > ?" : "";
2955
+ const args = to === "ratified" ? [to, at, org, id, ...from, at] : [to, at, org, id, ...from];
2956
+ const changes = getDb()
2957
+ .prepare(`UPDATE identity_link_challenges SET status = ?, decided_at = ? WHERE org_id = ? AND id = ? AND status IN (${placeholders(from.length)})${ttlConjunct}`)
2958
+ .run(...args).changes;
2959
+ return Number(changes) > 0;
2960
+ },
2961
+ async expireLinkChallenges(org, nowIso) {
2962
+ return Number(getDb()
2963
+ .prepare("UPDATE identity_link_challenges SET status = 'expired', decided_at = ? WHERE org_id = ? AND status IN ('pending', 'claimed') AND expires_at <= ?")
2964
+ .run(nowIso, org, nowIso).changes);
2965
+ },
2966
+ async addCredentialGrantAsk(org, row) {
2967
+ refuseHalfBorrow("credential_grant_ask", row);
2968
+ getDb()
2969
+ .prepare(`INSERT INTO credential_grant_ask
2970
+ (org_id, id, requester_principal_id, owner_principal_id, owner_slug, owner_platform, owner_native_id, connector, verb, resource,
2971
+ mcp_tool, frozen_args, tool_name,
2972
+ scope_key, domain_scope_key, purpose, requester_target, card_surface_id, card_message_id, requested_mode, status, created_at, expires_at, decided_at, grant_id)
2973
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
2974
+ .run(org, row.id, row.requesterPrincipalId, row.ownerPrincipalId, row.ownerSlug, row.ownerPlatform, row.ownerNativeId, row.connector, row.verb, row.resource, row.mcpTool ?? null, grantJsonColumn(row.frozenArgs), row.toolName ?? null, row.scopeKey, row.domainScopeKey ?? null, row.purpose, row.requesterTarget ?? null, row.cardSurfaceId ?? null, row.cardMessageId ?? null, row.requestedMode, row.status, row.createdAt, row.expiresAt, row.decidedAt ?? null, row.grantId ?? null);
2975
+ },
2976
+ async setCredentialGrantAskCard(org, id, surfaceId, messageId) {
2977
+ getDb().prepare("UPDATE credential_grant_ask SET card_surface_id = ?, card_message_id = ? WHERE org_id = ? AND id = ?").run(surfaceId, messageId, org, id);
2978
+ },
2979
+ async getCredentialGrantAsk(org, id) {
2980
+ const row = getDb().prepare(`${GRANT_ASK_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
2981
+ return row ? grantAskFromSqliteRow(row) : null;
2982
+ },
2983
+ async liveCredentialGrantAsk(org, requesterPrincipalId, ownerPrincipalId, verb, resource, nowIso) {
2984
+ // EXPIRY IN THE PREDICATE, never a status check alone: the sweep is a tidy-up, so an unswept
2985
+ // `pending` row past its TTL must read as gone here or a lapsed ask would block a fresh one.
2986
+ const row = getDb()
2987
+ .prepare(`${GRANT_ASK_SQLITE_SELECT}
2988
+ WHERE org_id = ? AND requester_principal_id = ? AND owner_principal_id = ? AND verb = ? AND resource = ?
2989
+ AND status = 'pending' AND expires_at > ?
2990
+ ORDER BY created_at DESC LIMIT 1`)
2991
+ .get(org, requesterPrincipalId, ownerPrincipalId, verb, resource, nowIso);
2992
+ return row ? grantAskFromSqliteRow(row) : null;
2993
+ },
2994
+ async approveCredentialGrantAsk(org, id, mode, grantId, at) {
2995
+ // Single-answer + TTL in ONE statement (the claimLinkChallenge discipline). `status = 'pending'`
2996
+ // admits exactly one approval, and `expires_at > at` makes a late click on a scrolled-back card
2997
+ // lose the CAS rather than be caught by a UI state.
2998
+ const db = getDb();
2999
+ const changes = db
3000
+ .prepare(`UPDATE credential_grant_ask SET status = 'approved', requested_mode = ?, grant_id = ?, decided_at = ?
3001
+ WHERE org_id = ? AND id = ? AND status = 'pending' AND expires_at > ?`)
3002
+ .run(mode, grantId, at, org, id, at).changes;
3003
+ if (Number(changes) === 0)
3004
+ return null;
3005
+ const row = db.prepare(`${GRANT_ASK_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
3006
+ return row ? grantAskFromSqliteRow(row) : null;
3007
+ },
3008
+ async decideCredentialGrantAsk(org, id, from, to, at) {
3009
+ const changes = getDb()
3010
+ .prepare(`UPDATE credential_grant_ask SET status = ?, decided_at = ? WHERE org_id = ? AND id = ? AND status IN (${placeholders(from.length)})`)
3011
+ .run(to, at, org, id, ...from).changes;
3012
+ return Number(changes) > 0;
3013
+ },
3014
+ async listExpiredCredentialGrantAsks(org, nowIso) {
3015
+ const rows = getDb()
3016
+ .prepare(`${GRANT_ASK_SQLITE_SELECT} WHERE org_id = ? AND status = 'pending' AND expires_at <= ? ORDER BY created_at ASC`)
3017
+ .all(org, nowIso);
3018
+ return rows.map(grantAskFromSqliteRow);
3019
+ },
3020
+ async pendingCredentialGrantAsksForScope(org, scopeKey, nowIso) {
3021
+ // EXPIRY IN THE PREDICATE, for `liveCredentialGrantAsk`'s reason: the sweep is a tidy-up, so an
3022
+ // unswept `pending` row past its TTL must read as gone or a lapsed ask would hold its name for
3023
+ // ever. The read rides the `(org_id, scope_key)` index the table already carries.
3024
+ const rows = getDb()
3025
+ .prepare(`${GRANT_ASK_SQLITE_SELECT} WHERE org_id = ? AND scope_key = ? AND status = 'pending' AND expires_at > ? ORDER BY created_at ASC`)
3026
+ .all(org, scopeKey, nowIso);
3027
+ return rows.map(grantAskFromSqliteRow);
3028
+ },
3029
+ async addCredentialGrant(org, row) {
3030
+ refuseHalfBorrow("credential_grant", row);
3031
+ getDb()
3032
+ .prepare(`INSERT INTO credential_grant
3033
+ (org_id, id, ask_id, requester_principal_id, owner_principal_id, owner_slug, connector, verb, resource,
3034
+ mcp_tool, frozen_args, tool_name, input_schema,
3035
+ scope_key, mode, tier, status, purpose, created_at, expires_at, used_at, revoked_at)
3036
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
3037
+ .run(org, row.id, row.askId, row.requesterPrincipalId, row.ownerPrincipalId, row.ownerSlug, row.connector, row.verb, row.resource, row.mcpTool ?? null, grantJsonColumn(row.frozenArgs), row.toolName ?? null, grantJsonColumn(row.inputSchema), row.scopeKey, row.mode, row.tier, row.status, row.purpose, row.createdAt, row.expiresAt, row.usedAt ?? null, row.revokedAt ?? null);
3038
+ },
3039
+ async getCredentialGrant(org, id) {
3040
+ const row = getDb().prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
3041
+ return row ? grantFromSqliteRow(row) : null;
3042
+ },
3043
+ async credentialGrantsForScope(org, scopeKey) {
3044
+ // NO status filter, deliberately — the mount projects EXISTENCE and the broker refuses on STATE.
3045
+ // See the store.ts contract for why a status filter here breaks the cold-heal path.
3046
+ const rows = getDb()
3047
+ .prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND scope_key = ? ORDER BY created_at DESC`)
3048
+ .all(org, scopeKey);
3049
+ return rows.map(grantFromSqliteRow);
3050
+ },
3051
+ async liveStandingCredentialGrantsForScope(org, scopeKey, nowIso) {
3052
+ // STATUS, EXPIRY, REVOCATION AND MODE ALL IN THE PREDICATE — a domain-keyed row is read by
3053
+ // sessions that never saw it, so a dead one must not mount there. See the store.ts contract.
3054
+ const rows = getDb()
3055
+ .prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND scope_key = ? AND mode = 'standing' AND status = 'active'
3056
+ AND expires_at > ? AND revoked_at IS NULL ORDER BY created_at DESC`)
3057
+ .all(org, scopeKey, nowIso);
3058
+ return rows.map(grantFromSqliteRow);
3059
+ },
3060
+ async liveCredentialGrantsForOwner(org, ownerPrincipalId, nowIso) {
3061
+ // STATUS AND EXPIRY BOTH IN THE PREDICATE — the owner may only be offered rows they can still
3062
+ // end. See the store.ts contract for why this filters where `credentialGrantsForScope` must not.
3063
+ const rows = getDb()
3064
+ .prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND owner_principal_id = ? AND status = 'active' AND expires_at > ? ORDER BY created_at ASC`)
3065
+ .all(org, ownerPrincipalId, nowIso);
3066
+ return rows.map(grantFromSqliteRow);
3067
+ },
3068
+ async liveBorrowCredentialGrant(org, ownerPrincipalId, connector, mcpTool, frozenArgsDigest, scopeKey, nowIso) {
3069
+ // THE DIGEST IS COMPARED IN TYPESCRIPT, not in SQL, because it is not a column. The predicate
3070
+ // narrows to the rows that could match — one owner, one connector, one vendor tool, one chat,
3071
+ // still live — and there are at most a handful of those, so the scan is cheap. A digest column
3072
+ // would be a second copy of `frozen_args` that a partial write could put out of step with it.
3073
+ const rows = getDb()
3074
+ .prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND owner_principal_id = ? AND connector = ? AND mcp_tool = ? AND scope_key = ?
3075
+ AND status = 'active' AND expires_at > ? ORDER BY created_at DESC`)
3076
+ .all(org, ownerPrincipalId, connector, mcpTool, scopeKey, nowIso);
3077
+ for (const r of rows) {
3078
+ const row = grantFromSqliteRow(r);
3079
+ if (row.frozenArgs !== undefined && grantFrozenArgsDigest(row.frozenArgs) === frozenArgsDigest)
3080
+ return row;
3081
+ }
3082
+ return null;
3083
+ },
3084
+ async burnCredentialGrant(org, id, at) {
3085
+ // THE WHOLE OF ONCE-MODE. Both conjuncts are in the statement: `status = 'active'` makes the burn
3086
+ // single-use, `expires_at > at` makes an expired row unspendable without waiting for a sweep.
3087
+ const db = getDb();
3088
+ const changes = db
3089
+ .prepare(`UPDATE credential_grant SET status = 'used', used_at = ? WHERE org_id = ? AND id = ? AND status = 'active' AND expires_at > ?`)
3090
+ .run(at, org, id, at).changes;
3091
+ if (Number(changes) === 0)
3092
+ return null;
3093
+ const row = db.prepare(`${GRANT_SQLITE_SELECT} WHERE org_id = ? AND id = ?`).get(org, id);
3094
+ return row ? grantFromSqliteRow(row) : null;
3095
+ },
3096
+ async refundCredentialGrant(org, id, burnedAt) {
3097
+ // `used_at = ?` IS THE CONTROL, not a tidy extra conjunct: it binds the refund to the caller's
3098
+ // OWN burn, so a call that lost the burn race cannot un-spend the winner's. `revoked_at IS NULL`
3099
+ // is what makes an owner's revoke beat a refund racing it — see `revokeCredentialGrant`.
3100
+ const changes = getDb()
3101
+ .prepare(`UPDATE credential_grant SET status = 'active', used_at = NULL
3102
+ WHERE org_id = ? AND id = ? AND status = 'used' AND used_at = ? AND revoked_at IS NULL`)
3103
+ .run(org, id, burnedAt).changes;
3104
+ return Number(changes) > 0;
3105
+ },
3106
+ async claimCredentialGrantRefund(org, id, turnKey, cap) {
3107
+ // ONE STATEMENT, so two calls racing in one step cannot both read the same remaining count. The
3108
+ // right-hand `refund_turn_seq` is the row's PRE-UPDATE value in both engines, so every CASE and
3109
+ // the WHERE read the same stored ordinal.
3110
+ //
3111
+ // 🔴 ONLY A STRICTLY LATER TURN ROLLS (OPE-1281). The predicate is the ORDINAL comparison, not
3112
+ // the key inequality this statement used to carry: an inequality rolls in both directions, so
3113
+ // two turn ids alternating on one row each read the other as new and each collected a fresh
3114
+ // allowance. A NULL ordinal — no turn id, or a key eve's shape no longer mints — never rolls;
3115
+ // it counts against the stored turn and leaves the turn in place, which is the fail-closed
3116
+ // direction.
3117
+ //
3118
+ // 🔴 A ROW THAT HAS COUNTED A TURN AND CARRIES NO ORDINAL NEVER ROLLS EITHER, and that is the
3119
+ // upgrade window rather than a corner. A row written before this column existed holds a turn
3120
+ // key, a count up to `cap`, and a NULL ordinal; reading that NULL as "never counted" would let
3121
+ // ANY turn roll it — the same turn included — which is the hole this ticket closes. So the
3122
+ // first disjunct asks for BOTH columns empty, which is a row that has genuinely counted
3123
+ // nothing. A migrated row keeps the allowance it had for the rest of its life, bounded by the
3124
+ // grant's TTL.
3125
+ const key = turnKey ?? null;
3126
+ const seq = grantRefundTurnOrdinal(turnKey) ?? null;
3127
+ // The roll predicate, spelled once and bound twice per use. Binds below follow the statement's
3128
+ // own order: (seq, seq, key) (seq, seq, seq) (seq, seq) org id (seq, seq) cap.
3129
+ const rolls = "(? IS NOT NULL AND ((refund_turn IS NULL AND refund_turn_seq IS NULL) OR ? > refund_turn_seq))";
3130
+ const changes = getDb()
3131
+ .prepare(`UPDATE credential_grant
3132
+ SET refund_turn = CASE WHEN ${rolls} THEN ? ELSE refund_turn END,
3133
+ refund_turn_seq = CASE WHEN ${rolls} THEN ? ELSE refund_turn_seq END,
3134
+ refund_count = CASE WHEN ${rolls} THEN 1 ELSE COALESCE(refund_count, 0) + 1 END
3135
+ WHERE org_id = ? AND id = ?
3136
+ AND (${rolls} OR COALESCE(refund_count, 0) < ?)`)
3137
+ .run(seq, seq, key, seq, seq, seq, seq, seq, org, id, seq, seq, cap).changes;
3138
+ return Number(changes) > 0;
3139
+ },
3140
+ async revokeCredentialGrant(org, id, at) {
3141
+ const db = getDb();
3142
+ const changes = db
3143
+ .prepare("UPDATE credential_grant SET status = 'revoked', revoked_at = ? WHERE org_id = ? AND id = ? AND status = 'active'")
3144
+ .run(at, org, id).changes;
3145
+ if (Number(changes) > 0)
3146
+ return true;
3147
+ // THE ROW WAS NOT LIVE. If it is `used`, the owner may be racing a once call that is still in
3148
+ // flight: stamp the intent so a refund cannot re-open it (OPE-1198). The STATUS is left alone —
3149
+ // a spent grant is already terminal, and rewriting it would lose which arm ended it. The answer
3150
+ // stays `false`: this call revoked no live grant.
3151
+ db.prepare("UPDATE credential_grant SET revoked_at = ? WHERE org_id = ? AND id = ? AND status = 'used' AND revoked_at IS NULL").run(at, org, id);
3152
+ return false;
3153
+ },
3154
+ async expireCredentialGrants(org, nowIso) {
3155
+ return Number(getDb()
3156
+ .prepare("UPDATE credential_grant SET status = 'expired' WHERE org_id = ? AND status = 'active' AND expires_at <= ?")
3157
+ .run(org, nowIso).changes);
3158
+ },
3159
+ async getMeta(key) {
3160
+ const row = getDb().prepare("SELECT value FROM instance_meta WHERE key = ?").get(key);
3161
+ return row ? row.value : null;
3162
+ },
3163
+ async setMeta(key, value) {
3164
+ getDb()
3165
+ .prepare(`INSERT INTO instance_meta (key, value) VALUES (?, ?)
3166
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`)
3167
+ .run(key, value);
3168
+ },
3169
+ };
3170
+ //# sourceMappingURL=sqlite.js.map