neotoma 0.18.2 → 0.18.3

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 (513) hide show
  1. package/dist/actions.d.ts.map +1 -1
  2. package/dist/actions.js +48 -9
  3. package/dist/actions.js.map +1 -1
  4. package/dist/cli/activate.d.ts +72 -0
  5. package/dist/cli/activate.d.ts.map +1 -0
  6. package/dist/cli/activate.js +160 -0
  7. package/dist/cli/activate.js.map +1 -0
  8. package/dist/cli/auth_keygen.d.ts +11 -0
  9. package/dist/cli/auth_keygen.d.ts.map +1 -0
  10. package/dist/cli/auth_keygen.js +110 -0
  11. package/dist/cli/auth_keygen.js.map +1 -0
  12. package/dist/cli/packs.d.ts +15 -0
  13. package/dist/cli/packs.d.ts.map +1 -0
  14. package/dist/cli/packs.js +156 -0
  15. package/dist/cli/packs.js.map +1 -0
  16. package/dist/cli/triage.d.ts +33 -0
  17. package/dist/cli/triage.d.ts.map +1 -0
  18. package/dist/cli/triage.js +251 -0
  19. package/dist/cli/triage.js.map +1 -0
  20. package/dist/docs/testing/automated_test_catalog.md +5 -4
  21. package/dist/inspector/assets/{access_policies-Bgx-SZYe.js → access_policies-BN-34iPu.js} +1 -1
  22. package/dist/inspector/assets/{agent_badge-C33tCpxh.js → agent_badge-CpLLrPir.js} +1 -1
  23. package/dist/inspector/assets/{agent_detail-gfDjvyWc.js → agent_detail-Brp-tB8X.js} +1 -1
  24. package/dist/inspector/assets/{agent_filter-D4laqYjo.js → agent_filter-s5rgofFz.js} +1 -1
  25. package/dist/inspector/assets/{agent_grant_detail-YHMN0I36.js → agent_grant_detail-xAlGjTk8.js} +1 -1
  26. package/dist/inspector/assets/{agent_grant_form-COhga3hy.js → agent_grant_form-bwLmrrpe.js} +1 -1
  27. package/dist/inspector/assets/{agent_grants-D6A_JuS2.js → agent_grants-BR5ZiW9X.js} +1 -1
  28. package/dist/inspector/assets/{agents-BOoOc4bq.js → agents-BxvOd8g7.js} +1 -1
  29. package/dist/inspector/assets/{api_not_configured_state-DTvBRhie.js → api_not_configured_state-C_AknY0i.js} +1 -1
  30. package/dist/inspector/assets/{attribution_card-BkbIJSjc.js → attribution_card-V7RwrLTr.js} +1 -1
  31. package/dist/inspector/assets/{attribution_summary-BbMRTGON.js → attribution_summary-BQnfxTcJ.js} +1 -1
  32. package/dist/inspector/assets/{bundles-C1Vbryad.js → bundles-sJa73Dcv.js} +1 -1
  33. package/dist/inspector/assets/{card-VEtVMpk8.js → card-Caif065r.js} +1 -1
  34. package/dist/inspector/assets/{checkbox-DUWnf3Dc.js → checkbox-B28sWZdk.js} +1 -1
  35. package/dist/inspector/assets/{compliance-LGZJfcc4.js → compliance-KDW54hEE.js} +1 -1
  36. package/dist/inspector/assets/{confirm-dialog-KxqCxG3b.js → confirm-dialog-bdJnFa6d.js} +1 -1
  37. package/dist/inspector/assets/{conversation_common-Dxo8dRpw.js → conversation_common-CNh4V-VM.js} +1 -1
  38. package/dist/inspector/assets/{conversation_detail-BWJ2Ip15.js → conversation_detail-Bt2IXE7y.js} +1 -1
  39. package/dist/inspector/assets/{copy_id_button-SJ2sUMK1.js → copy_id_button-cUFHxvIp.js} +1 -1
  40. package/dist/inspector/assets/{copyable_code_block-xMzp8G09.js → copyable_code_block-D0ytL1p9.js} +1 -1
  41. package/dist/inspector/assets/{corrections-BJD1E6Zx.js → corrections-CbZliqBi.js} +1 -1
  42. package/dist/inspector/assets/{dashboard-BOnx6ZyM.js → dashboard-BZSEFRQ9.js} +1 -1
  43. package/dist/inspector/assets/{data-table-DW3TzIhP.js → data-table-CGnZkL3S.js} +1 -1
  44. package/dist/inspector/assets/{design-C1T-vnFH.js → design-CQy32Vpd.js} +1 -1
  45. package/dist/inspector/assets/{dialog-DH8W3l6O.js → dialog-BL53sB1T.js} +1 -1
  46. package/dist/inspector/assets/{docs-D1LVDpcM.js → docs-DnlLpLpj.js} +1 -1
  47. package/dist/inspector/assets/{docs_page_layout-D3eBLbl8.js → docs_page_layout-BjrKZD9G.js} +1 -1
  48. package/dist/inspector/assets/embed_graph-BO-onTk4.js +1 -0
  49. package/dist/inspector/assets/{empty_state-BGnkG3yO.js → empty_state-DrwUUQcO.js} +1 -1
  50. package/dist/inspector/assets/{entities-Bm3dkUFI.js → entities-BeHutS_W.js} +1 -1
  51. package/dist/inspector/assets/{entity_correct-D5WJNaFc.js → entity_correct-Bk2kmwFT.js} +1 -1
  52. package/dist/inspector/assets/{entity_history-Ci7GWHy5.js → entity_history-CwjZH9Xo.js} +1 -1
  53. package/dist/inspector/assets/{entity_history_sections-u3aV-Lc9.js → entity_history_sections-W0K_zYQb.js} +1 -1
  54. package/dist/inspector/assets/{entity_link-CNldR-lq.js → entity_link-CnrSK4Tx.js} +1 -1
  55. package/dist/inspector/assets/{entity_relationships_by_type-C0Gk2BTQ.js → entity_relationships_by_type-X5VsJD6e.js} +1 -1
  56. package/dist/inspector/assets/{entity_segment_page-Df2iD87C.js → entity_segment_page-BvKqG1OE.js} +1 -1
  57. package/dist/inspector/assets/{entity_table_column_toggle-DZ1xAV_m.js → entity_table_column_toggle-ZJYlmPjQ.js} +1 -1
  58. package/dist/inspector/assets/{entity_timeline-BZ-s73b8.js → entity_timeline-B3ZI68ZE.js} +1 -1
  59. package/dist/inspector/assets/{entity_types-Ba5ZqBUc.js → entity_types-CoH5Fjo7.js} +1 -1
  60. package/dist/inspector/assets/{faq-BbETwvzl.js → faq-FmlzGyjZ.js} +1 -1
  61. package/dist/inspector/assets/{graph_explorer-Bc3BPsM8.js → graph_explorer-CnNtKaQr.js} +1 -1
  62. package/dist/inspector/assets/{graph_layout-BQDyyZaT.js → graph_layout-WbLRe5Nt.js} +2 -2
  63. package/dist/inspector/assets/{home-BXy-o49i.js → home-DSZwpZKh.js} +1 -1
  64. package/dist/inspector/assets/{index-BCtrS-q-.js → index-CUZJ9Hf7.js} +2 -2
  65. package/dist/inspector/assets/{index-Cjh2Ys9W.js → index-DKrPgz7x.js} +1 -1
  66. package/dist/inspector/assets/index-Dg7MFz-4.css +1 -0
  67. package/dist/inspector/assets/{index-C4dL6o71.js → index-Lm-STP_w.js} +1 -1
  68. package/dist/inspector/assets/{interpretations-BJVBv-H1.js → interpretations-BKBLcnx3.js} +1 -1
  69. package/dist/inspector/assets/interpretations-BooFLurj.js +1 -0
  70. package/dist/inspector/assets/{issue_author_attribution-Drv6KlfY.js → issue_author_attribution-CNHPR51J.js} +1 -1
  71. package/dist/inspector/assets/{issue_detail-DrT4ikoJ.js → issue_detail--Omb6RAl.js} +1 -1
  72. package/dist/inspector/assets/{issues-EjgDHAP9.js → issues-C_x9y7E2.js} +1 -1
  73. package/dist/inspector/assets/{json_viewer-CYiMb-da.js → json_viewer-Buv8J9uH.js} +1 -1
  74. package/dist/inspector/assets/{label-SnZK36YD.js → label-BOSmi_Ry.js} +1 -1
  75. package/dist/inspector/assets/{live_relative_time-Cz6uD0Gt.js → live_relative_time-BRhUEOAQ.js} +1 -1
  76. package/dist/inspector/assets/{mobile_filter_popover-B_m6VwNq.js → mobile_filter_popover-1rufw_SI.js} +1 -1
  77. package/dist/inspector/assets/{not_found-DnFt1jGz.js → not_found-CBUznHi6.js} +1 -1
  78. package/dist/inspector/assets/{observations-iCGEnajZ.js → observations-BOSfD-Fe.js} +1 -1
  79. package/dist/inspector/assets/{page_shell-Cn1X2P68.js → page_shell-Cnle3Z6i.js} +1 -1
  80. package/dist/inspector/assets/{pagination-CAf0CpCi.js → pagination-DiMq7Q_R.js} +1 -1
  81. package/dist/inspector/assets/{peer_detail-D-TsrPmb.js → peer_detail-CstWSgyC.js} +1 -1
  82. package/dist/inspector/assets/{peers-CIrAlrYe.js → peers-_iHT4uU0.js} +1 -1
  83. package/dist/inspector/assets/{pin_primitive_button-C7-VInsd.js → pin_primitive_button-CAvdxlvk.js} +1 -1
  84. package/dist/inspector/assets/{recent_activity-BkKsy8bS.js → recent_activity-DXzg9-dM.js} +1 -1
  85. package/dist/inspector/assets/{recent_conversations-DgVeHt13.js → recent_conversations-BykmPg9E.js} +1 -1
  86. package/dist/inspector/assets/{recent_conversations-CgO3k-zb.js → recent_conversations-DBke3tlZ.js} +1 -1
  87. package/dist/inspector/assets/{recent_records_feed-DsdMzXJY.js → recent_records_feed-x0Ny5gdj.js} +1 -1
  88. package/dist/inspector/assets/record_activity-CPWJ-_Ou.js +1 -0
  89. package/dist/inspector/assets/{relationship_detail-D5O0XvAg.js → relationship_detail-CEFggwIN.js} +1 -1
  90. package/dist/inspector/assets/{relationship_panel_groups-C4Ye9XdG.js → relationship_panel_groups-DCUcDTDW.js} +1 -1
  91. package/dist/inspector/assets/{relationships-Ctq6oof6.js → relationships-Dmz_G7SH.js} +1 -1
  92. package/dist/inspector/assets/{relationships-DicnNnZA.js → relationships-kDc-KN9Q.js} +1 -1
  93. package/dist/inspector/assets/{sandbox-BO0DD_0f.js → sandbox-DJoN6BdY.js} +1 -1
  94. package/dist/inspector/assets/{schema_detail-innLJRVT.js → schema_detail-D-dw9TlR.js} +1 -1
  95. package/dist/inspector/assets/{schemas-AGqfE4h0.js → schemas-kKjHI5LR.js} +1 -1
  96. package/dist/inspector/assets/{search-DySMNkgQ.js → search-DGRluy5K.js} +1 -1
  97. package/dist/inspector/assets/{segmented_control-DAeqcNHU.js → segmented_control-BeikqDNV.js} +1 -1
  98. package/dist/inspector/assets/{select-Dj5oFvji.js → select-vrMqzpPI.js} +1 -1
  99. package/dist/inspector/assets/{settings-DPSc-MsQ.js → settings-B31enQzQ.js} +1 -1
  100. package/dist/inspector/assets/{source_content-Biuq250n.js → source_content-COUM6IUs.js} +1 -1
  101. package/dist/inspector/assets/{source_content_open_button-BjEDZifP.js → source_content_open_button-CMPAYirb.js} +1 -1
  102. package/dist/inspector/assets/{source_detail-ToF80297.js → source_detail-2r_dQ1DI.js} +1 -1
  103. package/dist/inspector/assets/{source_link-UvbCS8kH.js → source_link-Ce1_Zy0p.js} +1 -1
  104. package/dist/inspector/assets/{sources-BdAjTWrY.js → sources-foH7eq0Y.js} +1 -1
  105. package/dist/inspector/assets/{subscriptions-BdisK-yb.js → subscriptions-EhpD8tpi.js} +1 -1
  106. package/dist/inspector/assets/{switch-BVOxcgUR.js → switch-DFfyJgPw.js} +1 -1
  107. package/dist/inspector/assets/{tabs-9eXcV6jq.js → tabs-CO1AKqKS.js} +1 -1
  108. package/dist/inspector/assets/{textarea-d76JXYw-.js → textarea-BNtVyu5K.js} +1 -1
  109. package/dist/inspector/assets/{timeline-ChTEisvC.js → timeline-BOzyKBqR.js} +1 -1
  110. package/dist/inspector/assets/{timeline-CWLYDyds.js → timeline-BvBqBcK9.js} +1 -1
  111. package/dist/inspector/assets/{timeline_event_detail-w1-wRXce.js → timeline_event_detail-D-9hzPWs.js} +1 -1
  112. package/dist/inspector/assets/{turn_detail-CrvvkrfX.js → turn_detail-JZv-2Evd.js} +1 -1
  113. package/dist/inspector/assets/{turns-C0TSjy95.js → turns-D5W7NC-n.js} +1 -1
  114. package/dist/inspector/assets/{use_agents-CRv6rDsh.js → use_agents-DNelJZjI.js} +1 -1
  115. package/dist/inspector/assets/{use_entities-Dxdt9oGZ.js → use_entities-Chw8OIMK.js} +1 -1
  116. package/dist/inspector/assets/use_interpretations-DyEjBp7X.js +1 -0
  117. package/dist/inspector/assets/{use_mutations-lnvzn8c8.js → use_mutations-A-QC7q0k.js} +1 -1
  118. package/dist/inspector/assets/{use_peers-D1YPXbCo.js → use_peers-D6YlqmoY.js} +1 -1
  119. package/dist/inspector/assets/{use_relationships-BIacD5VK.js → use_relationships-BPE1-rrt.js} +1 -1
  120. package/dist/inspector/assets/{use_stats-pecBajli.js → use_stats-B9WT45FM.js} +1 -1
  121. package/dist/inspector/assets/{use_timeline-7rcIc6M4.js → use_timeline-BmW6jH0T.js} +1 -1
  122. package/dist/inspector/assets/{use_turns-C1_j8N2Q.js → use_turns-DwOsaQPo.js} +1 -1
  123. package/dist/inspector/assets/{world_time_event_timeline-CBDb4DzY.js → world_time_event_timeline-WucES8kD.js} +1 -1
  124. package/dist/inspector/index.html +2 -2
  125. package/dist/services/activation/stage_zero_five.d.ts +62 -0
  126. package/dist/services/activation/stage_zero_five.d.ts.map +1 -0
  127. package/dist/services/activation/stage_zero_five.js +126 -0
  128. package/dist/services/activation/stage_zero_five.js.map +1 -0
  129. package/dist/services/activation/user_preference.d.ts +110 -0
  130. package/dist/services/activation/user_preference.d.ts.map +1 -0
  131. package/dist/services/activation/user_preference.js +98 -0
  132. package/dist/services/activation/user_preference.js.map +1 -0
  133. package/dist/services/activation/vertical_detection.d.ts +78 -0
  134. package/dist/services/activation/vertical_detection.d.ts.map +1 -0
  135. package/dist/services/activation/vertical_detection.js +219 -0
  136. package/dist/services/activation/vertical_detection.js.map +1 -0
  137. package/dist/services/app_mount.d.ts +166 -0
  138. package/dist/services/app_mount.d.ts.map +1 -0
  139. package/dist/services/app_mount.js +626 -0
  140. package/dist/services/app_mount.js.map +1 -0
  141. package/dist/services/bundled_pages/html_shell.d.ts +118 -0
  142. package/dist/services/bundled_pages/html_shell.d.ts.map +1 -0
  143. package/dist/services/bundled_pages/html_shell.js +242 -0
  144. package/dist/services/bundled_pages/html_shell.js.map +1 -0
  145. package/dist/services/bundled_pages/tokens.d.ts +496 -0
  146. package/dist/services/bundled_pages/tokens.d.ts.map +1 -0
  147. package/dist/services/bundled_pages/tokens.js +261 -0
  148. package/dist/services/bundled_pages/tokens.js.map +1 -0
  149. package/dist/services/compliance/alerting.d.ts +123 -0
  150. package/dist/services/compliance/alerting.d.ts.map +1 -0
  151. package/dist/services/compliance/alerting.js +169 -0
  152. package/dist/services/compliance/alerting.js.map +1 -0
  153. package/dist/services/compliance/historical_backfill.d.ts +74 -0
  154. package/dist/services/compliance/historical_backfill.d.ts.map +1 -0
  155. package/dist/services/compliance/historical_backfill.js +244 -0
  156. package/dist/services/compliance/historical_backfill.js.map +1 -0
  157. package/dist/services/compliance/renderer.d.ts +21 -0
  158. package/dist/services/compliance/renderer.d.ts.map +1 -0
  159. package/dist/services/compliance/renderer.js +208 -0
  160. package/dist/services/compliance/renderer.js.map +1 -0
  161. package/dist/services/compliance/routes.d.ts +55 -0
  162. package/dist/services/compliance/routes.d.ts.map +1 -0
  163. package/dist/services/compliance/routes.js +212 -0
  164. package/dist/services/compliance/routes.js.map +1 -0
  165. package/dist/services/docs/site_page_frontmatter.d.ts +58 -0
  166. package/dist/services/docs/site_page_frontmatter.d.ts.map +1 -0
  167. package/dist/services/docs/site_page_frontmatter.js +106 -0
  168. package/dist/services/docs/site_page_frontmatter.js.map +1 -0
  169. package/dist/services/docs/site_page_index_builder.d.ts +49 -0
  170. package/dist/services/docs/site_page_index_builder.d.ts.map +1 -0
  171. package/dist/services/docs/site_page_index_builder.js +152 -0
  172. package/dist/services/docs/site_page_index_builder.js.map +1 -0
  173. package/dist/services/docs/site_pages_route.d.ts +33 -0
  174. package/dist/services/docs/site_pages_route.d.ts.map +1 -0
  175. package/dist/services/docs/site_pages_route.js +124 -0
  176. package/dist/services/docs/site_pages_route.js.map +1 -0
  177. package/dist/services/docs_bundle/frontmatter.d.ts +26 -0
  178. package/dist/services/docs_bundle/frontmatter.d.ts.map +1 -0
  179. package/dist/services/docs_bundle/frontmatter.js +50 -0
  180. package/dist/services/docs_bundle/frontmatter.js.map +1 -0
  181. package/dist/services/docs_bundle/loader.d.ts +28 -0
  182. package/dist/services/docs_bundle/loader.d.ts.map +1 -0
  183. package/dist/services/docs_bundle/loader.js +91 -0
  184. package/dist/services/docs_bundle/loader.js.map +1 -0
  185. package/dist/services/docs_bundle/render_html.d.ts +15 -0
  186. package/dist/services/docs_bundle/render_html.d.ts.map +1 -0
  187. package/dist/services/docs_bundle/render_html.js +48 -0
  188. package/dist/services/docs_bundle/render_html.js.map +1 -0
  189. package/dist/services/docs_bundle/types.d.ts +73 -0
  190. package/dist/services/docs_bundle/types.d.ts.map +1 -0
  191. package/dist/services/docs_bundle/types.js +50 -0
  192. package/dist/services/docs_bundle/types.js.map +1 -0
  193. package/dist/services/docs_install/loader.d.ts +25 -0
  194. package/dist/services/docs_install/loader.d.ts.map +1 -0
  195. package/dist/services/docs_install/loader.js +63 -0
  196. package/dist/services/docs_install/loader.js.map +1 -0
  197. package/dist/services/docs_install/renderer.d.ts +40 -0
  198. package/dist/services/docs_install/renderer.d.ts.map +1 -0
  199. package/dist/services/docs_install/renderer.js +323 -0
  200. package/dist/services/docs_install/renderer.js.map +1 -0
  201. package/dist/services/docs_install/routes.d.ts +20 -0
  202. package/dist/services/docs_install/routes.d.ts.map +1 -0
  203. package/dist/services/docs_install/routes.js +117 -0
  204. package/dist/services/docs_install/routes.js.map +1 -0
  205. package/dist/services/entity_submission/seed_product_feedback_schema.d.ts +11 -0
  206. package/dist/services/entity_submission/seed_product_feedback_schema.d.ts.map +1 -0
  207. package/dist/services/entity_submission/seed_product_feedback_schema.js +45 -0
  208. package/dist/services/entity_submission/seed_product_feedback_schema.js.map +1 -0
  209. package/dist/services/feedback/activation.d.ts +20 -0
  210. package/dist/services/feedback/activation.d.ts.map +1 -0
  211. package/dist/services/feedback/activation.js +66 -0
  212. package/dist/services/feedback/activation.js.map +1 -0
  213. package/dist/services/feedback/admin_proxy.d.ts +73 -0
  214. package/dist/services/feedback/admin_proxy.d.ts.map +1 -0
  215. package/dist/services/feedback/admin_proxy.js +292 -0
  216. package/dist/services/feedback/admin_proxy.js.map +1 -0
  217. package/dist/services/feedback/admin_session.d.ts +36 -0
  218. package/dist/services/feedback/admin_session.d.ts.map +1 -0
  219. package/dist/services/feedback/admin_session.js +147 -0
  220. package/dist/services/feedback/admin_session.js.map +1 -0
  221. package/dist/services/feedback/local_store.d.ts +72 -0
  222. package/dist/services/feedback/local_store.d.ts.map +1 -0
  223. package/dist/services/feedback/local_store.js +95 -0
  224. package/dist/services/feedback/local_store.js.map +1 -0
  225. package/dist/services/feedback/mirror_local_to_entity.d.ts +42 -0
  226. package/dist/services/feedback/mirror_local_to_entity.d.ts.map +1 -0
  227. package/dist/services/feedback/mirror_local_to_entity.js +71 -0
  228. package/dist/services/feedback/mirror_local_to_entity.js.map +1 -0
  229. package/dist/services/feedback/neotoma_payload.d.ts +108 -0
  230. package/dist/services/feedback/neotoma_payload.d.ts.map +1 -0
  231. package/dist/services/feedback/neotoma_payload.js +169 -0
  232. package/dist/services/feedback/neotoma_payload.js.map +1 -0
  233. package/dist/services/feedback/next_check.d.ts +4 -0
  234. package/dist/services/feedback/next_check.d.ts.map +1 -0
  235. package/dist/services/feedback/next_check.js +22 -0
  236. package/dist/services/feedback/next_check.js.map +1 -0
  237. package/dist/services/feedback/seed_schema.d.ts +52 -0
  238. package/dist/services/feedback/seed_schema.d.ts.map +1 -0
  239. package/dist/services/feedback/seed_schema.js +160 -0
  240. package/dist/services/feedback/seed_schema.js.map +1 -0
  241. package/dist/services/feedback/types.d.ts +134 -0
  242. package/dist/services/feedback/types.d.ts.map +1 -0
  243. package/dist/services/feedback/types.js +23 -0
  244. package/dist/services/feedback/types.js.map +1 -0
  245. package/dist/services/feedback/upgrade_guidance_map.d.ts +24 -0
  246. package/dist/services/feedback/upgrade_guidance_map.d.ts.map +1 -0
  247. package/dist/services/feedback/upgrade_guidance_map.js +39 -0
  248. package/dist/services/feedback/upgrade_guidance_map.js.map +1 -0
  249. package/dist/services/feedback/verification_request.d.ts +14 -0
  250. package/dist/services/feedback/verification_request.d.ts.map +1 -0
  251. package/dist/services/feedback/verification_request.js +33 -0
  252. package/dist/services/feedback/verification_request.js.map +1 -0
  253. package/dist/services/feedback_transport.d.ts +15 -0
  254. package/dist/services/feedback_transport.d.ts.map +1 -0
  255. package/dist/services/feedback_transport.js +31 -0
  256. package/dist/services/feedback_transport.js.map +1 -0
  257. package/dist/services/feedback_transport_http.d.ts +14 -0
  258. package/dist/services/feedback_transport_http.d.ts.map +1 -0
  259. package/dist/services/feedback_transport_http.js +40 -0
  260. package/dist/services/feedback_transport_http.js.map +1 -0
  261. package/dist/services/feedback_transport_local.d.ts +20 -0
  262. package/dist/services/feedback_transport_local.d.ts.map +1 -0
  263. package/dist/services/feedback_transport_local.js +152 -0
  264. package/dist/services/feedback_transport_local.js.map +1 -0
  265. package/dist/services/issues/syncIssuesFromGitHub.d.ts +35 -0
  266. package/dist/services/issues/syncIssuesFromGitHub.d.ts.map +1 -0
  267. package/dist/services/issues/syncIssuesFromGitHub.js +193 -0
  268. package/dist/services/issues/syncIssuesFromGitHub.js.map +1 -0
  269. package/dist/services/oauth_pages/render.d.ts +25 -0
  270. package/dist/services/oauth_pages/render.d.ts.map +1 -0
  271. package/dist/services/oauth_pages/render.js +235 -0
  272. package/dist/services/oauth_pages/render.js.map +1 -0
  273. package/dist/services/observation_storage.d.ts.map +1 -1
  274. package/dist/services/observation_storage.js +20 -0
  275. package/dist/services/observation_storage.js.map +1 -1
  276. package/dist/services/root_landing/auth_overview.d.ts +60 -0
  277. package/dist/services/root_landing/auth_overview.d.ts.map +1 -0
  278. package/dist/services/root_landing/auth_overview.js +86 -0
  279. package/dist/services/root_landing/auth_overview.js.map +1 -0
  280. package/dist/services/root_landing/cli_overview.d.ts +34 -0
  281. package/dist/services/root_landing/cli_overview.d.ts.map +1 -0
  282. package/dist/services/root_landing/cli_overview.js +123 -0
  283. package/dist/services/root_landing/cli_overview.js.map +1 -0
  284. package/dist/services/root_landing/http_api_overview.d.ts +34 -0
  285. package/dist/services/root_landing/http_api_overview.d.ts.map +1 -0
  286. package/dist/services/root_landing/http_api_overview.js +110 -0
  287. package/dist/services/root_landing/http_api_overview.js.map +1 -0
  288. package/dist/services/root_landing/mcp_overview.d.ts +34 -0
  289. package/dist/services/root_landing/mcp_overview.d.ts.map +1 -0
  290. package/dist/services/root_landing/mcp_overview.js +133 -0
  291. package/dist/services/root_landing/mcp_overview.js.map +1 -0
  292. package/dist/services/sandbox/inspector_redirect.d.ts +41 -0
  293. package/dist/services/sandbox/inspector_redirect.d.ts.map +1 -0
  294. package/dist/services/sandbox/inspector_redirect.js +59 -0
  295. package/dist/services/sandbox/inspector_redirect.js.map +1 -0
  296. package/dist/services/timeline_user_query.d.ts +22 -0
  297. package/dist/services/timeline_user_query.d.ts.map +1 -0
  298. package/dist/services/timeline_user_query.js +60 -0
  299. package/dist/services/timeline_user_query.js.map +1 -0
  300. package/dist/services/usage_stats.d.ts +18 -0
  301. package/dist/services/usage_stats.d.ts.map +1 -0
  302. package/dist/services/usage_stats.js +82 -0
  303. package/dist/services/usage_stats.js.map +1 -0
  304. package/dist/services/verticals/baseline_metadata.d.ts +39 -0
  305. package/dist/services/verticals/baseline_metadata.d.ts.map +1 -0
  306. package/dist/services/verticals/baseline_metadata.js +394 -0
  307. package/dist/services/verticals/baseline_metadata.js.map +1 -0
  308. package/dist/services/verticals/entity_type_registry.d.ts +29 -0
  309. package/dist/services/verticals/entity_type_registry.d.ts.map +1 -0
  310. package/dist/services/verticals/entity_type_registry.js +169 -0
  311. package/dist/services/verticals/entity_type_registry.js.map +1 -0
  312. package/dist/services/verticals/install.d.ts +64 -0
  313. package/dist/services/verticals/install.d.ts.map +1 -0
  314. package/dist/services/verticals/install.js +262 -0
  315. package/dist/services/verticals/install.js.map +1 -0
  316. package/dist/services/verticals/registry.d.ts +131 -0
  317. package/dist/services/verticals/registry.d.ts.map +1 -0
  318. package/dist/services/verticals/registry.js +457 -0
  319. package/dist/services/verticals/registry.js.map +1 -0
  320. package/dist/shared/action_schemas.d.ts +5 -0
  321. package/dist/shared/action_schemas.d.ts.map +1 -1
  322. package/dist/shared/action_schemas.js +1 -0
  323. package/dist/shared/action_schemas.js.map +1 -1
  324. package/dist/shared/generated_design_tokens.d.ts +2 -0
  325. package/dist/shared/generated_design_tokens.d.ts.map +1 -0
  326. package/dist/shared/generated_design_tokens.js +3 -0
  327. package/dist/shared/generated_design_tokens.js.map +1 -0
  328. package/package.json +1 -1
  329. package/dist/__fixtures__/helpers.d.ts +0 -91
  330. package/dist/__fixtures__/helpers.d.ts.map +0 -1
  331. package/dist/__fixtures__/helpers.js +0 -384
  332. package/dist/__fixtures__/helpers.js.map +0 -1
  333. package/dist/__fixtures__/types.d.ts +0 -285
  334. package/dist/__fixtures__/types.d.ts.map +0 -1
  335. package/dist/__fixtures__/types.js +0 -7
  336. package/dist/__fixtures__/types.js.map +0 -1
  337. package/dist/__fixtures__/validation.d.ts +0 -45
  338. package/dist/__fixtures__/validation.d.ts.map +0 -1
  339. package/dist/__fixtures__/validation.js +0 -311
  340. package/dist/__fixtures__/validation.js.map +0 -1
  341. package/dist/cli/digest.d.ts +0 -53
  342. package/dist/cli/digest.d.ts.map +0 -1
  343. package/dist/cli/digest.js +0 -218
  344. package/dist/cli/digest.js.map +0 -1
  345. package/dist/config/plaid.d.ts +0 -21
  346. package/dist/config/plaid.d.ts.map +0 -1
  347. package/dist/config/plaid.js +0 -48
  348. package/dist/config/plaid.js.map +0 -1
  349. package/dist/events/event_emitter.d.ts +0 -24
  350. package/dist/events/event_emitter.d.ts.map +0 -1
  351. package/dist/events/event_emitter.js +0 -85
  352. package/dist/events/event_emitter.js.map +0 -1
  353. package/dist/events/event_log.d.ts +0 -23
  354. package/dist/events/event_log.d.ts.map +0 -1
  355. package/dist/events/event_log.js +0 -77
  356. package/dist/events/event_log.js.map +0 -1
  357. package/dist/events/event_schema.d.ts +0 -58
  358. package/dist/events/event_schema.d.ts.map +0 -1
  359. package/dist/events/event_schema.js +0 -43
  360. package/dist/events/event_schema.js.map +0 -1
  361. package/dist/events/event_validator.d.ts +0 -23
  362. package/dist/events/event_validator.d.ts.map +0 -1
  363. package/dist/events/event_validator.js +0 -90
  364. package/dist/events/event_validator.js.map +0 -1
  365. package/dist/events/index.d.ts +0 -9
  366. package/dist/events/index.d.ts.map +0 -1
  367. package/dist/events/index.js +0 -9
  368. package/dist/events/index.js.map +0 -1
  369. package/dist/events/replay.d.ts +0 -27
  370. package/dist/events/replay.d.ts.map +0 -1
  371. package/dist/events/replay.js +0 -62
  372. package/dist/events/replay.js.map +0 -1
  373. package/dist/hashing/hash_chain.d.ts +0 -31
  374. package/dist/hashing/hash_chain.d.ts.map +0 -1
  375. package/dist/hashing/hash_chain.js +0 -45
  376. package/dist/hashing/hash_chain.js.map +0 -1
  377. package/dist/inspector/assets/embed_graph-yijK3iWa.js +0 -1
  378. package/dist/inspector/assets/index-CzD1hfqq.css +0 -1
  379. package/dist/inspector/assets/interpretations-D2v1BxEQ.js +0 -1
  380. package/dist/inspector/assets/record_activity-Dwe8CUqj.js +0 -1
  381. package/dist/inspector/assets/use_interpretations-uhU4isO3.js +0 -1
  382. package/dist/integrations/plaid/client.d.ts +0 -53
  383. package/dist/integrations/plaid/client.d.ts.map +0 -1
  384. package/dist/integrations/plaid/client.js +0 -224
  385. package/dist/integrations/plaid/client.js.map +0 -1
  386. package/dist/integrations/plaid/normalizers.d.ts +0 -26
  387. package/dist/integrations/plaid/normalizers.d.ts.map +0 -1
  388. package/dist/integrations/plaid/normalizers.js +0 -166
  389. package/dist/integrations/plaid/normalizers.js.map +0 -1
  390. package/dist/integrations/providers/asana.d.ts +0 -9
  391. package/dist/integrations/providers/asana.d.ts.map +0 -1
  392. package/dist/integrations/providers/asana.js +0 -62
  393. package/dist/integrations/providers/asana.js.map +0 -1
  394. package/dist/integrations/providers/base.d.ts +0 -17
  395. package/dist/integrations/providers/base.d.ts.map +0 -1
  396. package/dist/integrations/providers/base.js +0 -64
  397. package/dist/integrations/providers/base.js.map +0 -1
  398. package/dist/integrations/providers/facebook.d.ts +0 -9
  399. package/dist/integrations/providers/facebook.d.ts.map +0 -1
  400. package/dist/integrations/providers/facebook.js +0 -58
  401. package/dist/integrations/providers/facebook.js.map +0 -1
  402. package/dist/integrations/providers/gmail.d.ts +0 -10
  403. package/dist/integrations/providers/gmail.d.ts.map +0 -1
  404. package/dist/integrations/providers/gmail.js +0 -67
  405. package/dist/integrations/providers/gmail.js.map +0 -1
  406. package/dist/integrations/providers/index.d.ts +0 -6
  407. package/dist/integrations/providers/index.d.ts.map +0 -1
  408. package/dist/integrations/providers/index.js +0 -25
  409. package/dist/integrations/providers/index.js.map +0 -1
  410. package/dist/integrations/providers/instagram.d.ts +0 -9
  411. package/dist/integrations/providers/instagram.d.ts.map +0 -1
  412. package/dist/integrations/providers/instagram.js +0 -47
  413. package/dist/integrations/providers/instagram.js.map +0 -1
  414. package/dist/integrations/providers/metadata.d.ts +0 -25
  415. package/dist/integrations/providers/metadata.d.ts.map +0 -1
  416. package/dist/integrations/providers/metadata.js +0 -407
  417. package/dist/integrations/providers/metadata.js.map +0 -1
  418. package/dist/integrations/providers/types.d.ts +0 -39
  419. package/dist/integrations/providers/types.d.ts.map +0 -1
  420. package/dist/integrations/providers/types.js +0 -2
  421. package/dist/integrations/providers/types.js.map +0 -1
  422. package/dist/integrations/providers/x.d.ts +0 -9
  423. package/dist/integrations/providers/x.d.ts.map +0 -1
  424. package/dist/integrations/providers/x.js +0 -78
  425. package/dist/integrations/providers/x.js.map +0 -1
  426. package/dist/reducers/record_reducer.d.ts +0 -25
  427. package/dist/reducers/record_reducer.d.ts.map +0 -1
  428. package/dist/reducers/record_reducer.js +0 -93
  429. package/dist/reducers/record_reducer.js.map +0 -1
  430. package/dist/reducers/reducer_registry.d.ts +0 -47
  431. package/dist/reducers/reducer_registry.d.ts.map +0 -1
  432. package/dist/reducers/reducer_registry.js +0 -82
  433. package/dist/reducers/reducer_registry.js.map +0 -1
  434. package/dist/repositories/db/event_repo.d.ts +0 -14
  435. package/dist/repositories/db/event_repo.d.ts.map +0 -1
  436. package/dist/repositories/db/event_repo.js +0 -67
  437. package/dist/repositories/db/event_repo.js.map +0 -1
  438. package/dist/repositories/db/state_repo.d.ts +0 -14
  439. package/dist/repositories/db/state_repo.d.ts.map +0 -1
  440. package/dist/repositories/db/state_repo.js +0 -61
  441. package/dist/repositories/db/state_repo.js.map +0 -1
  442. package/dist/repositories/file/event_repo.d.ts +0 -18
  443. package/dist/repositories/file/event_repo.d.ts.map +0 -1
  444. package/dist/repositories/file/event_repo.js +0 -148
  445. package/dist/repositories/file/event_repo.js.map +0 -1
  446. package/dist/repositories/file/state_repo.d.ts +0 -21
  447. package/dist/repositories/file/state_repo.d.ts.map +0 -1
  448. package/dist/repositories/file/state_repo.js +0 -89
  449. package/dist/repositories/file/state_repo.js.map +0 -1
  450. package/dist/services/connectors.d.ts +0 -89
  451. package/dist/services/connectors.d.ts.map +0 -1
  452. package/dist/services/connectors.js +0 -251
  453. package/dist/services/connectors.js.map +0 -1
  454. package/dist/services/event_generation.d.ts +0 -37
  455. package/dist/services/event_generation.d.ts.map +0 -1
  456. package/dist/services/event_generation.js +0 -236
  457. package/dist/services/event_generation.js.map +0 -1
  458. package/dist/services/extraction/rules.d.ts +0 -26
  459. package/dist/services/extraction/rules.d.ts.map +0 -1
  460. package/dist/services/extraction/rules.js +0 -679
  461. package/dist/services/extraction/rules.js.map +0 -1
  462. package/dist/services/file_analysis.d.ts +0 -32
  463. package/dist/services/file_analysis.d.ts.map +0 -1
  464. package/dist/services/file_analysis.js +0 -261
  465. package/dist/services/file_analysis.js.map +0 -1
  466. package/dist/services/graph_builder.d.ts +0 -47
  467. package/dist/services/graph_builder.d.ts.map +0 -1
  468. package/dist/services/graph_builder.js +0 -285
  469. package/dist/services/graph_builder.js.map +0 -1
  470. package/dist/services/importers.d.ts +0 -28
  471. package/dist/services/importers.d.ts.map +0 -1
  472. package/dist/services/importers.js +0 -174
  473. package/dist/services/importers.js.map +0 -1
  474. package/dist/services/llm_extraction.d.ts +0 -82
  475. package/dist/services/llm_extraction.d.ts.map +0 -1
  476. package/dist/services/llm_extraction.js +0 -435
  477. package/dist/services/llm_extraction.js.map +0 -1
  478. package/dist/services/observation_ingestion.d.ts +0 -26
  479. package/dist/services/observation_ingestion.d.ts.map +0 -1
  480. package/dist/services/observation_ingestion.js +0 -348
  481. package/dist/services/observation_ingestion.js.map +0 -1
  482. package/dist/services/payload_compiler.d.ts +0 -36
  483. package/dist/services/payload_compiler.d.ts.map +0 -1
  484. package/dist/services/payload_compiler.js +0 -121
  485. package/dist/services/payload_compiler.js.map +0 -1
  486. package/dist/services/payload_identity.d.ts +0 -35
  487. package/dist/services/payload_identity.d.ts.map +0 -1
  488. package/dist/services/payload_identity.js +0 -101
  489. package/dist/services/payload_identity.js.map +0 -1
  490. package/dist/services/payload_schema.d.ts +0 -104
  491. package/dist/services/payload_schema.d.ts.map +0 -1
  492. package/dist/services/payload_schema.js +0 -46
  493. package/dist/services/payload_schema.js.map +0 -1
  494. package/dist/services/plaid_sync.d.ts +0 -77
  495. package/dist/services/plaid_sync.d.ts.map +0 -1
  496. package/dist/services/plaid_sync.js +0 -273
  497. package/dist/services/plaid_sync.js.map +0 -1
  498. package/dist/services/record_comparison.d.ts +0 -29
  499. package/dist/services/record_comparison.d.ts.map +0 -1
  500. package/dist/services/record_comparison.js +0 -84
  501. package/dist/services/record_comparison.js.map +0 -1
  502. package/dist/services/records.d.ts +0 -31
  503. package/dist/services/records.d.ts.map +0 -1
  504. package/dist/services/records.js +0 -184
  505. package/dist/services/records.js.map +0 -1
  506. package/dist/services/search.d.ts +0 -15
  507. package/dist/services/search.d.ts.map +0 -1
  508. package/dist/services/search.js +0 -80
  509. package/dist/services/search.js.map +0 -1
  510. package/dist/services/summary.d.ts +0 -5
  511. package/dist/services/summary.d.ts.map +0 -1
  512. package/dist/services/summary.js +0 -118
  513. package/dist/services/summary.js.map +0 -1
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Implementation of the `neotoma triage` subcommands for the agent-feedback
3
+ * pipeline. Registered in `src/cli/index.ts` with:
4
+ *
5
+ * neotoma triage # run one ingest pass
6
+ * neotoma triage --watch # continuous ingest loop
7
+ * neotoma triage --list-pending # dump pending items (use --json for machine-readable)
8
+ * neotoma triage --set-status ... # update a feedback's status + resolution_links
9
+ * neotoma triage --resolve ... # shorthand for marking resolved with a commit/PR
10
+ * neotoma triage --health # classification accuracy summary
11
+ *
12
+ * Transport follows `NEOTOMA_FEEDBACK_TRANSPORT` / `AGENT_SITE_BASE_URL`.
13
+ */
14
+ import { LocalFeedbackStore } from "../services/feedback/local_store.js";
15
+ import { mirrorLocalFeedbackToEntity } from "../services/feedback/mirror_local_to_entity.js";
16
+ import { deriveNextCheckAt } from "../services/feedback/next_check.js";
17
+ function makePrinter(json) {
18
+ return {
19
+ print(payload) {
20
+ if (json) {
21
+ process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
22
+ }
23
+ else {
24
+ process.stdout.write(formatHuman(payload) + "\n");
25
+ }
26
+ },
27
+ };
28
+ }
29
+ function formatHuman(payload) {
30
+ if (Array.isArray(payload)) {
31
+ return payload.map((p) => formatHuman(p)).join("\n---\n");
32
+ }
33
+ if (typeof payload === "object" && payload != null) {
34
+ return Object.entries(payload)
35
+ .map(([k, v]) => `${k}: ${typeof v === "object" ? JSON.stringify(v) : String(v)}`)
36
+ .join("\n");
37
+ }
38
+ return String(payload);
39
+ }
40
+ async function listPending(opts) {
41
+ const printer = makePrinter(Boolean(opts.json));
42
+ if (opts.remote || process.env.AGENT_SITE_BASE_URL) {
43
+ const baseUrl = process.env.AGENT_SITE_BASE_URL;
44
+ const bearer = process.env.AGENT_SITE_ADMIN_BEARER;
45
+ if (!baseUrl || !bearer)
46
+ throw new Error("remote triage requires AGENT_SITE_BASE_URL + AGENT_SITE_ADMIN_BEARER");
47
+ const res = await fetch(`${baseUrl.replace(/\/$/, "")}/feedback/pending?limit=100`, {
48
+ headers: { authorization: `Bearer ${bearer}` },
49
+ });
50
+ if (!res.ok)
51
+ throw new Error(`list pending HTTP ${res.status}`);
52
+ const body = await res.json();
53
+ printer.print(body);
54
+ return;
55
+ }
56
+ const store = new LocalFeedbackStore();
57
+ const items = await store.listPending(200);
58
+ printer.print({ items });
59
+ }
60
+ async function setStatus(opts) {
61
+ if (!opts.feedbackId)
62
+ throw new Error("--feedback-id is required");
63
+ if (!opts.setStatus)
64
+ throw new Error("--set-status <status> is required");
65
+ const store = new LocalFeedbackStore();
66
+ const record = await store.getById(opts.feedbackId);
67
+ if (!record)
68
+ throw new Error(`feedback ${opts.feedbackId} not found`);
69
+ const now = new Date();
70
+ const newStatus = opts.setStatus;
71
+ const links = {
72
+ ...record.resolution_links,
73
+ github_issue_urls: opts.issueUrl
74
+ ? [...record.resolution_links.github_issue_urls, opts.issueUrl]
75
+ : record.resolution_links.github_issue_urls,
76
+ pull_request_urls: opts.prUrl
77
+ ? [...record.resolution_links.pull_request_urls, opts.prUrl]
78
+ : record.resolution_links.pull_request_urls,
79
+ commit_shas: opts.commitSha
80
+ ? [...record.resolution_links.commit_shas, opts.commitSha]
81
+ : record.resolution_links.commit_shas,
82
+ notes_markdown: opts.triageNotes ?? record.resolution_links.notes_markdown,
83
+ };
84
+ const updated = {
85
+ ...record,
86
+ status: newStatus,
87
+ status_updated_at: now.toISOString(),
88
+ classification: opts.classification ?? record.classification,
89
+ triage_notes: opts.triageNotes ?? record.triage_notes,
90
+ last_activity_at: now.toISOString(),
91
+ consecutive_same_status_polls: 0,
92
+ next_check_suggested_at: deriveNextCheckAt(newStatus, 0, now),
93
+ resolution_links: links,
94
+ };
95
+ await store.upsert(updated);
96
+ await mirrorLocalFeedbackToEntity(updated, {
97
+ dataSource: `neotoma triage set-status ${now.toISOString().slice(0, 10)}`,
98
+ userId: updated.submitter_id,
99
+ });
100
+ makePrinter(Boolean(opts.json)).print({ ok: true, feedback_id: updated.id, status: newStatus });
101
+ }
102
+ async function resolveFeedback(opts) {
103
+ const id = opts.resolve ?? opts.feedbackId;
104
+ if (!id)
105
+ throw new Error("--resolve <feedback_id> is required");
106
+ const store = new LocalFeedbackStore();
107
+ const record = await store.getById(id);
108
+ if (!record)
109
+ throw new Error(`feedback ${id} not found`);
110
+ const now = new Date();
111
+ const links = {
112
+ ...record.resolution_links,
113
+ pull_request_urls: opts.prUrl
114
+ ? [...record.resolution_links.pull_request_urls, opts.prUrl]
115
+ : record.resolution_links.pull_request_urls,
116
+ commit_shas: opts.commitSha
117
+ ? [...record.resolution_links.commit_shas, opts.commitSha]
118
+ : record.resolution_links.commit_shas,
119
+ notes_markdown: opts.triageNotes ?? record.resolution_links.notes_markdown,
120
+ };
121
+ const updated = {
122
+ ...record,
123
+ status: "resolved",
124
+ status_updated_at: now.toISOString(),
125
+ last_activity_at: now.toISOString(),
126
+ consecutive_same_status_polls: 0,
127
+ next_check_suggested_at: deriveNextCheckAt("resolved", 0, now),
128
+ resolution_links: links,
129
+ };
130
+ await store.upsert(updated);
131
+ await mirrorLocalFeedbackToEntity(updated, {
132
+ dataSource: `neotoma triage resolve ${now.toISOString().slice(0, 10)}`,
133
+ userId: updated.submitter_id,
134
+ });
135
+ makePrinter(Boolean(opts.json)).print({ ok: true, feedback_id: id, status: "resolved" });
136
+ }
137
+ async function healthReport(opts) {
138
+ const store = new LocalFeedbackStore();
139
+ const all = await store.listAll();
140
+ const by = {};
141
+ let classified = 0;
142
+ let classifierOverrides = 0;
143
+ for (const r of all) {
144
+ by[r.status] = (by[r.status] ?? 0) + 1;
145
+ if (r.classification)
146
+ classified++;
147
+ if (r.classifier_classification && r.classification && r.classifier_classification !== r.classification) {
148
+ classifierOverrides++;
149
+ }
150
+ }
151
+ const window = all
152
+ .filter((r) => r.classifier_classification)
153
+ .slice(-20);
154
+ const windowAgreement = window.length === 0
155
+ ? null
156
+ : window.filter((r) => r.classifier_classification === r.classification).length / window.length;
157
+ const config = await loadAutoPrConfig();
158
+ const floor = config?.accuracy_floor ?? null;
159
+ const belowFloor = floor != null && windowAgreement != null && windowAgreement < floor.threshold;
160
+ const report = {
161
+ total: all.length,
162
+ classified,
163
+ classification_rate: all.length > 0 ? classified / all.length : 0,
164
+ by_status: by,
165
+ classifier_vs_operator: {
166
+ window_size: window.length,
167
+ agreement_rate: windowAgreement,
168
+ overrides_all_time: classifierOverrides,
169
+ },
170
+ accuracy_floor: floor
171
+ ? {
172
+ threshold: floor.threshold,
173
+ window_size: floor.window_size,
174
+ below_floor: belowFloor,
175
+ recommended_action: belowFloor
176
+ ? "degrade_to_phase_1_human_triage_until_reenabled"
177
+ : "ok",
178
+ }
179
+ : null,
180
+ };
181
+ makePrinter(Boolean(opts.json)).print(report);
182
+ }
183
+ async function loadAutoPrConfig() {
184
+ try {
185
+ const fs = await import("node:fs/promises");
186
+ const path = await import("node:path");
187
+ const file = path.resolve(process.cwd(), "docs/subsystems/feedback_auto_pr_config.json");
188
+ const raw = await fs.readFile(file, "utf8");
189
+ return JSON.parse(raw);
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ }
195
+ async function mirrorReplay(opts) {
196
+ const id = opts.mirrorReplay;
197
+ if (!id)
198
+ throw new Error("--mirror-replay <feedback_id> is required");
199
+ const printer = makePrinter(Boolean(opts.json));
200
+ const baseUrl = process.env.AGENT_SITE_BASE_URL;
201
+ const bearer = process.env.AGENT_SITE_ADMIN_BEARER;
202
+ if (!baseUrl || !bearer) {
203
+ throw new Error("mirror-replay requires remote transport (AGENT_SITE_BASE_URL + AGENT_SITE_ADMIN_BEARER). The mirror queue lives on the agent-site Netlify Blobs store.");
204
+ }
205
+ const url = `${baseUrl.replace(/\/$/, "")}/feedback/${encodeURIComponent(id)}/mirror_replay`;
206
+ const res = await fetch(url, {
207
+ method: "POST",
208
+ headers: {
209
+ authorization: `Bearer ${bearer}`,
210
+ "content-type": "application/json",
211
+ },
212
+ });
213
+ const body = await res.json().catch(() => ({ ok: false, status: res.status }));
214
+ printer.print({ http_status: res.status, response: body });
215
+ if (!res.ok) {
216
+ process.exit(2);
217
+ }
218
+ }
219
+ async function runIngestOnce(opts) {
220
+ const { spawn } = await import("node:child_process");
221
+ await new Promise((resolve, reject) => {
222
+ const child = spawn("npx", ["tsx", "scripts/cron/ingest_agent_incidents.ts", ...(opts.dryRun ? ["--dry-run"] : [])], { stdio: "inherit" });
223
+ child.on("exit", (code) => (code === 0 ? resolve() : reject(new Error(`ingest exit ${code}`))));
224
+ });
225
+ }
226
+ export async function runTriage(opts) {
227
+ if (opts.listPending)
228
+ return listPending(opts);
229
+ if (opts.setStatus)
230
+ return setStatus(opts);
231
+ if (opts.resolve)
232
+ return resolveFeedback(opts);
233
+ if (opts.health)
234
+ return healthReport(opts);
235
+ if (opts.mirrorReplay)
236
+ return mirrorReplay(opts);
237
+ if (opts.watch) {
238
+ const intervalMs = 15 * 60 * 1000;
239
+ for (;;) {
240
+ try {
241
+ await runIngestOnce(opts);
242
+ }
243
+ catch (err) {
244
+ process.stderr.write(`[triage] ingest failed: ${String(err)}\n`);
245
+ }
246
+ await new Promise((r) => setTimeout(r, intervalMs));
247
+ }
248
+ }
249
+ return runIngestOnce(opts);
250
+ }
251
+ //# sourceMappingURL=triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/cli/triage.ts"],"names":[],"mappings":"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"}
@@ -61,8 +61,8 @@ flowchart TD
61
61
  - Do not hand-edit suite inventory entries in this file. Update the generator or the repository tree, then regenerate.
62
62
 
63
63
  ## Repo-wide summary
64
- - Total automated test files: **516**
65
- - Backend and repo Vitest files: **482**
64
+ - Total automated test files: **517**
65
+ - Backend and repo Vitest files: **483**
66
66
  - Frontend Vitest files: **9**
67
67
  - Playwright spec files: **25**
68
68
 
@@ -72,7 +72,7 @@ flowchart TD
72
72
  | Vitest unit tests | 144 |
73
73
  | Vitest service tests | 35 |
74
74
  | Source-adjacent tests | 64 |
75
- | Vitest integration tests | 144 |
75
+ | Vitest integration tests | 145 |
76
76
  | Vitest CLI tests | 65 |
77
77
  | Vitest contract tests | 14 |
78
78
  | Vitest security tests | 4 |
@@ -373,7 +373,7 @@ flowchart TD
373
373
  **Runner:** `vitest`
374
374
  **Command:** `npm run test:integration` or `npx vitest run tests/integration`
375
375
  **Requirements:** Database configured; remote-dependent subsets additionally need `RUN_REMOTE_TESTS=1`.
376
- **Files (144):**
376
+ **Files (145):**
377
377
  - `tests/integration/aauth_attribution_stamping.test.ts`
378
378
  - `tests/integration/aauth_mcp_capability_parity.test.ts`
379
379
  - `tests/integration/aauth_mcp_initialize_admission.test.ts`
@@ -422,6 +422,7 @@ flowchart TD
422
422
  - `tests/integration/guest_write_rate_limit.test.ts`
423
423
  - `tests/integration/hook_failure_hint.test.ts`
424
424
  - `tests/integration/http_related_entities_multihop.test.ts`
425
+ - `tests/integration/http_store_reference_source.test.ts`
425
426
  - `tests/integration/idempotency_collision.test.ts`
426
427
  - `tests/integration/idempotency_key_content_mismatch.test.ts`
427
428
  - `tests/integration/inspector_bundled_mount.test.ts`
@@ -1 +1 @@
1
- import{o as L,l as w,k as E,p as K,r as m,j as e,ah as f,Q as j,L as p,Y as O,a0 as r,dc as R,ag as D,dd as q,W as I}from"./index-BCtrS-q-.js";import{P as u}from"./page_shell-Cn1X2P68.js";import{A as B}from"./api_not_configured_state-DTvBRhie.js";import{E as _}from"./empty_state-BGnkG3yO.js";import{s as b,a as v}from"./query_loading-DK60fuqy.js";import{Q as G}from"./query_refresh_indicator-DKC1GoKi.js";import{u as M}from"./use_entities-Dxdt9oGZ.js";import{C as N,a as C,b as A,c as S}from"./card-VEtVMpk8.js";import{D as k}from"./data-table-DW3TzIhP.js";function U(s){return L("/access_policies",void 0,s)}function F(){return w({queryKey:["access_policies"],queryFn:({signal:s})=>U({signal:s}),placeholderData:K,enabled:E()})}function Q(s){switch(s){case"closed":return"secondary";case"open":return"destructive";default:return"default"}}function $(s){const c=s.snapshot;return c&&typeof c=="object"?c:{}}function P(s){return s.entity_id??s.id??""}const H=[{accessorKey:"entity_type",header:"Entity Type",cell:({row:s})=>e.jsx(p,{to:`/schemas/${encodeURIComponent(s.original.entity_type)}`,className:"hover:underline",children:e.jsx(I,{type:s.original.entity_type})})},{accessorKey:"mode",header:"Guest Access Policy",cell:({row:s})=>e.jsx(r,{variant:Q(s.original.mode),children:s.original.mode})}],V=[{id:"config_key",header:"Config",accessorKey:"config_key",cell:({row:s})=>e.jsx(p,{to:`/entities/${encodeURIComponent(s.original.entity_id)}`,className:"font-medium text-foreground underline-offset-4 hover:text-primary hover:underline",children:s.original.config_key})},{accessorKey:"target_entity_type",header:"Target type",cell:({row:s})=>e.jsx(p,{to:`/schemas/${encodeURIComponent(s.original.target_entity_type)}`,className:"hover:underline",children:e.jsx(I,{type:s.original.target_entity_type})})},{accessorKey:"access_policy",header:"Access policy",cell:({row:s})=>e.jsx(r,{variant:Q(s.original.access_policy),children:s.original.access_policy})},{accessorKey:"active",header:"Active",cell:({row:s})=>e.jsx(r,{variant:s.original.active?"default":"secondary",children:s.original.active?"yes":"no"})}];function ie(){var h,g;const[s,c]=m.useState(""),a=F(),o=M({entity_type:"submission_config",limit:100,offset:0,include_snapshots:!0}),l=m.useMemo(()=>{var t;return(t=a.data)!=null&&t.policies?Object.entries(a.data.policies).map(([i,n])=>({entity_type:i,mode:n})).sort((i,n)=>i.entity_type.localeCompare(n.entity_type)):[]},[a.data]),T=m.useMemo(()=>{const t=s.trim().toLowerCase();return t?l.filter(i=>i.entity_type.toLowerCase().includes(t)||i.mode.toLowerCase().includes(t)):l},[l,s]),y=((h=a.data)==null?void 0:h.default_mode)??"closed",x=m.useMemo(()=>{var i;return(((i=o.data)==null?void 0:i.entities)??[]).map(n=>{const d=$(n);return{entity_id:P(n),config_key:String(d.config_key??P(n)),target_entity_type:String(d.target_entity_type??""),access_policy:String(d.access_policy??""),active:!!d.active}})},[(g=o.data)==null?void 0:g.entities]);return E()?b(a)?e.jsx(u,{title:"Access Policies",children:e.jsx(f,{})}):a.error?e.jsxs(u,{title:"Guest Access Policies",children:[e.jsx(j,{title:"Could not load access policies",children:a.error.message}),e.jsxs("p",{className:"mt-3 text-sm text-muted-foreground",children:[e.jsx("code",{className:"text-xs",children:"GET /access_policies"})," requires an authenticated session. Open ",e.jsx(p,{className:"underline",to:"/settings",children:"Settings"})," and sign in, or use a sandbox handoff so the app stores a bearer token."]})]}):e.jsxs(u,{title:"Guest Access Policies",description:"Controls what AAuth-verified guests (not admitted via agent grants) can do with each entity type.",actions:v(a)||v(o)?e.jsx(G,{}):null,children:[e.jsxs(N,{className:"mb-4",children:[e.jsx(C,{className:"pb-2",children:e.jsxs(A,{className:"text-base flex items-center gap-2",children:[e.jsx(O,{className:"h-4 w-4"})," Default Policy"]})}),e.jsx(S,{children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Entity types not listed below default to"," ",e.jsx(r,{variant:"secondary",children:y}),". Manage policies via the CLI:"," ",e.jsx("code",{className:"text-xs",children:"neotoma access set <type> <mode>"})]})})]}),l.length===0?e.jsx(_,{icon:R,title:"No custom access policies",description:e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"block",children:["Every entity type behaves as ",e.jsx(r,{variant:"secondary",children:y})," ","unless overridden by env or schema metadata."]}),e.jsxs("span",{className:"mt-2 block",children:["Override per-type via the CLI:"," ",e.jsx("code",{className:"text-xs",children:"neotoma access set <type> <mode>"}),", or run ",e.jsx("code",{className:"text-xs",children:"neotoma access enable-issues"})," to allow guest issue filing."]})]})}):e.jsxs(e.Fragment,{children:[e.jsx(D,{placeholder:"Filter by entity type or mode…",value:s,onChange:t=>c(t.target.value),className:"max-w-sm mb-4"}),e.jsx(k,{columns:H,data:T})]}),e.jsxs(N,{className:"mt-8",children:[e.jsx(C,{className:"pb-2",children:e.jsx(A,{className:"text-base",children:"Submission configs"})}),e.jsxs(S,{className:"space-y-3",children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Operator-defined ",e.jsx("code",{className:"text-xs",children:"submission_config"})," rows control generic"," ",e.jsx("code",{className:"text-xs",children:"submit_entity"})," / ",e.jsx("code",{className:"text-xs",children:"POST /submit/:entity_type"})," ","pipelines and their guest ",e.jsx("code",{className:"text-xs",children:"access_policy"})," (orthogonal to the per-type guest access table above)."]}),b(o)?e.jsx(f,{}):o.error?e.jsx(j,{title:"Could not load submission configs",children:o.error.message}):x.length===0?e.jsx(_,{icon:q,title:"No submission configs",description:"Operators seed submission_config entities to enable guest submit_entity / POST /submit/:entity_type pipelines. Use the CLI to seed a config for an entity type."}):e.jsx(k,{columns:V,data:x})]})]})]}):e.jsx(u,{title:"Guest Access Policies",children:e.jsx(B,{})})}export{ie as default};
1
+ import{o as L,l as w,k as E,p as K,r as m,j as e,ah as f,Q as j,L as p,Y as O,a0 as r,dc as R,ag as D,dd as q,W as I}from"./index-CUZJ9Hf7.js";import{P as u}from"./page_shell-Cnle3Z6i.js";import{A as B}from"./api_not_configured_state-C_AknY0i.js";import{E as _}from"./empty_state-DrwUUQcO.js";import{s as b,a as v}from"./query_loading-DK60fuqy.js";import{Q as G}from"./query_refresh_indicator-DKC1GoKi.js";import{u as M}from"./use_entities-Chw8OIMK.js";import{C as N,a as C,b as A,c as S}from"./card-Caif065r.js";import{D as k}from"./data-table-CGnZkL3S.js";function U(s){return L("/access_policies",void 0,s)}function F(){return w({queryKey:["access_policies"],queryFn:({signal:s})=>U({signal:s}),placeholderData:K,enabled:E()})}function Q(s){switch(s){case"closed":return"secondary";case"open":return"destructive";default:return"default"}}function $(s){const c=s.snapshot;return c&&typeof c=="object"?c:{}}function P(s){return s.entity_id??s.id??""}const H=[{accessorKey:"entity_type",header:"Entity Type",cell:({row:s})=>e.jsx(p,{to:`/schemas/${encodeURIComponent(s.original.entity_type)}`,className:"hover:underline",children:e.jsx(I,{type:s.original.entity_type})})},{accessorKey:"mode",header:"Guest Access Policy",cell:({row:s})=>e.jsx(r,{variant:Q(s.original.mode),children:s.original.mode})}],V=[{id:"config_key",header:"Config",accessorKey:"config_key",cell:({row:s})=>e.jsx(p,{to:`/entities/${encodeURIComponent(s.original.entity_id)}`,className:"font-medium text-foreground underline-offset-4 hover:text-primary hover:underline",children:s.original.config_key})},{accessorKey:"target_entity_type",header:"Target type",cell:({row:s})=>e.jsx(p,{to:`/schemas/${encodeURIComponent(s.original.target_entity_type)}`,className:"hover:underline",children:e.jsx(I,{type:s.original.target_entity_type})})},{accessorKey:"access_policy",header:"Access policy",cell:({row:s})=>e.jsx(r,{variant:Q(s.original.access_policy),children:s.original.access_policy})},{accessorKey:"active",header:"Active",cell:({row:s})=>e.jsx(r,{variant:s.original.active?"default":"secondary",children:s.original.active?"yes":"no"})}];function ie(){var h,g;const[s,c]=m.useState(""),a=F(),o=M({entity_type:"submission_config",limit:100,offset:0,include_snapshots:!0}),l=m.useMemo(()=>{var t;return(t=a.data)!=null&&t.policies?Object.entries(a.data.policies).map(([i,n])=>({entity_type:i,mode:n})).sort((i,n)=>i.entity_type.localeCompare(n.entity_type)):[]},[a.data]),T=m.useMemo(()=>{const t=s.trim().toLowerCase();return t?l.filter(i=>i.entity_type.toLowerCase().includes(t)||i.mode.toLowerCase().includes(t)):l},[l,s]),y=((h=a.data)==null?void 0:h.default_mode)??"closed",x=m.useMemo(()=>{var i;return(((i=o.data)==null?void 0:i.entities)??[]).map(n=>{const d=$(n);return{entity_id:P(n),config_key:String(d.config_key??P(n)),target_entity_type:String(d.target_entity_type??""),access_policy:String(d.access_policy??""),active:!!d.active}})},[(g=o.data)==null?void 0:g.entities]);return E()?b(a)?e.jsx(u,{title:"Access Policies",children:e.jsx(f,{})}):a.error?e.jsxs(u,{title:"Guest Access Policies",children:[e.jsx(j,{title:"Could not load access policies",children:a.error.message}),e.jsxs("p",{className:"mt-3 text-sm text-muted-foreground",children:[e.jsx("code",{className:"text-xs",children:"GET /access_policies"})," requires an authenticated session. Open ",e.jsx(p,{className:"underline",to:"/settings",children:"Settings"})," and sign in, or use a sandbox handoff so the app stores a bearer token."]})]}):e.jsxs(u,{title:"Guest Access Policies",description:"Controls what AAuth-verified guests (not admitted via agent grants) can do with each entity type.",actions:v(a)||v(o)?e.jsx(G,{}):null,children:[e.jsxs(N,{className:"mb-4",children:[e.jsx(C,{className:"pb-2",children:e.jsxs(A,{className:"text-base flex items-center gap-2",children:[e.jsx(O,{className:"h-4 w-4"})," Default Policy"]})}),e.jsx(S,{children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Entity types not listed below default to"," ",e.jsx(r,{variant:"secondary",children:y}),". Manage policies via the CLI:"," ",e.jsx("code",{className:"text-xs",children:"neotoma access set <type> <mode>"})]})})]}),l.length===0?e.jsx(_,{icon:R,title:"No custom access policies",description:e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"block",children:["Every entity type behaves as ",e.jsx(r,{variant:"secondary",children:y})," ","unless overridden by env or schema metadata."]}),e.jsxs("span",{className:"mt-2 block",children:["Override per-type via the CLI:"," ",e.jsx("code",{className:"text-xs",children:"neotoma access set <type> <mode>"}),", or run ",e.jsx("code",{className:"text-xs",children:"neotoma access enable-issues"})," to allow guest issue filing."]})]})}):e.jsxs(e.Fragment,{children:[e.jsx(D,{placeholder:"Filter by entity type or mode…",value:s,onChange:t=>c(t.target.value),className:"max-w-sm mb-4"}),e.jsx(k,{columns:H,data:T})]}),e.jsxs(N,{className:"mt-8",children:[e.jsx(C,{className:"pb-2",children:e.jsx(A,{className:"text-base",children:"Submission configs"})}),e.jsxs(S,{className:"space-y-3",children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Operator-defined ",e.jsx("code",{className:"text-xs",children:"submission_config"})," rows control generic"," ",e.jsx("code",{className:"text-xs",children:"submit_entity"})," / ",e.jsx("code",{className:"text-xs",children:"POST /submit/:entity_type"})," ","pipelines and their guest ",e.jsx("code",{className:"text-xs",children:"access_policy"})," (orthogonal to the per-type guest access table above)."]}),b(o)?e.jsx(f,{}):o.error?e.jsx(j,{title:"Could not load submission configs",children:o.error.message}):x.length===0?e.jsx(_,{icon:q,title:"No submission configs",description:"Operators seed submission_config entities to enable guest submit_entity / POST /submit/:entity_type pipelines. Use the CLI to seed a config for an entity type."}):e.jsx(k,{columns:V,data:x})]})]})]}):e.jsx(u,{title:"Guest Access Policies",children:e.jsx(B,{})})}export{ie as default};
@@ -1 +1 @@
1
- import{r as t,j as r,c as m,b9 as f,aw as p,ax as h,ay as y}from"./index-BCtrS-q-.js";function u(e){if(!e||typeof e!="object")return null;const n=e;if(!(n.agent_public_key||n.agent_thumbprint||n.agent_sub||n.client_name||n.attribution_tier||n.connection_id))return null;const c=typeof n.attribution_tier=="string"?n.attribution_tier:void 0,s=n.operator_allowlist_source==="issuer"||n.operator_allowlist_source==="issuer_subject"?n.operator_allowlist_source:null;return{agent_public_key:typeof n.agent_public_key=="string"?n.agent_public_key:void 0,agent_thumbprint:typeof n.agent_thumbprint=="string"?n.agent_thumbprint:void 0,agent_algorithm:typeof n.agent_algorithm=="string"?n.agent_algorithm:void 0,agent_sub:typeof n.agent_sub=="string"?n.agent_sub:void 0,agent_iss:typeof n.agent_iss=="string"?n.agent_iss:void 0,client_name:typeof n.client_name=="string"?n.client_name:void 0,client_version:typeof n.client_version=="string"?n.client_version:void 0,connection_id:typeof n.connection_id=="string"?n.connection_id:void 0,attribution_tier:c,attributed_at:typeof n.attributed_at=="string"?n.attributed_at:void 0,attestation:k(n.attestation),operator_allowlist_source:s}}function k(e){if(!e||typeof e!="object")return null;const n=e;return typeof n.verified!="boolean"?null:{verified:n.verified,format:n.format==="apple-secure-enclave"||n.format==="webauthn-packed"||n.format==="tpm2"?n.format:null,reason:typeof n.reason=="string"?n.reason:null,aaguid:typeof n.aaguid=="string"?n.aaguid:null,key_binding_matches_cnf_jwk:typeof n.key_binding_matches_cnf_jwk=="boolean"?n.key_binding_matches_cnf_jwk:null,challenge_digest:typeof n.challenge_digest=="string"?n.challenge_digest:null,chain:Array.isArray(n.chain)?n.chain:null}}function d(e){return e?e.client_name?e.client_version?`${e.client_name} ${e.client_version}`:e.client_name:e.agent_sub?e.agent_sub:e.agent_thumbprint?`key:${e.agent_thumbprint.slice(0,10)}`:"Anonymous":"Anonymous"}function w(e){return e?e.agent_thumbprint?`thumb:${e.agent_thumbprint}`:e.agent_sub?`sub:${e.agent_sub}`:e.client_name?e.client_version?`name:${e.client_name}@${e.client_version}`:`name:${e.client_name}`:null:null}const g={hardware:{label:"Hardware",className:"bg-emerald-100 text-emerald-900 ring-1 ring-emerald-300 dark:bg-emerald-900/30 dark:text-emerald-200 dark:ring-emerald-700",description:"AAuth-verified with a cryptographically attested hardware-backed key (Secure Enclave / TPM / YubiKey)."},operator_attested:{label:"Operator-attested",className:"bg-teal-100 text-teal-900 ring-1 ring-teal-300 dark:bg-teal-900/30 dark:text-teal-200 dark:ring-teal-700",description:"AAuth-verified, and this issuer (or issuer:subject) is in the operator-managed allowlist."},software:{label:"Software",className:"bg-sky-100 text-sky-900 ring-1 ring-sky-300 dark:bg-sky-900/30 dark:text-sky-200 dark:ring-sky-700",description:"AAuth-verified with a software-only key."},unverified_client:{label:"Self-reported",className:"bg-amber-100 text-amber-900 ring-1 ring-amber-300 dark:bg-amber-900/30 dark:text-amber-200 dark:ring-amber-700",description:"Client name and version from MCP `initialize.clientInfo`. Self-reported, not cryptographically verified."},anonymous:{label:"Anonymous",className:"bg-zinc-100 text-zinc-700 ring-1 ring-zinc-300 dark:bg-zinc-800 dark:text-zinc-300 dark:ring-zinc-700",description:"No identifying information on this write (no AAuth, no meaningful clientInfo)."}};function x({attribution:e}){const n=(e==null?void 0:e.attribution_tier)??"anonymous",a=g[n],c=d(e),s=(e==null?void 0:e.attestation)??null,i=[["Tier",a.label],["Agent",c],["Algorithm",e==null?void 0:e.agent_algorithm],["Thumbprint",e==null?void 0:e.agent_thumbprint],["Public key",e==null?void 0:e.agent_public_key],["Subject",e==null?void 0:e.agent_sub],["Issuer",e==null?void 0:e.agent_iss],["Client",e==null?void 0:e.client_name],["Version",e==null?void 0:e.client_version],["Connection",e==null?void 0:e.connection_id],["Stamped at",e==null?void 0:e.attributed_at],["Operator allowlist",(e==null?void 0:e.operator_allowlist_source)==="issuer_subject"?"iss + sub":(e==null?void 0:e.operator_allowlist_source)==="issuer"?"iss":void 0],["Attestation",s?s.verified?"verified":"failed":void 0],["Attestation format",(s==null?void 0:s.format)??void 0],["AAGUID / model",(s==null?void 0:s.aaguid)??void 0],["Key binding",(s==null?void 0:s.key_binding_matches_cnf_jwk)==null?void 0:s.key_binding_matches_cnf_jwk?"matches cnf.jwk":"mismatch"],["Challenge",s!=null&&s.challenge_digest?`${s.challenge_digest.slice(0,16)}…`:void 0],["Failure reason",(s==null?void 0:s.reason)??void 0]];return r.jsxs("div",{className:"space-y-1 text-xs",children:[r.jsx("p",{className:"font-medium",children:a.label}),r.jsx("p",{className:"text-muted-foreground",children:a.description}),r.jsx("dl",{className:"mt-1 grid grid-cols-[max-content_1fr] gap-x-2 gap-y-0.5",children:i.filter(([,l])=>!!l).map(([l,o])=>r.jsxs(t.Fragment,{children:[r.jsx("dt",{className:"text-muted-foreground",children:l}),r.jsx("dd",{className:"break-all font-mono",children:o})]},l))})]})}function A({provenance:e,attribution:n,iconOnly:a=!1,className:c}){const s=t.useMemo(()=>n??u(e),[n,e]),i=(s==null?void 0:s.attribution_tier)??"anonymous",l=g[i],o=d(s),_=r.jsxs("span",{className:m("inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-xs font-medium",l.className,c),children:[r.jsx("span",{"aria-hidden":"true",children:v(i)}),!a&&r.jsx("span",{className:"max-w-[16ch] truncate",title:o,children:o})]});return r.jsx(f,{delayDuration:150,children:r.jsxs(p,{children:[r.jsx(h,{asChild:!0,children:_}),r.jsx(y,{className:"max-w-sm",children:r.jsx(x,{attribution:s})})]})})}function v(e){switch(e){case"hardware":return"◆";case"operator_attested":return"◈";case"software":return"◇";case"unverified_client":return"●";case"anonymous":default:return"○"}}export{A,x as a,d as b,u as e,w as g};
1
+ import{r as t,j as r,c as m,b9 as f,aw as p,ax as h,ay as y}from"./index-CUZJ9Hf7.js";function u(e){if(!e||typeof e!="object")return null;const n=e;if(!(n.agent_public_key||n.agent_thumbprint||n.agent_sub||n.client_name||n.attribution_tier||n.connection_id))return null;const c=typeof n.attribution_tier=="string"?n.attribution_tier:void 0,s=n.operator_allowlist_source==="issuer"||n.operator_allowlist_source==="issuer_subject"?n.operator_allowlist_source:null;return{agent_public_key:typeof n.agent_public_key=="string"?n.agent_public_key:void 0,agent_thumbprint:typeof n.agent_thumbprint=="string"?n.agent_thumbprint:void 0,agent_algorithm:typeof n.agent_algorithm=="string"?n.agent_algorithm:void 0,agent_sub:typeof n.agent_sub=="string"?n.agent_sub:void 0,agent_iss:typeof n.agent_iss=="string"?n.agent_iss:void 0,client_name:typeof n.client_name=="string"?n.client_name:void 0,client_version:typeof n.client_version=="string"?n.client_version:void 0,connection_id:typeof n.connection_id=="string"?n.connection_id:void 0,attribution_tier:c,attributed_at:typeof n.attributed_at=="string"?n.attributed_at:void 0,attestation:k(n.attestation),operator_allowlist_source:s}}function k(e){if(!e||typeof e!="object")return null;const n=e;return typeof n.verified!="boolean"?null:{verified:n.verified,format:n.format==="apple-secure-enclave"||n.format==="webauthn-packed"||n.format==="tpm2"?n.format:null,reason:typeof n.reason=="string"?n.reason:null,aaguid:typeof n.aaguid=="string"?n.aaguid:null,key_binding_matches_cnf_jwk:typeof n.key_binding_matches_cnf_jwk=="boolean"?n.key_binding_matches_cnf_jwk:null,challenge_digest:typeof n.challenge_digest=="string"?n.challenge_digest:null,chain:Array.isArray(n.chain)?n.chain:null}}function d(e){return e?e.client_name?e.client_version?`${e.client_name} ${e.client_version}`:e.client_name:e.agent_sub?e.agent_sub:e.agent_thumbprint?`key:${e.agent_thumbprint.slice(0,10)}`:"Anonymous":"Anonymous"}function w(e){return e?e.agent_thumbprint?`thumb:${e.agent_thumbprint}`:e.agent_sub?`sub:${e.agent_sub}`:e.client_name?e.client_version?`name:${e.client_name}@${e.client_version}`:`name:${e.client_name}`:null:null}const g={hardware:{label:"Hardware",className:"bg-emerald-100 text-emerald-900 ring-1 ring-emerald-300 dark:bg-emerald-900/30 dark:text-emerald-200 dark:ring-emerald-700",description:"AAuth-verified with a cryptographically attested hardware-backed key (Secure Enclave / TPM / YubiKey)."},operator_attested:{label:"Operator-attested",className:"bg-teal-100 text-teal-900 ring-1 ring-teal-300 dark:bg-teal-900/30 dark:text-teal-200 dark:ring-teal-700",description:"AAuth-verified, and this issuer (or issuer:subject) is in the operator-managed allowlist."},software:{label:"Software",className:"bg-sky-100 text-sky-900 ring-1 ring-sky-300 dark:bg-sky-900/30 dark:text-sky-200 dark:ring-sky-700",description:"AAuth-verified with a software-only key."},unverified_client:{label:"Self-reported",className:"bg-amber-100 text-amber-900 ring-1 ring-amber-300 dark:bg-amber-900/30 dark:text-amber-200 dark:ring-amber-700",description:"Client name and version from MCP `initialize.clientInfo`. Self-reported, not cryptographically verified."},anonymous:{label:"Anonymous",className:"bg-zinc-100 text-zinc-700 ring-1 ring-zinc-300 dark:bg-zinc-800 dark:text-zinc-300 dark:ring-zinc-700",description:"No identifying information on this write (no AAuth, no meaningful clientInfo)."}};function x({attribution:e}){const n=(e==null?void 0:e.attribution_tier)??"anonymous",a=g[n],c=d(e),s=(e==null?void 0:e.attestation)??null,i=[["Tier",a.label],["Agent",c],["Algorithm",e==null?void 0:e.agent_algorithm],["Thumbprint",e==null?void 0:e.agent_thumbprint],["Public key",e==null?void 0:e.agent_public_key],["Subject",e==null?void 0:e.agent_sub],["Issuer",e==null?void 0:e.agent_iss],["Client",e==null?void 0:e.client_name],["Version",e==null?void 0:e.client_version],["Connection",e==null?void 0:e.connection_id],["Stamped at",e==null?void 0:e.attributed_at],["Operator allowlist",(e==null?void 0:e.operator_allowlist_source)==="issuer_subject"?"iss + sub":(e==null?void 0:e.operator_allowlist_source)==="issuer"?"iss":void 0],["Attestation",s?s.verified?"verified":"failed":void 0],["Attestation format",(s==null?void 0:s.format)??void 0],["AAGUID / model",(s==null?void 0:s.aaguid)??void 0],["Key binding",(s==null?void 0:s.key_binding_matches_cnf_jwk)==null?void 0:s.key_binding_matches_cnf_jwk?"matches cnf.jwk":"mismatch"],["Challenge",s!=null&&s.challenge_digest?`${s.challenge_digest.slice(0,16)}…`:void 0],["Failure reason",(s==null?void 0:s.reason)??void 0]];return r.jsxs("div",{className:"space-y-1 text-xs",children:[r.jsx("p",{className:"font-medium",children:a.label}),r.jsx("p",{className:"text-muted-foreground",children:a.description}),r.jsx("dl",{className:"mt-1 grid grid-cols-[max-content_1fr] gap-x-2 gap-y-0.5",children:i.filter(([,l])=>!!l).map(([l,o])=>r.jsxs(t.Fragment,{children:[r.jsx("dt",{className:"text-muted-foreground",children:l}),r.jsx("dd",{className:"break-all font-mono",children:o})]},l))})]})}function A({provenance:e,attribution:n,iconOnly:a=!1,className:c}){const s=t.useMemo(()=>n??u(e),[n,e]),i=(s==null?void 0:s.attribution_tier)??"anonymous",l=g[i],o=d(s),_=r.jsxs("span",{className:m("inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-xs font-medium",l.className,c),children:[r.jsx("span",{"aria-hidden":"true",children:v(i)}),!a&&r.jsx("span",{className:"max-w-[16ch] truncate",title:o,children:o})]});return r.jsx(f,{delayDuration:150,children:r.jsxs(p,{children:[r.jsx(h,{asChild:!0,children:_}),r.jsx(y,{className:"max-w-sm",children:r.jsx(x,{attribution:s})})]})})}function v(e){switch(e){case"hardware":return"◆";case"operator_attested":return"◈";case"software":return"◇";case"unverified_client":return"●";case"anonymous":default:return"○"}}export{A,x as a,d as b,u as e,w as g};
@@ -1 +1 @@
1
- import{r as _,j as e,a0 as l,f as b,_ as I,b0 as O,m as y,Q as k,Z as A,bP as M,aw as C,ax as P,ay as R,L as S,cT as Q,A as B}from"./index-BCtrS-q-.js";import{P as p}from"./page_shell-Cn1X2P68.js";import{C as x,a as u,b as g,c as j}from"./card-VEtVMpk8.js";import{P as $,a as z,b as T,c as D,d as K}from"./pagination-CAf0CpCi.js";import{A as U}from"./agent_badge-C33tCpxh.js";import{R as G}from"./recent_records_feed-DsdMzXJY.js";import{s as E,a as L}from"./query_loading-DK60fuqy.js";import{Q as H}from"./query_refresh_indicator-DKC1GoKi.js";import{b as V,c as Z}from"./use_agents-CRv6rDsh.js";import"./live_relative_time-Cz6uD0Gt.js";const J={"apple-secure-enclave":"Apple Secure Enclave","webauthn-packed":"WebAuthn (packed)",tpm2:"TPM 2.0"},W={format_unsupported:"Format unsupported",challenge_mismatch:"Challenge mismatch",key_binding_mismatch:"Key binding mismatch",chain_invalid:"Chain invalid",signature_invalid:"Signature invalid",aaguid_not_trusted:"AAGUID not on trust list",pubarea_mismatch:"Public area mismatch",verifier_not_implemented:"Verifier not implemented",not_present:"No envelope on this agent"};function Y({attestation:n,operatorAllowlistSource:o}){const[a,r]=_.useState(!1);if(!n&&!o)return null;if(!n)return e.jsxs(x,{children:[e.jsx(u,{className:"pb-3",children:e.jsxs(g,{className:"flex items-center justify-between text-base",children:[e.jsx("span",{children:"Attestation envelope"}),e.jsx(l,{variant:"secondary",children:"Operator-attested"})]})}),e.jsxs(j,{className:"text-sm text-muted-foreground",children:["No cryptographic attestation envelope on this agent. Tier was promoted via the operator allowlist (",o==="issuer_subject"?"iss + sub":"iss",")."]})]});const c=n.verified===!0,i=n.format?J[n.format]:"Unknown format",h=n.reason?W[n.reason]??n.reason:null;return e.jsxs(x,{children:[e.jsx(u,{className:"pb-3",children:e.jsxs(g,{className:"flex flex-wrap items-center justify-between gap-2 text-base",children:[e.jsx("span",{children:"Attestation envelope"}),e.jsx(l,{variant:c?"default":"destructive",children:c?"Verified":"Failed"})]})}),e.jsxs(j,{className:"space-y-3 text-sm",children:[e.jsxs("dl",{className:"grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Format"}),e.jsx("dd",{className:"font-mono",children:i}),n.aaguid&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"AAGUID / model"}),e.jsx("dd",{className:"break-all font-mono",children:n.aaguid})]}),n.key_binding_matches_cnf_jwk!=null&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Key binding"}),e.jsx("dd",{children:n.key_binding_matches_cnf_jwk?e.jsx(l,{variant:"secondary",children:"Matches cnf.jwk"}):e.jsx(l,{variant:"destructive",children:"Mismatch"})})]}),n.challenge_digest&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Challenge"}),e.jsxs("dd",{className:"break-all font-mono text-xs",children:[n.challenge_digest.slice(0,32),n.challenge_digest.length>32?"…":""]})]}),o&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Operator allowlist"}),e.jsx("dd",{children:e.jsx(l,{variant:"outline",children:o==="issuer_subject"?"iss + sub":"iss"})})]})]}),!c&&h&&e.jsx("div",{children:e.jsx(l,{variant:"destructive",children:h})}),n.chain&&n.chain.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:"Trust chain (leaf → root)"}),e.jsx("ol",{className:"space-y-1 text-xs",children:n.chain.map((s,m)=>e.jsxs("li",{className:"rounded border border-border/50 px-2 py-1",children:[e.jsx("div",{className:"font-mono",children:s.subject_cn??"(unknown subject)"}),e.jsxs("div",{className:"text-muted-foreground",children:["issued by ",s.issuer_cn??"(unknown issuer)"]})]},`${s.serial??m}-${m}`))})]}),e.jsxs("div",{children:[e.jsxs(b,{variant:"ghost",size:"sm",className:"px-0",onClick:()=>r(s=>!s),"aria-expanded":a,children:[e.jsx(I,{className:`mr-1 h-4 w-4 transition-transform ${a?"rotate-90":""}`}),a?"Hide raw envelope":"Show raw envelope"]}),a&&e.jsx("pre",{"data-testid":"attestation-envelope-raw",className:"mt-2 max-h-96 overflow-auto rounded bg-muted p-3 font-mono text-xs",children:JSON.stringify(n,null,2)})]})]})]})}const f=50,q=[{key:"observation",label:"Observations"},{key:"source",label:"Sources"},{key:"relationship",label:"Relationships"},{key:"interpretation",label:"Interpretations"},{key:"timeline_event",label:"Timeline events"}];function de(){var N,w;const{key:n}=O(),o=n??"",a=V(o),[r,c]=_.useState(0),i=Z(o,{limit:f,offset:r}),h=_.useMemo(()=>{var d;const t=(d=a.data)==null?void 0:d.agent;return t?{attribution_tier:t.tier,client_name:t.client_name??void 0,client_version:t.client_version??void 0,agent_sub:t.agent_sub??void 0,agent_iss:t.agent_iss??void 0,agent_algorithm:t.agent_algorithm??void 0,agent_thumbprint:t.agent_thumbprint??void 0,agent_public_key:t.agent_public_key??void 0,attestation:t.attestation??null,operator_allowlist_source:t.operator_allowlist_source??null}:null},[a.data]);if(E(a))return e.jsx(p,{title:"Agent",children:e.jsx(y,{rows:5})});if(a.error)return e.jsx(p,{title:"Agent",children:e.jsx(k,{title:"Could not load agent",children:a.error.message})});if(!a.data)return e.jsx(p,{title:"Agent",children:e.jsx("div",{className:"text-muted-foreground",children:"No agent data."})});const s=a.data.agent,m=((N=i.data)==null?void 0:N.items)??[],v=((w=i.data)==null?void 0:w.has_more)??!1,F=[["Agent key",s.agent_key],["Client",s.client_name],["Client version",s.client_version],["Subject (sub)",s.agent_sub],["Issuer (iss)",s.agent_iss],["Algorithm",s.agent_algorithm],["Thumbprint",s.agent_thumbprint],["Public key",s.agent_public_key]];return e.jsxs(p,{title:s.label,description:e.jsx("span",{children:"Agent detail view — writes stamped with this identity across observations, sources, relationships, interpretations, and timeline events."}),actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[L(a)||L(i)?e.jsx(H,{}):null,(()=>{const t=new URLSearchParams;return t.set("promote","1"),s.label&&t.set("label",s.label),s.agent_sub&&t.set("sub",s.agent_sub),s.agent_iss&&t.set("iss",s.agent_iss),s.agent_thumbprint&&t.set("thumbprint",s.agent_thumbprint),!!(s.agent_sub||s.agent_thumbprint)?e.jsx(b,{asChild:!0,variant:"default",size:"sm",children:e.jsxs(S,{to:`/agents/grants?${t.toString()}`,children:[e.jsx(Q,{className:"mr-1 h-4 w-4"}),"Promote to grant"]})}):null})(),e.jsx(b,{asChild:!0,variant:"ghost",size:"sm",children:e.jsxs(S,{to:"/agents",children:[e.jsx(B,{className:"mr-1 h-4 w-4"}),"All agents"]})})]}),children:[e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsxs(x,{className:"lg:col-span-2",children:[e.jsxs(u,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(g,{children:"Identity"}),h&&e.jsx(U,{attribution:h})]}),e.jsx(j,{children:e.jsxs("dl",{className:"grid grid-cols-1 gap-x-6 gap-y-2 text-sm sm:grid-cols-[max-content_1fr]",children:[F.filter(([,t])=>!!t).map(([t,d])=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:t}),e.jsx("dd",{className:"break-all font-mono",children:d})]},t)),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"First seen"}),e.jsx("dd",{children:A(s.first_seen_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last seen"}),e.jsx("dd",{children:A(s.last_seen_at??void 0)})]})]})})]}),e.jsxs(x,{children:[e.jsx(u,{children:e.jsx(g,{children:"Record counts"})}),e.jsx(j,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Total"}),e.jsx(l,{variant:"secondary",children:s.total_records})]}),q.map(({key:t,label:d})=>e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:d}),e.jsx(l,{variant:"outline",children:s.record_counts[t]??0})]},t))]})})]})]}),e.jsx(Y,{attestation:s.attestation??null,operatorAllowlistSource:s.operator_allowlist_source??null}),e.jsx(M,{}),e.jsxs(x,{children:[e.jsx(u,{children:e.jsx(g,{children:"Records"})}),e.jsx(j,{className:"space-y-4",children:E(i)?e.jsx(y,{rows:6}):i.error?e.jsx(k,{title:"Could not load records",children:i.error.message}):e.jsxs(e.Fragment,{children:[e.jsx(G,{items:m,emptyMessage:"No records attributed to this agent."}),(r>0||v)&&e.jsx($,{className:"mx-0 w-full justify-between",children:e.jsxs(z,{className:"flex w-full flex-wrap items-center justify-between gap-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:m.length===0?"No rows on this page.":`Showing ${r+1}–${r+m.length}`}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(T,{children:e.jsxs(C,{children:[e.jsx(P,{asChild:!0,children:e.jsx("span",{children:e.jsx(D,{size:"icon",disabled:r===0,onClick:()=>c(Math.max(0,r-f))})})}),e.jsx(R,{children:"Newer records"})]})}),e.jsx(T,{children:e.jsxs(C,{children:[e.jsx(P,{asChild:!0,children:e.jsx("span",{children:e.jsx(K,{size:"icon",disabled:!v,onClick:()=>c(r+f)})})}),e.jsx(R,{children:"Older records"})]})})]})]})})]})})]})]})}export{de as default};
1
+ import{r as _,j as e,a0 as l,f as b,_ as I,b0 as O,m as y,Q as k,Z as A,bP as M,aw as C,ax as P,ay as R,L as S,cT as Q,A as B}from"./index-CUZJ9Hf7.js";import{P as p}from"./page_shell-Cnle3Z6i.js";import{C as x,a as u,b as g,c as j}from"./card-Caif065r.js";import{P as $,a as z,b as T,c as D,d as K}from"./pagination-DiMq7Q_R.js";import{A as U}from"./agent_badge-CpLLrPir.js";import{R as G}from"./recent_records_feed-x0Ny5gdj.js";import{s as E,a as L}from"./query_loading-DK60fuqy.js";import{Q as H}from"./query_refresh_indicator-DKC1GoKi.js";import{b as V,c as Z}from"./use_agents-DNelJZjI.js";import"./live_relative_time-BRhUEOAQ.js";const J={"apple-secure-enclave":"Apple Secure Enclave","webauthn-packed":"WebAuthn (packed)",tpm2:"TPM 2.0"},W={format_unsupported:"Format unsupported",challenge_mismatch:"Challenge mismatch",key_binding_mismatch:"Key binding mismatch",chain_invalid:"Chain invalid",signature_invalid:"Signature invalid",aaguid_not_trusted:"AAGUID not on trust list",pubarea_mismatch:"Public area mismatch",verifier_not_implemented:"Verifier not implemented",not_present:"No envelope on this agent"};function Y({attestation:n,operatorAllowlistSource:o}){const[a,r]=_.useState(!1);if(!n&&!o)return null;if(!n)return e.jsxs(x,{children:[e.jsx(u,{className:"pb-3",children:e.jsxs(g,{className:"flex items-center justify-between text-base",children:[e.jsx("span",{children:"Attestation envelope"}),e.jsx(l,{variant:"secondary",children:"Operator-attested"})]})}),e.jsxs(j,{className:"text-sm text-muted-foreground",children:["No cryptographic attestation envelope on this agent. Tier was promoted via the operator allowlist (",o==="issuer_subject"?"iss + sub":"iss",")."]})]});const c=n.verified===!0,i=n.format?J[n.format]:"Unknown format",h=n.reason?W[n.reason]??n.reason:null;return e.jsxs(x,{children:[e.jsx(u,{className:"pb-3",children:e.jsxs(g,{className:"flex flex-wrap items-center justify-between gap-2 text-base",children:[e.jsx("span",{children:"Attestation envelope"}),e.jsx(l,{variant:c?"default":"destructive",children:c?"Verified":"Failed"})]})}),e.jsxs(j,{className:"space-y-3 text-sm",children:[e.jsxs("dl",{className:"grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Format"}),e.jsx("dd",{className:"font-mono",children:i}),n.aaguid&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"AAGUID / model"}),e.jsx("dd",{className:"break-all font-mono",children:n.aaguid})]}),n.key_binding_matches_cnf_jwk!=null&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Key binding"}),e.jsx("dd",{children:n.key_binding_matches_cnf_jwk?e.jsx(l,{variant:"secondary",children:"Matches cnf.jwk"}):e.jsx(l,{variant:"destructive",children:"Mismatch"})})]}),n.challenge_digest&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Challenge"}),e.jsxs("dd",{className:"break-all font-mono text-xs",children:[n.challenge_digest.slice(0,32),n.challenge_digest.length>32?"…":""]})]}),o&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:"Operator allowlist"}),e.jsx("dd",{children:e.jsx(l,{variant:"outline",children:o==="issuer_subject"?"iss + sub":"iss"})})]})]}),!c&&h&&e.jsx("div",{children:e.jsx(l,{variant:"destructive",children:h})}),n.chain&&n.chain.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:"Trust chain (leaf → root)"}),e.jsx("ol",{className:"space-y-1 text-xs",children:n.chain.map((s,m)=>e.jsxs("li",{className:"rounded border border-border/50 px-2 py-1",children:[e.jsx("div",{className:"font-mono",children:s.subject_cn??"(unknown subject)"}),e.jsxs("div",{className:"text-muted-foreground",children:["issued by ",s.issuer_cn??"(unknown issuer)"]})]},`${s.serial??m}-${m}`))})]}),e.jsxs("div",{children:[e.jsxs(b,{variant:"ghost",size:"sm",className:"px-0",onClick:()=>r(s=>!s),"aria-expanded":a,children:[e.jsx(I,{className:`mr-1 h-4 w-4 transition-transform ${a?"rotate-90":""}`}),a?"Hide raw envelope":"Show raw envelope"]}),a&&e.jsx("pre",{"data-testid":"attestation-envelope-raw",className:"mt-2 max-h-96 overflow-auto rounded bg-muted p-3 font-mono text-xs",children:JSON.stringify(n,null,2)})]})]})]})}const f=50,q=[{key:"observation",label:"Observations"},{key:"source",label:"Sources"},{key:"relationship",label:"Relationships"},{key:"interpretation",label:"Interpretations"},{key:"timeline_event",label:"Timeline events"}];function de(){var N,w;const{key:n}=O(),o=n??"",a=V(o),[r,c]=_.useState(0),i=Z(o,{limit:f,offset:r}),h=_.useMemo(()=>{var d;const t=(d=a.data)==null?void 0:d.agent;return t?{attribution_tier:t.tier,client_name:t.client_name??void 0,client_version:t.client_version??void 0,agent_sub:t.agent_sub??void 0,agent_iss:t.agent_iss??void 0,agent_algorithm:t.agent_algorithm??void 0,agent_thumbprint:t.agent_thumbprint??void 0,agent_public_key:t.agent_public_key??void 0,attestation:t.attestation??null,operator_allowlist_source:t.operator_allowlist_source??null}:null},[a.data]);if(E(a))return e.jsx(p,{title:"Agent",children:e.jsx(y,{rows:5})});if(a.error)return e.jsx(p,{title:"Agent",children:e.jsx(k,{title:"Could not load agent",children:a.error.message})});if(!a.data)return e.jsx(p,{title:"Agent",children:e.jsx("div",{className:"text-muted-foreground",children:"No agent data."})});const s=a.data.agent,m=((N=i.data)==null?void 0:N.items)??[],v=((w=i.data)==null?void 0:w.has_more)??!1,F=[["Agent key",s.agent_key],["Client",s.client_name],["Client version",s.client_version],["Subject (sub)",s.agent_sub],["Issuer (iss)",s.agent_iss],["Algorithm",s.agent_algorithm],["Thumbprint",s.agent_thumbprint],["Public key",s.agent_public_key]];return e.jsxs(p,{title:s.label,description:e.jsx("span",{children:"Agent detail view — writes stamped with this identity across observations, sources, relationships, interpretations, and timeline events."}),actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[L(a)||L(i)?e.jsx(H,{}):null,(()=>{const t=new URLSearchParams;return t.set("promote","1"),s.label&&t.set("label",s.label),s.agent_sub&&t.set("sub",s.agent_sub),s.agent_iss&&t.set("iss",s.agent_iss),s.agent_thumbprint&&t.set("thumbprint",s.agent_thumbprint),!!(s.agent_sub||s.agent_thumbprint)?e.jsx(b,{asChild:!0,variant:"default",size:"sm",children:e.jsxs(S,{to:`/agents/grants?${t.toString()}`,children:[e.jsx(Q,{className:"mr-1 h-4 w-4"}),"Promote to grant"]})}):null})(),e.jsx(b,{asChild:!0,variant:"ghost",size:"sm",children:e.jsxs(S,{to:"/agents",children:[e.jsx(B,{className:"mr-1 h-4 w-4"}),"All agents"]})})]}),children:[e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsxs(x,{className:"lg:col-span-2",children:[e.jsxs(u,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(g,{children:"Identity"}),h&&e.jsx(U,{attribution:h})]}),e.jsx(j,{children:e.jsxs("dl",{className:"grid grid-cols-1 gap-x-6 gap-y-2 text-sm sm:grid-cols-[max-content_1fr]",children:[F.filter(([,t])=>!!t).map(([t,d])=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:t}),e.jsx("dd",{className:"break-all font-mono",children:d})]},t)),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"First seen"}),e.jsx("dd",{children:A(s.first_seen_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last seen"}),e.jsx("dd",{children:A(s.last_seen_at??void 0)})]})]})})]}),e.jsxs(x,{children:[e.jsx(u,{children:e.jsx(g,{children:"Record counts"})}),e.jsx(j,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Total"}),e.jsx(l,{variant:"secondary",children:s.total_records})]}),q.map(({key:t,label:d})=>e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:d}),e.jsx(l,{variant:"outline",children:s.record_counts[t]??0})]},t))]})})]})]}),e.jsx(Y,{attestation:s.attestation??null,operatorAllowlistSource:s.operator_allowlist_source??null}),e.jsx(M,{}),e.jsxs(x,{children:[e.jsx(u,{children:e.jsx(g,{children:"Records"})}),e.jsx(j,{className:"space-y-4",children:E(i)?e.jsx(y,{rows:6}):i.error?e.jsx(k,{title:"Could not load records",children:i.error.message}):e.jsxs(e.Fragment,{children:[e.jsx(G,{items:m,emptyMessage:"No records attributed to this agent."}),(r>0||v)&&e.jsx($,{className:"mx-0 w-full justify-between",children:e.jsxs(z,{className:"flex w-full flex-wrap items-center justify-between gap-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:m.length===0?"No rows on this page.":`Showing ${r+1}–${r+m.length}`}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(T,{children:e.jsxs(C,{children:[e.jsx(P,{asChild:!0,children:e.jsx("span",{children:e.jsx(D,{size:"icon",disabled:r===0,onClick:()=>c(Math.max(0,r-f))})})}),e.jsx(R,{children:"Newer records"})]})}),e.jsx(T,{children:e.jsxs(C,{children:[e.jsx(P,{asChild:!0,children:e.jsx("span",{children:e.jsx(K,{size:"icon",disabled:!v,onClick:()=>c(r+f)})})}),e.jsx(R,{children:"Older records"})]})})]})]})})]})})]})]})}export{de as default};
@@ -1 +1 @@
1
- import{r as h,j as t,c as p}from"./index-BCtrS-q-.js";import{e as m,g as y,b as A}from"./agent_badge-C33tCpxh.js";import{L as v}from"./label-SnZK36YD.js";import{S,a as w,b as C,c as _,d as a,e as g,f as x}from"./select-Dj5oFvji.js";function b(o){if(!o||typeof o!="object")return null;const e=o;return e.agent_attribution&&typeof e.agent_attribution=="object"&&!Array.isArray(e.agent_attribution)?e.agent_attribution:e.provenance&&typeof e.provenance=="object"&&!Array.isArray(e.provenance)?e.provenance:null}function M(o){const[e,u]=h.useState({kind:"all"}),d=h.useMemo(()=>{const l=new Map;for(const i of o??[]){const r=m(b(i)),c=y(r);if(!c)continue;const n=A(r),s=l.get(c);s?s.count+=1:l.set(c,{label:n,count:1})}return[...l.entries()].map(([i,r])=>({key:i,label:r.label,count:r.count})).sort((i,r)=>r.count-i.count)},[o]);function j(l){return e.kind==="all"?l:l.filter(i=>{const r=m(b(i));return e.kind==="tier"?((r==null?void 0:r.attribution_tier)??"anonymous")===e.tier:y(r)===e.key})}return{filter:e,setFilter:u,filterRows:j,AgentFilterControl:({className:l})=>{const i=e.kind==="all"?"all":e.kind==="tier"?`tier:${e.tier}`:`agent:${e.key}`,r=e.kind==="agent"&&!d.some(n=>n.key===e.key);function c(n){if(n==="all")u({kind:"all"});else if(n.startsWith("tier:"))u({kind:"tier",tier:n.slice(5)});else if(n.startsWith("agent:")){const s=n.slice(6),f=d.find(k=>k.key===s);u({kind:"agent",key:s,label:(f==null?void 0:f.label)??(e.kind==="agent"&&e.key===s?e.label:s)})}}return t.jsxs("div",{className:p("flex flex-col gap-1.5",l),children:[t.jsx(v,{htmlFor:"agent-filter",className:"text-xs font-medium text-muted-foreground",children:"Agent"}),t.jsxs(S,{value:i,onValueChange:c,children:[t.jsx(w,{id:"agent-filter",className:"h-9 w-full min-w-[12rem] text-sm sm:w-auto",children:t.jsx(C,{placeholder:"All agents"})}),t.jsxs(_,{children:[t.jsx(a,{value:"all",children:"All agents"}),r&&e.kind==="agent"?t.jsxs(g,{children:[t.jsx(x,{children:"Currently selected"}),t.jsxs(a,{value:`agent:${e.key}`,className:"text-muted-foreground",children:[e.label," (not on this page)"]})]}):null,t.jsxs(g,{children:[t.jsx(x,{children:"By trust tier"}),t.jsx(a,{value:"tier:hardware",children:"◆ Hardware-verified"}),t.jsx(a,{value:"tier:software",children:"◇ Software-verified"}),t.jsx(a,{value:"tier:unverified_client",children:"● Self-reported"}),t.jsx(a,{value:"tier:anonymous",children:"○ Anonymous"})]}),d.length>0&&t.jsxs(g,{children:[t.jsx(x,{children:"By agent (this page)"}),d.map(n=>t.jsxs(a,{value:`agent:${n.key}`,children:[n.label," (",n.count,")"]},n.key))]})]})]})]})}}}export{M as u};
1
+ import{r as h,j as t,c as p}from"./index-CUZJ9Hf7.js";import{e as m,g as y,b as A}from"./agent_badge-CpLLrPir.js";import{L as v}from"./label-BOSmi_Ry.js";import{S,a as w,b as C,c as _,d as a,e as g,f as x}from"./select-vrMqzpPI.js";function b(o){if(!o||typeof o!="object")return null;const e=o;return e.agent_attribution&&typeof e.agent_attribution=="object"&&!Array.isArray(e.agent_attribution)?e.agent_attribution:e.provenance&&typeof e.provenance=="object"&&!Array.isArray(e.provenance)?e.provenance:null}function M(o){const[e,u]=h.useState({kind:"all"}),d=h.useMemo(()=>{const l=new Map;for(const i of o??[]){const r=m(b(i)),c=y(r);if(!c)continue;const n=A(r),s=l.get(c);s?s.count+=1:l.set(c,{label:n,count:1})}return[...l.entries()].map(([i,r])=>({key:i,label:r.label,count:r.count})).sort((i,r)=>r.count-i.count)},[o]);function j(l){return e.kind==="all"?l:l.filter(i=>{const r=m(b(i));return e.kind==="tier"?((r==null?void 0:r.attribution_tier)??"anonymous")===e.tier:y(r)===e.key})}return{filter:e,setFilter:u,filterRows:j,AgentFilterControl:({className:l})=>{const i=e.kind==="all"?"all":e.kind==="tier"?`tier:${e.tier}`:`agent:${e.key}`,r=e.kind==="agent"&&!d.some(n=>n.key===e.key);function c(n){if(n==="all")u({kind:"all"});else if(n.startsWith("tier:"))u({kind:"tier",tier:n.slice(5)});else if(n.startsWith("agent:")){const s=n.slice(6),f=d.find(k=>k.key===s);u({kind:"agent",key:s,label:(f==null?void 0:f.label)??(e.kind==="agent"&&e.key===s?e.label:s)})}}return t.jsxs("div",{className:p("flex flex-col gap-1.5",l),children:[t.jsx(v,{htmlFor:"agent-filter",className:"text-xs font-medium text-muted-foreground",children:"Agent"}),t.jsxs(S,{value:i,onValueChange:c,children:[t.jsx(w,{id:"agent-filter",className:"h-9 w-full min-w-[12rem] text-sm sm:w-auto",children:t.jsx(C,{placeholder:"All agents"})}),t.jsxs(_,{children:[t.jsx(a,{value:"all",children:"All agents"}),r&&e.kind==="agent"?t.jsxs(g,{children:[t.jsx(x,{children:"Currently selected"}),t.jsxs(a,{value:`agent:${e.key}`,className:"text-muted-foreground",children:[e.label," (not on this page)"]})]}):null,t.jsxs(g,{children:[t.jsx(x,{children:"By trust tier"}),t.jsx(a,{value:"tier:hardware",children:"◆ Hardware-verified"}),t.jsx(a,{value:"tier:software",children:"◇ Software-verified"}),t.jsx(a,{value:"tier:unverified_client",children:"● Self-reported"}),t.jsx(a,{value:"tier:anonymous",children:"○ Anonymous"})]}),d.length>0&&t.jsxs(g,{children:[t.jsx(x,{children:"By agent (this page)"}),d.map(n=>t.jsxs(a,{value:`agent:${n.key}`,children:[n.label," (",n.count,")"]},n.key))]})]})]})]})}}}export{M as u};
@@ -1 +1 @@
1
- import{b0 as k,r as p,j as e,b4 as w,Q as C,a0 as f,Z as m,bP as _,f as d,L as E,A as P}from"./index-BCtrS-q-.js";import{P as c}from"./page_shell-Cn1X2P68.js";import{C as v,a as N,b,c as y}from"./card-VEtVMpk8.js";import{A as G}from"./agent_grant_form-COhga3hy.js";import{e as I,f as L,g as Q}from"./use_agents-CRv6rDsh.js";import{s as R,a as z}from"./query_loading-DK60fuqy.js";import{Q as B}from"./query_refresh_indicator-DKC1GoKi.js";import"./label-SnZK36YD.js";import"./textarea-d76JXYw-.js";import"./select-Dj5oFvji.js";import"./index-Cjh2Ys9W.js";function D(o){switch(o){case"active":return"default";case"suspended":return"secondary";case"revoked":return"destructive";default:return"outline"}}function W(){const{id:o}=k(),l=o??"",s=I(l),x=L(l),i=Q(l),[A,h]=p.useState(null),[g,j]=p.useState(null);if(R(s))return e.jsx(c,{title:"Agent grant",children:e.jsx(w,{})});if(s.error)return e.jsx(c,{title:"Agent grant",children:e.jsx(C,{title:"Could not load grant",children:s.error.message})});if(!s.data)return e.jsx(c,{title:"Agent grant",children:e.jsx("div",{className:"text-muted-foreground",children:"Grant not found."})});const t=s.data.grant,a=t.status;async function S(r){h(null);try{await x.mutateAsync(r)}catch(n){h(n instanceof Error?n.message:"Failed to update grant")}}async function u(r){j(null);try{await i.mutateAsync(r)}catch(n){j(n instanceof Error?n.message:"Failed to change grant status")}}return e.jsx(c,{title:t.label,description:e.jsxs("span",{children:["Edit the grant in place; status transitions are tracked as explicit observations on this ",e.jsx("code",{className:"font-mono",children:"agent_grant"})," ","entity. Identity changes are picked up by AAuth admission within one cache TTL."]}),actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[z(s)?e.jsx(B,{}):null,e.jsx(d,{asChild:!0,variant:"ghost",size:"sm",children:e.jsxs(E,{to:"/agents/grants",children:[e.jsx(P,{className:"mr-1 h-4 w-4"}),"All grants"]})})]}),children:e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsxs(v,{className:"lg:col-span-2",children:[e.jsx(N,{children:e.jsx(b,{children:"Identity & capabilities"})}),e.jsx(y,{children:e.jsx(G,{initial:t,submitLabel:"Save changes",isSubmitting:x.isPending,errorMessage:A,onSubmit:r=>S(r)})})]}),e.jsxs(v,{children:[e.jsxs(N,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(b,{children:"Status"}),e.jsx(f,{variant:D(a),children:a})]}),e.jsxs(y,{className:"space-y-4",children:[e.jsxs("dl",{className:"grid grid-cols-1 gap-x-4 gap-y-2 text-sm sm:grid-cols-[max-content_1fr]",children:[e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Grant ID"}),e.jsx("dd",{className:"break-all font-mono",children:t.grant_id})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Owner user"}),e.jsx("dd",{className:"break-all font-mono",children:t.user_id})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Created"}),e.jsx("dd",{children:m(t.created_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last used"}),e.jsx("dd",{children:m(t.last_used_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last observation"}),e.jsx("dd",{children:m(t.last_observation_at??void 0)})]}),t.import_source&&e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Import source"}),e.jsx("dd",{children:e.jsx(f,{variant:"outline",children:t.import_source})})]})]}),e.jsx(_,{}),e.jsxs("div",{className:"grid gap-2",children:[a!=="active"&&e.jsx(d,{type:"button",variant:"default",size:"sm",disabled:i.isPending,onClick:()=>u("active"),children:"Restore to active"}),a==="active"&&e.jsx(d,{type:"button",variant:"secondary",size:"sm",disabled:i.isPending,onClick:()=>u("suspended"),children:"Suspend"}),a!=="revoked"&&e.jsx(d,{type:"button",variant:"destructive",size:"sm",disabled:i.isPending,onClick:()=>u("revoked"),children:"Revoke"})]}),g&&e.jsx("p",{className:"text-sm text-destructive",role:"alert",children:g})]})]})]})})}export{W as default};
1
+ import{b0 as k,r as p,j as e,b4 as w,Q as C,a0 as f,Z as m,bP as _,f as d,L as E,A as P}from"./index-CUZJ9Hf7.js";import{P as c}from"./page_shell-Cnle3Z6i.js";import{C as v,a as N,b,c as y}from"./card-Caif065r.js";import{A as G}from"./agent_grant_form-bwLmrrpe.js";import{e as I,f as L,g as Q}from"./use_agents-DNelJZjI.js";import{s as R,a as z}from"./query_loading-DK60fuqy.js";import{Q as B}from"./query_refresh_indicator-DKC1GoKi.js";import"./label-BOSmi_Ry.js";import"./textarea-BNtVyu5K.js";import"./select-vrMqzpPI.js";import"./index-DKrPgz7x.js";function D(o){switch(o){case"active":return"default";case"suspended":return"secondary";case"revoked":return"destructive";default:return"outline"}}function W(){const{id:o}=k(),l=o??"",s=I(l),x=L(l),i=Q(l),[A,h]=p.useState(null),[g,j]=p.useState(null);if(R(s))return e.jsx(c,{title:"Agent grant",children:e.jsx(w,{})});if(s.error)return e.jsx(c,{title:"Agent grant",children:e.jsx(C,{title:"Could not load grant",children:s.error.message})});if(!s.data)return e.jsx(c,{title:"Agent grant",children:e.jsx("div",{className:"text-muted-foreground",children:"Grant not found."})});const t=s.data.grant,a=t.status;async function S(r){h(null);try{await x.mutateAsync(r)}catch(n){h(n instanceof Error?n.message:"Failed to update grant")}}async function u(r){j(null);try{await i.mutateAsync(r)}catch(n){j(n instanceof Error?n.message:"Failed to change grant status")}}return e.jsx(c,{title:t.label,description:e.jsxs("span",{children:["Edit the grant in place; status transitions are tracked as explicit observations on this ",e.jsx("code",{className:"font-mono",children:"agent_grant"})," ","entity. Identity changes are picked up by AAuth admission within one cache TTL."]}),actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[z(s)?e.jsx(B,{}):null,e.jsx(d,{asChild:!0,variant:"ghost",size:"sm",children:e.jsxs(E,{to:"/agents/grants",children:[e.jsx(P,{className:"mr-1 h-4 w-4"}),"All grants"]})})]}),children:e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsxs(v,{className:"lg:col-span-2",children:[e.jsx(N,{children:e.jsx(b,{children:"Identity & capabilities"})}),e.jsx(y,{children:e.jsx(G,{initial:t,submitLabel:"Save changes",isSubmitting:x.isPending,errorMessage:A,onSubmit:r=>S(r)})})]}),e.jsxs(v,{children:[e.jsxs(N,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(b,{children:"Status"}),e.jsx(f,{variant:D(a),children:a})]}),e.jsxs(y,{className:"space-y-4",children:[e.jsxs("dl",{className:"grid grid-cols-1 gap-x-4 gap-y-2 text-sm sm:grid-cols-[max-content_1fr]",children:[e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Grant ID"}),e.jsx("dd",{className:"break-all font-mono",children:t.grant_id})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Owner user"}),e.jsx("dd",{className:"break-all font-mono",children:t.user_id})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Created"}),e.jsx("dd",{children:m(t.created_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last used"}),e.jsx("dd",{children:m(t.last_used_at??void 0)})]}),e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Last observation"}),e.jsx("dd",{children:m(t.last_observation_at??void 0)})]}),t.import_source&&e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Import source"}),e.jsx("dd",{children:e.jsx(f,{variant:"outline",children:t.import_source})})]})]}),e.jsx(_,{}),e.jsxs("div",{className:"grid gap-2",children:[a!=="active"&&e.jsx(d,{type:"button",variant:"default",size:"sm",disabled:i.isPending,onClick:()=>u("active"),children:"Restore to active"}),a==="active"&&e.jsx(d,{type:"button",variant:"secondary",size:"sm",disabled:i.isPending,onClick:()=>u("suspended"),children:"Suspend"}),a!=="revoked"&&e.jsx(d,{type:"button",variant:"destructive",size:"sm",disabled:i.isPending,onClick:()=>u("revoked"),children:"Revoke"})]}),g&&e.jsx("p",{className:"text-sm text-destructive",role:"alert",children:g})]})]})]})})}export{W as default};
@@ -1 +1 @@
1
- import{r as f,j as e,ag as d,f as n,bc as I,aP as T}from"./index-BCtrS-q-.js";import{L as x}from"./label-SnZK36YD.js";import{T as k}from"./textarea-d76JXYw-.js";import{S as E,a as L,b as P,c as z,d as R}from"./select-Dj5oFvji.js";const B=[{value:"store_structured",label:"store_structured"},{value:"create_relationship",label:"create_relationship"},{value:"correct",label:"correct"},{value:"retrieve",label:"retrieve"}];function N(){return{op:"store_structured",entity_types:["*"]}}function v(a,s){return{label:(a==null?void 0:a.label)??(s==null?void 0:s.label)??"",match_sub:(a==null?void 0:a.match_sub)??(s==null?void 0:s.sub)??"",match_iss:(a==null?void 0:a.match_iss)??(s==null?void 0:s.iss)??"",match_thumbprint:(a==null?void 0:a.match_thumbprint)??(s==null?void 0:s.thumbprint)??"",notes:(a==null?void 0:a.notes)??"",capabilities:a!=null&&a.capabilities&&a.capabilities.length>0?a.capabilities.map(u=>({op:u.op,entity_types:u.entity_types.length>0?[...u.entity_types]:["*"]})):[N()]}}function G({initial:a,identityHint:s,submitLabel:u,showCancel:C,onCancel:S,isSubmitting:g,errorMessage:j,onSubmit:w}){const[c,p]=f.useState(()=>v(a,s));f.useEffect(()=>{p(v(a,s))},[a==null?void 0:a.grant_id,s==null?void 0:s.sub,s==null?void 0:s.thumbprint,s==null?void 0:s.iss,s==null?void 0:s.label]);function b(r,t){p(l=>({...l,[r]:t}))}function _(r,t){p(l=>({...l,capabilities:l.capabilities.map((o,m)=>m===r?t:o)}))}function A(r){p(t=>({...t,capabilities:t.capabilities.filter((l,o)=>o!==r)}))}function y(){p(r=>({...r,capabilities:[...r.capabilities,N()]}))}function F(r){r.preventDefault();const t=m=>{const h=m.trim();return h===""?null:h},l=c.capabilities.map(m=>({op:m.op,entity_types:(Array.isArray(m.entity_types)?m.entity_types:[]).map(h=>h.trim()).filter(h=>h.length>0)})),o={label:c.label.trim(),capabilities:l,match_sub:t(c.match_sub),match_iss:t(c.match_iss),match_thumbprint:t(c.match_thumbprint),notes:t(c.notes)};w(o)}return e.jsxs("form",{onSubmit:F,className:"space-y-5",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(x,{htmlFor:"grant-label",children:"Label"}),e.jsx(d,{id:"grant-label",required:!0,value:c.label,onChange:r=>b("label",r.target.value),placeholder:"e.g. Cursor on macbook-pro"})]}),e.jsxs("fieldset",{className:"grid gap-2 rounded-md border p-3",children:[e.jsx("legend",{className:"px-1 text-sm font-medium",children:"Identity match"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"At least one of match_sub or match_thumbprint must be set. When match_iss is set, both sub and iss must match."}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-sub",className:"text-xs",children:"match_sub"}),e.jsx(d,{id:"grant-sub",value:c.match_sub,onChange:r=>b("match_sub",r.target.value),placeholder:"aauth subject"})]}),e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-iss",className:"text-xs",children:"match_iss"}),e.jsx(d,{id:"grant-iss",value:c.match_iss,onChange:r=>b("match_iss",r.target.value),placeholder:"aauth issuer (optional)"})]})]}),e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-thumb",className:"text-xs",children:"match_thumbprint"}),e.jsx(d,{id:"grant-thumb",value:c.match_thumbprint,onChange:r=>b("match_thumbprint",r.target.value),placeholder:"RFC 7638 JWK thumbprint",className:"font-mono"})]})]}),e.jsxs("fieldset",{className:"grid gap-3 rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("legend",{className:"px-1 text-sm font-medium",children:"Capabilities"}),e.jsxs(n,{type:"button",variant:"ghost",size:"sm",onClick:y,children:[e.jsx(I,{className:"mr-1 h-4 w-4"}),"Add row"]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Each row authorizes one op on a list of entity types. Use"," ",e.jsx("code",{className:"font-mono",children:"*"})," to widen to any non-protected entity type."]}),e.jsx("div",{className:"space-y-2",children:c.capabilities.map((r,t)=>e.jsxs("div",{className:"grid gap-2 rounded border p-2 sm:grid-cols-[180px_1fr_auto]",children:[e.jsxs(E,{value:r.op,onValueChange:l=>_(t,{...r,op:l}),children:[e.jsx(L,{children:e.jsx(P,{})}),e.jsx(z,{children:B.map(l=>e.jsx(R,{value:l.value,children:l.label},l.value))})]}),e.jsx(d,{value:r.entity_types.join(", "),onChange:l=>_(t,{...r,entity_types:l.target.value.split(",").map(o=>o.trim()).filter(o=>o.length>0)}),placeholder:"entity_type, entity_type, * (any)",className:"font-mono"}),e.jsx(n,{type:"button",variant:"ghost",size:"icon",onClick:()=>A(t),disabled:c.capabilities.length<=1,"aria-label":"Remove capability",children:e.jsx(T,{className:"h-4 w-4"})})]},t))})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(x,{htmlFor:"grant-notes",children:"Notes"}),e.jsx(k,{id:"grant-notes",value:c.notes,onChange:r=>b("notes",r.target.value),placeholder:"Optional context for this grant (machine, owner, expiry…)",rows:3})]}),j&&e.jsx("p",{className:"text-sm text-destructive",role:"alert",children:j}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[C&&e.jsx(n,{type:"button",variant:"ghost",onClick:S,disabled:g,children:"Cancel"}),e.jsx(n,{type:"submit",disabled:g,children:g?"Saving…":u})]})]})}export{G as A};
1
+ import{r as f,j as e,ag as d,f as n,bc as I,aP as T}from"./index-CUZJ9Hf7.js";import{L as x}from"./label-BOSmi_Ry.js";import{T as k}from"./textarea-BNtVyu5K.js";import{S as E,a as L,b as P,c as z,d as R}from"./select-vrMqzpPI.js";const B=[{value:"store_structured",label:"store_structured"},{value:"create_relationship",label:"create_relationship"},{value:"correct",label:"correct"},{value:"retrieve",label:"retrieve"}];function N(){return{op:"store_structured",entity_types:["*"]}}function v(a,s){return{label:(a==null?void 0:a.label)??(s==null?void 0:s.label)??"",match_sub:(a==null?void 0:a.match_sub)??(s==null?void 0:s.sub)??"",match_iss:(a==null?void 0:a.match_iss)??(s==null?void 0:s.iss)??"",match_thumbprint:(a==null?void 0:a.match_thumbprint)??(s==null?void 0:s.thumbprint)??"",notes:(a==null?void 0:a.notes)??"",capabilities:a!=null&&a.capabilities&&a.capabilities.length>0?a.capabilities.map(u=>({op:u.op,entity_types:u.entity_types.length>0?[...u.entity_types]:["*"]})):[N()]}}function G({initial:a,identityHint:s,submitLabel:u,showCancel:C,onCancel:S,isSubmitting:g,errorMessage:j,onSubmit:w}){const[c,p]=f.useState(()=>v(a,s));f.useEffect(()=>{p(v(a,s))},[a==null?void 0:a.grant_id,s==null?void 0:s.sub,s==null?void 0:s.thumbprint,s==null?void 0:s.iss,s==null?void 0:s.label]);function b(r,t){p(l=>({...l,[r]:t}))}function _(r,t){p(l=>({...l,capabilities:l.capabilities.map((o,m)=>m===r?t:o)}))}function A(r){p(t=>({...t,capabilities:t.capabilities.filter((l,o)=>o!==r)}))}function y(){p(r=>({...r,capabilities:[...r.capabilities,N()]}))}function F(r){r.preventDefault();const t=m=>{const h=m.trim();return h===""?null:h},l=c.capabilities.map(m=>({op:m.op,entity_types:(Array.isArray(m.entity_types)?m.entity_types:[]).map(h=>h.trim()).filter(h=>h.length>0)})),o={label:c.label.trim(),capabilities:l,match_sub:t(c.match_sub),match_iss:t(c.match_iss),match_thumbprint:t(c.match_thumbprint),notes:t(c.notes)};w(o)}return e.jsxs("form",{onSubmit:F,className:"space-y-5",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(x,{htmlFor:"grant-label",children:"Label"}),e.jsx(d,{id:"grant-label",required:!0,value:c.label,onChange:r=>b("label",r.target.value),placeholder:"e.g. Cursor on macbook-pro"})]}),e.jsxs("fieldset",{className:"grid gap-2 rounded-md border p-3",children:[e.jsx("legend",{className:"px-1 text-sm font-medium",children:"Identity match"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"At least one of match_sub or match_thumbprint must be set. When match_iss is set, both sub and iss must match."}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-sub",className:"text-xs",children:"match_sub"}),e.jsx(d,{id:"grant-sub",value:c.match_sub,onChange:r=>b("match_sub",r.target.value),placeholder:"aauth subject"})]}),e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-iss",className:"text-xs",children:"match_iss"}),e.jsx(d,{id:"grant-iss",value:c.match_iss,onChange:r=>b("match_iss",r.target.value),placeholder:"aauth issuer (optional)"})]})]}),e.jsxs("div",{className:"grid gap-1.5",children:[e.jsx(x,{htmlFor:"grant-thumb",className:"text-xs",children:"match_thumbprint"}),e.jsx(d,{id:"grant-thumb",value:c.match_thumbprint,onChange:r=>b("match_thumbprint",r.target.value),placeholder:"RFC 7638 JWK thumbprint",className:"font-mono"})]})]}),e.jsxs("fieldset",{className:"grid gap-3 rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("legend",{className:"px-1 text-sm font-medium",children:"Capabilities"}),e.jsxs(n,{type:"button",variant:"ghost",size:"sm",onClick:y,children:[e.jsx(I,{className:"mr-1 h-4 w-4"}),"Add row"]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Each row authorizes one op on a list of entity types. Use"," ",e.jsx("code",{className:"font-mono",children:"*"})," to widen to any non-protected entity type."]}),e.jsx("div",{className:"space-y-2",children:c.capabilities.map((r,t)=>e.jsxs("div",{className:"grid gap-2 rounded border p-2 sm:grid-cols-[180px_1fr_auto]",children:[e.jsxs(E,{value:r.op,onValueChange:l=>_(t,{...r,op:l}),children:[e.jsx(L,{children:e.jsx(P,{})}),e.jsx(z,{children:B.map(l=>e.jsx(R,{value:l.value,children:l.label},l.value))})]}),e.jsx(d,{value:r.entity_types.join(", "),onChange:l=>_(t,{...r,entity_types:l.target.value.split(",").map(o=>o.trim()).filter(o=>o.length>0)}),placeholder:"entity_type, entity_type, * (any)",className:"font-mono"}),e.jsx(n,{type:"button",variant:"ghost",size:"icon",onClick:()=>A(t),disabled:c.capabilities.length<=1,"aria-label":"Remove capability",children:e.jsx(T,{className:"h-4 w-4"})})]},t))})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(x,{htmlFor:"grant-notes",children:"Notes"}),e.jsx(k,{id:"grant-notes",value:c.notes,onChange:r=>b("notes",r.target.value),placeholder:"Optional context for this grant (machine, owner, expiry…)",rows:3})]}),j&&e.jsx("p",{className:"text-sm text-destructive",role:"alert",children:j}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[C&&e.jsx(n,{type:"button",variant:"ghost",onClick:S,disabled:g,children:"Cancel"}),e.jsx(n,{type:"submit",disabled:g,children:g?"Saving…":u})]})]})}export{G as A};
@@ -1 +1 @@
1
- import{aa as w,r,j as t,ah as _,Q as N,f as p,L as x,A as D,bc as k,a0 as b,Z as Q}from"./index-BCtrS-q-.js";import{P as T}from"./page_shell-Cn1X2P68.js";import{D as E}from"./data-table-DW3TzIhP.js";import{S as L,a as P,b as I,c as F,d as O}from"./select-Dj5oFvji.js";import{D as R,f as $,a as B,b as G,c as K,d as M}from"./dialog-DH8W3l6O.js";import{A as V}from"./agent_grant_form-COhga3hy.js";import{s as q,a as H}from"./query_loading-DK60fuqy.js";import{Q as z}from"./query_refresh_indicator-DKC1GoKi.js";import{u as U,d as Z}from"./use_agents-CRv6rDsh.js";import"./index-Cjh2Ys9W.js";import"./label-SnZK36YD.js";import"./textarea-d76JXYw-.js";const J=[{value:"active",label:"Active"},{value:"all",label:"All"},{value:"suspended",label:"Suspended"},{value:"revoked",label:"Revoked"}];function W(s){switch(s){case"active":return"default";case"suspended":return"secondary";case"revoked":return"destructive";default:return"outline"}}function X(s){return s.match_thumbprint?`thumb:${s.match_thumbprint}`:s.match_sub&&s.match_iss?`sub:${s.match_sub} (iss:${s.match_iss})`:s.match_sub?`sub:${s.match_sub}`:"—"}function Y(s){return s.capabilities.length?s.capabilities.map(i=>i.op).join(", "):"0 ops"}function me(){var g;const[s]=w(),[i,f]=r.useState(()=>{const e=s.get("status");return e==="active"||e==="suspended"||e==="revoked"||e==="all"?e:"active"}),[o,j]=r.useState(()=>s.get("q")??""),[d,l]=r.useState(!1),[v,m]=r.useState(null),a=U({status:i,q:o.trim()||void 0}),c=Z(),h=r.useMemo(()=>{const e=s.get("promote");return e!=="1"&&e!=="true"?null:{sub:s.get("sub"),iss:s.get("iss"),thumbprint:s.get("thumbprint"),label:s.get("label")}},[s]),u=((g=a.data)==null?void 0:g.grants)??[],y=r.useMemo(()=>({value:o,onValueChange:e=>{j(e)},placeholder:"Search by label, subject, thumbprint…",ariaLabel:"Search agent grants"}),[o]),S=[{header:"Label",accessorKey:"label",cell:({row:e})=>t.jsx(x,{to:`/agents/grants/${encodeURIComponent(e.original.grant_id)}`,className:"font-medium text-foreground hover:underline",children:e.original.label})},{header:"Status",accessorKey:"status",cell:({row:e})=>t.jsx(b,{variant:W(e.original.status),children:e.original.status})},{header:"Identity",id:"identity",cell:({row:e})=>t.jsx("span",{className:"break-all font-mono text-xs",children:X(e.original)})},{header:"Capabilities",id:"capabilities",cell:({row:e})=>Y(e.original)},{header:"Last used",accessorKey:"last_used_at",cell:({getValue:e})=>Q(e()??void 0)},{header:"Source",accessorKey:"import_source",cell:({getValue:e})=>{const n=e();return n?t.jsx(b,{variant:"outline",children:n}):"—"}}];async function A(e){m(null);try{await c.mutateAsync(e),l(!1)}catch(n){const C=n instanceof Error?n.message:"Failed to create grant";m(C)}}return h&&!d&&!c.isSuccess&&l(!0),t.jsxs(T,{title:"Agent grants",description:t.jsxs("span",{children:["First-class records that admit a verified AAuth identity as the grant's owning user. Every grant is its own entity (entity_type"," ",t.jsx("code",{className:"font-mono",children:"agent_grant"}),") so observation history doubles as the audit log."]}),search:y,actions:t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[H(a)?t.jsx(z,{}):null,t.jsx(p,{asChild:!0,variant:"ghost",size:"sm",children:t.jsxs(x,{to:"/agents",children:[t.jsx(D,{className:"mr-1 h-4 w-4"}),"Agents"]})}),t.jsxs(R,{open:d,onOpenChange:l,children:[t.jsx($,{asChild:!0,children:t.jsxs(p,{size:"sm",children:[t.jsx(k,{className:"mr-1 h-4 w-4"}),"New grant"]})}),t.jsxs(B,{className:"max-w-2xl",children:[t.jsxs(G,{children:[t.jsx(K,{children:"Create agent grant"}),t.jsx(M,{children:"Admit one AAuth identity as your user with the listed capabilities."})]}),t.jsx(V,{identityHint:h??void 0,submitLabel:"Create grant",isSubmitting:c.isPending,errorMessage:v,showCancel:!0,onCancel:()=>l(!1),onSubmit:e=>A(e)})]})]})]}),children:[t.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[t.jsxs("div",{className:"grid gap-1.5",children:[t.jsx("span",{className:"text-xs text-muted-foreground",children:"Status"}),t.jsxs(L,{value:i,onValueChange:e=>f(e),children:[t.jsx(P,{className:"w-[160px]",children:t.jsx(I,{})}),t.jsx(F,{children:J.map(e=>t.jsx(O,{value:e.value,children:e.label},e.value))})]})]}),a.data&&t.jsxs("p",{className:"text-sm text-muted-foreground",children:[u.length," grant",u.length===1?"":"s"]})]}),q(a)?t.jsx(_,{rows:8,cols:6}):a.error?t.jsx(N,{title:"Could not load agent grants",children:a.error.message}):t.jsx(E,{columns:S,data:u})]})}export{me as default};
1
+ import{aa as w,r,j as t,ah as _,Q as N,f as p,L as x,A as D,bc as k,a0 as b,Z as Q}from"./index-CUZJ9Hf7.js";import{P as T}from"./page_shell-Cnle3Z6i.js";import{D as E}from"./data-table-CGnZkL3S.js";import{S as L,a as P,b as I,c as F,d as O}from"./select-vrMqzpPI.js";import{D as R,f as $,a as B,b as G,c as K,d as M}from"./dialog-BL53sB1T.js";import{A as V}from"./agent_grant_form-bwLmrrpe.js";import{s as q,a as H}from"./query_loading-DK60fuqy.js";import{Q as z}from"./query_refresh_indicator-DKC1GoKi.js";import{u as U,d as Z}from"./use_agents-DNelJZjI.js";import"./index-DKrPgz7x.js";import"./label-BOSmi_Ry.js";import"./textarea-BNtVyu5K.js";const J=[{value:"active",label:"Active"},{value:"all",label:"All"},{value:"suspended",label:"Suspended"},{value:"revoked",label:"Revoked"}];function W(s){switch(s){case"active":return"default";case"suspended":return"secondary";case"revoked":return"destructive";default:return"outline"}}function X(s){return s.match_thumbprint?`thumb:${s.match_thumbprint}`:s.match_sub&&s.match_iss?`sub:${s.match_sub} (iss:${s.match_iss})`:s.match_sub?`sub:${s.match_sub}`:"—"}function Y(s){return s.capabilities.length?s.capabilities.map(i=>i.op).join(", "):"0 ops"}function me(){var g;const[s]=w(),[i,f]=r.useState(()=>{const e=s.get("status");return e==="active"||e==="suspended"||e==="revoked"||e==="all"?e:"active"}),[o,j]=r.useState(()=>s.get("q")??""),[d,l]=r.useState(!1),[v,m]=r.useState(null),a=U({status:i,q:o.trim()||void 0}),c=Z(),h=r.useMemo(()=>{const e=s.get("promote");return e!=="1"&&e!=="true"?null:{sub:s.get("sub"),iss:s.get("iss"),thumbprint:s.get("thumbprint"),label:s.get("label")}},[s]),u=((g=a.data)==null?void 0:g.grants)??[],y=r.useMemo(()=>({value:o,onValueChange:e=>{j(e)},placeholder:"Search by label, subject, thumbprint…",ariaLabel:"Search agent grants"}),[o]),S=[{header:"Label",accessorKey:"label",cell:({row:e})=>t.jsx(x,{to:`/agents/grants/${encodeURIComponent(e.original.grant_id)}`,className:"font-medium text-foreground hover:underline",children:e.original.label})},{header:"Status",accessorKey:"status",cell:({row:e})=>t.jsx(b,{variant:W(e.original.status),children:e.original.status})},{header:"Identity",id:"identity",cell:({row:e})=>t.jsx("span",{className:"break-all font-mono text-xs",children:X(e.original)})},{header:"Capabilities",id:"capabilities",cell:({row:e})=>Y(e.original)},{header:"Last used",accessorKey:"last_used_at",cell:({getValue:e})=>Q(e()??void 0)},{header:"Source",accessorKey:"import_source",cell:({getValue:e})=>{const n=e();return n?t.jsx(b,{variant:"outline",children:n}):"—"}}];async function A(e){m(null);try{await c.mutateAsync(e),l(!1)}catch(n){const C=n instanceof Error?n.message:"Failed to create grant";m(C)}}return h&&!d&&!c.isSuccess&&l(!0),t.jsxs(T,{title:"Agent grants",description:t.jsxs("span",{children:["First-class records that admit a verified AAuth identity as the grant's owning user. Every grant is its own entity (entity_type"," ",t.jsx("code",{className:"font-mono",children:"agent_grant"}),") so observation history doubles as the audit log."]}),search:y,actions:t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[H(a)?t.jsx(z,{}):null,t.jsx(p,{asChild:!0,variant:"ghost",size:"sm",children:t.jsxs(x,{to:"/agents",children:[t.jsx(D,{className:"mr-1 h-4 w-4"}),"Agents"]})}),t.jsxs(R,{open:d,onOpenChange:l,children:[t.jsx($,{asChild:!0,children:t.jsxs(p,{size:"sm",children:[t.jsx(k,{className:"mr-1 h-4 w-4"}),"New grant"]})}),t.jsxs(B,{className:"max-w-2xl",children:[t.jsxs(G,{children:[t.jsx(K,{children:"Create agent grant"}),t.jsx(M,{children:"Admit one AAuth identity as your user with the listed capabilities."})]}),t.jsx(V,{identityHint:h??void 0,submitLabel:"Create grant",isSubmitting:c.isPending,errorMessage:v,showCancel:!0,onCancel:()=>l(!1),onSubmit:e=>A(e)})]})]})]}),children:[t.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[t.jsxs("div",{className:"grid gap-1.5",children:[t.jsx("span",{className:"text-xs text-muted-foreground",children:"Status"}),t.jsxs(L,{value:i,onValueChange:e=>f(e),children:[t.jsx(P,{className:"w-[160px]",children:t.jsx(I,{})}),t.jsx(F,{children:J.map(e=>t.jsx(O,{value:e.value,children:e.label},e.value))})]})]}),a.data&&t.jsxs("p",{className:"text-sm text-muted-foreground",children:[u.length," grant",u.length===1?"":"s"]})]}),q(a)?t.jsx(_,{rows:8,cols:6}):a.error?t.jsx(N,{title:"Could not load agent grants",children:a.error.message}):t.jsx(E,{columns:S,data:u})]})}export{me as default};
@@ -1 +1 @@
1
- import{r as g,j as e,b9 as b,aw as f,ax as y,ay as j,a0 as m,L as v,ag as $,ah as I,Q as L,Z as N}from"./index-BCtrS-q-.js";import{P}from"./page_shell-Cn1X2P68.js";import{D as S}from"./data-table-DW3TzIhP.js";import{b as k,f as A,a as D}from"./agent_grant_key-BDL9K-EB.js";import{A as Q}from"./agent_badge-C33tCpxh.js";import{s as E,a as w}from"./query_loading-DK60fuqy.js";import{Q as O}from"./query_refresh_indicator-DKC1GoKi.js";import{a as G,u as R}from"./use_agents-CRv6rDsh.js";function K({agentKey:i,grants:o}){const n=g.useMemo(()=>k(o,i),[o,i]);if(n.length===0){const s=i==="anonymous",l=s?"—":"None",u=s?"This row is the catch-all anonymous bucket: there is no thumbprint or JWT subject to match against agent_grant rows. Anonymous-tier writers can still appear when policy allows; grants are keyed to concrete identities.":"No agent_grant in this workspace matches this directory key (thumbprint or subject). That is normal for most activity: issues, conversations, and conversation messages are usually not admission-gated. Grants mainly authorize mutating protected governance types (for example agent_grant entities) for agents that would otherwise be rejected on those paths.";return e.jsx(b,{delayDuration:250,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsx("span",{className:"cursor-help border-b border-dotted border-muted-foreground/35 text-muted-foreground text-sm",children:l})}),e.jsx(j,{side:"left",align:"start",className:"max-w-sm text-xs leading-relaxed",children:u})]})})}const c=n.slice(0,3),r=n.length-c.length;return e.jsx(b,{delayDuration:200,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsxs("div",{className:"flex flex-wrap gap-1 max-w-[220px] cursor-help",children:[c.map(s=>e.jsx(m,{variant:s.status==="active"?"secondary":"outline",className:"max-w-[130px] truncate font-normal text-xs",title:`${s.label} (${s.status})`,children:s.label},s.grant_id)),r>0?e.jsxs(m,{variant:"outline",className:"font-normal text-xs",children:["+",r]}):null]})}),e.jsxs(j,{side:"left",align:"start",collisionPadding:16,className:"max-w-md p-0",children:[e.jsxs("div",{className:"border-b bg-popover px-3 py-2",children:[e.jsx("p",{className:"text-xs font-medium",children:"Admission grants for this identity"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 leading-snug",children:["These rows are ",e.jsx("strong",{className:"font-medium text-foreground",children:"capabilities"})," ","(allowed ops and entity types), not counts of writes. Match is by grant thumbprint or subject vs this directory ",e.jsx("code",{className:"text-[11px]",children:"agent_key"}),"."]})]}),e.jsx("ul",{className:"max-h-[min(50vh,16rem)] overflow-y-auto overscroll-contain space-y-2 px-3 py-2 text-xs",children:n.map(s=>e.jsxs("li",{className:"border-b border-border/60 pb-2 last:border-0 last:pb-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.label}),e.jsx(m,{variant:"outline",className:"text-[10px] font-normal",children:s.status}),s.linked_github_login&&e.jsxs("a",{href:`https://github.com/${s.linked_github_login}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-0.5 text-[10px] text-primary hover:underline",onClick:l=>l.stopPropagation(),children:["@",s.linked_github_login]})]}),e.jsx("p",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground break-all",children:A(s)})]},s.grant_id))})]})]})})}const M=[["product_feedback","Feedback"],["agent_grant","Grants"],["issue","Issues"]];function B({agent:i}){const o=i.observation_entity_type_counts;if(!o||Object.keys(o).length===0)return e.jsx("span",{className:"text-muted-foreground text-sm",children:"—"});const n=Object.entries(o).sort((r,s)=>s[1]-r[1]),c=M.map(([r,s])=>{const l=o[r];if(!l)return null;const u=`${l} observation${l===1?"":"s"} on ${r} entities (new observations for that entity type attributed to this agent)`;return e.jsxs(m,{variant:"outline",className:"font-normal shrink-0",title:u,children:[s,": ",l]},r)}).filter(Boolean);return e.jsx(b,{delayDuration:200,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsx("div",{className:"flex flex-wrap gap-1 max-w-[240px] cursor-help",children:c.length>0?c:e.jsxs(m,{variant:"secondary",className:"font-normal",children:[n.length," type",n.length===1?"":"s"]})})}),e.jsxs(j,{side:"left",align:"start",collisionPadding:16,className:"max-w-md p-0",children:[e.jsxs("div",{className:"border-b bg-popover px-3 py-2",children:[e.jsx("p",{className:"text-xs font-medium",children:"Observation count by target entity type"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 leading-snug",children:["Each value is how many ",e.jsx("strong",{className:"font-medium text-foreground",children:"observation"})," ","rows this agent stamped for entities of that ",e.jsx("code",{className:"text-[11px]",children:"entity_type"})," ","(history can add multiple observations per entity)."]})]}),e.jsx("div",{className:"max-h-[min(55vh,18rem)] overflow-y-auto overscroll-contain px-3 py-2",children:e.jsx("ul",{className:"space-y-0.5 text-xs",children:n.map(([r,s])=>e.jsxs("li",{className:"flex justify-between gap-4 font-mono leading-tight",children:[e.jsx("span",{className:"min-w-0 flex-1 text-muted-foreground break-all",title:r,children:r}),e.jsx("span",{className:"tabular-nums shrink-0 text-foreground",children:s})]},r))})})]})]})})}function x(i,o){return String(i[o]??0)}function V(){var _;const[i,o]=g.useState(""),n=G(),c=R({status:"all"}),r=g.useMemo(()=>{var t;return new Set((((t=n.data)==null?void 0:t.agents)??[]).map(a=>a.agent_key))},[n.data]),s=((_=c.data)==null?void 0:_.grants)??[],l=g.useMemo(()=>{var h;const t=((h=n.data)==null?void 0:h.agents)??[],a=i.trim().toLowerCase();return a?t.filter(d=>{const T=Object.keys(d.observation_entity_type_counts??{}),C=k(s,d.agent_key).map(p=>p.label);return[d.label,d.agent_thumbprint,d.agent_sub,d.client_name,d.client_version,d.agent_iss,d.agent_key,...T,...C].filter(Boolean).some(p=>p.toLowerCase().includes(a))}):t},[n.data,s,i]),u=[{header:"Agent",id:"agent",cell:({row:t})=>{const a=t.original;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{attribution:{attribution_tier:a.tier,client_name:a.client_name??void 0,client_version:a.client_version??void 0,agent_sub:a.agent_sub??void 0,agent_iss:a.agent_iss??void 0,agent_algorithm:a.agent_algorithm??void 0,agent_thumbprint:a.agent_thumbprint??void 0,agent_public_key:a.agent_public_key??void 0}}),e.jsx(v,{to:`/agents/${encodeURIComponent(a.agent_key)}`,className:"font-medium text-foreground hover:underline",children:a.label})]})}},{header:"Tier",accessorKey:"tier",cell:({getValue:t})=>e.jsx(m,{variant:"secondary",children:t()})},{header:()=>e.jsxs("span",{className:"block max-w-[9rem] leading-tight",children:["Writes by type",e.jsx("span",{className:"mt-0.5 block text-[11px] font-normal text-muted-foreground",children:"Observations → entity_type"})]}),id:"entity_usage",cell:({row:t})=>e.jsx(B,{agent:t.original})},{header:()=>e.jsxs("span",{className:"block max-w-[9rem] leading-tight",children:["Admission grants",e.jsx("span",{className:"mt-0.5 block text-[11px] font-normal text-muted-foreground",children:"Permissions (ops / types)"})]}),id:"admission_grants",cell:({row:t})=>e.jsx(K,{agentKey:t.original.agent_key,grants:s})},{header:"Total",accessorKey:"total_records"},{header:"Obs",id:"obs",cell:({row:t})=>x(t.original.record_counts,"observation")},{header:"Sources",id:"sources",cell:({row:t})=>x(t.original.record_counts,"source")},{header:"Rels",id:"rels",cell:({row:t})=>x(t.original.record_counts,"relationship")},{header:"Interp",id:"interp",cell:({row:t})=>x(t.original.record_counts,"interpretation")},{header:"Timeline",id:"timeline",cell:({row:t})=>x(t.original.record_counts,"timeline_event")},{header:"First seen",accessorKey:"first_seen_at",cell:({getValue:t})=>N(t())},{header:"Last seen",accessorKey:"last_seen_at",cell:({getValue:t})=>N(t())}];return e.jsxs(P,{title:"Agents",description:"Distinct writers from AAuth / clientInfo provenance. Writes by type = observation volume grouped by the target entity's entity_type (activity). Admission grants = capabilities bound to that identity (permission); the panel below is the same grant list in full.",actions:w(n)||w(c)?e.jsx(O,{}):void 0,children:[s.length>0?e.jsxs("div",{className:"mb-6 rounded-lg border border-border bg-muted/30 p-4 space-y-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:"Admission grants (permissioned operations)"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Each grant binds an identity (thumbprint or JWT subject) to allowed MCP-style operations (e.g. ",e.jsx("code",{className:"text-xs",children:"store"})," on ",e.jsx("code",{className:"text-xs",children:"agent_grant"}),"). Open the matching agent row to see their full write history."]}),e.jsx("ul",{className:"divide-y divide-border rounded-md border border-border bg-background text-sm",children:s.map(t=>{const a=D(t),h=a!=="anonymous"&&r.has(a);return e.jsxs("li",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1 px-3 py-2",children:[e.jsx("span",{className:"font-medium",children:t.label}),e.jsx(m,{variant:"outline",className:"text-xs font-normal",children:t.status}),e.jsx("span",{className:"text-xs text-muted-foreground font-mono truncate max-w-[min(100%,280px)]",children:t.match_thumbprint?`thumb:${t.match_thumbprint}`:t.match_sub?`sub:${t.match_sub}${t.match_iss?` @ ${t.match_iss}`:""}`:"—"}),e.jsx("span",{className:"text-xs text-muted-foreground w-full sm:w-auto sm:ml-auto",children:A(t)}),h?e.jsx(v,{to:`/agents/${encodeURIComponent(a)}`,className:"text-xs text-primary hover:underline shrink-0",children:"Agent directory →"}):null]},t.grant_id)})})]}):c.isSuccess?e.jsxs("p",{className:"mb-4 text-xs text-muted-foreground",children:["No admission grants configured. The Admission grants column will be empty; Writes by type still shows observation activity (including on ",e.jsx("code",{children:"agent_grant"})," entities if any)."]}):null,e.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[e.jsx($,{placeholder:"Search by name, subject, thumbprint…",value:i,onChange:t=>o(t.target.value),className:"w-[320px]"}),n.data&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:[n.data.total," agent",n.data.total===1?"":"s"]})]}),E(n)?e.jsx(I,{rows:12,cols:11}):n.error?e.jsx(L,{title:"Could not load agents",children:n.error.message}):e.jsx(S,{columns:u,data:l})]})}export{V as default};
1
+ import{r as g,j as e,b9 as b,aw as f,ax as y,ay as j,a0 as m,L as v,ag as $,ah as I,Q as L,Z as N}from"./index-CUZJ9Hf7.js";import{P}from"./page_shell-Cnle3Z6i.js";import{D as S}from"./data-table-CGnZkL3S.js";import{b as k,f as A,a as D}from"./agent_grant_key-BDL9K-EB.js";import{A as Q}from"./agent_badge-CpLLrPir.js";import{s as E,a as w}from"./query_loading-DK60fuqy.js";import{Q as O}from"./query_refresh_indicator-DKC1GoKi.js";import{a as G,u as R}from"./use_agents-DNelJZjI.js";function K({agentKey:i,grants:o}){const n=g.useMemo(()=>k(o,i),[o,i]);if(n.length===0){const s=i==="anonymous",l=s?"—":"None",u=s?"This row is the catch-all anonymous bucket: there is no thumbprint or JWT subject to match against agent_grant rows. Anonymous-tier writers can still appear when policy allows; grants are keyed to concrete identities.":"No agent_grant in this workspace matches this directory key (thumbprint or subject). That is normal for most activity: issues, conversations, and conversation messages are usually not admission-gated. Grants mainly authorize mutating protected governance types (for example agent_grant entities) for agents that would otherwise be rejected on those paths.";return e.jsx(b,{delayDuration:250,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsx("span",{className:"cursor-help border-b border-dotted border-muted-foreground/35 text-muted-foreground text-sm",children:l})}),e.jsx(j,{side:"left",align:"start",className:"max-w-sm text-xs leading-relaxed",children:u})]})})}const c=n.slice(0,3),r=n.length-c.length;return e.jsx(b,{delayDuration:200,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsxs("div",{className:"flex flex-wrap gap-1 max-w-[220px] cursor-help",children:[c.map(s=>e.jsx(m,{variant:s.status==="active"?"secondary":"outline",className:"max-w-[130px] truncate font-normal text-xs",title:`${s.label} (${s.status})`,children:s.label},s.grant_id)),r>0?e.jsxs(m,{variant:"outline",className:"font-normal text-xs",children:["+",r]}):null]})}),e.jsxs(j,{side:"left",align:"start",collisionPadding:16,className:"max-w-md p-0",children:[e.jsxs("div",{className:"border-b bg-popover px-3 py-2",children:[e.jsx("p",{className:"text-xs font-medium",children:"Admission grants for this identity"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 leading-snug",children:["These rows are ",e.jsx("strong",{className:"font-medium text-foreground",children:"capabilities"})," ","(allowed ops and entity types), not counts of writes. Match is by grant thumbprint or subject vs this directory ",e.jsx("code",{className:"text-[11px]",children:"agent_key"}),"."]})]}),e.jsx("ul",{className:"max-h-[min(50vh,16rem)] overflow-y-auto overscroll-contain space-y-2 px-3 py-2 text-xs",children:n.map(s=>e.jsxs("li",{className:"border-b border-border/60 pb-2 last:border-0 last:pb-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.label}),e.jsx(m,{variant:"outline",className:"text-[10px] font-normal",children:s.status}),s.linked_github_login&&e.jsxs("a",{href:`https://github.com/${s.linked_github_login}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-0.5 text-[10px] text-primary hover:underline",onClick:l=>l.stopPropagation(),children:["@",s.linked_github_login]})]}),e.jsx("p",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground break-all",children:A(s)})]},s.grant_id))})]})]})})}const M=[["product_feedback","Feedback"],["agent_grant","Grants"],["issue","Issues"]];function B({agent:i}){const o=i.observation_entity_type_counts;if(!o||Object.keys(o).length===0)return e.jsx("span",{className:"text-muted-foreground text-sm",children:"—"});const n=Object.entries(o).sort((r,s)=>s[1]-r[1]),c=M.map(([r,s])=>{const l=o[r];if(!l)return null;const u=`${l} observation${l===1?"":"s"} on ${r} entities (new observations for that entity type attributed to this agent)`;return e.jsxs(m,{variant:"outline",className:"font-normal shrink-0",title:u,children:[s,": ",l]},r)}).filter(Boolean);return e.jsx(b,{delayDuration:200,children:e.jsxs(f,{children:[e.jsx(y,{asChild:!0,children:e.jsx("div",{className:"flex flex-wrap gap-1 max-w-[240px] cursor-help",children:c.length>0?c:e.jsxs(m,{variant:"secondary",className:"font-normal",children:[n.length," type",n.length===1?"":"s"]})})}),e.jsxs(j,{side:"left",align:"start",collisionPadding:16,className:"max-w-md p-0",children:[e.jsxs("div",{className:"border-b bg-popover px-3 py-2",children:[e.jsx("p",{className:"text-xs font-medium",children:"Observation count by target entity type"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 leading-snug",children:["Each value is how many ",e.jsx("strong",{className:"font-medium text-foreground",children:"observation"})," ","rows this agent stamped for entities of that ",e.jsx("code",{className:"text-[11px]",children:"entity_type"})," ","(history can add multiple observations per entity)."]})]}),e.jsx("div",{className:"max-h-[min(55vh,18rem)] overflow-y-auto overscroll-contain px-3 py-2",children:e.jsx("ul",{className:"space-y-0.5 text-xs",children:n.map(([r,s])=>e.jsxs("li",{className:"flex justify-between gap-4 font-mono leading-tight",children:[e.jsx("span",{className:"min-w-0 flex-1 text-muted-foreground break-all",title:r,children:r}),e.jsx("span",{className:"tabular-nums shrink-0 text-foreground",children:s})]},r))})})]})]})})}function x(i,o){return String(i[o]??0)}function V(){var _;const[i,o]=g.useState(""),n=G(),c=R({status:"all"}),r=g.useMemo(()=>{var t;return new Set((((t=n.data)==null?void 0:t.agents)??[]).map(a=>a.agent_key))},[n.data]),s=((_=c.data)==null?void 0:_.grants)??[],l=g.useMemo(()=>{var h;const t=((h=n.data)==null?void 0:h.agents)??[],a=i.trim().toLowerCase();return a?t.filter(d=>{const T=Object.keys(d.observation_entity_type_counts??{}),C=k(s,d.agent_key).map(p=>p.label);return[d.label,d.agent_thumbprint,d.agent_sub,d.client_name,d.client_version,d.agent_iss,d.agent_key,...T,...C].filter(Boolean).some(p=>p.toLowerCase().includes(a))}):t},[n.data,s,i]),u=[{header:"Agent",id:"agent",cell:({row:t})=>{const a=t.original;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{attribution:{attribution_tier:a.tier,client_name:a.client_name??void 0,client_version:a.client_version??void 0,agent_sub:a.agent_sub??void 0,agent_iss:a.agent_iss??void 0,agent_algorithm:a.agent_algorithm??void 0,agent_thumbprint:a.agent_thumbprint??void 0,agent_public_key:a.agent_public_key??void 0}}),e.jsx(v,{to:`/agents/${encodeURIComponent(a.agent_key)}`,className:"font-medium text-foreground hover:underline",children:a.label})]})}},{header:"Tier",accessorKey:"tier",cell:({getValue:t})=>e.jsx(m,{variant:"secondary",children:t()})},{header:()=>e.jsxs("span",{className:"block max-w-[9rem] leading-tight",children:["Writes by type",e.jsx("span",{className:"mt-0.5 block text-[11px] font-normal text-muted-foreground",children:"Observations → entity_type"})]}),id:"entity_usage",cell:({row:t})=>e.jsx(B,{agent:t.original})},{header:()=>e.jsxs("span",{className:"block max-w-[9rem] leading-tight",children:["Admission grants",e.jsx("span",{className:"mt-0.5 block text-[11px] font-normal text-muted-foreground",children:"Permissions (ops / types)"})]}),id:"admission_grants",cell:({row:t})=>e.jsx(K,{agentKey:t.original.agent_key,grants:s})},{header:"Total",accessorKey:"total_records"},{header:"Obs",id:"obs",cell:({row:t})=>x(t.original.record_counts,"observation")},{header:"Sources",id:"sources",cell:({row:t})=>x(t.original.record_counts,"source")},{header:"Rels",id:"rels",cell:({row:t})=>x(t.original.record_counts,"relationship")},{header:"Interp",id:"interp",cell:({row:t})=>x(t.original.record_counts,"interpretation")},{header:"Timeline",id:"timeline",cell:({row:t})=>x(t.original.record_counts,"timeline_event")},{header:"First seen",accessorKey:"first_seen_at",cell:({getValue:t})=>N(t())},{header:"Last seen",accessorKey:"last_seen_at",cell:({getValue:t})=>N(t())}];return e.jsxs(P,{title:"Agents",description:"Distinct writers from AAuth / clientInfo provenance. Writes by type = observation volume grouped by the target entity's entity_type (activity). Admission grants = capabilities bound to that identity (permission); the panel below is the same grant list in full.",actions:w(n)||w(c)?e.jsx(O,{}):void 0,children:[s.length>0?e.jsxs("div",{className:"mb-6 rounded-lg border border-border bg-muted/30 p-4 space-y-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:"Admission grants (permissioned operations)"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Each grant binds an identity (thumbprint or JWT subject) to allowed MCP-style operations (e.g. ",e.jsx("code",{className:"text-xs",children:"store"})," on ",e.jsx("code",{className:"text-xs",children:"agent_grant"}),"). Open the matching agent row to see their full write history."]}),e.jsx("ul",{className:"divide-y divide-border rounded-md border border-border bg-background text-sm",children:s.map(t=>{const a=D(t),h=a!=="anonymous"&&r.has(a);return e.jsxs("li",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1 px-3 py-2",children:[e.jsx("span",{className:"font-medium",children:t.label}),e.jsx(m,{variant:"outline",className:"text-xs font-normal",children:t.status}),e.jsx("span",{className:"text-xs text-muted-foreground font-mono truncate max-w-[min(100%,280px)]",children:t.match_thumbprint?`thumb:${t.match_thumbprint}`:t.match_sub?`sub:${t.match_sub}${t.match_iss?` @ ${t.match_iss}`:""}`:"—"}),e.jsx("span",{className:"text-xs text-muted-foreground w-full sm:w-auto sm:ml-auto",children:A(t)}),h?e.jsx(v,{to:`/agents/${encodeURIComponent(a)}`,className:"text-xs text-primary hover:underline shrink-0",children:"Agent directory →"}):null]},t.grant_id)})})]}):c.isSuccess?e.jsxs("p",{className:"mb-4 text-xs text-muted-foreground",children:["No admission grants configured. The Admission grants column will be empty; Writes by type still shows observation activity (including on ",e.jsx("code",{children:"agent_grant"})," entities if any)."]}):null,e.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[e.jsx($,{placeholder:"Search by name, subject, thumbprint…",value:i,onChange:t=>o(t.target.value),className:"w-[320px]"}),n.data&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:[n.data.total," agent",n.data.total===1?"":"s"]})]}),E(n)?e.jsx(I,{rows:12,cols:11}):n.error?e.jsx(L,{title:"Could not load agents",children:n.error.message}):e.jsx(S,{columns:u,data:l})]})}export{V as default};
@@ -1 +1 @@
1
- import{j as t,M as o,c4 as a,f as n,L as u}from"./index-BCtrS-q-.js";import{E as c}from"./empty_state-BGnkG3yO.js";function d(){return t.jsxs(t.Fragment,{children:[t.jsx(n,{asChild:!0,variant:"default",size:"sm",children:t.jsx("a",{href:"/?from=inspector",rel:"noopener",children:"Start sandbox session"})}),t.jsx(n,{asChild:!0,variant:"outline",size:"sm",children:t.jsx(u,{to:"/settings",children:"Open Settings"})})]})}function x({title:e="API not configured",description:i=o,actions:s,className:r}){return t.jsx(c,{icon:a,title:e,description:i,actions:s===void 0?t.jsx(d,{}):s,className:r})}export{x as A};
1
+ import{j as t,M as o,c4 as a,f as n,L as u}from"./index-CUZJ9Hf7.js";import{E as c}from"./empty_state-DrwUUQcO.js";function d(){return t.jsxs(t.Fragment,{children:[t.jsx(n,{asChild:!0,variant:"default",size:"sm",children:t.jsx("a",{href:"/?from=inspector",rel:"noopener",children:"Start sandbox session"})}),t.jsx(n,{asChild:!0,variant:"outline",size:"sm",children:t.jsx(u,{to:"/settings",children:"Open Settings"})})]})}function x({title:e="API not configured",description:i=o,actions:s,className:r}){return t.jsx(c,{icon:a,title:e,description:i,actions:s===void 0?t.jsx(d,{}):s,className:r})}export{x as A};