@pyric/cli 0.1.0-alpha.10

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 (903) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +180 -0
  3. package/README.md.orig +141 -0
  4. package/dist/assurance/.generated/conformance-verdicts.d.ts +1071 -0
  5. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -0
  6. package/dist/assurance/.generated/conformance-verdicts.js +1070 -0
  7. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -0
  8. package/dist/assurance/attachment.d.ts +24 -0
  9. package/dist/assurance/attachment.d.ts.map +1 -0
  10. package/dist/assurance/attachment.js +138 -0
  11. package/dist/assurance/attachment.js.map +1 -0
  12. package/dist/assurance/browser.d.ts +7 -0
  13. package/dist/assurance/browser.d.ts.map +1 -0
  14. package/dist/assurance/browser.js +68 -0
  15. package/dist/assurance/browser.js.map +1 -0
  16. package/dist/assurance/campaign.d.ts +41 -0
  17. package/dist/assurance/campaign.d.ts.map +1 -0
  18. package/dist/assurance/campaign.js +364 -0
  19. package/dist/assurance/campaign.js.map +1 -0
  20. package/dist/assurance/capabilities.d.ts +11 -0
  21. package/dist/assurance/capabilities.d.ts.map +1 -0
  22. package/dist/assurance/capabilities.js +282 -0
  23. package/dist/assurance/capabilities.js.map +1 -0
  24. package/dist/assurance/cases.d.ts +14 -0
  25. package/dist/assurance/cases.d.ts.map +1 -0
  26. package/dist/assurance/cases.js +27 -0
  27. package/dist/assurance/cases.js.map +1 -0
  28. package/dist/assurance/index.d.ts +10 -0
  29. package/dist/assurance/index.d.ts.map +1 -0
  30. package/dist/assurance/index.js +9 -0
  31. package/dist/assurance/index.js.map +1 -0
  32. package/dist/assurance/runner.d.ts +3 -0
  33. package/dist/assurance/runner.d.ts.map +1 -0
  34. package/dist/assurance/runner.js +633 -0
  35. package/dist/assurance/runner.js.map +1 -0
  36. package/dist/assurance/tool-names.d.ts +4 -0
  37. package/dist/assurance/tool-names.d.ts.map +1 -0
  38. package/dist/assurance/tool-names.js +14 -0
  39. package/dist/assurance/tool-names.js.map +1 -0
  40. package/dist/assurance/tools.d.ts +19 -0
  41. package/dist/assurance/tools.d.ts.map +1 -0
  42. package/dist/assurance/tools.js +737 -0
  43. package/dist/assurance/tools.js.map +1 -0
  44. package/dist/assurance/types.d.ts +347 -0
  45. package/dist/assurance/types.d.ts.map +1 -0
  46. package/dist/assurance/types.js +7 -0
  47. package/dist/assurance/types.js.map +1 -0
  48. package/dist/assurance/validation.d.ts +8 -0
  49. package/dist/assurance/validation.d.ts.map +1 -0
  50. package/dist/assurance/validation.js +269 -0
  51. package/dist/assurance/validation.js.map +1 -0
  52. package/dist/bridge/client/bridge.d.ts +133 -0
  53. package/dist/bridge/client/bridge.d.ts.map +1 -0
  54. package/dist/bridge/client/bridge.js +429 -0
  55. package/dist/bridge/client/bridge.js.map +1 -0
  56. package/dist/bridge/client/dispatch.d.ts +41 -0
  57. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  58. package/dist/bridge/client/dispatch.js +111 -0
  59. package/dist/bridge/client/dispatch.js.map +1 -0
  60. package/dist/bridge/client.d.ts +24 -0
  61. package/dist/bridge/client.d.ts.map +1 -0
  62. package/dist/bridge/client.js +26 -0
  63. package/dist/bridge/client.js.map +1 -0
  64. package/dist/bridge/protocol.d.ts +227 -0
  65. package/dist/bridge/protocol.d.ts.map +1 -0
  66. package/dist/bridge/protocol.js +131 -0
  67. package/dist/bridge/protocol.js.map +1 -0
  68. package/dist/bridge/server/audit.d.ts +19 -0
  69. package/dist/bridge/server/audit.d.ts.map +1 -0
  70. package/dist/bridge/server/audit.js +46 -0
  71. package/dist/bridge/server/audit.js.map +1 -0
  72. package/dist/bridge/server/bridge.d.ts +126 -0
  73. package/dist/bridge/server/bridge.d.ts.map +1 -0
  74. package/dist/bridge/server/bridge.js +383 -0
  75. package/dist/bridge/server/bridge.js.map +1 -0
  76. package/dist/bridge/server/headless.d.ts +36 -0
  77. package/dist/bridge/server/headless.d.ts.map +1 -0
  78. package/dist/bridge/server/headless.js +142 -0
  79. package/dist/bridge/server/headless.js.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  81. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  82. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  83. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  84. package/dist/bridge/server/local-bridge.d.ts +33 -0
  85. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  86. package/dist/bridge/server/local-bridge.js +41 -0
  87. package/dist/bridge/server/local-bridge.js.map +1 -0
  88. package/dist/bridge/server/logger.d.ts +28 -0
  89. package/dist/bridge/server/logger.d.ts.map +1 -0
  90. package/dist/bridge/server/logger.js +42 -0
  91. package/dist/bridge/server/logger.js.map +1 -0
  92. package/dist/bridge/server/mcp-contract.d.ts +21 -0
  93. package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
  94. package/dist/bridge/server/mcp-contract.js +63 -0
  95. package/dist/bridge/server/mcp-contract.js.map +1 -0
  96. package/dist/bridge/server/mcp.d.ts +26 -0
  97. package/dist/bridge/server/mcp.d.ts.map +1 -0
  98. package/dist/bridge/server/mcp.js +102 -0
  99. package/dist/bridge/server/mcp.js.map +1 -0
  100. package/dist/bridge/server/peer.d.ts +39 -0
  101. package/dist/bridge/server/peer.d.ts.map +1 -0
  102. package/dist/bridge/server/peer.js +189 -0
  103. package/dist/bridge/server/peer.js.map +1 -0
  104. package/dist/bridge/server/standalone.d.ts +49 -0
  105. package/dist/bridge/server/standalone.d.ts.map +1 -0
  106. package/dist/bridge/server/standalone.js +267 -0
  107. package/dist/bridge/server/standalone.js.map +1 -0
  108. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  109. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  110. package/dist/bridge/server/tool-metadata.js +84 -0
  111. package/dist/bridge/server/tool-metadata.js.map +1 -0
  112. package/dist/bridge/server.d.ts +21 -0
  113. package/dist/bridge/server.d.ts.map +1 -0
  114. package/dist/bridge/server.js +18 -0
  115. package/dist/bridge/server.js.map +1 -0
  116. package/dist/cli/can-i-use.d.ts +5 -0
  117. package/dist/cli/can-i-use.d.ts.map +1 -0
  118. package/dist/cli/can-i-use.js +49 -0
  119. package/dist/cli/can-i-use.js.map +1 -0
  120. package/dist/cli/database-rules.d.ts +43 -0
  121. package/dist/cli/database-rules.d.ts.map +1 -0
  122. package/dist/cli/database-rules.js +261 -0
  123. package/dist/cli/database-rules.js.map +1 -0
  124. package/dist/cli/dev-runner.d.ts +112 -0
  125. package/dist/cli/dev-runner.d.ts.map +1 -0
  126. package/dist/cli/dev-runner.js +239 -0
  127. package/dist/cli/dev-runner.js.map +1 -0
  128. package/dist/cli/firebase-json.d.ts +66 -0
  129. package/dist/cli/firebase-json.d.ts.map +1 -0
  130. package/dist/cli/firebase-json.js +60 -0
  131. package/dist/cli/firebase-json.js.map +1 -0
  132. package/dist/cli/firestore-indexes.d.ts +21 -0
  133. package/dist/cli/firestore-indexes.d.ts.map +1 -0
  134. package/dist/cli/firestore-indexes.js +39 -0
  135. package/dist/cli/firestore-indexes.js.map +1 -0
  136. package/dist/cli/index.d.ts +56 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +387 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/init.d.ts +50 -0
  141. package/dist/cli/init.d.ts.map +1 -0
  142. package/dist/cli/init.js +182 -0
  143. package/dist/cli/init.js.map +1 -0
  144. package/dist/cli/mcp-proxy.d.ts +10 -0
  145. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  146. package/dist/cli/mcp-proxy.js +129 -0
  147. package/dist/cli/mcp-proxy.js.map +1 -0
  148. package/dist/cli/parse-args.d.ts +20 -0
  149. package/dist/cli/parse-args.d.ts.map +1 -0
  150. package/dist/cli/parse-args.js +74 -0
  151. package/dist/cli/parse-args.js.map +1 -0
  152. package/dist/cli/rules.d.ts +55 -0
  153. package/dist/cli/rules.d.ts.map +1 -0
  154. package/dist/cli/rules.js +199 -0
  155. package/dist/cli/rules.js.map +1 -0
  156. package/dist/cli/scope.d.ts +12 -0
  157. package/dist/cli/scope.d.ts.map +1 -0
  158. package/dist/cli/scope.js +44 -0
  159. package/dist/cli/scope.js.map +1 -0
  160. package/dist/cli/serve.d.ts +122 -0
  161. package/dist/cli/serve.d.ts.map +1 -0
  162. package/dist/cli/serve.js +844 -0
  163. package/dist/cli/serve.js.map +1 -0
  164. package/dist/cli/service-commands.d.ts +8 -0
  165. package/dist/cli/service-commands.d.ts.map +1 -0
  166. package/dist/cli/service-commands.js +58 -0
  167. package/dist/cli/service-commands.js.map +1 -0
  168. package/dist/cli/snapshot.d.ts +22 -0
  169. package/dist/cli/snapshot.d.ts.map +1 -0
  170. package/dist/cli/snapshot.js +139 -0
  171. package/dist/cli/snapshot.js.map +1 -0
  172. package/dist/cli/storage-rules.d.ts +21 -0
  173. package/dist/cli/storage-rules.d.ts.map +1 -0
  174. package/dist/cli/storage-rules.js +121 -0
  175. package/dist/cli/storage-rules.js.map +1 -0
  176. package/dist/cli/verify.d.ts +23 -0
  177. package/dist/cli/verify.d.ts.map +1 -0
  178. package/dist/cli/verify.js +349 -0
  179. package/dist/cli/verify.js.map +1 -0
  180. package/dist/conformance/.generated/can-i-use-browser.d.ts +44 -0
  181. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -0
  182. package/dist/conformance/.generated/can-i-use-browser.js +67 -0
  183. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -0
  184. package/dist/conformance/.generated/can-i-use.d.ts +61 -0
  185. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -0
  186. package/dist/conformance/.generated/can-i-use.js +68 -0
  187. package/dist/conformance/.generated/can-i-use.js.map +1 -0
  188. package/dist/conformance/browser.d.ts +7 -0
  189. package/dist/conformance/browser.d.ts.map +1 -0
  190. package/dist/conformance/browser.js +8 -0
  191. package/dist/conformance/browser.js.map +1 -0
  192. package/dist/conformance/can-i-use-tool.d.ts +21 -0
  193. package/dist/conformance/can-i-use-tool.d.ts.map +1 -0
  194. package/dist/conformance/can-i-use-tool.js +40 -0
  195. package/dist/conformance/can-i-use-tool.js.map +1 -0
  196. package/dist/conformance/can-i-use.d.ts +6 -0
  197. package/dist/conformance/can-i-use.d.ts.map +1 -0
  198. package/dist/conformance/can-i-use.js +10 -0
  199. package/dist/conformance/can-i-use.js.map +1 -0
  200. package/dist/conformance/index.d.ts +8 -0
  201. package/dist/conformance/index.d.ts.map +1 -0
  202. package/dist/conformance/index.js +2 -0
  203. package/dist/conformance/index.js.map +1 -0
  204. package/dist/conformance/tools.d.ts +4 -0
  205. package/dist/conformance/tools.d.ts.map +1 -0
  206. package/dist/conformance/tools.js +14 -0
  207. package/dist/conformance/tools.js.map +1 -0
  208. package/dist/credentials/core/memoize-ttl.d.ts +58 -0
  209. package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
  210. package/dist/credentials/core/memoize-ttl.js +88 -0
  211. package/dist/credentials/core/memoize-ttl.js.map +1 -0
  212. package/dist/credentials/core/types.d.ts +11 -0
  213. package/dist/credentials/core/types.d.ts.map +1 -0
  214. package/dist/credentials/core/types.js +2 -0
  215. package/dist/credentials/core/types.js.map +1 -0
  216. package/dist/credentials/node/from-adc.d.ts +10 -0
  217. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  218. package/dist/credentials/node/from-adc.js +76 -0
  219. package/dist/credentials/node/from-adc.js.map +1 -0
  220. package/dist/credentials/node/from-service-account.d.ts +24 -0
  221. package/dist/credentials/node/from-service-account.d.ts.map +1 -0
  222. package/dist/credentials/node/from-service-account.js +108 -0
  223. package/dist/credentials/node/from-service-account.js.map +1 -0
  224. package/dist/credentials/node/index.d.ts +7 -0
  225. package/dist/credentials/node/index.d.ts.map +1 -0
  226. package/dist/credentials/node/index.js +7 -0
  227. package/dist/credentials/node/index.js.map +1 -0
  228. package/dist/discover/concurrency.d.ts +42 -0
  229. package/dist/discover/concurrency.d.ts.map +1 -0
  230. package/dist/discover/concurrency.js +113 -0
  231. package/dist/discover/concurrency.js.map +1 -0
  232. package/dist/discover/crawler-adapter.d.ts +48 -0
  233. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  234. package/dist/discover/crawler-adapter.js +92 -0
  235. package/dist/discover/crawler-adapter.js.map +1 -0
  236. package/dist/discover/crawler.d.ts +294 -0
  237. package/dist/discover/crawler.d.ts.map +1 -0
  238. package/dist/discover/crawler.js +764 -0
  239. package/dist/discover/crawler.js.map +1 -0
  240. package/dist/discover/credential-free.d.ts +19 -0
  241. package/dist/discover/credential-free.d.ts.map +1 -0
  242. package/dist/discover/credential-free.js +18 -0
  243. package/dist/discover/credential-free.js.map +1 -0
  244. package/dist/discover/findCollectionGroup.d.ts +44 -0
  245. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  246. package/dist/discover/findCollectionGroup.js +81 -0
  247. package/dist/discover/findCollectionGroup.js.map +1 -0
  248. package/dist/discover/firestore-source.d.ts +60 -0
  249. package/dist/discover/firestore-source.d.ts.map +1 -0
  250. package/dist/discover/firestore-source.js +11 -0
  251. package/dist/discover/firestore-source.js.map +1 -0
  252. package/dist/discover/index.d.ts +3 -0
  253. package/dist/discover/index.d.ts.map +1 -0
  254. package/dist/discover/index.js +5 -0
  255. package/dist/discover/index.js.map +1 -0
  256. package/dist/discover/merge.d.ts +108 -0
  257. package/dist/discover/merge.d.ts.map +1 -0
  258. package/dist/discover/merge.js +394 -0
  259. package/dist/discover/merge.js.map +1 -0
  260. package/dist/discover/session.d.ts +116 -0
  261. package/dist/discover/session.d.ts.map +1 -0
  262. package/dist/discover/session.js +331 -0
  263. package/dist/discover/session.js.map +1 -0
  264. package/dist/discover/tools.d.ts +58 -0
  265. package/dist/discover/tools.d.ts.map +1 -0
  266. package/dist/discover/tools.js +115 -0
  267. package/dist/discover/tools.js.map +1 -0
  268. package/dist/discover/types.d.ts +190 -0
  269. package/dist/discover/types.d.ts.map +1 -0
  270. package/dist/discover/types.js +12 -0
  271. package/dist/discover/types.js.map +1 -0
  272. package/dist/discover/wire.d.ts +70 -0
  273. package/dist/discover/wire.d.ts.map +1 -0
  274. package/dist/discover/wire.js +309 -0
  275. package/dist/discover/wire.js.map +1 -0
  276. package/dist/functions-rtdb/child.d.ts +52 -0
  277. package/dist/functions-rtdb/child.d.ts.map +1 -0
  278. package/dist/functions-rtdb/child.js +283 -0
  279. package/dist/functions-rtdb/child.js.map +1 -0
  280. package/dist/functions-rtdb/delivery.d.ts +4 -0
  281. package/dist/functions-rtdb/delivery.d.ts.map +1 -0
  282. package/dist/functions-rtdb/delivery.js +2 -0
  283. package/dist/functions-rtdb/delivery.js.map +1 -0
  284. package/dist/functions-rtdb/discovery.d.ts +41 -0
  285. package/dist/functions-rtdb/discovery.d.ts.map +1 -0
  286. package/dist/functions-rtdb/discovery.js +86 -0
  287. package/dist/functions-rtdb/discovery.js.map +1 -0
  288. package/dist/functions-rtdb/event.d.ts +20 -0
  289. package/dist/functions-rtdb/event.d.ts.map +1 -0
  290. package/dist/functions-rtdb/event.js +45 -0
  291. package/dist/functions-rtdb/event.js.map +1 -0
  292. package/dist/functions-rtdb/execution.d.ts +20 -0
  293. package/dist/functions-rtdb/execution.d.ts.map +1 -0
  294. package/dist/functions-rtdb/execution.js +70 -0
  295. package/dist/functions-rtdb/execution.js.map +1 -0
  296. package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
  297. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
  298. package/dist/functions-rtdb/in-memory-delivery.js +36 -0
  299. package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
  300. package/dist/functions-rtdb/project.d.ts +7 -0
  301. package/dist/functions-rtdb/project.d.ts.map +1 -0
  302. package/dist/functions-rtdb/project.js +54 -0
  303. package/dist/functions-rtdb/project.js.map +1 -0
  304. package/dist/functions-rtdb/projection.d.ts +14 -0
  305. package/dist/functions-rtdb/projection.d.ts.map +1 -0
  306. package/dist/functions-rtdb/projection.js +65 -0
  307. package/dist/functions-rtdb/projection.js.map +1 -0
  308. package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
  309. package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
  310. package/dist/functions-rtdb/reference-pattern.js +14 -0
  311. package/dist/functions-rtdb/reference-pattern.js.map +1 -0
  312. package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
  313. package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
  314. package/dist/functions-rtdb/remote-delivery.js +11 -0
  315. package/dist/functions-rtdb/remote-delivery.js.map +1 -0
  316. package/dist/pkg-version.d.ts +2 -0
  317. package/dist/pkg-version.d.ts.map +1 -0
  318. package/dist/pkg-version.js +47 -0
  319. package/dist/pkg-version.js.map +1 -0
  320. package/dist/register/esm-exports.d.ts +26 -0
  321. package/dist/register/esm-exports.d.ts.map +1 -0
  322. package/dist/register/esm-exports.js +61 -0
  323. package/dist/register/esm-exports.js.map +1 -0
  324. package/dist/register/hooks.d.ts +13 -0
  325. package/dist/register/hooks.d.ts.map +1 -0
  326. package/dist/register/hooks.js +15 -0
  327. package/dist/register/hooks.js.map +1 -0
  328. package/dist/register/index.d.ts +5 -0
  329. package/dist/register/index.d.ts.map +1 -0
  330. package/dist/register/index.js +124 -0
  331. package/dist/register/index.js.map +1 -0
  332. package/dist/register/mapping.d.ts +19 -0
  333. package/dist/register/mapping.d.ts.map +1 -0
  334. package/dist/register/mapping.js +35 -0
  335. package/dist/register/mapping.js.map +1 -0
  336. package/dist/remote/index.d.ts +232 -0
  337. package/dist/remote/index.d.ts.map +1 -0
  338. package/dist/remote/index.js +720 -0
  339. package/dist/remote/index.js.map +1 -0
  340. package/dist/rtdb/crawl-snapshot.d.ts +17 -0
  341. package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
  342. package/dist/rtdb/crawl-snapshot.js +72 -0
  343. package/dist/rtdb/crawl-snapshot.js.map +1 -0
  344. package/dist/rtdb/inspection.d.ts +8 -0
  345. package/dist/rtdb/inspection.d.ts.map +1 -0
  346. package/dist/rtdb/inspection.js +111 -0
  347. package/dist/rtdb/inspection.js.map +1 -0
  348. package/dist/rtdb/load-rules-document.d.ts +25 -0
  349. package/dist/rtdb/load-rules-document.d.ts.map +1 -0
  350. package/dist/rtdb/load-rules-document.js +38 -0
  351. package/dist/rtdb/load-rules-document.js.map +1 -0
  352. package/dist/rtdb/rules-generation-tool.d.ts +4 -0
  353. package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
  354. package/dist/rtdb/rules-generation-tool.js +35 -0
  355. package/dist/rtdb/rules-generation-tool.js.map +1 -0
  356. package/dist/rtdb/rules-json.d.ts +8 -0
  357. package/dist/rtdb/rules-json.d.ts.map +1 -0
  358. package/dist/rtdb/rules-json.js +17 -0
  359. package/dist/rtdb/rules-json.js.map +1 -0
  360. package/dist/serve/bridge-mount.d.ts +36 -0
  361. package/dist/serve/bridge-mount.d.ts.map +1 -0
  362. package/dist/serve/bridge-mount.js +162 -0
  363. package/dist/serve/bridge-mount.js.map +1 -0
  364. package/dist/serve/bundler.d.ts +110 -0
  365. package/dist/serve/bundler.d.ts.map +1 -0
  366. package/dist/serve/bundler.js +432 -0
  367. package/dist/serve/bundler.js.map +1 -0
  368. package/dist/serve/capture-store.d.ts +27 -0
  369. package/dist/serve/capture-store.d.ts.map +1 -0
  370. package/dist/serve/capture-store.js +47 -0
  371. package/dist/serve/capture-store.js.map +1 -0
  372. package/dist/serve/discovery.d.ts +71 -0
  373. package/dist/serve/discovery.d.ts.map +1 -0
  374. package/dist/serve/discovery.js +158 -0
  375. package/dist/serve/discovery.js.map +1 -0
  376. package/dist/serve/docs-ui/_astro/_slug_.DPUwShm2.css +1 -0
  377. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  378. package/dist/serve/docs-ui/docs/_rhythm.md +97 -0
  379. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +42 -0
  380. package/dist/serve/docs-ui/docs/agent/set-up-your-agent.md +72 -0
  381. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +25 -0
  382. package/dist/serve/docs-ui/docs/agent/watch-and-review.md +38 -0
  383. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +69 -0
  384. package/dist/serve/docs-ui/docs/agent/work-with-an-agent.md +74 -0
  385. package/dist/serve/docs-ui/docs/ai-compat/index.html +423 -0
  386. package/dist/serve/docs-ui/docs/ai-compat.md +456 -0
  387. package/dist/serve/docs-ui/docs/api-reference/index.html +66 -0
  388. package/dist/serve/docs-ui/docs/api-reference.md +69 -0
  389. package/dist/serve/docs-ui/docs/app-compat/index.html +159 -0
  390. package/dist/serve/docs-ui/docs/app-compat.md +178 -0
  391. package/dist/serve/docs-ui/docs/auth-compat/index.html +644 -0
  392. package/dist/serve/docs-ui/docs/auth-compat.md +701 -0
  393. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +27 -0
  394. package/dist/serve/docs-ui/docs/build/ai-logic.md +39 -0
  395. package/dist/serve/docs-ui/docs/build/authentication/index.html +65 -0
  396. package/dist/serve/docs-ui/docs/build/authentication.md +95 -0
  397. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +69 -0
  398. package/dist/serve/docs-ui/docs/build/cloud-firestore.md +93 -0
  399. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +27 -0
  400. package/dist/serve/docs-ui/docs/build/cloud-messaging.md +37 -0
  401. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +65 -0
  402. package/dist/serve/docs-ui/docs/build/cloud-storage.md +86 -0
  403. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +49 -0
  404. package/dist/serve/docs-ui/docs/build/realtime-database.md +67 -0
  405. package/dist/serve/docs-ui/docs/conformance-scores/index.html +49 -0
  406. package/dist/serve/docs-ui/docs/conformance-scores.md +53 -0
  407. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
  408. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
  409. package/dist/serve/docs-ui/docs/database-compat/index.html +1037 -0
  410. package/dist/serve/docs-ui/docs/database-compat.md +1099 -0
  411. package/dist/serve/docs-ui/docs/firestore-compat/index.html +823 -0
  412. package/dist/serve/docs-ui/docs/firestore-compat.md +881 -0
  413. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +72 -0
  414. package/dist/serve/docs-ui/docs/functions-rtdb-compat.md +83 -0
  415. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +27 -0
  416. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works.md +50 -0
  417. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +31 -0
  418. package/dist/serve/docs-ui/docs/get-started/start-building.md +53 -0
  419. package/dist/serve/docs-ui/docs/index.html +2 -0
  420. package/dist/serve/docs-ui/docs/index.json +11719 -0
  421. package/dist/serve/docs-ui/docs/messaging-compat/index.html +264 -0
  422. package/dist/serve/docs-ui/docs/messaging-compat.md +285 -0
  423. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +73 -0
  424. package/dist/serve/docs-ui/docs/observe/see-whats-happening.md +69 -0
  425. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +44 -0
  426. package/dist/serve/docs-ui/docs/observe/shape-your-data.md +74 -0
  427. package/dist/serve/docs-ui/docs/overview/index.html +16 -0
  428. package/dist/serve/docs-ui/docs/overview.md +31 -0
  429. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
  430. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
  431. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
  432. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
  433. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
  434. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
  435. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
  436. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
  437. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
  438. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
  439. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5830 -0
  440. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5439 -0
  441. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
  442. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
  443. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
  444. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
  445. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
  446. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
  447. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
  448. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
  449. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2263 -0
  450. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1477 -0
  451. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
  452. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
  453. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
  454. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
  455. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +257 -0
  456. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +197 -0
  457. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +307 -0
  458. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +254 -0
  459. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
  460. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
  461. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
  462. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
  463. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
  464. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
  465. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
  466. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
  467. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
  468. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
  469. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
  470. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
  471. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
  472. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
  473. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
  474. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
  475. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
  476. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
  477. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
  478. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
  479. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
  480. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
  481. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
  482. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
  483. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
  484. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
  485. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
  486. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
  487. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
  488. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
  489. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
  490. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
  491. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
  492. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
  493. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
  494. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
  495. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
  496. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
  497. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
  498. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
  499. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
  500. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
  501. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
  502. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
  503. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
  504. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
  505. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
  506. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
  507. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
  508. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
  509. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
  510. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
  511. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
  512. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
  513. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
  514. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
  515. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
  516. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
  517. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
  518. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
  519. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
  520. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
  521. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
  522. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
  523. package/dist/serve/docs-ui/docs/rules-compat/index.html +272 -0
  524. package/dist/serve/docs-ui/docs/rules-compat.md +287 -0
  525. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +34 -0
  526. package/dist/serve/docs-ui/docs/secure/audit-your-rules.md +67 -0
  527. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +105 -0
  528. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits.md +152 -0
  529. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +40 -0
  530. package/dist/serve/docs-ui/docs/secure/read-a-denial.md +58 -0
  531. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +66 -0
  532. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript.md +89 -0
  533. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +158 -0
  534. package/dist/serve/docs-ui/docs/secure/rules-standard-library.md +116 -0
  535. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +46 -0
  536. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules.md +51 -0
  537. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +94 -0
  538. package/dist/serve/docs-ui/docs/secure/simulate-and-lint.md +86 -0
  539. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +81 -0
  540. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite.md +105 -0
  541. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +36 -0
  542. package/dist/serve/docs-ui/docs/ship/ship-to-production.md +64 -0
  543. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +74 -0
  544. package/dist/serve/docs-ui/docs/ship/test-in-node.md +94 -0
  545. package/dist/serve/docs-ui/docs/storage-compat/index.html +532 -0
  546. package/dist/serve/docs-ui/docs/storage-compat.md +577 -0
  547. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +131 -0
  548. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase.md +155 -0
  549. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +13 -0
  550. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility.md +21 -0
  551. package/dist/serve/docs-ui/index.html +1 -0
  552. package/dist/serve/docs-ui/llms.txt +123 -0
  553. package/dist/serve/entries/ai.d.ts +4 -0
  554. package/dist/serve/entries/ai.d.ts.map +1 -0
  555. package/dist/serve/entries/ai.js +184 -0
  556. package/dist/serve/entries/ai.js.map +1 -0
  557. package/dist/serve/entries/app-backend.d.ts +2 -0
  558. package/dist/serve/entries/app-backend.d.ts.map +1 -0
  559. package/dist/serve/entries/app-backend.js +4 -0
  560. package/dist/serve/entries/app-backend.js.map +1 -0
  561. package/dist/serve/entries/app-client.d.ts +5 -0
  562. package/dist/serve/entries/app-client.d.ts.map +1 -0
  563. package/dist/serve/entries/app-client.js +23 -0
  564. package/dist/serve/entries/app-client.js.map +1 -0
  565. package/dist/serve/entries/app-session-store.d.ts +14 -0
  566. package/dist/serve/entries/app-session-store.d.ts.map +1 -0
  567. package/dist/serve/entries/app-session-store.js +37 -0
  568. package/dist/serve/entries/app-session-store.js.map +1 -0
  569. package/dist/serve/entries/app.d.ts +2 -0
  570. package/dist/serve/entries/app.d.ts.map +1 -0
  571. package/dist/serve/entries/app.js +10 -0
  572. package/dist/serve/entries/app.js.map +1 -0
  573. package/dist/serve/entries/auth-helper-core.d.ts +52 -0
  574. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  575. package/dist/serve/entries/auth-helper-core.js +118 -0
  576. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  577. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  578. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  579. package/dist/serve/entries/auth-helper-dom.js +116 -0
  580. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  581. package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
  582. package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
  583. package/dist/serve/entries/auth-helper-runtime.js +11 -0
  584. package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
  585. package/dist/serve/entries/auth.d.ts +77 -0
  586. package/dist/serve/entries/auth.d.ts.map +1 -0
  587. package/dist/serve/entries/auth.js +201 -0
  588. package/dist/serve/entries/auth.js.map +1 -0
  589. package/dist/serve/entries/bridge-url.d.ts +25 -0
  590. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  591. package/dist/serve/entries/bridge-url.js +30 -0
  592. package/dist/serve/entries/bridge-url.js.map +1 -0
  593. package/dist/serve/entries/database.d.ts +46 -0
  594. package/dist/serve/entries/database.d.ts.map +1 -0
  595. package/dist/serve/entries/database.js +80 -0
  596. package/dist/serve/entries/database.js.map +1 -0
  597. package/dist/serve/entries/firestore.d.ts +104 -0
  598. package/dist/serve/entries/firestore.d.ts.map +1 -0
  599. package/dist/serve/entries/firestore.js +202 -0
  600. package/dist/serve/entries/firestore.js.map +1 -0
  601. package/dist/serve/entries/init.d.ts +2 -0
  602. package/dist/serve/entries/init.d.ts.map +1 -0
  603. package/dist/serve/entries/init.js +40 -0
  604. package/dist/serve/entries/init.js.map +1 -0
  605. package/dist/serve/entries/keepalive.d.ts +20 -0
  606. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  607. package/dist/serve/entries/keepalive.js +38 -0
  608. package/dist/serve/entries/keepalive.js.map +1 -0
  609. package/dist/serve/entries/messaging-sw.d.ts +10 -0
  610. package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
  611. package/dist/serve/entries/messaging-sw.js +36 -0
  612. package/dist/serve/entries/messaging-sw.js.map +1 -0
  613. package/dist/serve/entries/messaging.d.ts +11 -0
  614. package/dist/serve/entries/messaging.d.ts.map +1 -0
  615. package/dist/serve/entries/messaging.js +53 -0
  616. package/dist/serve/entries/messaging.js.map +1 -0
  617. package/dist/serve/entries/runtime.d.ts +46 -0
  618. package/dist/serve/entries/runtime.d.ts.map +1 -0
  619. package/dist/serve/entries/runtime.js +435 -0
  620. package/dist/serve/entries/runtime.js.map +1 -0
  621. package/dist/serve/entries/session-store.d.ts +48 -0
  622. package/dist/serve/entries/session-store.d.ts.map +1 -0
  623. package/dist/serve/entries/session-store.js +82 -0
  624. package/dist/serve/entries/session-store.js.map +1 -0
  625. package/dist/serve/entries/storage.d.ts +25 -0
  626. package/dist/serve/entries/storage.d.ts.map +1 -0
  627. package/dist/serve/entries/storage.js +61 -0
  628. package/dist/serve/entries/storage.js.map +1 -0
  629. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  630. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  631. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  632. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  633. package/dist/serve/entries/worker-runtime.d.ts +10 -0
  634. package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
  635. package/dist/serve/entries/worker-runtime.js +59 -0
  636. package/dist/serve/entries/worker-runtime.js.map +1 -0
  637. package/dist/serve/init-payload.d.ts +21 -0
  638. package/dist/serve/init-payload.d.ts.map +1 -0
  639. package/dist/serve/init-payload.js +2 -0
  640. package/dist/serve/init-payload.js.map +1 -0
  641. package/dist/serve/namespace.d.ts +73 -0
  642. package/dist/serve/namespace.d.ts.map +1 -0
  643. package/dist/serve/namespace.js +470 -0
  644. package/dist/serve/namespace.js.map +1 -0
  645. package/dist/serve/open-browser.d.ts +23 -0
  646. package/dist/serve/open-browser.d.ts.map +1 -0
  647. package/dist/serve/open-browser.js +58 -0
  648. package/dist/serve/open-browser.js.map +1 -0
  649. package/dist/serve/rules.d.ts +77 -0
  650. package/dist/serve/rules.d.ts.map +1 -0
  651. package/dist/serve/rules.js +202 -0
  652. package/dist/serve/rules.js.map +1 -0
  653. package/dist/serve/sandbox-marker.d.ts +9 -0
  654. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  655. package/dist/serve/sandbox-marker.js +31 -0
  656. package/dist/serve/sandbox-marker.js.map +1 -0
  657. package/dist/serve/server.d.ts +135 -0
  658. package/dist/serve/server.d.ts.map +1 -0
  659. package/dist/serve/server.js +328 -0
  660. package/dist/serve/server.js.map +1 -0
  661. package/dist/serve/standalone-assets.d.ts +67 -0
  662. package/dist/serve/standalone-assets.d.ts.map +1 -0
  663. package/dist/serve/standalone-assets.js +134 -0
  664. package/dist/serve/standalone-assets.js.map +1 -0
  665. package/dist/serve/state-store.d.ts +45 -0
  666. package/dist/serve/state-store.d.ts.map +1 -0
  667. package/dist/serve/state-store.js +120 -0
  668. package/dist/serve/state-store.js.map +1 -0
  669. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  670. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  671. package/dist/serve/studio/disk-project-store.js +173 -0
  672. package/dist/serve/studio/disk-project-store.js.map +1 -0
  673. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  674. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  675. package/dist/serve/studio/disk-workspace.js +152 -0
  676. package/dist/serve/studio/disk-workspace.js.map +1 -0
  677. package/dist/serve/studio/index.d.ts +10 -0
  678. package/dist/serve/studio/index.d.ts.map +1 -0
  679. package/dist/serve/studio/index.js +9 -0
  680. package/dist/serve/studio/index.js.map +1 -0
  681. package/dist/serve/studio/routes.d.ts +40 -0
  682. package/dist/serve/studio/routes.d.ts.map +1 -0
  683. package/dist/serve/studio/routes.js +182 -0
  684. package/dist/serve/studio/routes.js.map +1 -0
  685. package/dist/serve/studio/store-types.d.ts +45 -0
  686. package/dist/serve/studio/store-types.d.ts.map +1 -0
  687. package/dist/serve/studio/store-types.js +11 -0
  688. package/dist/serve/studio/store-types.js.map +1 -0
  689. package/dist/serve/studio-ui/assets/RulesCodeEditor-CXdSLKhO.js +23 -0
  690. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +1 -0
  691. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +1211 -0
  692. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +2 -0
  693. package/dist/serve/studio-ui/index.html +32 -0
  694. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  695. package/dist/serve/vite-plugin.d.ts +57 -0
  696. package/dist/serve/vite-plugin.d.ts.map +1 -0
  697. package/dist/serve/vite-plugin.js +664 -0
  698. package/dist/serve/vite-plugin.js.map +1 -0
  699. package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
  700. package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
  701. package/dist/serve/worker/client/admin-firestore.js +26 -0
  702. package/dist/serve/worker/client/admin-firestore.js.map +1 -0
  703. package/dist/serve/worker/client/ai.d.ts +31 -0
  704. package/dist/serve/worker/client/ai.d.ts.map +1 -0
  705. package/dist/serve/worker/client/ai.js +89 -0
  706. package/dist/serve/worker/client/ai.js.map +1 -0
  707. package/dist/serve/worker/client/auth.d.ts +168 -0
  708. package/dist/serve/worker/client/auth.d.ts.map +1 -0
  709. package/dist/serve/worker/client/auth.js +322 -0
  710. package/dist/serve/worker/client/auth.js.map +1 -0
  711. package/dist/serve/worker/client/connection.d.ts +80 -0
  712. package/dist/serve/worker/client/connection.d.ts.map +1 -0
  713. package/dist/serve/worker/client/connection.js +148 -0
  714. package/dist/serve/worker/client/connection.js.map +1 -0
  715. package/dist/serve/worker/client/core.d.ts +109 -0
  716. package/dist/serve/worker/client/core.d.ts.map +1 -0
  717. package/dist/serve/worker/client/core.js +248 -0
  718. package/dist/serve/worker/client/core.js.map +1 -0
  719. package/dist/serve/worker/client/disconnect.d.ts +7 -0
  720. package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
  721. package/dist/serve/worker/client/disconnect.js +26 -0
  722. package/dist/serve/worker/client/disconnect.js.map +1 -0
  723. package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
  724. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
  725. package/dist/serve/worker/client/firestore-reads.js +139 -0
  726. package/dist/serve/worker/client/firestore-reads.js.map +1 -0
  727. package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
  728. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
  729. package/dist/serve/worker/client/firestore-refs.js +167 -0
  730. package/dist/serve/worker/client/firestore-refs.js.map +1 -0
  731. package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
  732. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
  733. package/dist/serve/worker/client/firestore-writes.js +169 -0
  734. package/dist/serve/worker/client/firestore-writes.js.map +1 -0
  735. package/dist/serve/worker/client/handles.d.ts +73 -0
  736. package/dist/serve/worker/client/handles.d.ts.map +1 -0
  737. package/dist/serve/worker/client/handles.js +4 -0
  738. package/dist/serve/worker/client/handles.js.map +1 -0
  739. package/dist/serve/worker/client/messaging.d.ts +16 -0
  740. package/dist/serve/worker/client/messaging.d.ts.map +1 -0
  741. package/dist/serve/worker/client/messaging.js +60 -0
  742. package/dist/serve/worker/client/messaging.js.map +1 -0
  743. package/dist/serve/worker/client/presence.d.ts +43 -0
  744. package/dist/serve/worker/client/presence.d.ts.map +1 -0
  745. package/dist/serve/worker/client/presence.js +132 -0
  746. package/dist/serve/worker/client/presence.js.map +1 -0
  747. package/dist/serve/worker/client/rtdb.d.ts +36 -0
  748. package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
  749. package/dist/serve/worker/client/rtdb.js +241 -0
  750. package/dist/serve/worker/client/rtdb.js.map +1 -0
  751. package/dist/serve/worker/client/rules.d.ts +24 -0
  752. package/dist/serve/worker/client/rules.d.ts.map +1 -0
  753. package/dist/serve/worker/client/rules.js +44 -0
  754. package/dist/serve/worker/client/rules.js.map +1 -0
  755. package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
  756. package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
  757. package/dist/serve/worker/client/service-worker-connection.js +53 -0
  758. package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
  759. package/dist/serve/worker/client/snapshots.d.ts +32 -0
  760. package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
  761. package/dist/serve/worker/client/snapshots.js +46 -0
  762. package/dist/serve/worker/client/snapshots.js.map +1 -0
  763. package/dist/serve/worker/client/storage.d.ts +64 -0
  764. package/dist/serve/worker/client/storage.d.ts.map +1 -0
  765. package/dist/serve/worker/client/storage.js +125 -0
  766. package/dist/serve/worker/client/storage.js.map +1 -0
  767. package/dist/serve/worker/client/studio.d.ts +32 -0
  768. package/dist/serve/worker/client/studio.d.ts.map +1 -0
  769. package/dist/serve/worker/client/studio.js +61 -0
  770. package/dist/serve/worker/client/studio.js.map +1 -0
  771. package/dist/serve/worker/client.d.ts +43 -0
  772. package/dist/serve/worker/client.d.ts.map +1 -0
  773. package/dist/serve/worker/client.js +44 -0
  774. package/dist/serve/worker/client.js.map +1 -0
  775. package/dist/serve/worker/entry.d.ts +40 -0
  776. package/dist/serve/worker/entry.d.ts.map +1 -0
  777. package/dist/serve/worker/entry.js +144 -0
  778. package/dist/serve/worker/entry.js.map +1 -0
  779. package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
  780. package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
  781. package/dist/serve/worker/host/admin-firestore.js +92 -0
  782. package/dist/serve/worker/host/admin-firestore.js.map +1 -0
  783. package/dist/serve/worker/host/connection.d.ts +40 -0
  784. package/dist/serve/worker/host/connection.d.ts.map +1 -0
  785. package/dist/serve/worker/host/connection.js +153 -0
  786. package/dist/serve/worker/host/connection.js.map +1 -0
  787. package/dist/serve/worker/host/core.d.ts +159 -0
  788. package/dist/serve/worker/host/core.d.ts.map +1 -0
  789. package/dist/serve/worker/host/core.js +296 -0
  790. package/dist/serve/worker/host/core.js.map +1 -0
  791. package/dist/serve/worker/host/dispatch.d.ts +34 -0
  792. package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
  793. package/dist/serve/worker/host/dispatch.js +267 -0
  794. package/dist/serve/worker/host/dispatch.js.map +1 -0
  795. package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
  796. package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
  797. package/dist/serve/worker/host/firestore-reads.js +108 -0
  798. package/dist/serve/worker/host/firestore-reads.js.map +1 -0
  799. package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
  800. package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
  801. package/dist/serve/worker/host/firestore-writes.js +409 -0
  802. package/dist/serve/worker/host/firestore-writes.js.map +1 -0
  803. package/dist/serve/worker/host/presence.d.ts +38 -0
  804. package/dist/serve/worker/host/presence.d.ts.map +1 -0
  805. package/dist/serve/worker/host/presence.js +280 -0
  806. package/dist/serve/worker/host/presence.js.map +1 -0
  807. package/dist/serve/worker/host/rtdb.d.ts +18 -0
  808. package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
  809. package/dist/serve/worker/host/rtdb.js +128 -0
  810. package/dist/serve/worker/host/rtdb.js.map +1 -0
  811. package/dist/serve/worker/host/rules.d.ts +17 -0
  812. package/dist/serve/worker/host/rules.d.ts.map +1 -0
  813. package/dist/serve/worker/host/rules.js +118 -0
  814. package/dist/serve/worker/host/rules.js.map +1 -0
  815. package/dist/serve/worker/host/storage.d.ts +19 -0
  816. package/dist/serve/worker/host/storage.d.ts.map +1 -0
  817. package/dist/serve/worker/host/storage.js +260 -0
  818. package/dist/serve/worker/host/storage.js.map +1 -0
  819. package/dist/serve/worker/host/studio.d.ts +13 -0
  820. package/dist/serve/worker/host/studio.d.ts.map +1 -0
  821. package/dist/serve/worker/host/studio.js +30 -0
  822. package/dist/serve/worker/host/studio.js.map +1 -0
  823. package/dist/serve/worker/host/subscriptions.d.ts +21 -0
  824. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
  825. package/dist/serve/worker/host/subscriptions.js +162 -0
  826. package/dist/serve/worker/host/subscriptions.js.map +1 -0
  827. package/dist/serve/worker/host-ai.d.ts +59 -0
  828. package/dist/serve/worker/host-ai.d.ts.map +1 -0
  829. package/dist/serve/worker/host-ai.js +158 -0
  830. package/dist/serve/worker/host-ai.js.map +1 -0
  831. package/dist/serve/worker/host-auth.d.ts +47 -0
  832. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  833. package/dist/serve/worker/host-auth.js +464 -0
  834. package/dist/serve/worker/host-auth.js.map +1 -0
  835. package/dist/serve/worker/host-context.d.ts +220 -0
  836. package/dist/serve/worker/host-context.d.ts.map +1 -0
  837. package/dist/serve/worker/host-context.js +45 -0
  838. package/dist/serve/worker/host-context.js.map +1 -0
  839. package/dist/serve/worker/host-events.d.ts +21 -0
  840. package/dist/serve/worker/host-events.d.ts.map +1 -0
  841. package/dist/serve/worker/host-events.js +87 -0
  842. package/dist/serve/worker/host-events.js.map +1 -0
  843. package/dist/serve/worker/host-messaging.d.ts +60 -0
  844. package/dist/serve/worker/host-messaging.d.ts.map +1 -0
  845. package/dist/serve/worker/host-messaging.js +226 -0
  846. package/dist/serve/worker/host-messaging.js.map +1 -0
  847. package/dist/serve/worker/host.d.ts +36 -0
  848. package/dist/serve/worker/host.d.ts.map +1 -0
  849. package/dist/serve/worker/host.js +39 -0
  850. package/dist/serve/worker/host.js.map +1 -0
  851. package/dist/serve/worker/index.d.ts +22 -0
  852. package/dist/serve/worker/index.d.ts.map +1 -0
  853. package/dist/serve/worker/index.js +61 -0
  854. package/dist/serve/worker/index.js.map +1 -0
  855. package/dist/serve/worker/presence-timing.d.ts +14 -0
  856. package/dist/serve/worker/presence-timing.d.ts.map +1 -0
  857. package/dist/serve/worker/presence-timing.js +14 -0
  858. package/dist/serve/worker/presence-timing.js.map +1 -0
  859. package/dist/serve/worker/protocol.d.ts +1150 -0
  860. package/dist/serve/worker/protocol.d.ts.map +1 -0
  861. package/dist/serve/worker/protocol.js +228 -0
  862. package/dist/serve/worker/protocol.js.map +1 -0
  863. package/dist/serve/worker/serve-init.d.ts +201 -0
  864. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  865. package/dist/serve/worker/serve-init.js +579 -0
  866. package/dist/serve/worker/serve-init.js.map +1 -0
  867. package/dist/serve/worker/service-worker-channel.d.ts +23 -0
  868. package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
  869. package/dist/serve/worker/service-worker-channel.js +9 -0
  870. package/dist/serve/worker/service-worker-channel.js.map +1 -0
  871. package/dist/serve/worker/service-worker-relay.d.ts +22 -0
  872. package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
  873. package/dist/serve/worker/service-worker-relay.js +63 -0
  874. package/dist/serve/worker/service-worker-relay.js.map +1 -0
  875. package/dist/serve/writer-lock.d.ts +32 -0
  876. package/dist/serve/writer-lock.d.ts.map +1 -0
  877. package/dist/serve/writer-lock.js +43 -0
  878. package/dist/serve/writer-lock.js.map +1 -0
  879. package/dist/verify/cases.d.ts +37 -0
  880. package/dist/verify/cases.d.ts.map +1 -0
  881. package/dist/verify/cases.js +173 -0
  882. package/dist/verify/cases.js.map +1 -0
  883. package/dist/verify/fixture.d.ts +100 -0
  884. package/dist/verify/fixture.d.ts.map +1 -0
  885. package/dist/verify/fixture.js +156 -0
  886. package/dist/verify/fixture.js.map +1 -0
  887. package/dist/verify/index.d.ts +102 -0
  888. package/dist/verify/index.d.ts.map +1 -0
  889. package/dist/verify/index.js +318 -0
  890. package/dist/verify/index.js.map +1 -0
  891. package/dist/verify/tools.d.ts +7 -0
  892. package/dist/verify/tools.d.ts.map +1 -0
  893. package/dist/verify/tools.js +83 -0
  894. package/dist/verify/tools.js.map +1 -0
  895. package/dist/version/compat-target.d.ts +18 -0
  896. package/dist/version/compat-target.d.ts.map +1 -0
  897. package/dist/version/compat-target.js +18 -0
  898. package/dist/version/compat-target.js.map +1 -0
  899. package/dist/vite.d.ts +12 -0
  900. package/dist/vite.d.ts.map +1 -0
  901. package/dist/vite.js +16 -0
  902. package/dist/vite.js.map +1 -0
  903. package/package.json +144 -0
