neotoma 0.20.0 → 0.21.2

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 (297) hide show
  1. package/dist/actions.d.ts.map +1 -1
  2. package/dist/actions.js +129 -47
  3. package/dist/actions.js.map +1 -1
  4. package/dist/cli/commands/db_migrate_env_split.d.ts.map +1 -1
  5. package/dist/cli/commands/db_migrate_env_split.js +5 -10
  6. package/dist/cli/commands/db_migrate_env_split.js.map +1 -1
  7. package/dist/cli/discovery.d.ts.map +1 -1
  8. package/dist/cli/discovery.js +34 -1
  9. package/dist/cli/discovery.js.map +1 -1
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js +329 -144
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/instance_scripts.d.ts +104 -0
  14. package/dist/cli/instance_scripts.d.ts.map +1 -0
  15. package/dist/cli/instance_scripts.js +189 -0
  16. package/dist/cli/instance_scripts.js.map +1 -0
  17. package/dist/cli/instance_skills.d.ts +85 -0
  18. package/dist/cli/instance_skills.d.ts.map +1 -0
  19. package/dist/cli/instance_skills.js +199 -0
  20. package/dist/cli/instance_skills.js.map +1 -0
  21. package/dist/cli/instance_skills_client.d.ts +75 -0
  22. package/dist/cli/instance_skills_client.d.ts.map +1 -0
  23. package/dist/cli/instance_skills_client.js +141 -0
  24. package/dist/cli/instance_skills_client.js.map +1 -0
  25. package/dist/cli/instance_skills_sync.d.ts +72 -0
  26. package/dist/cli/instance_skills_sync.d.ts.map +1 -0
  27. package/dist/cli/instance_skills_sync.js +147 -0
  28. package/dist/cli/instance_skills_sync.js.map +1 -0
  29. package/dist/cli/onboarding_transcript_import.d.ts +18 -0
  30. package/dist/cli/onboarding_transcript_import.d.ts.map +1 -1
  31. package/dist/cli/onboarding_transcript_import.js +98 -0
  32. package/dist/cli/onboarding_transcript_import.js.map +1 -1
  33. package/dist/cli/skills_mirror.d.ts +26 -0
  34. package/dist/cli/skills_mirror.d.ts.map +1 -1
  35. package/dist/cli/skills_mirror.js +10 -2
  36. package/dist/cli/skills_mirror.js.map +1 -1
  37. package/dist/cli/transcript_parser.d.ts +29 -1
  38. package/dist/cli/transcript_parser.d.ts.map +1 -1
  39. package/dist/cli/transcript_parser.js +117 -3
  40. package/dist/cli/transcript_parser.js.map +1 -1
  41. package/dist/config.d.ts +5 -0
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +23 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/docs/developer/cli/transcript_ingestion.md +90 -0
  46. package/dist/docs/developer/cli_agent_instructions.md +2 -0
  47. package/dist/docs/developer/cli_reference.md +80 -11
  48. package/dist/docs/developer/mcp/instructions.md +1 -0
  49. package/dist/docs/developer/schema_initialization.md +64 -9
  50. package/dist/docs/infrastructure/deployment.md +13 -5
  51. package/dist/docs/infrastructure/multi_tenant_deployment_topology.md +10 -3
  52. package/dist/docs/operations/configuration.md +13 -0
  53. package/dist/docs/skills/skill_strategy.md +129 -40
  54. package/dist/docs/testing/automated_test_catalog.md +37 -12
  55. package/dist/inspector/assets/{access_policies-6-6DPI39.js → access_policies-B0S0qvu_.js} +1 -1
  56. package/dist/inspector/assets/{agent_badge-CXSO0sXJ.js → agent_badge-BkdvFESY.js} +1 -1
  57. package/dist/inspector/assets/{agent_detail-Cr7iqdye.js → agent_detail-DP0gQW2Q.js} +1 -1
  58. package/dist/inspector/assets/{agent_filter-DQvQyxMp.js → agent_filter-COKVxYFV.js} +1 -1
  59. package/dist/inspector/assets/{agent_grant_detail-DRRM7KWw.js → agent_grant_detail-Dx9XnxQF.js} +1 -1
  60. package/dist/inspector/assets/{agent_grant_form-DNfWiVBQ.js → agent_grant_form-c_cKOS1t.js} +1 -1
  61. package/dist/inspector/assets/{agent_grants-BWgOPiOe.js → agent_grants-2kUpLoVa.js} +1 -1
  62. package/dist/inspector/assets/{agents-CPLAQelS.js → agents-CGacc5go.js} +1 -1
  63. package/dist/inspector/assets/{api_not_configured_state-DHesochj.js → api_not_configured_state-D3-Y7f4P.js} +1 -1
  64. package/dist/inspector/assets/{attribution_card-CCINKjRY.js → attribution_card-DHSwBDvm.js} +1 -1
  65. package/dist/inspector/assets/{attribution_summary-Dkwz1aNS.js → attribution_summary-BDb76qdA.js} +1 -1
  66. package/dist/inspector/assets/{bundles-f-bRlQYm.js → bundles-BrZCSKdE.js} +1 -1
  67. package/dist/inspector/assets/{card-18-eZw0x.js → card-HLZ7P9gv.js} +1 -1
  68. package/dist/inspector/assets/{checkbox-DUu6AMCH.js → checkbox-X0LhUk54.js} +1 -1
  69. package/dist/inspector/assets/{compliance-C1iqMRYK.js → compliance-B-vHY0Mj.js} +1 -1
  70. package/dist/inspector/assets/{confirm-dialog-KIPuwTQR.js → confirm-dialog-BZhGXjGp.js} +1 -1
  71. package/dist/inspector/assets/{conversation_common-aPvd5zmX.js → conversation_common-CqwsnXcN.js} +1 -1
  72. package/dist/inspector/assets/{conversation_detail-nJDDMCfc.js → conversation_detail-BmH4sCju.js} +1 -1
  73. package/dist/inspector/assets/{copy_id_button-BwaRGKNA.js → copy_id_button-CDok7EQV.js} +1 -1
  74. package/dist/inspector/assets/{copyable_code_block-DDi03yAz.js → copyable_code_block-j3QB0aQg.js} +1 -1
  75. package/dist/inspector/assets/{corrections-Dz2v9ju9.js → corrections-BnjNBaly.js} +1 -1
  76. package/dist/inspector/assets/{dashboard-CZOdnoJJ.js → dashboard-BulD_nUh.js} +1 -1
  77. package/dist/inspector/assets/{data-table-5i_gqEfj.js → data-table-B-mxpOia.js} +1 -1
  78. package/dist/inspector/assets/{design-BdKBUVmX.js → design-DnQ02ply.js} +2 -2
  79. package/dist/inspector/assets/{dialog-CNJoZoQS.js → dialog-CsNugp51.js} +1 -1
  80. package/dist/inspector/assets/{docs-sXzc0LTz.js → docs-BSpGmuZ2.js} +1 -1
  81. package/dist/inspector/assets/{docs_page_layout-CGg8ubQX.js → docs_page_layout-Ej9dnRro.js} +1 -1
  82. package/dist/inspector/assets/{embed_graph-BpLLD_vX.js → embed_graph-Dbg37Xuy.js} +1 -1
  83. package/dist/inspector/assets/{empty_state-DNk61WLW.js → empty_state-Y44G8LC3.js} +1 -1
  84. package/dist/inspector/assets/entities-DkBCXibK.js +5 -0
  85. package/dist/inspector/assets/{entity_correct-CfSggXgT.js → entity_correct-CSa6U1Nk.js} +2 -2
  86. package/dist/inspector/assets/{entity_history-CGila0eu.js → entity_history-CxmrR_9X.js} +1 -1
  87. package/dist/inspector/assets/{entity_history_sections-CXYX1gph.js → entity_history_sections-DEWV31Ot.js} +1 -1
  88. package/dist/inspector/assets/{entity_link-DUdsaj-A.js → entity_link-oDivxz85.js} +1 -1
  89. package/dist/inspector/assets/entity_relationships_by_type-DY0Ld1rw.js +1 -0
  90. package/dist/inspector/assets/{entity_segment_page-DRYjT1AU.js → entity_segment_page-WT6IOAC6.js} +1 -1
  91. package/dist/inspector/assets/{entity_table_column_toggle-DwwHY7Y8.js → entity_table_column_toggle-CBgWmzQl.js} +1 -1
  92. package/dist/inspector/assets/{entity_timeline-B4XYY56n.js → entity_timeline-Dq38UOgV.js} +1 -1
  93. package/dist/inspector/assets/{entity_types-ByB2PWZM.js → entity_types-CN-WOauu.js} +1 -1
  94. package/dist/inspector/assets/{faq-B-PEHwkf.js → faq-SK87sez6.js} +1 -1
  95. package/dist/inspector/assets/{graph_auto_fit-ClZnIOoR.js → graph_auto_fit-BMOrV_D2.js} +1 -1
  96. package/dist/inspector/assets/{graph_explorer-C-Xo8VWP.js → graph_explorer-DEu_WyZ2.js} +1 -1
  97. package/dist/inspector/assets/{home-D1UVMr6_.js → home-kfu3wSXt.js} +1 -1
  98. package/dist/inspector/assets/{index-MnCv_KTr.js → index-CnTUFeBn.js} +1 -1
  99. package/dist/inspector/assets/{index-C6fxoS_Z.js → index-D6jp2NN2.js} +1588 -1588
  100. package/dist/inspector/assets/{index-Cp0BQ57U.js → index-afk3dCXk.js} +1 -1
  101. package/dist/inspector/assets/interpretations-8w33Il_Q.js +1 -0
  102. package/dist/inspector/assets/{interpretations-DG5kUN-V.js → interpretations-DbtcIPBS.js} +1 -1
  103. package/dist/inspector/assets/{issue_author_attribution-D7_vwrHJ.js → issue_author_attribution-C_Uvk4F5.js} +1 -1
  104. package/dist/inspector/assets/{issue_detail-DKYUwKt_.js → issue_detail-Ct1G2hyw.js} +1 -1
  105. package/dist/inspector/assets/{issues-DcSMjt-p.js → issues-CUiar649.js} +1 -1
  106. package/dist/inspector/assets/{json_viewer-BKa7wwrs.js → json_viewer-DPC1DsaT.js} +1 -1
  107. package/dist/inspector/assets/{label-BO-aVMjO.js → label-BQ8-xKUC.js} +1 -1
  108. package/dist/inspector/assets/{live_relative_time-Dx00M9I6.js → live_relative_time-D1kEqQ4i.js} +1 -1
  109. package/dist/inspector/assets/{mobile_filter_popover-I9fJvTGr.js → mobile_filter_popover-Bvj6GSAo.js} +1 -1
  110. package/dist/inspector/assets/{not_found-DuCJouBh.js → not_found-0bIlvlSX.js} +1 -1
  111. package/dist/inspector/assets/{oauth_callback-w0kyGAb4.js → oauth_callback-BWXd9Wge.js} +1 -1
  112. package/dist/inspector/assets/{oauth_signin-3LQrxsKz.js → oauth_signin-CZO_QVYB.js} +1 -1
  113. package/dist/inspector/assets/{observations-Bq6mvl5m.js → observations-CikFMfEg.js} +1 -1
  114. package/dist/inspector/assets/{page_shell-BoTb5of6.js → page_shell-BosAA9Zi.js} +1 -1
  115. package/dist/inspector/assets/{pagination-BJtT1Wgy.js → pagination-9hSWjJSM.js} +1 -1
  116. package/dist/inspector/assets/{peer_detail-BM1jhSS2.js → peer_detail-BkQDnYWW.js} +1 -1
  117. package/dist/inspector/assets/{peers-CYSx-jAx.js → peers-BCBT6Ylr.js} +1 -1
  118. package/dist/inspector/assets/{pin_primitive_button-BdAR3e5K.js → pin_primitive_button-DDwdBrpd.js} +1 -1
  119. package/dist/inspector/assets/{recent_activity-Dio9UBCA.js → recent_activity-D8ZzUMMQ.js} +1 -1
  120. package/dist/inspector/assets/{recent_conversations-Be7S63h9.js → recent_conversations-DCgvsODD.js} +1 -1
  121. package/dist/inspector/assets/recent_conversations-Drio7WK-.js +1 -0
  122. package/dist/inspector/assets/{recent_records_feed-ZxHjVjQ6.js → recent_records_feed-BtPgzGjQ.js} +1 -1
  123. package/dist/inspector/assets/record_activity-OPIQqbxs.js +1 -0
  124. package/dist/inspector/assets/{relationship_detail-i9rsGxA6.js → relationship_detail-Bib84abm.js} +1 -1
  125. package/dist/inspector/assets/{relationship_panel_groups-CXFlrRHU.js → relationship_panel_groups-DLZtyWmB.js} +1 -1
  126. package/dist/inspector/assets/relationships-C6AMAVnt.js +1 -0
  127. package/dist/inspector/assets/{relationships-DqAzfnlB.js → relationships-CbmaLg1w.js} +1 -1
  128. package/dist/inspector/assets/{sandbox-Cn4vq2Pz.js → sandbox-CDn_AfpW.js} +1 -1
  129. package/dist/inspector/assets/{schema_detail-BdORXewP.js → schema_detail-rdHCdMiO.js} +1 -1
  130. package/dist/inspector/assets/{schemas-HYsBtoHT.js → schemas-BGFS1NIU.js} +2 -2
  131. package/dist/inspector/assets/search-D0mISNIp.js +1 -0
  132. package/dist/inspector/assets/{segmented_control-CHJO5zMt.js → segmented_control-Dh4asumQ.js} +1 -1
  133. package/dist/inspector/assets/{select-DFzP9laV.js → select-CGgVNBJP.js} +1 -1
  134. package/dist/inspector/assets/{settings-Bm0jNa4p.js → settings-WrB7DH64.js} +1 -1
  135. package/dist/inspector/assets/{source_content-PwVSPaIU.js → source_content-CdneU5cC.js} +1 -1
  136. package/dist/inspector/assets/{source_content_open_button-C7NKRG7q.js → source_content_open_button-DdwQmqei.js} +1 -1
  137. package/dist/inspector/assets/{source_detail-C2D885Zy.js → source_detail-BGV8BTSk.js} +5 -5
  138. package/dist/inspector/assets/source_link-3OE0LIxN.js +1 -0
  139. package/dist/inspector/assets/{sources-BvGo5OZp.js → sources-MQzjTQPU.js} +1 -1
  140. package/dist/inspector/assets/{subscriptions-BGYmtTLV.js → subscriptions-DSSlZgxQ.js} +1 -1
  141. package/dist/inspector/assets/{switch-DkusEYsE.js → switch-CE4bL5sC.js} +1 -1
  142. package/dist/inspector/assets/{tabs-hkbPHxT0.js → tabs-ZrN5u0Y9.js} +1 -1
  143. package/dist/inspector/assets/{textarea-BhC7xtLk.js → textarea-CBYe0AAK.js} +1 -1
  144. package/dist/inspector/assets/{timeline-DmjoODDd.js → timeline-Ad0NUrF_.js} +1 -1
  145. package/dist/inspector/assets/{timeline-CHi-lYcV.js → timeline-uLYAndU3.js} +1 -1
  146. package/dist/inspector/assets/{timeline_event_detail-BfKrsQih.js → timeline_event_detail-BfgHJ0XR.js} +1 -1
  147. package/dist/inspector/assets/{turn_detail-DGj1lT0k.js → turn_detail-CUBCiCcq.js} +1 -1
  148. package/dist/inspector/assets/{turns-CHfOIg9X.js → turns-B1PAnWxV.js} +1 -1
  149. package/dist/inspector/assets/use_agents-Kr_qThpq.js +1 -0
  150. package/dist/inspector/assets/{use_entities-DeIlqnzx.js → use_entities-zE9adlzL.js} +1 -1
  151. package/dist/inspector/assets/use_interpretations-CD0-ZgOr.js +1 -0
  152. package/dist/inspector/assets/{use_mutations-CQ3_5Ppg.js → use_mutations-D4WoExI4.js} +1 -1
  153. package/dist/inspector/assets/use_peers-k2UDs1Pi.js +1 -0
  154. package/dist/inspector/assets/{use_relationships-Dbtmx8X8.js → use_relationships-DVVjD-SH.js} +1 -1
  155. package/dist/inspector/assets/{use_stats-OyHBzetJ.js → use_stats-Cmjbd4x1.js} +1 -1
  156. package/dist/inspector/assets/{use_timeline-FINsibXm.js → use_timeline-De1q_UCR.js} +1 -1
  157. package/dist/inspector/assets/{use_turns-D4AhGAvM.js → use_turns-B4g1lTlJ.js} +1 -1
  158. package/dist/inspector/assets/{world_time_event_timeline-F0elR7Vc.js → world_time_event_timeline-CLue1xiu.js} +1 -1
  159. package/dist/inspector/index.html +1 -1
  160. package/dist/openclaw_entry.js +2 -2
  161. package/dist/openclaw_entry.js.map +1 -1
  162. package/dist/repositories/db/connection.d.ts +47 -0
  163. package/dist/repositories/db/connection.d.ts.map +1 -0
  164. package/dist/repositories/db/connection.js +153 -0
  165. package/dist/repositories/db/connection.js.map +1 -0
  166. package/dist/repositories/db/driver.d.ts +85 -0
  167. package/dist/repositories/db/driver.d.ts.map +1 -0
  168. package/dist/repositories/db/driver.js +89 -0
  169. package/dist/repositories/db/driver.js.map +1 -0
  170. package/dist/repositories/libsql/libsql_driver.d.ts +62 -0
  171. package/dist/repositories/libsql/libsql_driver.d.ts.map +1 -0
  172. package/dist/repositories/libsql/libsql_driver.js +170 -0
  173. package/dist/repositories/libsql/libsql_driver.js.map +1 -0
  174. package/dist/repositories/sqlite/local_db_adapter.d.ts +23 -0
  175. package/dist/repositories/sqlite/local_db_adapter.d.ts.map +1 -1
  176. package/dist/repositories/sqlite/local_db_adapter.js +192 -46
  177. package/dist/repositories/sqlite/local_db_adapter.js.map +1 -1
  178. package/dist/repositories/sqlite/sqlite_client.d.ts +6 -11
  179. package/dist/repositories/sqlite/sqlite_client.d.ts.map +1 -1
  180. package/dist/repositories/sqlite/sqlite_client.js +110 -130
  181. package/dist/repositories/sqlite/sqlite_client.js.map +1 -1
  182. package/dist/repositories/sqlite/sqlite_driver.d.ts +20 -0
  183. package/dist/repositories/sqlite/sqlite_driver.d.ts.map +1 -1
  184. package/dist/repositories/sqlite/sqlite_driver.js +129 -6
  185. package/dist/repositories/sqlite/sqlite_driver.js.map +1 -1
  186. package/dist/repositories/worker/worker_file_database.d.ts +81 -0
  187. package/dist/repositories/worker/worker_file_database.d.ts.map +1 -0
  188. package/dist/repositories/worker/worker_file_database.js +403 -0
  189. package/dist/repositories/worker/worker_file_database.js.map +1 -0
  190. package/dist/seed_schemas_entry.d.ts +14 -6
  191. package/dist/seed_schemas_entry.d.ts.map +1 -1
  192. package/dist/seed_schemas_entry.js +41 -32
  193. package/dist/seed_schemas_entry.js.map +1 -1
  194. package/dist/server.js +5 -5
  195. package/dist/server.js.map +1 -1
  196. package/dist/services/agents_directory.d.ts +4 -4
  197. package/dist/services/agents_directory.d.ts.map +1 -1
  198. package/dist/services/agents_directory.js +8 -8
  199. package/dist/services/agents_directory.js.map +1 -1
  200. package/dist/services/compliance/scorecard.d.ts +1 -1
  201. package/dist/services/compliance/scorecard.d.ts.map +1 -1
  202. package/dist/services/compliance/scorecard.js +4 -4
  203. package/dist/services/compliance/scorecard.js.map +1 -1
  204. package/dist/services/conversation_turn.d.ts +4 -4
  205. package/dist/services/conversation_turn.d.ts.map +1 -1
  206. package/dist/services/conversation_turn.js +21 -21
  207. package/dist/services/conversation_turn.js.map +1 -1
  208. package/dist/services/entity_merge.d.ts +5 -3
  209. package/dist/services/entity_merge.d.ts.map +1 -1
  210. package/dist/services/entity_merge.js +21 -19
  211. package/dist/services/entity_merge.js.map +1 -1
  212. package/dist/services/entity_queries.d.ts +16 -1
  213. package/dist/services/entity_queries.d.ts.map +1 -1
  214. package/dist/services/entity_queries.js +27 -0
  215. package/dist/services/entity_queries.js.map +1 -1
  216. package/dist/services/entity_semantic_search.js +1 -1
  217. package/dist/services/entity_semantic_search.js.map +1 -1
  218. package/dist/services/entity_snapshot_embedding.js +1 -1
  219. package/dist/services/entity_snapshot_embedding.js.map +1 -1
  220. package/dist/services/local_auth.d.ts +9 -9
  221. package/dist/services/local_auth.d.ts.map +1 -1
  222. package/dist/services/local_auth.js +48 -36
  223. package/dist/services/local_auth.js.map +1 -1
  224. package/dist/services/local_entity_embedding.d.ts +4 -4
  225. package/dist/services/local_entity_embedding.d.ts.map +1 -1
  226. package/dist/services/local_entity_embedding.js +38 -21
  227. package/dist/services/local_entity_embedding.js.map +1 -1
  228. package/dist/services/mcp_auth.js +5 -5
  229. package/dist/services/mcp_auth.js.map +1 -1
  230. package/dist/services/mcp_oauth.d.ts.map +1 -1
  231. package/dist/services/mcp_oauth.js +70 -58
  232. package/dist/services/mcp_oauth.js.map +1 -1
  233. package/dist/services/raw_storage.d.ts +9 -0
  234. package/dist/services/raw_storage.d.ts.map +1 -1
  235. package/dist/services/raw_storage.js +32 -19
  236. package/dist/services/raw_storage.js.map +1 -1
  237. package/dist/services/recent_conversations.d.ts +3 -3
  238. package/dist/services/recent_conversations.d.ts.map +1 -1
  239. package/dist/services/recent_conversations.js +17 -17
  240. package/dist/services/recent_conversations.js.map +1 -1
  241. package/dist/services/recent_record_activity.d.ts +2 -2
  242. package/dist/services/recent_record_activity.d.ts.map +1 -1
  243. package/dist/services/recent_record_activity.js +5 -5
  244. package/dist/services/recent_record_activity.js.map +1 -1
  245. package/dist/services/sandbox/sessions.d.ts +7 -7
  246. package/dist/services/sandbox/sessions.d.ts.map +1 -1
  247. package/dist/services/sandbox/sessions.js +50 -41
  248. package/dist/services/sandbox/sessions.js.map +1 -1
  249. package/dist/services/schema_registry.d.ts +7 -0
  250. package/dist/services/schema_registry.d.ts.map +1 -1
  251. package/dist/services/schema_registry.js +13 -0
  252. package/dist/services/schema_registry.js.map +1 -1
  253. package/dist/services/schema_registry_bootstrap.d.ts +71 -0
  254. package/dist/services/schema_registry_bootstrap.d.ts.map +1 -0
  255. package/dist/services/schema_registry_bootstrap.js +108 -0
  256. package/dist/services/schema_registry_bootstrap.js.map +1 -0
  257. package/dist/services/sessions/seed_schema.d.ts +25 -0
  258. package/dist/services/sessions/seed_schema.d.ts.map +1 -0
  259. package/dist/services/sessions/seed_schema.js +139 -0
  260. package/dist/services/sessions/seed_schema.js.map +1 -0
  261. package/dist/services/subscriptions/event_log.d.ts +10 -9
  262. package/dist/services/subscriptions/event_log.d.ts.map +1 -1
  263. package/dist/services/subscriptions/event_log.js +21 -20
  264. package/dist/services/subscriptions/event_log.js.map +1 -1
  265. package/dist/services/subscriptions/install_subscription_bridge.d.ts.map +1 -1
  266. package/dist/services/subscriptions/install_subscription_bridge.js +5 -5
  267. package/dist/services/subscriptions/install_subscription_bridge.js.map +1 -1
  268. package/dist/services/subscriptions/subscription_bridge.js +1 -1
  269. package/dist/services/subscriptions/subscription_bridge.js.map +1 -1
  270. package/dist/shared/action_handlers/entity_handlers.d.ts +1 -1
  271. package/dist/shared/action_handlers/entity_handlers.d.ts.map +1 -1
  272. package/dist/shared/action_schemas.d.ts +26 -26
  273. package/dist/shared/action_schemas.js +1 -1
  274. package/dist/shared/action_schemas.js.map +1 -1
  275. package/dist/shared/entity_display_name.d.ts +11 -1
  276. package/dist/shared/entity_display_name.d.ts.map +1 -1
  277. package/dist/shared/entity_display_name.js +24 -5
  278. package/dist/shared/entity_display_name.js.map +1 -1
  279. package/dist/shared/openapi_types.d.ts +13 -1
  280. package/dist/shared/openapi_types.d.ts.map +1 -1
  281. package/dist/tool_definitions.d.ts.map +1 -1
  282. package/dist/tool_definitions.js +12 -2
  283. package/dist/tool_definitions.js.map +1 -1
  284. package/docs/developer/mcp/instructions.md +1 -0
  285. package/openapi.yaml +13 -0
  286. package/package.json +3 -1
  287. package/dist/inspector/assets/entities-Cexhp3qr.js +0 -5
  288. package/dist/inspector/assets/entity_relationships_by_type-B_PH1APK.js +0 -1
  289. package/dist/inspector/assets/interpretations-BCs9qtw0.js +0 -1
  290. package/dist/inspector/assets/recent_conversations-iJTSJf5e.js +0 -1
  291. package/dist/inspector/assets/record_activity-BmMC7Q7l.js +0 -1
  292. package/dist/inspector/assets/relationships-DvWtOU7W.js +0 -1
  293. package/dist/inspector/assets/search-LzJnqvTB.js +0 -1
  294. package/dist/inspector/assets/source_link-6lMlhQnK.js +0 -1
  295. package/dist/inspector/assets/use_agents-6sUtEOpZ.js +0 -1
  296. package/dist/inspector/assets/use_interpretations-DvfzvGu3.js +0 -1
  297. package/dist/inspector/assets/use_peers-CW3OAs41.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