@@ -0,0 +1,1542 @@
1
+ <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: @pyric/ui/events · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/events."><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.DPUwShm2.css"></head> <body> <header class="studio__bar"> <div class="studio__bar-inner"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio">Pyric</a> <nav class="studio__nav" aria-label="Studio tabs"> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore"> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth"> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb"> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage"> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic"> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings"> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a> </nav> </div> </header> <div class="docs-shell"> <details class="docs-nav-drawer"> <summary>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/"> Overview </a><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Trust </a><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/" aria-current="page"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/" id="nav-group-overview"> Overview </a><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/" id="nav-group-trust"> Trust </a><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/" aria-current="page"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main"> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>@pyric/ui</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">@pyric/ui/events</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/events</code></h1> <p class="api-reference-meta"> 38 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
2
+ Generated from the TypeScript declarations shipped at this import path.
3
+ </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Do not edit by hand; run bun run docs:api:generate. -->
4
+ <h2 id="interfaces">Interfaces</h2>
5
+ <p><a id="activityactionitem"></a></p>
6
+ <h3 id="activityactionitem">ActivityActionItem</h3>
7
+ <p>A single action item — a mechanical fact that invites a decision.</p>
8
+ <h4 id="properties">Properties</h4>
9
+ <div class="table-scroll">
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="key"></a> <code>key</code></td><td align="left"><code>string</code></td><td align="left">Stable key.</td></tr><tr><td align="left"><a id="meta"></a> <code>meta?</code></td><td align="left"><code>string</code></td><td align="left">Sub-line — attribution / cause.</td></tr><tr><td align="left"><a id="rows"></a> <code>rows</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a>[]</td><td align="left">The rows this item summarizes — for drill-in / linking into the matching Activity band (items LINK to bands, they don’t duplicate).</td></tr><tr><td align="left"><a id="title"></a> <code>title</code></td><td align="left"><code>string</code></td><td align="left">The headline (mechanical: “4 writes to /notes were denied”).</td></tr><tr><td align="left"><a id="type"></a> <code>type</code></td><td align="left"><code>"denied"</code></td><td align="left">What it is — drives <code>data-pyric-action-type</code>. Today: <code>denied</code>.</td></tr></tbody></table></div>
45
+ <hr>
46
+ <p><a id="activityactionitemsprops"></a></p>
47
+ <h3 id="activityactionitemsprops">ActivityActionItemsProps</h3>
48
+ <h4 id="properties-1">Properties</h4>
49
+ <div class="table-scroll">
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="digest"></a> <code>digest</code></td><td align="left"><a href="#activitydigest"><code>ActivityDigest</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Rendered when there are no action items — default renders nothing (calm by default; the region collapses).</td></tr><tr><td align="left"><a id="renderaction"></a> <code>renderAction?</code></td><td align="left">(<code>item</code>: <a href="#activityactionitem"><code>ActivityActionItem</code></a>) => <code>ReactNode</code></td><td align="left">Render the action button/affordance for an item (e.g. a “Debug” link). Returns <code>null</code> to render no action.</td></tr><tr><td align="left"><a id="rendertitle"></a> <code>renderTitle?</code></td><td align="left">(<code>item</code>: <a href="#activityactionitem"><code>ActivityActionItem</code></a>) => <code>ReactNode</code></td><td align="left">Override item-title composition (host owns app-semantic copy).</td></tr></tbody></table></div>
85
+ <hr>
86
+ <p><a id="activityauthstate"></a></p>
87
+ <h3 id="activityauthstate">ActivityAuthState</h3>
88
+ <p>Identity in effect for an op. <code>null</code> is anonymous / signed out.</p>
89
+ <h4 id="properties-2">Properties</h4>
90
+ <div class="table-scroll">
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="token"></a> <code>token?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr><tr><td align="left"><a id="uid"></a> <code>uid</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
108
+ <hr>
109
+ <p><a id="activityband"></a></p>
110
+ <h3 id="activityband">ActivityBand</h3>
111
+ <p>One category band: a header (<code>label · count · attribution</code>) plus its
112
+ rows. Mirrors the mock’s <code>.band</code> + <code>.r.data</code> structure.</p>
113
+ <h4 id="extended-by">Extended by</h4>
114
+ <ul>
115
+ <li><a href="#activitybandwithgroups"><code>ActivityBandWithGroups</code></a></li>
116
+ </ul>
117
+ <h4 id="properties-3">Properties</h4>
118
+ <div class="table-scroll">
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="attribution"></a> <code>attribution?</code></td><td align="left"><code>string</code></td><td align="left">A short attribution phrase when the band has a dominant actor / subject (<code>all by alice</code>, <code>by the app</code>, <code>by agent atlas</code>). Absent when attribution is mixed — the header then shows just the count.</td></tr><tr><td align="left"><a id="count"></a> <code>count</code></td><td align="left"><code>number</code></td><td align="left">Total rows in the band (== <code>rows.length</code>; explicit for the header).</td></tr><tr><td align="left"><a id="key-1"></a> <code>key</code></td><td align="left"><a href="#activitybandkey-1"><code>ActivityBandKey</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="label"></a> <code>label</code></td><td align="left"><code>string</code></td><td align="left">Display label — <code>Denied</code>, <code>Added</code>, <code>Updated</code>, …</td></tr><tr><td align="left"><a id="rows-1"></a> <code>rows</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a>[]</td><td align="left">-</td></tr></tbody></table></div>
154
+ <hr>
155
+ <p><a id="activitybandwithgroups"></a></p>
156
+ <h3 id="activitybandwithgroups">ActivityBandWithGroups</h3>
157
+ <p>A band that may carry pivot sub-groups. <code>subgroups</code> is populated only
158
+ when the digest was computed with <code>groupBy !== 'none'</code>; otherwise the
159
+ band is flat (<code>rows</code> only). <code>computeActivityDigest</code> always returns
160
+ bands of this shape so consumers can branch on <code>subgroups</code> presence.</p>
161
+ <h4 id="extends">Extends</h4>
162
+ <ul>
163
+ <li><a href="#activityband"><code>ActivityBand</code></a></li>
164
+ </ul>
165
+ <h4 id="properties-4">Properties</h4>
166
+ <div class="table-scroll">
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="attribution-1"></a> <code>attribution?</code></td><td align="left"><code>string</code></td><td align="left">A short attribution phrase when the band has a dominant actor / subject (<code>all by alice</code>, <code>by the app</code>, <code>by agent atlas</code>). Absent when attribution is mixed — the header then shows just the count.</td></tr><tr><td align="left"><a id="count-1"></a> <code>count</code></td><td align="left"><code>number</code></td><td align="left">Total rows in the band (== <code>rows.length</code>; explicit for the header).</td></tr><tr><td align="left"><a id="key-2"></a> <code>key</code></td><td align="left"><a href="#activitybandkey-1"><code>ActivityBandKey</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="label-1"></a> <code>label</code></td><td align="left"><code>string</code></td><td align="left">Display label — <code>Denied</code>, <code>Added</code>, <code>Updated</code>, …</td></tr><tr><td align="left"><a id="rows-2"></a> <code>rows</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="subgroups"></a> <code>subgroups?</code></td><td align="left"><a href="#activitysubgroup"><code>ActivitySubgroup</code></a>[]</td><td align="left">Present only when <code>groupBy !== 'none'</code>.</td></tr></tbody></table></div>
207
+ <hr>
208
+ <p><a id="activitydigest"></a></p>
209
+ <h3 id="activitydigest">ActivityDigest</h3>
210
+ <p>The banded digest — the activity grid’s entire model. Bands are
211
+ pre-sorted lead-with-consequence; <code>denials</code> is a flat projection of
212
+ the consequential rows for the action-items tier.</p>
213
+ <h4 id="properties-5">Properties</h4>
214
+ <div class="table-scroll">
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="bands"></a> <code>bands</code></td><td align="left"><a href="#activitybandwithgroups"><code>ActivityBandWithGroups</code></a>[]</td><td align="left">Bands in render order — highest-consequence first. Empty bands omitted. Each band may carry <code>subgroups</code> when <code>groupBy !== 'none'</code>.</td></tr><tr><td align="left"><a id="denials"></a> <code>denials</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a>[]</td><td align="left">The denial rows, flat + recency-sorted — the source for the action-items tier (“4 writes to /notes were denied”). A projection, not a separate aggregation: these rows also live in the <code>denied</code> band.</td></tr><tr><td align="left"><a id="deniedcount"></a> <code>deniedCount</code></td><td align="left"><code>number</code></td><td align="left">Of those, how many were denials.</td></tr><tr><td align="left"><a id="total"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">Total rows across all bands (events the digest categorized).</td></tr></tbody></table></div>
245
+ <hr>
246
+ <p><a id="activitydigestoptions"></a></p>
247
+ <h3 id="activitydigestoptions">ActivityDigestOptions</h3>
248
+ <h4 id="extended-by-1">Extended by</h4>
249
+ <ul>
250
+ <li><a href="#useactivitydigestoptions"><code>UseActivityDigestOptions</code></a></li>
251
+ </ul>
252
+ <h4 id="properties-6">Properties</h4>
253
+ <div class="table-scroll">
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="groupby"></a> <code>groupBy?</code></td><td align="left"><a href="#activitygroupby"><code>ActivityGroupBy</code></a></td><td align="left">Pivot rows within each band by an attribution axis. <code>'none'</code> (default) leaves the band flat. Any other value splits each band’s rows into sub-groups keyed by that axis — surfaced on the row via <code>groupKey</code> and exposed as <code>band.subgroups</code>. The flat <code>rows</code> are always present regardless.</td></tr><tr><td align="left"><a id="order"></a> <code>order?</code></td><td align="left"><code>"recency"</code> | <code>"chronological"</code></td><td align="left">Row order within a band. <code>recency</code> (default) is newest-first to match the mock’s <code>when</code> column. <code>chronological</code> is oldest-first.</td></tr><tr><td align="left"><a id="rowsperband"></a> <code>rowsPerBand?</code></td><td align="left"><code>number</code></td><td align="left">Cap rows kept per band (the mock shows ~3–4 then “N more”). The digest keeps ALL rows but records the overflow via <code>band.count</code> vs <code>rows.length</code>. Set to a number to actually trim <code>rows</code>; the header <code>count</code> still reflects the true total. Default: keep all.</td></tr></tbody></table></div>
279
+ <hr>
280
+ <p><a id="activitygridprops"></a></p>
281
+ <h3 id="activitygridprops">ActivityGridProps</h3>
282
+ <h4 id="properties-7">Properties</h4>
283
+ <div class="table-scroll">
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-1"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="digest-1"></a> <code>digest?</code></td><td align="left"><a href="#activitydigest"><code>ActivityDigest</code></a></td><td align="left">A precomputed digest from <code>useActivityDigest</code> / <code>computeActivity Digest</code>. Pass this when the host already memoizes the fold (so the grid doesn’t recompute). Mutually exclusive with <code>events</code>.</td></tr><tr><td align="left"><a id="emptystate-1"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Shown when the digest has no rows.</td></tr><tr><td align="left"><a id="events"></a> <code>events?</code></td><td align="left">readonly <a href="#anyactivityevent"><code>AnyActivityEvent</code></a>[]</td><td align="left">The unified event stream — <code>sandbox.history()</code> and/or a live buffer (see <code>useActivityStream</code>). The grid folds it into the banded digest internally. Mutually exclusive with <code>digest</code>.</td></tr><tr><td align="left"><a id="formatwhen"></a> <code>formatWhen?</code></td><td align="left">(<code>at</code>: <code>number</code>, <code>now</code>: <code>number</code>) => <code>string</code></td><td align="left">Override the <code>when</code> column rendering.</td></tr><tr><td align="left"><a id="maxrowsperband"></a> <code>maxRowsPerBand?</code></td><td align="left"><code>number</code></td><td align="left">Clamp rows shown per band; the rest collapse into a “N more” stub. Independent of the reducer’s <code>rowsPerBand</code> (which trims the data) — this is a pure display clamp that keeps the true count visible. Default: show all rows.</td></tr><tr><td align="left"><a id="now"></a> <code>now?</code></td><td align="left"><code>number</code></td><td align="left">”Now” anchor for <code>formatWhen</code>.</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>row</code>: <a href="#activityrow"><code>ActivityRow</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="options"></a> <code>options?</code></td><td align="left"><a href="#activitydigestoptions"><code>ActivityDigestOptions</code></a> &#x26; { <code>now?</code>: <code>number</code>; }</td><td align="left">Grouping / ordering options, forwarded to the reducer when the grid folds <code>events</code> itself. Ignored when <code>digest</code> is supplied.</td></tr><tr><td align="left"><a id="renderbandmore"></a> <code>renderBandMore?</code></td><td align="left">(<code>band</code>: <a href="#activitybandwithgroups"><code>ActivityBandWithGroups</code></a>, <code>hidden</code>: <code>number</code>) => <code>ReactNode</code></td><td align="left">Render the per-band overflow stub. Default renders a <code>[data-pyric-band-more]</code> element reading “N more {label}”.</td></tr><tr><td align="left"><a id="selectedid"></a> <code>selectedId?</code></td><td align="left"><code>string</code></td><td align="left">The selected row id (<code>data-pyric-selected</code>).</td></tr><tr><td align="left"><a id="showcolumnheader"></a> <code>showColumnHeader?</code></td><td align="left"><code>boolean</code></td><td align="left">Render a leading column-header row (<code>target change for lens when</code>). Default true — matches the mock’s <code>.colhead</code>.</td></tr></tbody></table></div>
354
+ <hr>
355
+ <p><a id="activitygridrowprops"></a></p>
356
+ <h3 id="activitygridrowprops">ActivityGridRowProps</h3>
357
+ <h4 id="properties-8">Properties</h4>
358
+ <div class="table-scroll">
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-2"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="formatwhen-1"></a> <code>formatWhen?</code></td><td align="left">(<code>at</code>: <code>number</code>, <code>now</code>: <code>number</code>) => <code>string</code></td><td align="left">Override the <code>when</code> rendering. Receives <code>(at, now)</code>; default is the session-relative duration.</td></tr><tr><td align="left"><a id="now-1"></a> <code>now?</code></td><td align="left"><code>number</code></td><td align="left">The “now” anchor passed to <code>formatWhen</code> (and <code>row.when</code> is used as a fallback when omitted).</td></tr><tr><td align="left"><a id="onselect-1"></a> <code>onSelect?</code></td><td align="left">(<code>row</code>: <a href="#activityrow"><code>ActivityRow</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="row"></a> <code>row</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="selected"></a> <code>selected?</code></td><td align="left"><code>boolean</code></td><td align="left">Marks the row as the active selection (<code>data-pyric-selected</code>).</td></tr></tbody></table></div>
399
+ <hr>
400
+ <p><a id="activityprovenance"></a></p>
401
+ <h3 id="activityprovenance">ActivityProvenance</h3>
402
+ <p>Provenance carried by every event. All optional + additive — pre-
403
+ provenance emitters omit them (read as firestore / app / app-session).</p>
404
+ <h4 id="extended-by-2">Extended by</h4>
405
+ <ul>
406
+ <li><a href="#activityrequestevent"><code>ActivityRequestEvent</code></a></li>
407
+ <li><a href="#activitywriteevent"><code>ActivityWriteEvent</code></a></li>
408
+ <li><a href="#activityservicemutationevent"><code>ActivityServiceMutationEvent</code></a></li>
409
+ </ul>
410
+ <h4 id="properties-9">Properties</h4>
411
+ <div class="table-scroll">
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="actor"></a> <code>actor?</code></td><td align="left"><a href="#activityactor"><code>ActivityActor</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="authlens"></a> <code>authLens?</code></td><td align="left"><a href="#activitylens"><code>ActivityLens</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="planid"></a> <code>planId?</code></td><td align="left"><code>string</code></td><td align="left">Set when the op is part of an agent plan (dry-run / accept).</td></tr><tr><td align="left"><a id="service"></a> <code>service?</code></td><td align="left"><a href="#activityservice"><code>ActivityService</code></a></td><td align="left">-</td></tr></tbody></table></div>
442
+ <hr>
443
+ <p><a id="activityrequestevent"></a></p>
444
+ <h3 id="activityrequestevent">ActivityRequestEvent</h3>
445
+ <p>A Firestore <code>request</code> event — one per evaluated op. The digest reads
446
+ these for denials (<code>result === 'deny'</code>) and, when no <code>write</code> event is
447
+ present, for the allow trail. Structurally a subset of <code>RequestEvent</code>.</p>
448
+ <h4 id="extends-1">Extends</h4>
449
+ <ul>
450
+ <li><a href="#activityprovenance"><code>ActivityProvenance</code></a></li>
451
+ </ul>
452
+ <h4 id="properties-10">Properties</h4>
453
+ <div class="table-scroll">
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="actor-1"></a> <code>actor?</code></td><td align="left"><a href="#activityactor"><code>ActivityActor</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="at"></a> <code>at</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="auth"></a> <code>auth</code></td><td align="left"><a href="#activityauthstate"><code>ActivityAuthState</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="authlens-1"></a> <code>authLens?</code></td><td align="left"><a href="#activitylens"><code>ActivityLens</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="groupid"></a> <code>groupId?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="id"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="kind"></a> <code>kind</code></td><td align="left"><code>"request"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="matchedrule"></a> <code>matchedRule?</code></td><td align="left">{ <code>operations</code>: <code>string</code>[]; <code>ruleIndex</code>: <code>number</code>; }</td><td align="left">-</td></tr><tr><td align="left"><code>matchedRule.operations</code></td><td align="left"><code>string</code>[]</td><td align="left">-</td></tr><tr><td align="left"><code>matchedRule.ruleIndex</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="method"></a> <code>method</code></td><td align="left"><code>"get"</code> | <code>"list"</code> | <code>"create"</code> | <code>"update"</code> | <code>"set"</code> | <code>"delete"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="origin"></a> <code>origin</code></td><td align="left"><code>"user"</code> | <code>"listener"</code> | <code>"transaction"</code> | <code>"batch"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="path"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="planid-1"></a> <code>planId?</code></td><td align="left"><code>string</code></td><td align="left">Set when the op is part of an agent plan (dry-run / accept).</td></tr><tr><td align="left"><a id="reasons"></a> <code>reasons</code></td><td align="left"><code>string</code>[]</td><td align="left">Simulator debug trail. Used to surface the deciding rule on denials.</td></tr><tr><td align="left"><a id="request"></a> <code>request?</code></td><td align="left">{ <code>resourceData?</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; }</td><td align="left">-</td></tr><tr><td align="left"><code>request.resourceData?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="resourceafter"></a> <code>resourceAfter?</code></td><td align="left">{ <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; <code>exists</code>: <code>boolean</code>; }</td><td align="left">-</td></tr><tr><td align="left"><code>resourceAfter.data</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><code>resourceAfter.exists</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="resourcebefore"></a> <code>resourceBefore?</code></td><td align="left">{ <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; <code>exists</code>: <code>boolean</code>; }</td><td align="left">-</td></tr><tr><td align="left"><code>resourceBefore.data</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><code>resourceBefore.exists</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="result"></a> <code>result</code></td><td align="left"><a href="#activityresult"><code>ActivityResult</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="service-1"></a> <code>service?</code></td><td align="left"><a href="#activityservice"><code>ActivityService</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="triggeredby"></a> <code>triggeredBy?</code></td><td align="left">{ <code>method</code>: <code>string</code>; <code>path</code>: <code>string</code>; }</td><td align="left">-</td></tr><tr><td align="left"><code>triggeredBy.method</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><code>triggeredBy.path</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr></tbody></table></div>
604
+ <hr>
605
+ <p><a id="activityrow"></a></p>
606
+ <h3 id="activityrow">ActivityRow</h3>
607
+ <p>A single grid row — the projection of one event onto the
608
+ <code>target · change · for · lens · when</code> column contract from
609
+ <code>c-result.html</code>. All display-ready strings plus the structured
610
+ provenance the host may style on.</p>
611
+ <h4 id="properties-11">Properties</h4>
612
+ <div class="table-scroll">
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="actor-2"></a> <code>actor</code></td><td align="left"><a href="#activityactor"><code>ActivityActor</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="at-1"></a> <code>at</code></td><td align="left"><code>number</code></td><td align="left"><code>Date.now()</code> at the op. Drives the <code>when</code> column + recency sort.</td></tr><tr><td align="left"><a id="authlens-2"></a> <code>authLens</code></td><td align="left"><a href="#activitylens"><code>ActivityLens</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="band"></a> <code>band</code></td><td align="left"><a href="#activitybandkey-1"><code>ActivityBandKey</code></a></td><td align="left">Which band this row was sorted into.</td></tr><tr><td align="left"><a id="change"></a> <code>change</code></td><td align="left"><code>string</code></td><td align="left"><code>change</code> — a short human description of the mutation (<code>update, owner rule</code>, <code>done → true</code>, <code>created</code>, <code>signed in</code>).</td></tr><tr><td align="left"><a id="denied"></a> <code>denied</code></td><td align="left"><code>boolean</code></td><td align="left">True for denials — first-class so hosts flag the row distinctly.</td></tr><tr><td align="left"><a id="event"></a> <code>event</code></td><td align="left"><a href="#activityevent"><code>ActivityEvent</code></a></td><td align="left">The original event, for drill-in.</td></tr><tr><td align="left"><a id="for"></a> <code>for</code></td><td align="left"><code>string</code></td><td align="left"><code>for</code> — the subject the op acted on behalf of: <code>request.auth.uid</code> for firestore, the affected <code>uid</code> for auth, else the acting identity. Empty when anonymous / not applicable.</td></tr><tr><td align="left"><a id="groupkey"></a> <code>groupKey?</code></td><td align="left"><code>string</code></td><td align="left">The pivot key this row fell under — set only when the digest was computed with <code>groupBy !== 'none'</code>. Mirrors the row’s <code>subgroup</code>.</td></tr><tr><td align="left"><a id="id-1"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">The originating event’s id — stable React key.</td></tr><tr><td align="left"><a id="lens"></a> <code>lens</code></td><td align="left"><code>string</code></td><td align="left"><code>lens</code> — the privilege the op ran under, display-ready (<code>app</code>, <code>as alice</code>, <code>admin</code>).</td></tr><tr><td align="left"><a id="planid-2"></a> <code>planId?</code></td><td align="left"><code>string</code></td><td align="left">Agent plan id, when the op was part of a plan.</td></tr><tr><td align="left"><a id="service-2"></a> <code>service</code></td><td align="left"><a href="#activityservice"><code>ActivityService</code></a></td><td align="left">Originating service.</td></tr><tr><td align="left"><a id="subjectuid"></a> <code>subjectUid</code></td><td align="left"><code>string</code></td><td align="left">The on-behalf-of subject uid, structured (mirrors <code>for</code>).</td></tr><tr><td align="left"><a id="target"></a> <code>target</code></td><td align="left"><code>string</code></td><td align="left"><code>target</code> — what was mutated, in the service’s addressing scheme (a doc path <code>notes/3agHoZHZ</code>, a <code>uid</code>, a storage <code>fullPath</code>, an rtdb path). Empty string when the event has no addressable target.</td></tr><tr><td align="left"><a id="when"></a> <code>when</code></td><td align="left"><code>string</code></td><td align="left"><code>when</code> — left undterived here; the grid formats <code>at</code> itself, but a pre-rendered relative string is offered for headless consumers.</td></tr></tbody></table></div>
703
+ <hr>
704
+ <p><a id="activityservicemutationevent"></a></p>
705
+ <h3 id="activityservicemutationevent">ActivityServiceMutationEvent</h3>
706
+ <p>Cross-service mutation — the unified envelope auth / storage / rtdb
707
+ emit. The digest maps <code>service</code> + <code>op</code> to a band (signed-in, added,
708
+ updated, removed, …). Subset of <code>ServiceMutationEvent</code>.</p>
709
+ <h4 id="extends-2">Extends</h4>
710
+ <ul>
711
+ <li><a href="#activityprovenance"><code>ActivityProvenance</code></a></li>
712
+ </ul>
713
+ <h4 id="properties-12">Properties</h4>
714
+ <div class="table-scroll">
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th><th align="left">Overrides</th></tr></thead><tbody><tr><td align="left"><a id="actor-3"></a> <code>actor?</code></td><td align="left"><a href="#activityactor"><code>ActivityActor</code></a></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="after"></a> <code>after?</code></td><td align="left"><code>unknown</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="at-2"></a> <code>at</code></td><td align="left"><code>number</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="auth-1"></a> <code>auth</code></td><td align="left"><a href="#activityauthstate"><code>ActivityAuthState</code></a></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="authlens-3"></a> <code>authLens?</code></td><td align="left"><a href="#activitylens"><code>ActivityLens</code></a></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="before"></a> <code>before?</code></td><td align="left"><code>unknown</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="detail"></a> <code>detail?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="id-2"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="kind-1"></a> <code>kind</code></td><td align="left"><code>"service_mutation"</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="op"></a> <code>op</code></td><td align="left"><code>string</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="path-1"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">-</td><td align="left">-</td></tr><tr><td align="left"><a id="planid-3"></a> <code>planId?</code></td><td align="left"><code>string</code></td><td align="left">Set when the op is part of an agent plan (dry-run / accept).</td><td align="left">-</td></tr><tr><td align="left"><a id="service-3"></a> <code>service</code></td><td align="left"><code>"auth"</code> | <code>"storage"</code> | <code>"rtdb"</code></td><td align="left">-</td><td align="left"><a href="#activityprovenance"><code>ActivityProvenance</code></a>.<a href="#service"><code>service</code></a></td></tr></tbody></table></div>
804
+ <hr>
805
+ <p><a id="activitysubgroup"></a></p>
806
+ <h3 id="activitysubgroup">ActivitySubgroup</h3>
807
+ <h4 id="properties-13">Properties</h4>
808
+ <div class="table-scroll">
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="count-2"></a> <code>count</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="key-3"></a> <code>key</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="rows-3"></a> <code>rows</code></td><td align="left"><a href="#activityrow"><code>ActivityRow</code></a>[]</td></tr></tbody></table></div>
830
+ <hr>
831
+ <p><a id="activitywriteevent"></a></p>
832
+ <h3 id="activitywriteevent">ActivityWriteEvent</h3>
833
+ <p>A committed Firestore write — <code>create</code>/<code>update</code>/<code>set</code>/<code>delete</code> that
834
+ the rule engine allowed and the keyspace applied. The digest leads
835
+ with these for the added/updated/removed bands (richer than <code>request</code>:
836
+ carries prior/next state for the change summary). Subset of
837
+ <code>WriteSandboxEvent</code>.</p>
838
+ <h4 id="extends-3">Extends</h4>
839
+ <ul>
840
+ <li><a href="#activityprovenance"><code>ActivityProvenance</code></a></li>
841
+ </ul>
842
+ <h4 id="properties-14">Properties</h4>
843
+ <div class="table-scroll">
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="actor-4"></a> <code>actor?</code></td><td align="left"><a href="#activityactor"><code>ActivityActor</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="at-3"></a> <code>at</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="auth-2"></a> <code>auth</code></td><td align="left"><a href="#activityauthstate"><code>ActivityAuthState</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="authlens-4"></a> <code>authLens?</code></td><td align="left"><a href="#activitylens"><code>ActivityLens</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="data"></a> <code>data?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="groupid-1"></a> <code>groupId?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="id-3"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="kind-2"></a> <code>kind</code></td><td align="left"><code>"write"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="method-1"></a> <code>method</code></td><td align="left"><code>"create"</code> | <code>"update"</code> | <code>"set"</code> | <code>"delete"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="nextstate"></a> <code>nextState</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="path-2"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="planid-4"></a> <code>planId?</code></td><td align="left"><code>string</code></td><td align="left">Set when the op is part of an agent plan (dry-run / accept).</td></tr><tr><td align="left"><a id="priorstate"></a> <code>priorState</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="service-4"></a> <code>service?</code></td><td align="left"><a href="#activityservice"><code>ActivityService</code></a></td><td align="left">-</td></tr></tbody></table></div>
924
+ <hr>
925
+ <p><a id="createdauthuser"></a></p>
926
+ <h3 id="createdauthuser">CreatedAuthUser</h3>
927
+ <p>An auth user a staged proposal creates (a sign-in account, distinct from
928
+ Firestore documents). The host adapts its backend request (e.g. a
929
+ <code>CreateUserRequest</code>) into this UI-level shape.</p>
930
+ <h4 id="properties-15">Properties</h4>
931
+ <div class="table-scroll">
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="displayname"></a> <code>displayName?</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="email"></a> <code>email?</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="emailverified"></a> <code>emailVerified?</code></td><td align="left"><code>boolean</code></td></tr><tr><td align="left"><a id="provider"></a> <code>provider?</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="uid-1"></a> <code>uid</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
961
+ <hr>
962
+ <p><a id="fieldchange"></a></p>
963
+ <h3 id="fieldchange">FieldChange</h3>
964
+ <p>One field-level change in a staged proposal. A UI-level diff row: the host
965
+ adapts its backend diff (e.g. the sandbox’s <code>Divergence[]</code>) into these so the
966
+ component stays decoupled from any backend type.</p>
967
+ <h4 id="properties-16">Properties</h4>
968
+ <div class="table-scroll">
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="after-1"></a> <code>after</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr><tr><td align="left"><a id="before-1"></a> <code>before</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr><tr><td align="left"><a id="docpath"></a> <code>docPath</code></td><td align="left"><code>string</code></td><td align="left">Full document path, e.g. <code>notes/abc123</code>.</td></tr><tr><td align="left"><a id="field"></a> <code>field</code></td><td align="left"><code>string</code></td><td align="left">The field that changed.</td></tr><tr><td align="left"><a id="kind-3"></a> <code>kind</code></td><td align="left"><code>"added"</code> | <code>"removed"</code> | <code>"changed"</code></td><td align="left"><code>added</code> = new field, <code>removed</code> = cleared, <code>changed</code> = value differs.</td></tr></tbody></table></div>
1004
+ <hr>
1005
+ <p><a id="proposedchangediffprops"></a></p>
1006
+ <h3 id="proposedchangediffprops">ProposedChangeDiffProps</h3>
1007
+ <h4 id="properties-17">Properties</h4>
1008
+ <div class="table-scroll">
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="authusers"></a> <code>authUsers?</code></td><td align="left">readonly <a href="#createdauthuser"><code>CreatedAuthUser</code></a>[]</td><td align="left">Auth users the proposal creates, shown as a leading “auth users” group.</td></tr><tr><td align="left"><a id="changes"></a> <code>changes</code></td><td align="left"><a href="#fieldchange"><code>FieldChange</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="classname-3"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-2"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Rendered when there are no changes. Defaults to nothing.</td></tr><tr><td align="left"><a id="formatvalue"></a> <code>formatValue?</code></td><td align="left">(<code>value</code>: <code>unknown</code>) => <code>ReactNode</code></td><td align="left">Format a value for display. Default: JSON-ish, empty for <code>undefined</code>.</td></tr></tbody></table></div>
1044
+ <hr>
1045
+ <p><a id="useactivitydigestoptions"></a></p>
1046
+ <h3 id="useactivitydigestoptions">UseActivityDigestOptions</h3>
1047
+ <h4 id="extends-4">Extends</h4>
1048
+ <ul>
1049
+ <li><a href="#activitydigestoptions"><code>ActivityDigestOptions</code></a></li>
1050
+ </ul>
1051
+ <h4 id="properties-18">Properties</h4>
1052
+ <div class="table-scroll">
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="groupby-1"></a> <code>groupBy?</code></td><td align="left"><a href="#activitygroupby"><code>ActivityGroupBy</code></a></td><td align="left">Pivot rows within each band by an attribution axis. <code>'none'</code> (default) leaves the band flat. Any other value splits each band’s rows into sub-groups keyed by that axis — surfaced on the row via <code>groupKey</code> and exposed as <code>band.subgroups</code>. The flat <code>rows</code> are always present regardless.</td></tr><tr><td align="left"><a id="now-2"></a> <code>now?</code></td><td align="left"><code>number</code></td><td align="left">Clock injection for the relative <code>when</code> column. Defaults to <code>Date.now()</code> read once per recompute. Pass a fixed value (or a frozen “session now”) for deterministic rendering / tests. NOTE: changing <code>now</code> between renders re-folds the digest, so don’t pass a fresh <code>Date.now()</code> inline unless you want a recompute every render — pin it (e.g. a ticking value updated on an interval).</td></tr><tr><td align="left"><a id="order-1"></a> <code>order?</code></td><td align="left"><code>"recency"</code> | <code>"chronological"</code></td><td align="left">Row order within a band. <code>recency</code> (default) is newest-first to match the mock’s <code>when</code> column. <code>chronological</code> is oldest-first.</td></tr><tr><td align="left"><a id="rowsperband-1"></a> <code>rowsPerBand?</code></td><td align="left"><code>number</code></td><td align="left">Cap rows kept per band (the mock shows ~3–4 then “N more”). The digest keeps ALL rows but records the overflow via <code>band.count</code> vs <code>rows.length</code>. Set to a number to actually trim <code>rows</code>; the header <code>count</code> still reflects the true total. Default: keep all.</td></tr></tbody></table></div>
1083
+ <hr>
1084
+ <p><a id="useactivitystreamoptions"></a></p>
1085
+ <h3 id="useactivitystreamoptions">UseActivityStreamOptions</h3>
1086
+ <h4 id="properties-19">Properties</h4>
1087
+ <div class="table-scroll">
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="buffersize"></a> <code>bufferSize?</code></td><td align="left"><code>number</code></td><td align="left">Ring-buffer cap. Once exceeded, the oldest events drop. Default 5000 (mirrors the traffic monitor’s cap — a load-test session can emit 100k+ events).</td></tr><tr><td align="left"><a id="initial"></a> <code>initial?</code></td><td align="left">readonly <a href="#anyactivityevent"><code>AnyActivityEvent</code></a>[]</td><td align="left">Seed the buffer with a snapshot before the live subscription attaches — typically <code>sandbox.history()</code>, so a late-attaching consumer sees the whole session, not just events from <code>subscribe</code> onward. Read once on mount.</td></tr><tr><td align="left"><a id="paused"></a> <code>paused?</code></td><td align="left"><code>boolean</code></td><td align="left">Start paused — incoming events drop (not queued) while paused.</td></tr><tr><td align="left"><a id="source"></a> <code>source</code></td><td align="left"><a href="#activitysource"><code>ActivitySource</code></a></td><td align="left">The subscription — <code>sandbox.onEvent</code> satisfies this directly. Pass a stable reference; the hook re-subscribes on identity change.</td></tr></tbody></table></div>
1118
+ <hr>
1119
+ <p><a id="useactivitystreamresult"></a></p>
1120
+ <h3 id="useactivitystreamresult">UseActivityStreamResult</h3>
1121
+ <h4 id="properties-20">Properties</h4>
1122
+ <div class="table-scroll">
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">Empty the buffer (does NOT re-seed from <code>initial</code>).</td></tr><tr><td align="left"><a id="events-1"></a> <code>events</code></td><td align="left"><a href="#anyactivityevent"><code>AnyActivityEvent</code></a>[]</td><td align="left">The buffered events, oldest-first. Stable per emission — safe to hand straight to <a href="#useactivitydigest">useActivityDigest</a>.</td></tr><tr><td align="left"><a id="ispaused"></a> <code>isPaused</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="pause"></a> <code>pause</code></td><td align="left">() => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="resume"></a> <code>resume</code></td><td align="left">() => <code>void</code></td><td align="left">-</td></tr></tbody></table></div>
1158
+ <h2 id="type-aliases">Type Aliases</h2>
1159
+ <p><a id="activityactor"></a></p>
1160
+ <h3 id="activityactor">ActivityActor</h3>
1161
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityActor</span><span style="color:#56B6C2"> =</span></span>
1162
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1163
+ <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"app"</span><span style="color:#ABB2BF">;</span></span>
1164
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1165
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1166
+ <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"studio"</span><span style="color:#ABB2BF">;</span></span>
1167
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1168
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1169
+ <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"agent"</span><span style="color:#ABB2BF">;</span></span>
1170
+ <span class="line"><span style="color:#E06C75"> name</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1171
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1172
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1173
+ <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"app-builder"</span><span style="color:#ABB2BF">;</span></span>
1174
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1175
+ <p>Who initiated the op behind an event. Absent ⇒ the served app.</p>
1176
+ <hr>
1177
+ <p><a id="activitybandkey-1"></a></p>
1178
+ <h3 id="activitybandkey">ActivityBandKey</h3>
1179
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityBandKey</span><span style="color:#56B6C2"> =</span></span>
1180
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"denied"</span></span>
1181
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"errored"</span></span>
1182
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"added"</span></span>
1183
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"updated"</span></span>
1184
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"removed"</span></span>
1185
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"signed-in"</span></span>
1186
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"signed-out"</span></span>
1187
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"read"</span></span>
1188
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"other"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1189
+ <p>The band a row falls into. <code>denied</code> leads; the write bands
1190
+ (added/updated/removed) and the auth bands (signed-in/signed-out)
1191
+ follow; <code>read</code>, <code>errored</code>, and <code>other</code> are the long-tail catch-alls.</p>
1192
+ <ul>
1193
+ <li><code>denied</code> — a rules denial (firestore <code>request</code> with <code>result: 'deny'</code>).</li>
1194
+ <li><code>errored</code> — an operational failure (<code>request</code> with <code>result: 'unsupported'</code>).</li>
1195
+ <li><code>added</code> — a doc/object created, or a user created.</li>
1196
+ <li><code>updated</code> — a doc/object/user/rtdb path mutated in place.</li>
1197
+ <li><code>removed</code> — a doc/object/user deleted.</li>
1198
+ <li><code>signed-in</code> — an auth sign-in.</li>
1199
+ <li><code>signed-out</code> — an auth sign-out.</li>
1200
+ <li><code>read</code> — an allowed firestore read (<code>get</code>/<code>list</code>).</li>
1201
+ <li><code>other</code> — anything modelled but uncategorized (e.g. an unknown service op).</li>
1202
+ </ul>
1203
+ <hr>
1204
+ <p><a id="activityevent"></a></p>
1205
+ <h3 id="activityevent">ActivityEvent</h3>
1206
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityEvent</span><span style="color:#56B6C2"> =</span></span>
1207
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">ActivityRequestEvent</span></span>
1208
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">ActivityWriteEvent</span></span>
1209
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">ActivityServiceMutationEvent</span><span style="color:#ABB2BF">;</span></span></code></pre>
1210
+ <p>The union members the activity digest aggregates. This is a SUBSET of
1211
+ <code>pyric</code>’s <code>SandboxEvent</code> — the listener-lifecycle / snapshot-delivery /
1212
+ session-boundary kinds carry no user-visible mutation, so the digest
1213
+ ignores them. The reducer accepts any object with a <code>kind</code> and skips
1214
+ the kinds it doesn’t model, so a full <code>SandboxEvent[]</code> passes through
1215
+ cleanly (the extra kinds fall into the “unknown ⇒ skipped” branch).</p>
1216
+ <hr>
1217
+ <p><a id="activitygroupby"></a></p>
1218
+ <h3 id="activitygroupby">ActivityGroupBy</h3>
1219
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityGroupBy</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "none"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"actor"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"lens"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"subject"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"service"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1220
+ <p>How rows within each band are pivoted/grouped.</p>
1221
+ <hr>
1222
+ <p><a id="activitylens"></a></p>
1223
+ <h3 id="activitylens">ActivityLens</h3>
1224
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityLens</span><span style="color:#56B6C2"> =</span></span>
1225
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1226
+ <span class="line"><span style="color:#E06C75"> mode</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"admin"</span><span style="color:#ABB2BF">;</span></span>
1227
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1228
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1229
+ <span class="line"><span style="color:#E06C75"> mode</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"as"</span><span style="color:#ABB2BF">;</span></span>
1230
+ <span class="line"><span style="color:#E06C75"> uid</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1231
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1232
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1233
+ <span class="line"><span style="color:#E06C75"> mode</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"app-session"</span><span style="color:#ABB2BF">;</span></span>
1234
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1235
+ <p>The auth lens an op ran under. <code>admin</code> bypasses rules, <code>as</code> evaluates
1236
+ rules as a specific uid (impersonation), <code>app-session</code> is the app’s
1237
+ own signed-in user. Absent ⇒ <code>app-session</code>.</p>
1238
+ <hr>
1239
+ <p><a id="activityresult"></a></p>
1240
+ <h3 id="activityresult">ActivityResult</h3>
1241
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityResult</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "allow"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deny"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"unsupported"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1242
+ <p>Firestore op outcome — present on <code>request</code> events only.</p>
1243
+ <hr>
1244
+ <p><a id="activityservice"></a></p>
1245
+ <h3 id="activityservice">ActivityService</h3>
1246
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivityService</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "firestore"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"auth"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"storage"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"rtdb"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1247
+ <p>Which sandbox service emitted an event. Absent ⇒ <code>'firestore'</code>.</p>
1248
+ <hr>
1249
+ <p><a id="activitysource"></a></p>
1250
+ <h3 id="activitysource">ActivitySource()</h3>
1251
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> ActivitySource</span><span style="color:#56B6C2"> =</span><span style="color:#ABB2BF"> (</span><span style="color:#61AFEF">cb</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">AnyActivityEvent</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> void</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#ABB2BF"> () </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1252
+ <p>A subscription: register a callback, get an unsubscribe.
1253
+ <code>sandbox.onEvent</code> matches this signature.</p>
1254
+ <h4 id="parameters">Parameters</h4>
1255
+ <div class="table-scroll">
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>cb</code></td><td align="left">(<code>event</code>: <a href="#anyactivityevent"><code>AnyActivityEvent</code></a>) => <code>void</code></td></tr></tbody></table></div>
1269
+ <h4 id="returns">Returns</h4>
1270
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1271
+ <h5 id="returns-1">Returns</h5>
1272
+ <p><code>void</code></p>
1273
+ <hr>
1274
+ <p><a id="anyactivityevent"></a></p>
1275
+ <h3 id="anyactivityevent">AnyActivityEvent</h3>
1276
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> AnyActivityEvent</span><span style="color:#56B6C2"> =</span></span>
1277
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">ActivityEvent</span></span>
1278
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1279
+ <span class="line"><span style="color:#ABB2BF">[</span><span style="color:#E06C75;font-style:italic">k</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">]: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">;</span></span>
1280
+ <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1281
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1282
+ <p>The widened input the reducer accepts: any <code>ActivityEvent</code>, plus a
1283
+ permissive escape for unmodelled <code>SandboxEvent</code> kinds carrying a
1284
+ string <code>kind</code> (skipped). Lets <code>sandbox.history()</code> flow in unfiltered.</p>
1285
+ <h2 id="functions">Functions</h2>
1286
+ <p><a id="activityactionitems"></a></p>
1287
+ <h3 id="activityactionitems">ActivityActionItems()</h3>
1288
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ActivityActionItems</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ActivityActionItemsProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">ReactNode</span><span style="color:#ABB2BF">;</span></span></code></pre>
1289
+ <p>The action-items tier — the few things wanting a decision, surfaced
1290
+ ABOVE the activity grid (design-ideation Tier 2 / “Needs you”).
1291
+ Denials lead and are first-class. Mechanical copy by default; the host
1292
+ supplies the action affordance (e.g. a “Debug” link into the rules
1293
+ debugger) via <code>renderAction</code>.</p>
1294
+ <p>Data contract:</p>
1295
+ <ul>
1296
+ <li><code>[data-pyric-ui="activity-action-items"]</code> — the root (absent when
1297
+ empty and no <code>emptyState</code>).</li>
1298
+ <li><code>[data-pyric-action-item]</code> (+ <code>data-pyric-action-type</code>,
1299
+ <code>data-pyric-action-count</code>) — one item.</li>
1300
+ <li><code>[data-pyric-action-title]</code> / <code>[data-pyric-action-meta]</code> — the copy.</li>
1301
+ <li><code>[data-pyric-action-affordance]</code> — wraps the host’s action node.</li>
1302
+ </ul>
1303
+ <h4 id="parameters-1">Parameters</h4>
1304
+ <div class="table-scroll">
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#activityactionitemsprops"><code>ActivityActionItemsProps</code></a></td></tr></tbody></table></div>
1318
+ <h4 id="returns-2">Returns</h4>
1319
+ <p><code>ReactNode</code></p>
1320
+ <hr>
1321
+ <p><a id="activitygrid"></a></p>
1322
+ <h3 id="activitygrid">ActivityGrid()</h3>
1323
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ActivityGrid</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ActivityGridProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">ReactNode</span><span style="color:#ABB2BF">;</span></span></code></pre>
1324
+ <p>Headless activity grid over the unified <code>SandboxEvent</code> stream. Folds
1325
+ events into category bands (Denied / Added / Updated / Removed /
1326
+ Signed in / …), each band a <code>target · change · for · lens · when</code>
1327
+ column grid grouped under a <code>label · count · attribution</code> header.
1328
+ Denials lead (lead-with-consequence) and are flagged first-class.</p>
1329
+ <p>Ships ZERO styling — the host (Pyric Studio) applies the rigid column
1330
+ grid + band typography via the <code>data-pyric-*</code> contract:</p>
1331
+ <ul>
1332
+ <li><code>[data-pyric-ui="activity-grid"]</code> — the root.</li>
1333
+ <li><code>[data-pyric-band]</code> — a band header, with <code>data-pyric-band-key</code>,
1334
+ <code>data-pyric-band-count</code>, <code>data-pyric-band-denied</code> (on the denied
1335
+ band). Children: <code>[data-pyric-band-label]</code>, <code>[data-pyric-band-n]</code>,
1336
+ <code>[data-pyric-band-attr]</code> (omitted when attribution is mixed).</li>
1337
+ <li><code>[data-pyric-band-rows]</code> — the row container; with grouping,
1338
+ <code>[data-pyric-band-subgroup]</code> (+ <code>data-pyric-subgroup-key</code>) wraps
1339
+ each pivot bucket.</li>
1340
+ <li><code>[data-pyric-band-more]</code> — the “N more” overflow stub.</li>
1341
+ <li>the <code>&#x3C;ActivityGridRow></code> contract for each row.</li>
1342
+ </ul>
1343
+ <h4 id="parameters-2">Parameters</h4>
1344
+ <div class="table-scroll">
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#activitygridprops"><code>ActivityGridProps</code></a></td></tr></tbody></table></div>
1358
+ <h4 id="returns-3">Returns</h4>
1359
+ <p><code>ReactNode</code></p>
1360
+ <hr>
1361
+ <p><a id="activitygridrow"></a></p>
1362
+ <h3 id="activitygridrow">ActivityGridRow()</h3>
1363
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ActivityGridRow</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ActivityGridRowProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">ReactNode</span><span style="color:#ABB2BF">;</span></span></code></pre>
1364
+ <p>One activity grid row — the <code>target · change · for · lens · when</code>
1365
+ column contract from <code>c-result.html</code>, plus a trailing drill affordance
1366
+ column. Headless: every cell is a <code>data-pyric-event-*</code> span the host
1367
+ styles into the rigid column grid.</p>
1368
+ <p>Styling / data contract:</p>
1369
+ <ul>
1370
+ <li><code>[data-pyric-event-row]</code> — the row, with <code>data-pyric-event-band</code>,
1371
+ <code>data-pyric-event-service</code>, <code>data-pyric-event-lens</code>,
1372
+ <code>data-pyric-event-denied</code> (present only on denials), and
1373
+ <code>data-pyric-selected</code> when active.</li>
1374
+ <li><code>[data-pyric-event-target]</code> / <code>-change</code> / <code>-for</code> / <code>-lens</code> / <code>-when</code>
1375
+ — the five columns, in order.</li>
1376
+ </ul>
1377
+ <h4 id="parameters-3">Parameters</h4>
1378
+ <div class="table-scroll">
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#activitygridrowprops"><code>ActivityGridRowProps</code></a></td></tr></tbody></table></div>
1392
+ <h4 id="returns-4">Returns</h4>
1393
+ <p><code>ReactNode</code></p>
1394
+ <hr>
1395
+ <p><a id="computeactivitydigest"></a></p>
1396
+ <h3 id="computeactivitydigest">computeActivityDigest()</h3>
1397
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> computeActivityDigest</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">events</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> AnyActivityEvent</span><span style="color:#ABB2BF">[], </span><span style="color:#E06C75;font-style:italic">opts</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ActivityDigestOptions</span><span style="color:#ABB2BF"> &#x26; {</span></span>
1398
+ <span class="line"><span style="color:#E06C75"> now</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">;</span></span>
1399
+ <span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#E5C07B">ActivityDigest</span><span style="color:#ABB2BF">;</span></span></code></pre>
1400
+ <p>Fold a unified event stream into the banded activity digest. PURE —
1401
+ no React, no clock reads except the injected <code>now</code> (defaults to
1402
+ <code>Date.now()</code>, but pass a fixed value in tests for determinism).</p>
1403
+ <p>Events the digest doesn’t model (listener lifecycle, snapshot
1404
+ delivery, session boundaries, unknown kinds) are skipped — a full
1405
+ <code>SandboxEvent[]</code> from <code>sandbox.history()</code> flows in unfiltered.</p>
1406
+ <h4 id="parameters-4">Parameters</h4>
1407
+ <div class="table-scroll">
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>events</code></td><td align="left">readonly <a href="#anyactivityevent"><code>AnyActivityEvent</code></a>[]</td></tr><tr><td align="left"><code>opts?</code></td><td align="left"><a href="#activitydigestoptions"><code>ActivityDigestOptions</code></a> &#x26; { <code>now?</code>: <code>number</code>; }</td></tr></tbody></table></div>
1425
+ <h4 id="returns-5">Returns</h4>
1426
+ <p><a href="#activitydigest"><code>ActivityDigest</code></a></p>
1427
+ <hr>
1428
+ <p><a id="defaultformatwhen"></a></p>
1429
+ <h3 id="defaultformatwhen">defaultFormatWhen()</h3>
1430
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> defaultFormatWhen</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">at</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">now</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1431
+ <p>Default <code>when</code>-column formatter: a session-relative duration
1432
+ (<code>now</code> / <code>12s</code> / <code>3m</code> / <code>1h</code>), matching the mock’s <code>c-when</code> strings.
1433
+ The grid is session-scoped (see design-ideation “FRAME CORRECTION”)
1434
+ so anchors are relative, never absolute calendar dates.</p>
1435
+ <p>Override via <code>&#x3C;ActivityGrid formatWhen={...} /></code> when the host has a
1436
+ better clock anchor (e.g. a ticking “session now”).</p>
1437
+ <h4 id="parameters-5">Parameters</h4>
1438
+ <div class="table-scroll">
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>at</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><code>now?</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1456
+ <h4 id="returns-6">Returns</h4>
1457
+ <p><code>string</code></p>
1458
+ <hr>
1459
+ <p><a id="proposedchangediff"></a></p>
1460
+ <h3 id="proposedchangediff">ProposedChangeDiff()</h3>
1461
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ProposedChangeDiff</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ProposedChangeDiffProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1462
+ <p>Headless renderer for a staged change: the documents a proposal touches, with
1463
+ per-field before/after. Grouped by collection. Ships zero styling; the host
1464
+ styles the <code>data-pyric-*</code> contract (<code>proposed-change-diff</code> /
1465
+ <code>data-pyric-change-*</code>). The c-review diff grid is this, styled.</p>
1466
+ <h4 id="parameters-6">Parameters</h4>
1467
+ <div class="table-scroll">
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#proposedchangediffprops"><code>ProposedChangeDiffProps</code></a></td></tr></tbody></table></div>
1481
+ <h4 id="returns-7">Returns</h4>
1482
+ <p><code>Element</code></p>
1483
+ <hr>
1484
+ <p><a id="useactivitydigest"></a></p>
1485
+ <h3 id="useactivitydigest">useActivityDigest()</h3>
1486
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useActivityDigest</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">events</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> AnyActivityEvent</span><span style="color:#ABB2BF">[], </span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseActivityDigestOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">ActivityDigest</span><span style="color:#ABB2BF">;</span></span></code></pre>
1487
+ <p>React wrapper over <a href="#computeactivitydigest">computeActivityDigest</a> — memoizes the pure
1488
+ fold over the unified <code>SandboxEvent</code> stream into the banded activity
1489
+ digest. Feed it <code>sandbox.history()</code> (a snapshot) or the live buffer
1490
+ from <a href="#useactivitystream">useActivityStream</a>; the reducer is identical either way.</p>
1491
+ <p>The fold re-runs when <code>events</code> identity, any grouping option, or
1492
+ <code>now</code> changes. Keep <code>events</code> referentially stable across renders that
1493
+ shouldn’t recompute (the stream hook already returns a stable array
1494
+ per emission).</p>
1495
+ <h4 id="parameters-7">Parameters</h4>
1496
+ <div class="table-scroll">
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>events</code></td><td align="left">readonly <a href="#anyactivityevent"><code>AnyActivityEvent</code></a>[]</td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#useactivitydigestoptions"><code>UseActivityDigestOptions</code></a></td></tr></tbody></table></div>
1514
+ <h4 id="returns-8">Returns</h4>
1515
+ <p><a href="#activitydigest"><code>ActivityDigest</code></a></p>
1516
+ <hr>
1517
+ <p><a id="useactivitystream"></a></p>
1518
+ <h3 id="useactivitystream">useActivityStream()</h3>
1519
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useActivityStream</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseActivityStreamOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseActivityStreamResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1520
+ <p>Buffers the unified sandbox event stream into a capped ring buffer
1521
+ with optional history seeding + pause/resume/clear. Decoupled from
1522
+ <code>pyric</code> — <code>source</code> is just a <code>(cb) => unsubscribe</code>.</p>
1523
+ <p>Sibling to the traffic monitor’s <code>useTrafficMonitor</code>; the difference
1524
+ is the wider event type (<code>AnyActivityEvent</code>, the full union) and the
1525
+ <code>initial</code> seed so <code>history()</code> + live compose into one buffer.</p>
1526
+ <h4 id="parameters-8">Parameters</h4>
1527
+ <div class="table-scroll">
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#useactivitystreamoptions"><code>UseActivityStreamOptions</code></a></td></tr></tbody></table></div>
1541
+ <h4 id="returns-9">Returns</h4>
1542
+ <p><a href="#useactivitystreamresult"><code>UseActivityStreamResult</code></a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#interfaces"> Interfaces </a> <ul> <li data-api-symbol="activityactionitem"> <a href="#activityactionitem">ActivityActionItem</a> </li><li data-api-symbol="activityactionitemsprops"> <a href="#activityactionitemsprops">ActivityActionItemsProps</a> </li><li data-api-symbol="activityauthstate"> <a href="#activityauthstate">ActivityAuthState</a> </li><li data-api-symbol="activityband"> <a href="#activityband">ActivityBand</a> </li><li data-api-symbol="activitybandwithgroups"> <a href="#activitybandwithgroups">ActivityBandWithGroups</a> </li><li data-api-symbol="activitydigest"> <a href="#activitydigest">ActivityDigest</a> </li><li data-api-symbol="activitydigestoptions"> <a href="#activitydigestoptions">ActivityDigestOptions</a> </li><li data-api-symbol="activitygridprops"> <a href="#activitygridprops">ActivityGridProps</a> </li><li data-api-symbol="activitygridrowprops"> <a href="#activitygridrowprops">ActivityGridRowProps</a> </li><li data-api-symbol="activityprovenance"> <a href="#activityprovenance">ActivityProvenance</a> </li><li data-api-symbol="activityrequestevent"> <a href="#activityrequestevent">ActivityRequestEvent</a> </li><li data-api-symbol="activityrow"> <a href="#activityrow">ActivityRow</a> </li><li data-api-symbol="activityservicemutationevent"> <a href="#activityservicemutationevent">ActivityServiceMutationEvent</a> </li><li data-api-symbol="activitysubgroup"> <a href="#activitysubgroup">ActivitySubgroup</a> </li><li data-api-symbol="activitywriteevent"> <a href="#activitywriteevent">ActivityWriteEvent</a> </li><li data-api-symbol="createdauthuser"> <a href="#createdauthuser">CreatedAuthUser</a> </li><li data-api-symbol="fieldchange"> <a href="#fieldchange">FieldChange</a> </li><li data-api-symbol="proposedchangediffprops"> <a href="#proposedchangediffprops">ProposedChangeDiffProps</a> </li><li data-api-symbol="useactivitydigestoptions"> <a href="#useactivitydigestoptions">UseActivityDigestOptions</a> </li><li data-api-symbol="useactivitystreamoptions"> <a href="#useactivitystreamoptions">UseActivityStreamOptions</a> </li><li data-api-symbol="useactivitystreamresult"> <a href="#useactivitystreamresult">UseActivityStreamResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#type-aliases"> Type Aliases </a> <ul> <li data-api-symbol="activityactor"> <a href="#activityactor">ActivityActor</a> </li><li data-api-symbol="activitybandkey"> <a href="#activitybandkey">ActivityBandKey</a> </li><li data-api-symbol="activityevent"> <a href="#activityevent">ActivityEvent</a> </li><li data-api-symbol="activitygroupby"> <a href="#activitygroupby">ActivityGroupBy</a> </li><li data-api-symbol="activitylens"> <a href="#activitylens">ActivityLens</a> </li><li data-api-symbol="activityresult"> <a href="#activityresult">ActivityResult</a> </li><li data-api-symbol="activityservice"> <a href="#activityservice">ActivityService</a> </li><li data-api-symbol="activitysource()"> <a href="#activitysource">ActivitySource()</a> </li><li data-api-symbol="anyactivityevent"> <a href="#anyactivityevent">AnyActivityEvent</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#functions"> Functions </a> <ul> <li data-api-symbol="activityactionitems()"> <a href="#activityactionitems">ActivityActionItems()</a> </li><li data-api-symbol="activitygrid()"> <a href="#activitygrid">ActivityGrid()</a> </li><li data-api-symbol="activitygridrow()"> <a href="#activitygridrow">ActivityGridRow()</a> </li><li data-api-symbol="computeactivitydigest()"> <a href="#computeactivitydigest">computeActivityDigest()</a> </li><li data-api-symbol="defaultformatwhen()"> <a href="#defaultformatwhen">defaultFormatWhen()</a> </li><li data-api-symbol="proposedchangediff()"> <a href="#proposedchangediff">ProposedChangeDiff()</a> </li><li data-api-symbol="useactivitydigest()"> <a href="#useactivitydigest">useActivityDigest()</a> </li><li data-api-symbol="useactivitystream()"> <a href="#useactivitystream">useActivityStream()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>