package/dist/actions.js CHANGED
@@ -51,7 +51,7 @@ import { installInspectorLegacyRedirect, installInspectorRootStaticAssets, insta
51
51
  import { EMBED_ALLOWED_ORIGINS_ENV, applyFrameAncestorsToCsp, buildFrameAncestorsDirective, embedCorsHeaders, isEmbedReadEndpoint, isEmbedShellPath, isOriginAllowed, parseAllowedEmbedOrigins, } from "./services/embed_cross_origin.js";
52
52
  import { getSandboxTermsResponse } from "./services/sandbox/terms.js";
53
53
  import { resolveSandboxReportTransport } from "./services/sandbox/transport.js";
54
- import { getSqliteDb } from "./repositories/sqlite/sqlite_client.js";
54
+ import { getDb } from "./repositories/db/connection.js";
55
55
  import { getMcpAuthToken } from "./crypto/mcp_auth_token.js";
56
56
  import { isOauthKeyCredentialValid, normalizeOauthNextPath, OAuthKeySessionStore, } from "./services/oauth_key_gate.js";
57
57
  import { buildGoogleAuthorizeUrl, createGoogleSigninNonce, consumeGoogleSigninNonce, exchangeGoogleAuthorizationCode, getSharedGraphUserId, GoogleIdTokenError, isGoogleSigninEnabled, verifyGoogleIdToken, } from "./services/google_oidc.js";
@@ -251,7 +251,7 @@ if (isSandboxMode()) {
251
251
  validate: { trustProxy: false },
252
252
  });
253
253
  const createAndSeedSession = async (packId) => {
254
- const session = createSandboxSession(packId);
254
+ const session = await createSandboxSession(packId);
255
255
  const pack = getSandboxPack(session.packId);
256
256
  // Packs with seedPolicy "none" (e.g. the empty pack) legitimately seed
257
257
  // nothing — that is "skipped", not a failure.
@@ -298,14 +298,14 @@ if (isSandboxMode()) {
298
298
  .json({ error_code: "SESSION_CREATE_FAILED", message: err.message });
299
299
  }
300
300
  });
301
- app.post("/sandbox/session/redeem", (req, res) => {
301
+ app.post("/sandbox/session/redeem", async (req, res) => {
302
302
  try {
303
303
  const code = typeof req.body?.code === "string" ? req.body.code : "";
304
304
  if (!code) {
305
305
  res.status(400).json({ error_code: "MISSING_CODE", message: "code is required" });
306
306
  return;
307
307
  }
308
- const result = redeemOneTimeCode(code);
308
+ const result = await redeemOneTimeCode(code);
309
309
  if (!result) {
310
310
  res
311
311
  .status(404)
@@ -332,8 +332,8 @@ if (isSandboxMode()) {
332
332
  .json({ error_code: "SESSION_REDEEM_FAILED", message: err.message });
333
333
  }
334
334
  });
335
- app.get("/sandbox/session", (req, res) => {
336
- const session = resolveSessionFromRequest(req);
335
+ app.get("/sandbox/session", async (req, res) => {
336
+ const session = await resolveSessionFromRequest(req);
337
337
  if (!session) {
338
338
  res.status(401).json({ error_code: "NO_SESSION", message: "No active sandbox session" });
339
339
  return;
@@ -346,13 +346,13 @@ if (isSandboxMode()) {
346
346
  });
347
347
  });
348
348
  app.post("/sandbox/session/reset", async (req, res) => {
349
- const session = resolveSessionFromRequest(req);
349
+ const session = await resolveSessionFromRequest(req);
350
350
  if (!session) {
351
351
  res.status(401).json({ error_code: "NO_SESSION", message: "No active sandbox session" });
352
352
  return;
353
353
  }
354
354
  const packId = typeof req.body?.pack_id === "string" ? req.body.pack_id : undefined;
355
- purgeSessionUserData(session.userId);
355
+ await purgeSessionUserData(session.userId);
356
356
  const { session: newSession, seedStatus } = await createAndSeedSession(packId ?? session.packId);
357
357
  res.cookie(SESSION_COOKIE_NAME, newSession.bearerToken, {
358
358
  httpOnly: true,
@@ -367,22 +367,27 @@ if (isSandboxMode()) {
367
367
  seed_status: seedStatus,
368
368
  });
369
369
  });
370
- app.delete("/sandbox/session", (req, res) => {
371
- const session = resolveSessionFromRequest(req);
370
+ app.delete("/sandbox/session", async (req, res) => {
371
+ const session = await resolveSessionFromRequest(req);
372
372
  if (!session) {
373
373
  res.status(401).json({ error_code: "NO_SESSION", message: "No active sandbox session" });
374
374
  return;
375
375
  }
376
- revokeSession(session.userId);
377
- purgeSessionUserData(session.userId);
376
+ await revokeSession(session.userId);
377
+ await purgeSessionUserData(session.userId);
378
378
  res.clearCookie(SESSION_COOKIE_NAME, { path: "/" });
379
379
  res.json({ ok: true });
380
380
  });
381
381
  setInterval(() => {
382
- const purged = sweepExpiredSessions();
383
- if (purged > 0) {
384
- logger.info(`[Sandbox] Swept ${purged} expired session(s)`);
385
- }
382
+ sweepExpiredSessions()
383
+ .then((purged) => {
384
+ if (purged > 0) {
385
+ logger.info(`[Sandbox] Swept ${purged} expired session(s)`);
386
+ }
387
+ })
388
+ .catch((err) => {
389
+ logger.error(`[Sandbox] session sweep failed: ${err.message}`);
390
+ });
386
391
  }, 15 * 60 * 1000);
387
392
  logger.info("[Sandbox] Session endpoints registered");
388
393
  }
@@ -2372,7 +2377,7 @@ app.get("/mcp/oauth/google/callback", async (req, res) => {
2372
2377
  // with it) — generate an unguessable throwaway so createLocalAuthUser's
2373
2378
  // shared code path is satisfied without weakening any other account.
2374
2379
  const throwawayPassword = randomBytes(32).toString("hex");
2375
- const perEmailUser = createLocalAuthUser(email, throwawayPassword);
2380
+ const perEmailUser = await createLocalAuthUser(email, throwawayPassword);
2376
2381
  // Shared-graph opt-in: when NEOTOMA_SHARED_GRAPH_USER_ID is set, an
2377
2382
  // approved teammate (the email already passed the allowlist inside
2378
2383
  // verifyGoogleIdToken) is bound to the shared graph's user_id instead of
@@ -2579,7 +2584,7 @@ app.get("/mcp/oauth/local-login", async (req, res) => {
2579
2584
  // (no Google session on this cookie — the default, and the only
2580
2585
  // possibility when the Google feature flag is off) is unchanged.
2581
2586
  const googleUserId = getGoogleVerifiedUserId(req);
2582
- const resolvedUserId = googleUserId ?? ensureLocalDevUser().id;
2587
+ const resolvedUserId = googleUserId ?? (await ensureLocalDevUser()).id;
2583
2588
  const { completeLocalAuthorization } = await import("./services/mcp_oauth.js");
2584
2589
  const { connectionId, redirectUri, clientState } = await completeLocalAuthorization(state, resolvedUserId);
2585
2590
  const frontendBase = process.env.NEOTOMA_FRONTEND_URL || process.env.FRONTEND_URL || "http://localhost:5195";
@@ -2789,10 +2794,10 @@ app.get("/mcp/oauth/authorization-details", async (req, res) => {
2789
2794
  // Validate token and get user (ensures user is authenticated)
2790
2795
  const { validateSessionToken } = await import("./services/mcp_auth.js");
2791
2796
  await validateSessionToken(token);
2792
- const db = getSqliteDb();
2793
- const stateData = db
2797
+ const db = await getDb();
2798
+ const stateData = (await db
2794
2799
  .prepare("SELECT redirect_uri FROM mcp_oauth_state WHERE state = ?")
2795
- .get(authorization_id);
2800
+ .get(authorization_id));
2796
2801
  if (!stateData?.redirect_uri) {
2797
2802
  return res.status(404).json({
2798
2803
  error: "Authorization not found",
@@ -3030,7 +3035,9 @@ async function resolveRoutePrincipal(req, accept) {
3030
3035
  if (routeAllowsLocalIssueWriteFallback(req) &&
3031
3036
  isLocalRequest(req) &&
3032
3037
  !headerAuth.startsWith("Bearer ")) {
3033
- const userId = _localSandboxActive ? ensureLocalSandboxUser().id : ensureLocalDevUser().id;
3038
+ const userId = _localSandboxActive
3039
+ ? (await ensureLocalSandboxUser()).id
3040
+ : (await ensureLocalDevUser()).id;
3034
3041
  // Stamp the principal so a later `getAuthenticatedUserId` in the handler
3035
3042
  // resolves the same local user without re-tripping the missing-Bearer gate.
3036
3043
  stampUserPrincipal(req, userId);
@@ -3086,9 +3093,9 @@ export async function resolveGuestUserId(req, principal) {
3086
3093
  // shared nil-UUID LOCAL_DEV_USER_ID. Outside local_sandbox mode (e.g. pure
3087
3094
  // dev with explicit auth configured) continue to use the nil-UUID fallback.
3088
3095
  if (_localSandboxActive) {
3089
- return ensureLocalSandboxUser().id;
3096
+ return (await ensureLocalSandboxUser()).id;
3090
3097
  }
3091
- return ensureLocalDevUser().id;
3098
+ return (await ensureLocalDevUser()).id;
3092
3099
  }
3093
3100
  throw new Error("Not authenticated - guest principal cannot resolve a user_id: no valid token grant and not a local request");
3094
3101
  }
@@ -3215,12 +3222,12 @@ app.use(async (req, res, next) => {
3215
3222
  return next();
3216
3223
  }
3217
3224
  if (_localSandboxActive) {
3218
- const sandboxUser = ensureLocalSandboxUser();
3225
+ const sandboxUser = await ensureLocalSandboxUser();
3219
3226
  stampUserPrincipal(req, sandboxUser.id);
3220
3227
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=local_sandbox user_id=${sandboxUser.id}`);
3221
3228
  return next();
3222
3229
  }
3223
- const devUser = ensureLocalDevUser();
3230
+ const devUser = await ensureLocalDevUser();
3224
3231
  stampUserPrincipal(req, devUser.id);
3225
3232
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=local_no_bearer user_id=${devUser.id}`);
3226
3233
  return next();
@@ -3228,7 +3235,7 @@ app.use(async (req, res, next) => {
3228
3235
  // Sandbox ephemeral session: resolve from cookie or Bearer token before
3229
3236
  // falling back to the shared public user. Expired/revoked sessions 401.
3230
3237
  if (isSandboxMode()) {
3231
- const sessionInfo = resolveSessionFromRequest(req);
3238
+ const sessionInfo = await resolveSessionFromRequest(req);
3232
3239
  if (sessionInfo) {
3233
3240
  stampUserPrincipal(req, sessionInfo.userId);
3234
3241
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=sandbox_session user_id=${sessionInfo.userId}`);
@@ -3250,12 +3257,12 @@ app.use(async (req, res, next) => {
3250
3257
  // queries by req.authenticatedUserId.
3251
3258
  const aauthCtx = req.aauth;
3252
3259
  if (aauthCtx?.verified === true && typeof aauthCtx.thumbprint === "string") {
3253
- const aauthUser = ensureSandboxAauthUser(aauthCtx.thumbprint);
3260
+ const aauthUser = await ensureSandboxAauthUser(aauthCtx.thumbprint);
3254
3261
  stampUserPrincipal(req, aauthUser.id);
3255
3262
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=sandbox_aauth user_id=${aauthUser.id} thumbprint=${aauthCtx.thumbprint}`);
3256
3263
  return next();
3257
3264
  }
3258
- const sandboxUser = ensureSandboxPublicUser();
3265
+ const sandboxUser = await ensureSandboxPublicUser();
3259
3266
  stampUserPrincipal(req, sandboxUser.id);
3260
3267
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=sandbox_public user_id=${sandboxUser.id}`);
3261
3268
  return next();
@@ -3268,7 +3275,7 @@ app.use(async (req, res, next) => {
3268
3275
  if (headerAuth.startsWith("Bearer ") && mcpExpectedToken) {
3269
3276
  const token = headerAuth.slice(7).trim();
3270
3277
  if (safeCompareTokens(token, mcpExpectedToken)) {
3271
- const devUser = ensureLocalDevUser();
3278
+ const devUser = await ensureLocalDevUser();
3272
3279
  stampUserPrincipal(req, devUser.id);
3273
3280
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=bearer_mcp_token user_id=${devUser.id}`);
3274
3281
  return next();
@@ -3285,12 +3292,12 @@ app.use(async (req, res, next) => {
3285
3292
  }
3286
3293
  if (isLocalRequest(req)) {
3287
3294
  if (_localSandboxActive) {
3288
- const sandboxUser = ensureLocalSandboxUser();
3295
+ const sandboxUser = await ensureLocalSandboxUser();
3289
3296
  stampUserPrincipal(req, sandboxUser.id);
3290
3297
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=local_sandbox user_id=${sandboxUser.id}`);
3291
3298
  return next();
3292
3299
  }
3293
- const devUser = ensureLocalDevUser();
3300
+ const devUser = await ensureLocalDevUser();
3294
3301
  stampUserPrincipal(req, devUser.id);
3295
3302
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=local_no_bearer user_id=${devUser.id}`);
3296
3303
  return next();
@@ -3299,7 +3306,7 @@ app.use(async (req, res, next) => {
3299
3306
  if (headerAuth.startsWith("Bearer ") && process.env.NEOTOMA_BEARER_TOKEN) {
3300
3307
  const token = headerAuth.slice(7).trim();
3301
3308
  if (safeCompareTokens(token, process.env.NEOTOMA_BEARER_TOKEN)) {
3302
- const devUser = ensureLocalDevUser();
3309
+ const devUser = await ensureLocalDevUser();
3303
3310
  stampUserPrincipal(req, devUser.id);
3304
3311
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=bearer_env user_id=${devUser.id}`);
3305
3312
  return next();
@@ -3403,7 +3410,7 @@ app.use(async (req, res, next) => {
3403
3410
  // sandboxDestructiveGuard, and AAuth-only routes by aauthRequired.
3404
3411
  if (isSandboxMode()) {
3405
3412
  res.clearCookie(SESSION_COOKIE_NAME, { path: "/" });
3406
- const sandboxUser = ensureSandboxPublicUser();
3413
+ const sandboxUser = await ensureSandboxPublicUser();
3407
3414
  stampUserPrincipal(req, sandboxUser.id);
3408
3415
  logger.info(`[Auth] ${req.method} ${req.path} auth_method=sandbox_public_stale_bearer user_id=${sandboxUser.id}`);
3409
3416
  return next();
@@ -4575,7 +4582,7 @@ app.get("/record_activity", async (req, res) => {
4575
4582
  const limit = parseInt(String(req.query.limit ?? "50"), 10) || 50;
4576
4583
  const offset = parseInt(String(req.query.offset ?? "0"), 10) || 0;
4577
4584
  const recordTypes = parseRecordActivityTypesQuery(req.query.record_types);
4578
- const result = listRecentRecordActivity(userId, {
4585
+ const result = await listRecentRecordActivity(userId, {
4579
4586
  limit,
4580
4587
  offset,
4581
4588
  ...(recordTypes?.length ? { recordTypes } : {}),
@@ -4591,7 +4598,7 @@ app.get("/record_activity", async (req, res) => {
4591
4598
  app.get("/agents", async (req, res) => {
4592
4599
  try {
4593
4600
  const userId = await getAuthenticatedUserId(req, req.query.user_id);
4594
- const result = listAgents(userId);
4601
+ const result = await listAgents(userId);
4595
4602
  return res.json(result);
4596
4603
  }
4597
4604
  catch (error) {
@@ -4737,7 +4744,7 @@ app.get("/agents/:key", async (req, res) => {
4737
4744
  try {
4738
4745
  const userId = await getAuthenticatedUserId(req, req.query.user_id);
4739
4746
  const agentKey = decodeURIComponent(req.params.key);
4740
- const agent = getAgent(userId, agentKey);
4747
+ const agent = await getAgent(userId, agentKey);
4741
4748
  if (!agent) {
4742
4749
  return sendError(res, 404, "RESOURCE_NOT_FOUND", `Agent not found: ${agentKey}`);
4743
4750
  }
@@ -4757,7 +4764,7 @@ app.get("/agents/:key/records", async (req, res) => {
4757
4764
  const agentKey = decodeURIComponent(req.params.key);
4758
4765
  const limit = parseInt(String(req.query.limit ?? "50"), 10) || 50;
4759
4766
  const offset = parseInt(String(req.query.offset ?? "0"), 10) || 0;
4760
- const result = listAgentRecords(userId, agentKey, limit, offset);
4767
+ const result = await listAgentRecords(userId, agentKey, limit, offset);
4761
4768
  return res.json(result);
4762
4769
  }
4763
4770
  catch (error) {
@@ -4769,7 +4776,7 @@ app.get("/recent_conversations/:conversation_id", async (req, res) => {
4769
4776
  try {
4770
4777
  const userId = await getAuthenticatedUserId(req, req.query.user_id);
4771
4778
  const conversationId = String(req.params.conversation_id ?? "").trim();
4772
- const item = getRecentConversationById(userId, conversationId);
4779
+ const item = await getRecentConversationById(userId, conversationId);
4773
4780
  if (!item) {
4774
4781
  return sendError(res, 404, "RESOURCE_NOT_FOUND", "Conversation not found");
4775
4782
  }
@@ -4792,7 +4799,7 @@ app.get("/recent_conversations", async (req, res) => {
4792
4799
  const agentKeyRaw = typeof req.query.agent_key === "string" ? req.query.agent_key.trim() : "";
4793
4800
  // UI and bookmarks may send agent_key=all; never treat that as a real deriveAgentKey value.
4794
4801
  const agent_key = agentKeyRaw.length > 0 && agentKeyRaw.toLowerCase() !== "all" ? agentKeyRaw : null;
4795
- const result = listRecentConversations(userId, limit, offset, {
4802
+ const result = await listRecentConversations(userId, limit, offset, {
4796
4803
  activity_after,
4797
4804
  activity_before,
4798
4805
  agent_key,
@@ -4851,7 +4858,7 @@ app.get("/turns", async (req, res) => {
4851
4858
  const activity_before = typeof req.query.activity_before === "string"
4852
4859
  ? req.query.activity_before.trim() || null
4853
4860
  : null;
4854
- const result = listConversationTurns(userId, limit, offset, {
4861
+ const result = await listConversationTurns(userId, limit, offset, {
4855
4862
  harness,
4856
4863
  status,
4857
4864
  activity_after,
@@ -4868,7 +4875,7 @@ app.get("/turns/:turn_key", async (req, res) => {
4868
4875
  try {
4869
4876
  const userId = await getAuthenticatedUserId(req, req.query.user_id);
4870
4877
  const turnKey = decodeURIComponent(req.params.turn_key);
4871
- const result = getConversationTurn(userId, turnKey);
4878
+ const result = await getConversationTurn(userId, turnKey);
4872
4879
  if (!result) {
4873
4880
  return res.status(404).json({ error: "Turn not found", code: "NOT_FOUND" });
4874
4881
  }
@@ -4890,7 +4897,7 @@ app.get("/admin/compliance/scorecard", async (req, res) => {
4890
4897
  const top_missed_steps = parseInt(String(req.query.top_missed_steps ?? ""), 10);
4891
4898
  const include_synthetic = req.query.include_synthetic === "1" ||
4892
4899
  String(req.query.include_synthetic).toLowerCase() === "true";
4893
- const result = buildComplianceScorecard(userId, {
4900
+ const result = await buildComplianceScorecard(userId, {
4894
4901
  since,
4895
4902
  until,
4896
4903
  group_by,
@@ -8152,7 +8159,7 @@ const handleIssuesSubmitHttp = async (req, res) => {
8152
8159
  parsed.data.local_issue_id ||
8153
8160
  parsed.data.submission_timestamp);
8154
8161
  const userId = principal.kind === "guest" && !principal.accessToken
8155
- ? ensureLocalDevUser().id
8162
+ ? (await ensureLocalDevUser()).id
8156
8163
  : principal.kind === "guest" || guestSubmitPayload
8157
8164
  ? ((await resolveGuestUserId(req, principal)) ??
8158
8165
  (await getAuthenticatedUserId(req, parsed.data.user_id)))
@@ -9129,7 +9136,7 @@ app.get("/events/stream", async (req, res) => {
9129
9136
  };
9130
9137
  if (lastEventId !== undefined && !ringHasId(lastEventId)) {
9131
9138
  const cursorSeq = Number(lastEventId);
9132
- if (Number.isFinite(cursorSeq) && hasDurableCursor(userId, cursorSeq)) {
9139
+ if (Number.isFinite(cursorSeq) && (await hasDurableCursor(userId, cursorSeq))) {
9133
9140
  // Recoverable from durable storage: replay from the log, paging until
9134
9141
  // drained, then continue from the ring tail for anything newer.
9135
9142
  // Push the subscription's column-backed predicates into SQL so a narrow
@@ -9142,7 +9149,7 @@ app.get("/events/stream", async (req, res) => {
9142
9149
  };
9143
9150
  let after = cursorSeq;
9144
9151
  for (;;) {
9145
- const batch = getEventsAfterSeq(userId, after, 1000, durableFilter);
9152
+ const batch = await getEventsAfterSeq(userId, after, 1000, durableFilter);
9146
9153
  if (batch.length === 0)
9147
9154
  break;
9148
9155
  for (const d of batch) {
@@ -9554,6 +9561,36 @@ export async function startHTTPServer() {
9554
9561
  }
9555
9562
  // Initialize encryption service
9556
9563
  await initServerKeys();
9564
+ // Seed the built-in schema registry from ENTITY_SCHEMAS (issue #1968).
9565
+ //
9566
+ // Runs FIRST among the boot-time seeders so an unseeded instance has its
9567
+ // core types registered before the service-specific seeders below extend
9568
+ // them. `loadActiveSchema` is DB-only with no code fallback, so without this
9569
+ // a fresh instance silently loses store-time auto-linking. Seeding here (as
9570
+ // opposed to only in a Fly `release_command` or the RC redeploy script)
9571
+ // covers every deploy path, including ones not yet written.
9572
+ //
9573
+ // Strictly additive: entity types that already have an active global schema
9574
+ // are left untouched, so an operator's custom schema is never reverted.
9575
+ try {
9576
+ const { seedSchemaRegistryIfEmpty } = await import("./services/schema_registry_bootstrap.js");
9577
+ const summary = await seedSchemaRegistryIfEmpty();
9578
+ if (summary.registered.length > 0) {
9579
+ logger.info(`[SchemaRegistry] registry empty for ${summary.registered.length} type(s) → seeding: ` +
9580
+ `${summary.registered.join(", ")} (preserved ${summary.preserved.length} existing)`);
9581
+ }
9582
+ else {
9583
+ logger.info(`[SchemaRegistry] all ${summary.preserved.length} built-in schema(s) already registered; nothing to seed`);
9584
+ }
9585
+ if (summary.failed.length > 0) {
9586
+ logger.warn(`[SchemaRegistry] ${summary.failed.length} schema(s) failed to seed: ` +
9587
+ summary.failed.map((f) => `${f.entity_type} (${f.error})`).join("; "));
9588
+ }
9589
+ }
9590
+ catch (err) {
9591
+ // Never block boot — a briefly-unavailable DB must not stop the server.
9592
+ logger.warn(`[SchemaRegistry] failed to seed built-in schemas: ${err.message}`);
9593
+ }
9557
9594
  // Seed `issue` schema for the GitHub Issues integration.
9558
9595
  try {
9559
9596
  const { seedIssueSchema } = await import("./services/issues/seed_schema.js");
@@ -9572,6 +9609,15 @@ export async function startHTTPServer() {
9572
9609
  catch (err) {
9573
9610
  logger.warn(`[Plans] failed to seed plan schema: ${err.message}`);
9574
9611
  }
9612
+ // Seed `agent_session` + `session_transcript` schemas (transcript ingest).
9613
+ try {
9614
+ const { seedSessionSchemas } = await import("./services/sessions/seed_schema.js");
9615
+ await seedSessionSchemas();
9616
+ logger.info("[Sessions] agent_session + session_transcript schemas seeded");
9617
+ }
9618
+ catch (err) {
9619
+ logger.warn(`[Sessions] failed to seed session schemas: ${err.message}`);
9620
+ }
9575
9621
  // Seed `skill` schema (harness-mirrored skills, slash-command palette).
9576
9622
  try {
9577
9623
  const { seedSkillSchema } = await import("./services/skills/seed_schema.js");
@@ -9683,7 +9729,7 @@ export async function startHTTPServer() {
9683
9729
  // user rather than the shared nil-UUID LOCAL_DEV_USER_ID fallback.
9684
9730
  _localSandboxActive = true;
9685
9731
  try {
9686
- const sandboxUser = ensureLocalSandboxUser();
9732
+ const sandboxUser = await ensureLocalSandboxUser();
9687
9733
  logger.info(`[sandbox_mode] local_sandbox principal provisioned: ${sandboxUser.id}`);
9688
9734
  }
9689
9735
  catch (err) {
@@ -9738,6 +9784,42 @@ export async function startHTTPServer() {
9738
9784
  // Only auto-start if not disabled AND if this is the main module
9739
9785
  const isMainModule = import.meta.url === `file://${process.argv[1]}`;
9740
9786
  if (process.env.NEOTOMA_ACTIONS_DISABLE_AUTOSTART !== "1" && isMainModule) {
9787
+ // Exit diagnostics. A long-running server should never reach `beforeExit`:
9788
+ // that event only fires when the event loop has drained, i.e. nothing is
9789
+ // left holding the process open. In production this happened silently and
9790
+ // repeatedly — the process exited with code 0 every ~12 minutes with no
9791
+ // error and no signal, and because the exit was CLEAN the platform read it
9792
+ // as success and declined to restart, turning it into an outage
9793
+ // (neotoma#2094).
9794
+ //
9795
+ // Logging the active resources at that moment names what the loop was (and
9796
+ // was no longer) waiting on, which is the one piece of evidence needed to
9797
+ // find the handle that stops holding the server up. `exit` is logged too so
9798
+ // the code and reason are attributable even when the cause is external.
9799
+ process.on("beforeExit", (code) => {
9800
+ let resources = [];
9801
+ try {
9802
+ const getResources = process
9803
+ .getActiveResourcesInfo;
9804
+ if (typeof getResources === "function")
9805
+ resources = getResources.call(process);
9806
+ }
9807
+ catch {
9808
+ /* diagnostics must never themselves throw */
9809
+ }
9810
+ console.error(`[neotoma] beforeExit code=${code} — event loop drained; a long-running ` +
9811
+ `server should not reach here. activeResources=${JSON.stringify(resources)} ` +
9812
+ `uptime=${process.uptime().toFixed(1)}s`);
9813
+ });
9814
+ process.on("exit", (code) => {
9815
+ console.error(`[neotoma] exit code=${code} uptime=${process.uptime().toFixed(1)}s`);
9816
+ });
9817
+ for (const sig of ["SIGTERM", "SIGINT", "SIGHUP"]) {
9818
+ process.on(sig, () => {
9819
+ console.error(`[neotoma] received ${sig} uptime=${process.uptime().toFixed(1)}s`);
9820
+ process.exit(0);
9821
+ });
9822
+ }
9741
9823
  startHTTPServer().catch((err) => {
9742
9824
  console.error("Failed to start HTTP server:", err);
9743
9825
  process.exit(1);