neotoma 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -47
- package/dist/actions.d.ts +116 -27
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +560 -191
- package/dist/actions.js.map +1 -1
- package/dist/cli/agents_grants_import.d.ts.map +1 -1
- package/dist/cli/agents_grants_import.js +22 -2
- package/dist/cli/agents_grants_import.js.map +1 -1
- package/dist/cli/index.d.ts +29 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +993 -220
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parse_schema_fields.d.ts +2 -1
- package/dist/cli/parse_schema_fields.d.ts.map +1 -1
- package/dist/cli/parse_schema_fields.js +4 -1
- package/dist/cli/parse_schema_fields.js.map +1 -1
- package/dist/docs/api/rest_api.md +169 -365
- package/dist/docs/architecture/architecture.md +250 -830
- package/dist/docs/architecture/idempotence_pattern.md +101 -0
- package/dist/docs/conventions/documentation_standards.md +184 -75
- package/dist/docs/developer/agentic_eval_fixture_format.md +2 -0
- package/dist/docs/developer/atomic_corrections.md +17 -0
- package/dist/docs/developer/cli_agent_instructions.md +30 -4
- package/dist/docs/developer/cli_reference.md +217 -170
- package/dist/docs/developer/fleet_onboarding.md +7 -6
- package/dist/docs/developer/mcp/instructions.md +29 -18
- package/dist/docs/developer/mcp_overview.md +4 -4
- package/dist/docs/integrations/matrix.md +4 -4
- package/dist/docs/operations/configuration.md +2 -1
- package/dist/docs/operations/running_the_server.md +1 -1
- package/dist/docs/reference/error_codes.md +1 -0
- package/dist/docs/specs/MCP_SPEC.md +5 -4
- package/dist/docs/subsystems/agent_attribution_integration.md +159 -0
- package/dist/docs/subsystems/agent_capabilities.md +57 -1
- package/dist/docs/subsystems/agentic_eval.md +13 -2
- package/dist/docs/subsystems/deletion.md +24 -9
- package/dist/docs/subsystems/errors.md +80 -45
- package/dist/docs/subsystems/ingestion/ingestion.md +1 -1
- package/dist/docs/subsystems/reducer.md +208 -52
- package/dist/docs/subsystems/schema_registry.md +4 -1
- package/dist/docs/subsystems/sources.md +25 -0
- package/dist/docs/subsystems/substrate_events.md +1 -1
- package/dist/docs/testing/automated_test_catalog.md +89 -20
- package/dist/docs/testing/testing_standard.md +33 -0
- package/dist/docs/vocabulary/canonical_terms.md +212 -180
- package/dist/embeddings.d.ts +4 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +7 -10
- package/dist/embeddings.js.map +1 -1
- package/dist/inspector/assets/{access_policies-B1HM9aJQ.js → access_policies-CJOlV60d.js} +1 -1
- package/dist/inspector/assets/{agent_badge-XmciduFJ.js → agent_badge-BnBqn8kt.js} +1 -1
- package/dist/inspector/assets/{agent_detail-DOEe2mhV.js → agent_detail-wP0ccjhX.js} +1 -1
- package/dist/inspector/assets/{agent_filter-Dio0XybG.js → agent_filter-Bp2xA131.js} +1 -1
- package/dist/inspector/assets/{agent_grant_detail-BfUFnclY.js → agent_grant_detail-HIGr5dq_.js} +1 -1
- package/dist/inspector/assets/agent_grant_form-BoNBvzEf.js +1 -0
- package/dist/inspector/assets/{agent_grants-DZaHIPk8.js → agent_grants-CTKkadE5.js} +1 -1
- package/dist/inspector/assets/{agents-B-f-NRE2.js → agents-CPwJLNJN.js} +1 -1
- package/dist/inspector/assets/{api_not_configured_state-Ou-G3uKz.js → api_not_configured_state-ivqIcs2c.js} +1 -1
- package/dist/inspector/assets/{attribution_card-CIkjiijF.js → attribution_card-5ZAqRz6K.js} +1 -1
- package/dist/inspector/assets/{attribution_summary-0ckzYad9.js → attribution_summary-D_MHFv7e.js} +1 -1
- package/dist/inspector/assets/{bundles-Burq1ci7.js → bundles-QfMciBj9.js} +1 -1
- package/dist/inspector/assets/{card-CTv_O7eJ.js → card-1rkzdi9W.js} +1 -1
- package/dist/inspector/assets/{checkbox--jk4IAjc.js → checkbox-CO5dXSZf.js} +1 -1
- package/dist/inspector/assets/{compliance-B3vrfBCU.js → compliance-OTGEtY7Y.js} +1 -1
- package/dist/inspector/assets/{confirm-dialog-DgDSsLkR.js → confirm-dialog-D0cZ5vck.js} +1 -1
- package/dist/inspector/assets/{conversation_common-BAdG50H9.js → conversation_common-cSILaHXq.js} +1 -1
- package/dist/inspector/assets/{conversation_detail-DIUc4HKE.js → conversation_detail-DT-lGapN.js} +1 -1
- package/dist/inspector/assets/{copy_id_button-D1VkPBFT.js → copy_id_button-Dz0JDn4l.js} +1 -1
- package/dist/inspector/assets/{copyable_code_block-ChPCJ02V.js → copyable_code_block-B2f99g8Q.js} +1 -1
- package/dist/inspector/assets/{corrections-ChJ2p7_i.js → corrections-KvxGvvLV.js} +1 -1
- package/dist/inspector/assets/{dashboard-DIYNcYg6.js → dashboard-BudvW21X.js} +1 -1
- package/dist/inspector/assets/{data-table-C4VXfuGY.js → data-table-d9EMxowf.js} +1 -1
- package/dist/inspector/assets/{design-DXOwL75T.js → design-DyiQbEeP.js} +1 -1
- package/dist/inspector/assets/{dialog-CXVzcRia.js → dialog-BmW1Iw8o.js} +1 -1
- package/dist/inspector/assets/{docs-B26tYp-6.js → docs-CT3IYX0E.js} +1 -1
- package/dist/inspector/assets/{docs_page_layout-CrM6Un_f.js → docs_page_layout-CosNjUZa.js} +1 -1
- package/dist/inspector/assets/{embed_graph-C2Jc2iwk.js → embed_graph-Dk1-zVnz.js} +1 -1
- package/dist/inspector/assets/{empty_state-d5guw2_7.js → empty_state-B8Ot2oGB.js} +1 -1
- package/dist/inspector/assets/{entities-BrnaqwF9.js → entities-Dt5Ts5UN.js} +1 -1
- package/dist/inspector/assets/{entity_correct-DnD1oYUl.js → entity_correct-D2PHEpGY.js} +1 -1
- package/dist/inspector/assets/{entity_history-PFlm7n3S.js → entity_history-DHgNythA.js} +1 -1
- package/dist/inspector/assets/{entity_history_sections-C5gKEqH8.js → entity_history_sections-Cnxblw-Z.js} +1 -1
- package/dist/inspector/assets/{entity_link-BlAO6pqg.js → entity_link-DWf1VD1n.js} +1 -1
- package/dist/inspector/assets/{entity_relationships_by_type-DzLwN95P.js → entity_relationships_by_type-B0-TLC5o.js} +1 -1
- package/dist/inspector/assets/{entity_segment_page-CGm6UKGn.js → entity_segment_page-CzZ0VhKm.js} +1 -1
- package/dist/inspector/assets/{entity_table_column_toggle-CotVPBog.js → entity_table_column_toggle-C73aErGE.js} +1 -1
- package/dist/inspector/assets/{entity_timeline-DYqizEmo.js → entity_timeline-SAq5qvB5.js} +1 -1
- package/dist/inspector/assets/{entity_types-CntHwuK5.js → entity_types-DEcDvyO0.js} +1 -1
- package/dist/inspector/assets/{faq-_NXFNTgM.js → faq-DazWIFdv.js} +1 -1
- package/dist/inspector/assets/{graph_auto_fit-BeH9MOss.js → graph_auto_fit-CSzD7yNh.js} +1 -1
- package/dist/inspector/assets/{graph_explorer-CxWZohQv.js → graph_explorer-BEXXiMQ1.js} +1 -1
- package/dist/inspector/assets/{home-DudMw6_Z.js → home-3AZtmjKp.js} +1 -1
- package/dist/inspector/assets/{index-DDgXel2r.js → index-Cii0RALL.js} +1 -1
- package/dist/inspector/assets/{index-VT5Dxs36.js → index-Dt_q_A1j.js} +1 -1
- package/dist/inspector/assets/{index-BMURChxZ.js → index-fc4sMprn.js} +2 -2
- package/dist/inspector/assets/{index-WhUlQzmL.css → index-yoY5L3eB.css} +1 -1
- package/dist/inspector/assets/interpretations-CjR2csNL.js +1 -0
- package/dist/inspector/assets/{interpretations-xJnQ-uYX.js → interpretations-DtzoiGuK.js} +1 -1
- package/dist/inspector/assets/{issue_author_attribution-DOn6PLKU.js → issue_author_attribution-DtmFaluD.js} +1 -1
- package/dist/inspector/assets/{issue_detail-DztHpggK.js → issue_detail-ChHiz9I_.js} +1 -1
- package/dist/inspector/assets/{issues-BkgvGReD.js → issues-BoxR2nB2.js} +1 -1
- package/dist/inspector/assets/{json_viewer-xKCfoCA1.js → json_viewer-KAFp_j-8.js} +1 -1
- package/dist/inspector/assets/{label-DDkYZSlU.js → label-Dn0ARjYl.js} +1 -1
- package/dist/inspector/assets/{live_relative_time-D-U5_U5-.js → live_relative_time-gOIFOOLR.js} +1 -1
- package/dist/inspector/assets/{mobile_filter_popover-DQNcOXkp.js → mobile_filter_popover-2ezU-mlZ.js} +1 -1
- package/dist/inspector/assets/{not_found-D6QKUWRM.js → not_found-DwX7ikQC.js} +1 -1
- package/dist/inspector/assets/{oauth_callback-BVxx0KXw.js → oauth_callback-BDGLOyTN.js} +1 -1
- package/dist/inspector/assets/{oauth_signin-DI4E46_1.js → oauth_signin-CGcCtq-V.js} +1 -1
- package/dist/inspector/assets/{observations-C1wQYMZV.js → observations-DvcUGpHm.js} +1 -1
- package/dist/inspector/assets/{page_shell-EP5xmaGY.js → page_shell-DiwchdUC.js} +1 -1
- package/dist/inspector/assets/{pagination-B_G7Mbyi.js → pagination-BGIUHQkm.js} +1 -1
- package/dist/inspector/assets/{peer_detail-BC-DSDif.js → peer_detail-DeD1sTeJ.js} +1 -1
- package/dist/inspector/assets/{peers-fVyfV57y.js → peers-CXe47m55.js} +1 -1
- package/dist/inspector/assets/{pin_primitive_button-_TIZX9AI.js → pin_primitive_button-C37Ha0Bt.js} +1 -1
- package/dist/inspector/assets/{recent_activity-CFv4LsTR.js → recent_activity-CzQjt4ym.js} +1 -1
- package/dist/inspector/assets/{recent_conversations-DU1XrX7M.js → recent_conversations-BFYZTxUJ.js} +1 -1
- package/dist/inspector/assets/{recent_conversations-Cac7CkDg.js → recent_conversations-BnUl4h4t.js} +1 -1
- package/dist/inspector/assets/{recent_records_feed-BFJzHH4J.js → recent_records_feed-y1n0RuMa.js} +1 -1
- package/dist/inspector/assets/record_activity-kXm-jtQ6.js +1 -0
- package/dist/inspector/assets/{relationship_detail-Cc9dVYco.js → relationship_detail-ic83ZCwG.js} +1 -1
- package/dist/inspector/assets/{relationship_panel_groups-Bknw8oKA.js → relationship_panel_groups-CI1fZIU_.js} +1 -1
- package/dist/inspector/assets/{relationships-DoCpO8F8.js → relationships-C1JrEl85.js} +1 -1
- package/dist/inspector/assets/{relationships-CJ7GneMs.js → relationships-C7iSdgXG.js} +1 -1
- package/dist/inspector/assets/{sandbox-BrYkvSj5.js → sandbox-Dst-WJhB.js} +1 -1
- package/dist/inspector/assets/{schema_detail-CdX2n82a.js → schema_detail-C7_JSWAw.js} +1 -1
- package/dist/inspector/assets/{schemas-CR6vDZ-d.js → schemas-BgrIpRVJ.js} +1 -1
- package/dist/inspector/assets/{search-uJmTOqpx.js → search-BUmT32dy.js} +1 -1
- package/dist/inspector/assets/{segmented_control-Dgdqohml.js → segmented_control-t1pBImFE.js} +1 -1
- package/dist/inspector/assets/{select-BCmhrYiM.js → select-DU7Jwzuy.js} +1 -1
- package/dist/inspector/assets/{settings-DRbR3maP.js → settings-BAPHY6RY.js} +1 -1
- package/dist/inspector/assets/{source_content-BuBSyT72.js → source_content-CIhKrGsl.js} +1 -1
- package/dist/inspector/assets/{source_content_open_button-DAYwX9Dh.js → source_content_open_button-Erw2ErgG.js} +1 -1
- package/dist/inspector/assets/{source_detail-DhEV5aJv.js → source_detail-C0XOo0Uu.js} +1 -1
- package/dist/inspector/assets/{source_link-CE1kUYaL.js → source_link-CkcRMEO3.js} +1 -1
- package/dist/inspector/assets/{sources-LZmXkGnn.js → sources-C0JBEINb.js} +1 -1
- package/dist/inspector/assets/{subscriptions-b_DO87jI.js → subscriptions-DxU4kHGt.js} +1 -1
- package/dist/inspector/assets/{switch-B6x__4FK.js → switch-BhKadp29.js} +1 -1
- package/dist/inspector/assets/{tabs-Bi6BUJqc.js → tabs-d81XObYb.js} +1 -1
- package/dist/inspector/assets/{textarea-3QlsHqkf.js → textarea-DTiKLH24.js} +1 -1
- package/dist/inspector/assets/{timeline-BoE9ZRrA.js → timeline-98QXcGln.js} +1 -1
- package/dist/inspector/assets/{timeline-a2L8UjV_.js → timeline-BEyKQpER.js} +1 -1
- package/dist/inspector/assets/{timeline_event_detail-D8eTp4i6.js → timeline_event_detail-DzGzqtrx.js} +1 -1
- package/dist/inspector/assets/{turn_detail-B2uAxNHK.js → turn_detail-CDP_FEPT.js} +1 -1
- package/dist/inspector/assets/{turns-BpYk8UFz.js → turns-DLmr1Iue.js} +1 -1
- package/dist/inspector/assets/{use_agents-Bt3UqR6w.js → use_agents-D3rvlr5v.js} +1 -1
- package/dist/inspector/assets/{use_entities-wuMfztjo.js → use_entities-CVikeUOv.js} +1 -1
- package/dist/inspector/assets/use_interpretations-CCoQ6ihs.js +1 -0
- package/dist/inspector/assets/{use_mutations-BhRvMBFs.js → use_mutations-BhwSLXcJ.js} +1 -1
- package/dist/inspector/assets/{use_peers-CD_9h7zQ.js → use_peers-QTm1Z_BV.js} +1 -1
- package/dist/inspector/assets/{use_relationships-CjsGAwR8.js → use_relationships-DtymxAI9.js} +1 -1
- package/dist/inspector/assets/{use_stats-IyFfTD4L.js → use_stats-BW1Z-dI2.js} +1 -1
- package/dist/inspector/assets/{use_timeline-BueAlCUW.js → use_timeline-DND87Sof.js} +1 -1
- package/dist/inspector/assets/{use_turns-CZtZ839A.js → use_turns-Dfb6Q8Ru.js} +1 -1
- package/dist/inspector/assets/{world_time_event_timeline-D8bL35LA.js → world_time_event_timeline-DxzejNrJ.js} +1 -1
- package/dist/inspector/index.html +2 -2
- package/dist/maintenance/entity_lifecycle_inventory.d.ts +31 -0
- package/dist/maintenance/entity_lifecycle_inventory.d.ts.map +1 -0
- package/dist/maintenance/entity_lifecycle_inventory.js +107 -0
- package/dist/maintenance/entity_lifecycle_inventory.js.map +1 -0
- package/dist/maintenance/entity_lifecycle_manifest.d.ts +84 -0
- package/dist/maintenance/entity_lifecycle_manifest.d.ts.map +1 -0
- package/dist/maintenance/entity_lifecycle_manifest.js +225 -0
- package/dist/maintenance/entity_lifecycle_manifest.js.map +1 -0
- package/dist/maintenance/entity_lifecycle_migration.d.ts +11 -0
- package/dist/maintenance/entity_lifecycle_migration.d.ts.map +1 -0
- package/dist/maintenance/entity_lifecycle_migration.js +576 -0
- package/dist/maintenance/entity_lifecycle_migration.js.map +1 -0
- package/dist/maintenance/entity_lifecycle_records.d.ts +12 -0
- package/dist/maintenance/entity_lifecycle_records.d.ts.map +1 -0
- package/dist/maintenance/entity_lifecycle_records.js +95 -0
- package/dist/maintenance/entity_lifecycle_records.js.map +1 -0
- package/dist/mcp_ws_bridge.js +26 -3
- package/dist/mcp_ws_bridge.js.map +1 -1
- package/dist/reducers/observation_reducer.d.ts +67 -3
- package/dist/reducers/observation_reducer.d.ts.map +1 -1
- package/dist/reducers/observation_reducer.js +202 -70
- package/dist/reducers/observation_reducer.js.map +1 -1
- package/dist/repositories/db/connection.d.ts +2 -0
- package/dist/repositories/db/connection.d.ts.map +1 -1
- package/dist/repositories/db/connection.js +27 -0
- package/dist/repositories/db/connection.js.map +1 -1
- package/dist/repositories/db/store_condition_schema.d.ts +3 -0
- package/dist/repositories/db/store_condition_schema.d.ts.map +1 -0
- package/dist/repositories/db/store_condition_schema.js +14 -0
- package/dist/repositories/db/store_condition_schema.js.map +1 -0
- package/dist/repositories/sqlite/local_db_adapter.d.ts +2 -0
- package/dist/repositories/sqlite/local_db_adapter.d.ts.map +1 -1
- package/dist/repositories/sqlite/local_db_adapter.js +21 -5
- package/dist/repositories/sqlite/local_db_adapter.js.map +1 -1
- package/dist/repositories/sqlite/sqlite_client.d.ts.map +1 -1
- package/dist/repositories/sqlite/sqlite_client.js +2 -0
- package/dist/repositories/sqlite/sqlite_client.js.map +1 -1
- package/dist/repositories/sqlite/sqlite_driver.d.ts +10 -2
- package/dist/repositories/sqlite/sqlite_driver.d.ts.map +1 -1
- package/dist/repositories/sqlite/sqlite_driver.js +32 -5
- package/dist/repositories/sqlite/sqlite_driver.js.map +1 -1
- package/dist/repositories/worker/worker_file_database.d.ts +19 -0
- package/dist/repositories/worker/worker_file_database.d.ts.map +1 -1
- package/dist/repositories/worker/worker_file_database.js +23 -0
- package/dist/repositories/worker/worker_file_database.js.map +1 -1
- package/dist/server.d.ts +10 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +550 -112
- package/dist/server.js.map +1 -1
- package/dist/services/agent_capabilities.d.ts +19 -4
- package/dist/services/agent_capabilities.d.ts.map +1 -1
- package/dist/services/agent_capabilities.js +60 -0
- package/dist/services/agent_capabilities.js.map +1 -1
- package/dist/services/agent_grants.d.ts.map +1 -1
- package/dist/services/agent_grants.js +19 -0
- package/dist/services/agent_grants.js.map +1 -1
- package/dist/services/array_item_patch.d.ts +158 -0
- package/dist/services/array_item_patch.d.ts.map +1 -0
- package/dist/services/array_item_patch.js +375 -0
- package/dist/services/array_item_patch.js.map +1 -0
- package/dist/services/attachment_resolution.d.ts.map +1 -1
- package/dist/services/attachment_resolution.js +2 -0
- package/dist/services/attachment_resolution.js.map +1 -1
- package/dist/services/attribution_redaction.d.ts.map +1 -1
- package/dist/services/attribution_redaction.js +16 -2
- package/dist/services/attribution_redaction.js.map +1 -1
- package/dist/services/batch_correction.d.ts +2 -0
- package/dist/services/batch_correction.d.ts.map +1 -1
- package/dist/services/batch_correction.js +19 -15
- package/dist/services/batch_correction.js.map +1 -1
- package/dist/services/canonical_markdown.d.ts +7 -23
- package/dist/services/canonical_markdown.d.ts.map +1 -1
- package/dist/services/canonical_markdown.js +10 -0
- package/dist/services/canonical_markdown.js.map +1 -1
- package/dist/services/correction.d.ts +118 -0
- package/dist/services/correction.d.ts.map +1 -1
- package/dist/services/correction.js +298 -36
- package/dist/services/correction.js.map +1 -1
- package/dist/services/correction_transaction.d.ts +27 -0
- package/dist/services/correction_transaction.d.ts.map +1 -0
- package/dist/services/correction_transaction.js +189 -0
- package/dist/services/correction_transaction.js.map +1 -0
- package/dist/services/dashboard_stats.d.ts.map +1 -1
- package/dist/services/dashboard_stats.js +8 -3
- package/dist/services/dashboard_stats.js.map +1 -1
- package/dist/services/deletion.d.ts.map +1 -1
- package/dist/services/deletion.js +235 -101
- package/dist/services/deletion.js.map +1 -1
- package/dist/services/entity_lifecycle_authority.d.ts +62 -0
- package/dist/services/entity_lifecycle_authority.d.ts.map +1 -0
- package/dist/services/entity_lifecycle_authority.js +210 -0
- package/dist/services/entity_lifecycle_authority.js.map +1 -0
- package/dist/services/entity_lifecycle_ingress.d.ts +15 -0
- package/dist/services/entity_lifecycle_ingress.d.ts.map +1 -0
- package/dist/services/entity_lifecycle_ingress.js +72 -0
- package/dist/services/entity_lifecycle_ingress.js.map +1 -0
- package/dist/services/entity_lifecycle_storage.d.ts +40 -0
- package/dist/services/entity_lifecycle_storage.d.ts.map +1 -0
- package/dist/services/entity_lifecycle_storage.js +415 -0
- package/dist/services/entity_lifecycle_storage.js.map +1 -0
- package/dist/services/entity_queries.d.ts +14 -1
- package/dist/services/entity_queries.d.ts.map +1 -1
- package/dist/services/entity_queries.js +117 -70
- package/dist/services/entity_queries.js.map +1 -1
- package/dist/services/entity_resolution.d.ts +24 -0
- package/dist/services/entity_resolution.d.ts.map +1 -1
- package/dist/services/entity_resolution.js +60 -4
- package/dist/services/entity_resolution.js.map +1 -1
- package/dist/services/entity_semantic_search.d.ts +3 -0
- package/dist/services/entity_semantic_search.d.ts.map +1 -1
- package/dist/services/entity_semantic_search.js +12 -4
- package/dist/services/entity_semantic_search.js.map +1 -1
- package/dist/services/entity_snapshot_at_time.d.ts +3 -1
- package/dist/services/entity_snapshot_at_time.d.ts.map +1 -1
- package/dist/services/entity_snapshot_at_time.js +71 -16
- package/dist/services/entity_snapshot_at_time.js.map +1 -1
- package/dist/services/entity_snapshot_embedding.d.ts +8 -1
- package/dist/services/entity_snapshot_embedding.d.ts.map +1 -1
- package/dist/services/entity_snapshot_embedding.js +60 -3
- package/dist/services/entity_snapshot_embedding.js.map +1 -1
- package/dist/services/entity_split.d.ts.map +1 -1
- package/dist/services/entity_split.js +4 -2
- package/dist/services/entity_split.js.map +1 -1
- package/dist/services/entity_version.d.ts +12 -0
- package/dist/services/entity_version.d.ts.map +1 -0
- package/dist/services/entity_version.js +17 -0
- package/dist/services/entity_version.js.map +1 -0
- package/dist/services/instance_policy.d.ts +3 -1
- package/dist/services/instance_policy.d.ts.map +1 -1
- package/dist/services/instance_policy.js +16 -2
- package/dist/services/instance_policy.js.map +1 -1
- package/dist/services/interpretation.d.ts +5 -0
- package/dist/services/interpretation.d.ts.map +1 -1
- package/dist/services/interpretation.js +3 -1
- package/dist/services/interpretation.js.map +1 -1
- package/dist/services/local_entity_embedding.d.ts +3 -0
- package/dist/services/local_entity_embedding.d.ts.map +1 -1
- package/dist/services/local_entity_embedding.js +14 -2
- package/dist/services/local_entity_embedding.js.map +1 -1
- package/dist/services/memory_export.d.ts.map +1 -1
- package/dist/services/memory_export.js +2 -1
- package/dist/services/memory_export.js.map +1 -1
- package/dist/services/observation_insert.d.ts +137 -0
- package/dist/services/observation_insert.d.ts.map +1 -0
- package/dist/services/observation_insert.js +124 -0
- package/dist/services/observation_insert.js.map +1 -0
- package/dist/services/observation_source_rank.d.ts +29 -0
- package/dist/services/observation_source_rank.d.ts.map +1 -0
- package/dist/services/observation_source_rank.js +37 -0
- package/dist/services/observation_source_rank.js.map +1 -0
- package/dist/services/observation_source_warning.d.ts +66 -0
- package/dist/services/observation_source_warning.d.ts.map +1 -0
- package/dist/services/observation_source_warning.js +71 -0
- package/dist/services/observation_source_warning.js.map +1 -0
- package/dist/services/observation_storage.d.ts +16 -11
- package/dist/services/observation_storage.d.ts.map +1 -1
- package/dist/services/observation_storage.js +25 -38
- package/dist/services/observation_storage.js.map +1 -1
- package/dist/services/provenance_data_origin.d.ts +81 -0
- package/dist/services/provenance_data_origin.d.ts.map +1 -0
- package/dist/services/provenance_data_origin.js +171 -0
- package/dist/services/provenance_data_origin.js.map +1 -0
- package/dist/services/raw_fragments.d.ts +2 -0
- package/dist/services/raw_fragments.d.ts.map +1 -1
- package/dist/services/raw_fragments.js +20 -4
- package/dist/services/raw_fragments.js.map +1 -1
- package/dist/services/raw_storage.d.ts.map +1 -1
- package/dist/services/raw_storage.js +3 -0
- package/dist/services/raw_storage.js.map +1 -1
- package/dist/services/relationship_write_capability.d.ts +85 -0
- package/dist/services/relationship_write_capability.d.ts.map +1 -0
- package/dist/services/relationship_write_capability.js +139 -0
- package/dist/services/relationship_write_capability.js.map +1 -0
- package/dist/services/relationships.d.ts.map +1 -1
- package/dist/services/relationships.js +20 -0
- package/dist/services/relationships.js.map +1 -1
- package/dist/services/root_landing/site_nav.d.ts.map +1 -1
- package/dist/services/root_landing/site_nav.js +1 -16
- package/dist/services/root_landing/site_nav.js.map +1 -1
- package/dist/services/schema_reference_linking.d.ts.map +1 -1
- package/dist/services/schema_reference_linking.js +39 -0
- package/dist/services/schema_reference_linking.js.map +1 -1
- package/dist/services/schema_registry.d.ts +22 -3
- package/dist/services/schema_registry.d.ts.map +1 -1
- package/dist/services/schema_registry.js +60 -3
- package/dist/services/schema_registry.js.map +1 -1
- package/dist/services/snapshot_computation.d.ts +6 -3
- package/dist/services/snapshot_computation.d.ts.map +1 -1
- package/dist/services/snapshot_computation.js +40 -11
- package/dist/services/snapshot_computation.js.map +1 -1
- package/dist/services/snapshot_export.d.ts.map +1 -1
- package/dist/services/snapshot_export.js +2 -1
- package/dist/services/snapshot_export.js.map +1 -1
- package/dist/services/stable_serialize.d.ts +19 -0
- package/dist/services/stable_serialize.d.ts.map +1 -0
- package/dist/services/stable_serialize.js +40 -0
- package/dist/services/stable_serialize.js.map +1 -0
- package/dist/services/store_admission.d.ts +34 -0
- package/dist/services/store_admission.d.ts.map +1 -0
- package/dist/services/store_admission.js +155 -0
- package/dist/services/store_admission.js.map +1 -0
- package/dist/services/store_combined_admission.d.ts +7 -0
- package/dist/services/store_combined_admission.d.ts.map +1 -0
- package/dist/services/store_combined_admission.js +59 -0
- package/dist/services/store_combined_admission.js.map +1 -0
- package/dist/services/store_condition_identity.d.ts +11 -0
- package/dist/services/store_condition_identity.d.ts.map +1 -0
- package/dist/services/store_condition_identity.js +44 -0
- package/dist/services/store_condition_identity.js.map +1 -0
- package/dist/services/store_condition_keys.d.ts +72 -0
- package/dist/services/store_condition_keys.d.ts.map +1 -0
- package/dist/services/store_condition_keys.js +249 -0
- package/dist/services/store_condition_keys.js.map +1 -0
- package/dist/services/store_condition_request.d.ts +2 -0
- package/dist/services/store_condition_request.d.ts.map +1 -0
- package/dist/services/store_condition_request.js +39 -0
- package/dist/services/store_condition_request.js.map +1 -0
- package/dist/services/store_conditional.d.ts +50 -0
- package/dist/services/store_conditional.d.ts.map +1 -0
- package/dist/services/store_conditional.js +392 -0
- package/dist/services/store_conditional.js.map +1 -0
- package/dist/services/store_mutation_authority.d.ts +4 -0
- package/dist/services/store_mutation_authority.d.ts.map +1 -0
- package/dist/services/store_mutation_authority.js +42 -0
- package/dist/services/store_mutation_authority.js.map +1 -0
- package/dist/services/store_ownership_admission.d.ts +3 -0
- package/dist/services/store_ownership_admission.d.ts.map +1 -0
- package/dist/services/store_ownership_admission.js +60 -0
- package/dist/services/store_ownership_admission.js.map +1 -0
- package/dist/services/store_write_state.d.ts +112 -0
- package/dist/services/store_write_state.d.ts.map +1 -0
- package/dist/services/store_write_state.js +254 -0
- package/dist/services/store_write_state.js.map +1 -0
- package/dist/services/sync/peer_sync_batch.d.ts.map +1 -1
- package/dist/services/sync/peer_sync_batch.js +2 -1
- package/dist/services/sync/peer_sync_batch.js.map +1 -1
- package/dist/services/timeline_events.d.ts +2 -0
- package/dist/services/timeline_events.d.ts.map +1 -1
- package/dist/services/timeline_events.js +2 -0
- package/dist/services/timeline_events.js.map +1 -1
- package/dist/shared/action_handlers/entity_handlers.d.ts +3 -0
- package/dist/shared/action_handlers/entity_handlers.d.ts.map +1 -1
- package/dist/shared/action_handlers/entity_handlers.js +280 -15
- package/dist/shared/action_handlers/entity_handlers.js.map +1 -1
- package/dist/shared/action_schemas.d.ts +683 -227
- package/dist/shared/action_schemas.d.ts.map +1 -1
- package/dist/shared/action_schemas.js +243 -8
- package/dist/shared/action_schemas.js.map +1 -1
- package/dist/shared/bind_host.d.ts +28 -0
- package/dist/shared/bind_host.d.ts.map +1 -0
- package/dist/shared/bind_host.js +34 -0
- package/dist/shared/bind_host.js.map +1 -0
- package/dist/shared/contract_mappings.d.ts.map +1 -1
- package/dist/shared/contract_mappings.js +27 -0
- package/dist/shared/contract_mappings.js.map +1 -1
- package/dist/shared/entity_read_contract.d.ts +55 -0
- package/dist/shared/entity_read_contract.d.ts.map +1 -0
- package/dist/shared/entity_read_contract.js +201 -0
- package/dist/shared/entity_read_contract.js.map +1 -0
- package/dist/shared/openapi_types.d.ts +986 -31
- package/dist/shared/openapi_types.d.ts.map +1 -1
- package/dist/tool_definitions.d.ts +1 -1
- package/dist/tool_definitions.d.ts.map +1 -1
- package/dist/tool_definitions.js +25 -4
- package/dist/tool_definitions.js.map +1 -1
- package/dist/utils/lucide_icons.d.ts +1 -1
- package/dist/utils/safe_request_log_format.d.ts +2 -0
- package/dist/utils/safe_request_log_format.d.ts.map +1 -1
- package/dist/utils/safe_request_log_format.js +53 -0
- package/dist/utils/safe_request_log_format.js.map +1 -1
- package/docs/README.md +49 -0
- package/docs/developer/mcp/instructions.md +29 -18
- package/openapi.yaml +1240 -22
- package/package.json +10 -2
- package/dist/inspector/assets/agent_grant_form-DoLjngLK.js +0 -1
- package/dist/inspector/assets/interpretations-CJF4giZE.js +0 -1
- package/dist/inspector/assets/record_activity-Bcv9OocC.js +0 -1
- package/dist/inspector/assets/use_interpretations-L8TsWYxH.js +0 -1
package/README.md
CHANGED
|
@@ -1,38 +1,42 @@
|
|
|
1
1
|
# Neotoma
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**A record, not recall.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Neotoma is the system of record for AI agents. Without one, an agent works from whatever it happens to recall: part of the last session, a note its tool saved, or nothing. With one, it reads what was stored, from which source, and what is current now, so the agents you connect can defer to one answer.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g neotoma
|
|
9
|
+
neotoma init
|
|
10
|
+
neotoma setup --tool claude-code
|
|
11
|
+
```
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
`neotoma setup --tool claude-code` connects Claude Code: it writes MCP entries, CLI instruction files, and an allow rule that lets Claude Code run any `neotoma` command; [Install](#install) lists everything it writes. Human-run setup omits `--yes`; automated setup may add it after the operator authorizes those changes. Omission does not prevent every setup write.
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
After a plain npm install, CLI data commands such as `neotoma store` return `AUTH_REQUIRED`, because the CLI uses the production profile, which needs a token. Run them as `neotoma dev ...` or with `NEOTOMA_ENV=development`.
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
Other hosts are listed under [Connect your tools](#connect-your-tools).
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
**Known limitations:** [docs/known_limitations.md](docs/known_limitations.md) lists behaviour you may run into, each with a workaround and its tracking issue.
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
**Agents cannot own work they cannot verify.**
|
|
22
|
+
|
|
23
|
+
You cannot delegate real work to agents you cannot hold to account. Accountability has two halves: what was true, and who was authorized. Neotoma answers what was true. Your agents can produce a value; they cannot tell you its version, its source, or whether it is still current. Neotoma keeps every fact as an observation tied to its source, so you can see where a value came from and what is current now.
|
|
24
|
+
|
|
25
|
+
What ships today is the foundation of that record: Neotoma ingests sources into observations that the write path does not edit (the database does not enforce this) and computes entity snapshots, with each current field tracing back to the observation that set it. It is exposed over an MCP server, a REST API, a CLI, and a bundled web Inspector. See [Vision and execution status](#vision-and-execution-status) for exactly where the implementation stands against the vision.
|
|
26
|
+
|
|
27
|
+
It is built for developers building and operating AI agents who need a shared record that connected agents can defer to, with provenance on every field. The same engine serves two further groups: individuals keeping one record across their assistants on a single-user install, and operators running a shared, multi-user instance with agent access control. Agents store structured records (contacts, tasks, transactions, decisions, events, and any other type) once and read them back across every tool and session. The same observations and rules give the same snapshot.
|
|
24
28
|
|
|
25
|
-
[
|
|
29
|
+
**[neotoma.io](https://neotoma.io)** · **[Install](https://neotoma.io/install)** · **[Documentation](docs/README.md)** (also served in-app at `/docs`)
|
|
26
30
|
|
|
27
31
|
## What Neotoma is
|
|
28
32
|
|
|
29
|
-
Neotoma is a
|
|
33
|
+
Neotoma is a system of record, not a chat memory or a vector cache. It records observations from your sources, resolves them into entities, and computes a current snapshot for each entity by reducing its observations in a deterministic order. No observation is overwritten by a later write. Corrections and reinterpretations add new observations, and the earlier observations stay readable for that entity.
|
|
30
34
|
|
|
31
35
|
Three properties hold across every interface:
|
|
32
36
|
|
|
33
|
-
- **Deterministic.** Entity IDs,
|
|
34
|
-
- **Immutable and auditable.**
|
|
35
|
-
- **Self-hosted and portable.** The engine is embedded SQLite plus content-addressed file storage under a directory you control, with optional AES-256-GCM at-rest encryption. Nothing is used for training, and you can export
|
|
37
|
+
- **Deterministic.** Entity IDs, event IDs, and reducer output are derived from the inputs by hashing. Entity IDs agree across instances unless tenant-scoped entity IDs are on (`NEOTOMA_SANDBOX_MODE` or `NEOTOMA_TENANT_SCOPED_ENTITY_IDS`). Source and observation IDs also depend on the user and on the interpretation run, so they can differ between instances. The stdio MCP server writes as the shared local development user, but the HTTP server, and therefore the CLI, runs by default in `local_sandbox` mode with a per-install user, so the same data stored on two installs gets different source and observation IDs. Each interpretation run also gets a new observation ID. Do not rely on source or observation IDs matching across instances. The same observations and rules give the same snapshot regardless of order or timing. IDs are derived from inputs; observation timestamps are wall-clock, and the default merge rule orders by them.
|
|
38
|
+
- **Immutable and auditable.** The write path adds sources and observations and does not edit them; the database does not enforce this with a constraint. Each current field names the observation that set it, and a stored observation names its source. A correction observation has no source, and a write from the CLI records no writer.
|
|
39
|
+
- **Self-hosted and portable.** The engine is embedded SQLite plus content-addressed file storage under a directory you control, with optional AES-256-GCM at-rest encryption. Nothing is used for training, and you can export your data as current state; observation history is not part of the export. In single-user mode the data stays entirely local; multi-user, peer-sync, and hosted modes are opt-in (see Deployment modes).
|
|
36
40
|
|
|
37
41
|
## How it works
|
|
38
42
|
|
|
@@ -50,34 +54,34 @@ graph LR
|
|
|
50
54
|
|
|
51
55
|
1. **Source.** Raw input is stored once, deduplicated by SHA-256 content hash, with a deterministic source ID.
|
|
52
56
|
2. **Interpretation.** Structured fields are extracted from the source (directly for structured input, or via an LLM interpretation run whose model, temperature, and prompt are recorded).
|
|
53
|
-
3. **Observation.** Each extracted fact becomes an
|
|
57
|
+
3. **Observation.** Each extracted fact becomes an observation with a hash-derived ID, linked to its source and interpretation.
|
|
54
58
|
4. **Entity resolution.** A deterministic canonical name (driven by the type's schema) maps the observation to an entity, creating it if needed.
|
|
55
59
|
5. **Snapshot.** All observations for an entity are reduced into a current snapshot using per-field merge policies, with a stable order (`observed_at DESC, id ASC`) and a field-to-observation provenance map.
|
|
56
60
|
6. **Timeline and relationships.** Date fields emit deterministic timeline events; typed relationships connect entities into a graph.
|
|
57
61
|
|
|
58
62
|
## What you can do with it
|
|
59
63
|
|
|
60
|
-
Neotoma exposes
|
|
64
|
+
Neotoma v0.26.0 exposes 67 MCP tools and 112 REST paths in its OpenAPI spec. They cover largely the same capabilities, but the MCP server, the REST API, and the CLI are separate implementations, and some checks and attribution differ between them (see Known limitations). The capability surface includes:
|
|
61
65
|
|
|
62
|
-
**Ingest and store.** Store structured records or raw files in one call. File ingestion extracts text from PDF (with a first-page image fallback), CSV (with adaptive chunking for large files), Parquet, JSON, and plain text; images and audio are stored as raw sources.
|
|
66
|
+
**Ingest and store.** Store structured records or raw files in one call. File ingestion extracts text from PDF (with a first-page image fallback), CSV (with adaptive chunking for large files), Parquet, JSON, and plain text; images and audio are stored as raw sources. A committed, keyed structured store started on v0.26.0 that stops partway finishes its missing observations on a same-key retry; a store carrying an interpretation returns `ERR_STORE_WRITE_INCOMPLETE`, and keys left over from earlier versions behave differently over MCP and HTTP (see Known limitations). See Known limitations.
|
|
63
67
|
|
|
64
68
|
**Resolve, retrieve, and search.** Look up entities by identifier (name, email, and similar), resolve identity from multiple signals with confidence scoring, list observations, retrieve a field's provenance chain, traverse the relationship graph N hops, and pull a full graph neighborhood. When an embedding key is configured, semantic vector search runs over entity snapshots (stored locally in sqlite-vec); keyword filtering works without it.
|
|
65
69
|
|
|
66
|
-
**Correct and evolve.** Submit corrections
|
|
70
|
+
**Correct and evolve.** Submit corrections as high-priority observations, never edits; the earlier observation stays readable. Schemas are inferred from your data, recommended from recurring unknown fields, and can be auto-enhanced or updated incrementally with versioning. New entity types work without any code change.
|
|
67
71
|
|
|
68
|
-
**Relate and sequence.** Create typed relationships (for example `PART_OF`, `DEPENDS_ON`, `REFERS_TO`, `DUPLICATE_OF`), query timeline events across types and date ranges, and
|
|
72
|
+
**Relate and sequence.** Create typed relationships (for example `PART_OF`, `DEPENDS_ON`, `REFERS_TO`, `DUPLICATE_OF`), query timeline events across types and date ranges, and read an entity's observation history in a deterministic order.
|
|
69
73
|
|
|
70
74
|
**Manage the entity lifecycle.** Merge duplicates, split an entity by predicate, soft-delete and restore, list potential duplicates, and run GDPR-oriented deletion. Merge and split are transactional and audited.
|
|
71
75
|
|
|
72
|
-
**Control multi-agent access.**
|
|
76
|
+
**Control multi-agent access.** Writes carry attribution when the writer signs its requests (AAuth) or reports a client name. Unless an agent signs its requests, the name is the writer's own claim, and some write paths, including the CLI, record no writer. Agent grants express least-privilege capabilities (which operations on which entity types). This is infrastructure behind the guarantees above, not a feature to evaluate on its own. The mechanics, including optional hardware-attested authentication and guest access tokens, are documented in the [AAuth reference](docs/subsystems/aauth.md).
|
|
73
77
|
|
|
74
78
|
**Federate, sync, and intake.** Register peer instances and sync entities between them with configurable scope and conflict resolution (last-write-wins, source priority, or manual). Subscribe to entity or event changes over webhooks (HMAC-signed) or Server-Sent Events. Accept guest entity submissions, mirror GitHub issues into conversation threads, and mirror your data to deterministic, git-trackable canonical Markdown.
|
|
75
79
|
|
|
76
|
-
**Export and own your data.** Produce a bounded `MEMORY.md` summary, a JSON snapshot export with
|
|
80
|
+
**Export and own your data.** Produce a bounded `MEMORY.md` summary, a JSON snapshot export of current entity state with a per-field provenance map (field to the observation ID that set it) and attribution metadata (the observations themselves, and so the observation history, are not exported), or a complete Markdown mirror of every entity, relationship, source, and timeline day.
|
|
77
81
|
|
|
78
82
|
## Interfaces
|
|
79
83
|
|
|
80
|
-
The same
|
|
84
|
+
The same record is reachable four ways. The MCP server, the REST API, and the CLI are separate implementations, so some checks and attribution differ between them (see Known limitations).
|
|
81
85
|
|
|
82
86
|
| Interface | What it is | Transports |
|
|
83
87
|
| --- | --- | --- |
|
|
@@ -104,10 +108,20 @@ The Inspector is a single-page web app bundled into the build and served by the
|
|
|
104
108
|
```bash
|
|
105
109
|
npm install -g neotoma
|
|
106
110
|
neotoma init
|
|
107
|
-
neotoma setup --tool
|
|
108
|
-
neotoma mcp config
|
|
111
|
+
neotoma setup --tool claude-code
|
|
109
112
|
```
|
|
110
113
|
|
|
114
|
+
In v0.26.0, `neotoma setup --tool claude-code` writes the MCP entries and more:
|
|
115
|
+
|
|
116
|
+
- Two MCP entries in the project's `.mcp.json`: `neotoma-dev` (development profile, `neotoma.db`) and `neotoma` (production profile, `neotoma.prod.db`). They use separate databases, so an agent on one entry does not see what an agent on the other stored.
|
|
117
|
+
- CLI instruction files for Claude Code, Cursor, and Codex in the project: `.claude/rules/neotoma_cli.mdc`, `.cursor/rules/neotoma_cli.mdc`, and `.codex/neotoma_cli.md`.
|
|
118
|
+
- When `claude` is on your PATH, it runs `claude plugin marketplace add` and `claude plugin install` to install the Neotoma Claude Code plugin (five hooks). Without `claude` on PATH, setup writes everything else and then exits with status 1.
|
|
119
|
+
- When `~/.claude` exists, it links 12 Neotoma skills into `~/.claude/skills`.
|
|
120
|
+
|
|
121
|
+
It also adds two allow rules, `Bash(neotoma:*)` and `Bash(npm install -g neotoma:*)`, to `.claude/settings.local.json` (project scope, the default). The first is a wildcard: Claude Code then runs any `neotoma` command without asking, including destructive ones such as `neotoma reset`, `neotoma storage merge-db`, `neotoma backup restore`, and `neotoma processes kill`. `--scope both` also writes the rules to `~/.claude/settings.json`, and `--skip-permissions` writes none. For Cursor the same two rules go to `.cursor/allowlist.json`; for Codex they go to the user-level `~/.codex/config.toml` whatever the scope.
|
|
122
|
+
|
|
123
|
+
For another host, use its row in [Connect your tools](#connect-your-tools); `neotoma setup --help` lists the supported hosts. To check MCP config files later, `neotoma mcp config` scans for them and asks before adding a missing entry.
|
|
124
|
+
|
|
111
125
|
Prerequisites: Node.js 20.x (see `.nvmrc`) and npm 9+. No `.env` is required for local storage. The `neotoma doctor` command checks your environment, database, and security configuration.
|
|
112
126
|
|
|
113
127
|
The CLI also handles MCP config scanning and sync, harness configuration, lifecycle hook installation, peers and access management, plans, transcript and onboarding import, server and database management, memory export, and the canonical mirror. See the [CLI reference](docs/developer/cli_reference.md).
|
|
@@ -120,31 +134,45 @@ neotoma entities list --type task
|
|
|
120
134
|
neotoma upload ./invoice.pdf
|
|
121
135
|
```
|
|
122
136
|
|
|
123
|
-
Agents
|
|
137
|
+
Agents do the same through MCP tool calls such as `store`, `retrieve_entities`, and `retrieve_entity_by_identifier`. The MCP server and the CLI are separate implementations, so some behaviour differs (see Known limitations). The MCP server logs the equivalent CLI command for each tool call.
|
|
124
138
|
|
|
125
139
|
## Connect your tools
|
|
126
140
|
|
|
127
|
-
Neotoma works across MCP-capable hosts. Most are a single setup command; some
|
|
141
|
+
Neotoma works across MCP-capable hosts. Most are a single setup command; some add lifecycle hooks, which capture turns automatically when the local API is running.
|
|
128
142
|
|
|
129
143
|
| Host | Modes | Install |
|
|
130
144
|
| --- | --- | --- |
|
|
131
|
-
| Cursor | MCP + hooks | `neotoma setup --tool cursor
|
|
132
|
-
| Claude Code | MCP + hooks | `neotoma setup --tool claude-code
|
|
133
|
-
| Claude Desktop | MCP (local + remote) | `neotoma setup --tool claude-desktop
|
|
134
|
-
| Codex CLI | MCP + hooks | `neotoma setup --tool codex
|
|
135
|
-
| OpenClaw | Native plugin + MCP | `neotoma setup --tool openclaw
|
|
145
|
+
| Cursor | MCP + hooks | `neotoma setup --tool cursor` |
|
|
146
|
+
| Claude Code | MCP + hooks | `neotoma setup --tool claude-code` |
|
|
147
|
+
| Claude Desktop | MCP (local + remote) | `neotoma setup --tool claude-desktop` |
|
|
148
|
+
| Codex CLI | MCP + hooks | `neotoma setup --tool codex` |
|
|
149
|
+
| OpenClaw | Native plugin + MCP | `neotoma setup --tool openclaw` |
|
|
136
150
|
| ChatGPT | MCP App + Custom GPT Actions | Manual HTTPS + OAuth |
|
|
137
|
-
| Windsurf, Continue, VS Code (Copilot) | MCP | `neotoma setup --
|
|
151
|
+
| Windsurf, Continue, VS Code (Copilot) | MCP | Manual MCP config; see the per-host guides in the [Integrations](docs/integrations/matrix.md) matrix (`neotoma setup --help` lists only the five hosts above) |
|
|
138
152
|
| OpenCode | hooks | plugin install |
|
|
139
153
|
|
|
140
154
|
Full matrix: [Integrations](docs/integrations/matrix.md).
|
|
141
155
|
|
|
142
|
-
**Hooks** are the reliability floor (
|
|
156
|
+
**Hooks** are the reliability floor (capture of each turn while the local API is running, retrieval injection, compaction awareness) and MCP is the quality ceiling (agent-driven structured writes). The Claude Code plugin's hooks post to `127.0.0.1:3080` unless `NEOTOMA_BASE_URL` is set, and fail quietly when nothing is listening there (see Known limitations). Per-harness packages live under `packages/`: [`claude-code-plugin`](packages/claude-code-plugin), [`cursor-hooks`](packages/cursor-hooks), [`opencode-plugin`](packages/opencode-plugin), [`codex-hooks`](packages/codex-hooks), [`claude-agent-sdk-adapter`](packages/claude-agent-sdk-adapter).
|
|
143
157
|
|
|
144
158
|
**Client SDKs:** [`@neotoma/client`](packages/client) (TypeScript) and [`neotoma-client`](packages/client-python) (Python).
|
|
145
159
|
|
|
146
160
|
**OpenClaw native plugin:** Neotoma ships as a native OpenClaw plugin with `kind: "memory"`, so it can fill the dedicated memory slot with all MCP tools registered as agent tools.
|
|
147
161
|
|
|
162
|
+
## Vision and execution status
|
|
163
|
+
|
|
164
|
+
As agent use expands, reality fragments across chat histories, agent memories, files, databases, tickets, and application state. The failure is not retrieval. It is that humans and agents can no longer answer: *which assertion is current? which source introduced it? was it observed, inferred, or decided? who had authority to correct it? which agents relied on the previous version? is there legitimate disagreement?* Neotoma's long-term role is **collective epistemic coherence**: not "better semantic memory," but deterministic, governed, multi-party state that humans and agents maintain together: attributed, correctable, disagreement-aware, portable, and independent of any one model or application.
|
|
165
|
+
|
|
166
|
+
| Vision phase | What it means | Status |
|
|
167
|
+
| --- | --- | --- |
|
|
168
|
+
| **P0: Deterministic single-writer state** | Observations the write path does not edit, hash-derived entity IDs, deterministic reduction, field-level provenance, corrections as new observations, per-entity observation history | ✅ **Shipped**: in daily use; a later ordinary write can still replace a correction (see Known limitations) |
|
|
169
|
+
| **P1: Multi-user state foundations** | Human and agent identities, attributed writes, tenant isolation, access controls, shared instances | 🟡 **Partially shipped**: hosted multi-user mode with `user_id` tenancy, per-agent identity (AAuth, optional hardware attestation), capability grants, guest tokens, peer federation. Not yet: organizations/workspaces, membership lifecycle, invitations, offboarding |
|
|
170
|
+
| **P2: Authority over state** | Domain ownership, correction rights, supersession, policy ownership, temporary grants, disclosure logs | 🟡 **Mechanisms exist** (corrections, `SUPERSEDES` relationships, per-operation access controls); authority *semantics* (who may correct what, scoped by domain) are future work |
|
|
171
|
+
| **P3: Multi-principal semantics** | Competing interpretations, disputed claims, official positions, consensus vs unresolved disagreement, field-level policies, historical validity | 🔜 Planned: interpretations are first-class today; dispute/official-position semantics are not |
|
|
172
|
+
| **P4: Organizational intelligence substrate** | Non-developer governance UI, "why does the system believe this?" explanations, impact analysis, authority-graph views, enterprise administration | 🔭 Vision: the Inspector's provenance and audit views are the seed |
|
|
173
|
+
|
|
174
|
+
[Ateles](https://github.com/markmhendrickson/ateles) is the other half. Its repository describes it as an operating system for humans and AI agents to jointly initiate, execute, approve, and reconcile work under explicit authority. Neotoma holds the record that this work runs against. Neither is sufficient alone. A record without authority tells you what happened but not whether it was permitted; authority without a record tells you who may act but not against what state.
|
|
175
|
+
|
|
148
176
|
## Skills
|
|
149
177
|
|
|
150
178
|
Skills are guided workflows that teach an agent to import, extract, and persist data. They ship with the npm package and are installed by `neotoma setup`.
|
|
@@ -180,7 +208,7 @@ Neotoma stores typed entities with versioned history and provenance. The schema
|
|
|
180
208
|
## Storage, privacy, and security
|
|
181
209
|
|
|
182
210
|
- **Storage:** Local SQLite (`better-sqlite3`, WAL mode) plus content-addressed file storage, under `NEOTOMA_DATA_DIR`. Separate dev and prod profiles. Semantic search uses sqlite-vec locally.
|
|
183
|
-
- **Privacy:** Your data is never used for training
|
|
211
|
+
- **Privacy:** Your data is never used for training; logs and event payloads carry IDs, not PII. No telemetry. Update checks ask the npm registry for the latest version: the interactive CLI about once a day (off with `NO_UPDATE_NOTIFIER=1`, or `--no-update-check`, which applies to the CLI only), and the stdio MCP server when a session starts and about every 6 hours (off with `NO_UPDATE_NOTIFIER=1`). Each request carries only the package name, and the registry sees ordinary connection metadata such as your address. The `npm_check_update` MCP tool can make the same request when an agent calls it, and is not turned off by `NO_UPDATE_NOTIFIER`. In single-user mode data stays local; MCP OAuth, peer sync, and hosted instances share data as configured (see Deployment modes).
|
|
184
212
|
- **Encryption:** Optional AES-256-GCM column encryption of sensitive content and metadata, keyed by a key file or BIP-39 mnemonic. Some tables (for example the event log) are not yet column-encrypted; pair with an encrypted volume for full coverage. See [architecture](docs/architecture/architecture.md).
|
|
185
213
|
- **Auth:** Local auth for single-user installs, MCP OAuth for hosted use, optional hardware attestation for agents, and explicit per-operation access controls. Run `neotoma doctor` to verify your setup. See [Auth](docs/subsystems/auth.md) and [Privacy](docs/subsystems/privacy.md).
|
|
186
214
|
|
|
@@ -188,26 +216,28 @@ Neotoma stores typed entities with versioned history and provenance. The schema
|
|
|
188
216
|
|
|
189
217
|
The same SQLite-backed engine runs in two modes:
|
|
190
218
|
|
|
191
|
-
- **Local single-user.** Run it on your machine for your own
|
|
219
|
+
- **Local single-user.** Run it on your machine for your own record across assistants. Local auth (or key-based auth when encryption is enabled), data stays local, no network exposure required.
|
|
192
220
|
- **Hosted multi-user.** Run a shared instance with MCP OAuth, per-agent hardware-attested identity (AAuth) and capability grants, guest submission tokens, peer federation, and a sandbox demo user. Deploy targets include Docker and Fly. Tenancy is enforced by `user_id` scoping over the same local SQLite engine.
|
|
193
221
|
|
|
194
222
|
The "stays local" and privacy claims above apply to the local single-user mode. Hosted, OAuth, and peer-sync modes share data per their configuration.
|
|
195
223
|
|
|
196
224
|
## Who this is for
|
|
197
225
|
|
|
198
|
-
Neotoma is primarily for developers building and operating AI agents who need a
|
|
226
|
+
Neotoma is primarily for developers building and operating AI agents who need a shared record that connected agents can defer to, with provenance on every field. The product ships as an MCP server and REST API with drop-in hook packages (Claude Code, Cursor, Codex, OpenCode), a Claude Agent SDK adapter, and TypeScript and Python clients. Its core value (versioned observations, deterministic snapshots, field-level provenance, idempotency) is record-keeping infrastructure for agent loops, not an end-user app.
|
|
199
227
|
|
|
200
|
-
Two further audiences follow from the same code: individuals
|
|
228
|
+
Two further audiences follow from the same code: individuals keeping a personal record across assistants (the built-in types are personal-information shaped, and the single-user SQLite plus Inspector path serves one person across assistants), and operators of a shared or hosted instance (OAuth, peer federation, and Docker or Fly deploy targets). The agent-identity and grants machinery is infrastructure supporting attribution and provenance for every audience, not a reason a particular audience adopts Neotoma.
|
|
201
229
|
|
|
202
|
-
It is not aimed at casual note-taking, PKM/Obsidian-style human-driven knowledge bases, or users who need a fully hosted product with nothing running on their own machine
|
|
230
|
+
It is not aimed at casual note-taking, PKM/Obsidian-style human-driven knowledge bases, or users who need a fully hosted product with nothing running on their own machine. Neotoma is local-first by design, and that part is not a temporary state. Installation is: today it is npm and the CLI, and a guided installation is intended but not yet available. If today's install path is what stands between you and trying it, that is our problem to fix, not a sign you are the wrong user.
|
|
203
231
|
|
|
204
|
-
Full profile: [ICP from functionality](docs/icp/icp_from_functionality.md)
|
|
232
|
+
Full profile: [ICP from functionality](docs/icp/icp_from_functionality.md): the canonical public ICP statement. For how it relates to the other ICP documents and which is canonical for which surface, see [ICP reconciliation](docs/icp/icp_reconciliation.md).
|
|
205
233
|
|
|
206
234
|
## Status
|
|
207
235
|
|
|
208
|
-
**Version:**
|
|
236
|
+
**Version:** see the [latest release](https://github.com/markmhendrickson/neotoma/releases) · **License:** MIT · **Storage:** local-first (SQLite + local files); hosted multi-user mode is opt-in.
|
|
237
|
+
|
|
238
|
+
Neotoma is used daily in real agent workflows. The project moves fast, and APIs or storage formats can change between versions. The core guarantees (deterministic reduction, per-entity observation history, per-field provenance) are stable, phase P0 of the [vision roadmap](#vision-and-execution-status), with P1 partially shipped in hosted mode. Schemas, extraction across versions, and backward compatibility are not yet guaranteed.
|
|
209
239
|
|
|
210
|
-
|
|
240
|
+
**Known limitations:** [docs/known_limitations.md](docs/known_limitations.md) lists the specific ones, each with what you will observe, a workaround, and its tracking issue.
|
|
211
241
|
|
|
212
242
|
## Development
|
|
213
243
|
|
|
@@ -233,7 +263,7 @@ npm run test:e2e # Playwright (Inspector)
|
|
|
233
263
|
|
|
234
264
|
## Documentation
|
|
235
265
|
|
|
236
|
-
Documentation is
|
|
266
|
+
Documentation is stored under `docs/` (start at the [documentation index](docs/README.md)) and served in-app at `/docs`, browsable in the Inspector.
|
|
237
267
|
|
|
238
268
|
- **Foundations:** [Core identity](docs/foundation/core_identity.md), [Philosophy](docs/foundation/philosophy.md), [Manifest](docs/NEOTOMA_MANIFEST.md)
|
|
239
269
|
- **Architecture:** [Architecture](docs/architecture/architecture.md), [Determinism](docs/architecture/determinism.md)
|
package/dist/actions.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StructuredStoreApiParams } from "./services/store_admission.js";
|
|
1
2
|
import express from "express";
|
|
2
3
|
import { type StoreRelationshipCreated, type StoreRelationshipRefused } from "./services/store_relationships.js";
|
|
3
4
|
import { type GuestIdentity } from "./services/access_policy.js";
|
|
@@ -5,10 +6,12 @@ import { type AgentIdentity } from "./crypto/agent_identity.js";
|
|
|
5
6
|
import { type NeotomaSandboxModeName } from "./services/sandbox_mode.js";
|
|
6
7
|
import { OAuthKeySessionStore } from "./services/oauth_key_gate.js";
|
|
7
8
|
import type { BoundIdentity } from "./services/oauth_key_gate.js";
|
|
8
|
-
import {
|
|
9
|
+
import { isLoopbackHost } from "./shared/bind_host.js";
|
|
9
10
|
/** Exposed for the /me route and any other surface that needs the boot-time mode verdict. */
|
|
10
11
|
export declare function getResolvedServerMode(): NeotomaSandboxModeName | null;
|
|
11
12
|
export declare const app: import("express-serve-static-core").Express;
|
|
13
|
+
/** Build the shared write limiter; exported so its limiting effect is testable without a listener. */
|
|
14
|
+
export declare function createWriteRateLimit(max?: number): import("express-rate-limit").RateLimitRequestHandler;
|
|
12
15
|
/** Default MCP SSE heartbeat interval in ms when the env var is unset/invalid. */
|
|
13
16
|
export declare const MCP_SSE_KEEPALIVE_DEFAULT_MS = 25000;
|
|
14
17
|
/**
|
|
@@ -253,29 +256,52 @@ export declare function resolveGuestUserId(req: express.Request, principal: Rout
|
|
|
253
256
|
* @throws Error if not authenticated or user_id mismatch
|
|
254
257
|
*/
|
|
255
258
|
export declare function getAuthenticatedUserId(req: express.Request, providedUserId?: string): Promise<string>;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
259
|
+
/**
|
|
260
|
+
* Structured store entry point.
|
|
261
|
+
*
|
|
262
|
+
* A committing store is a write: once it starts it runs to completion and is
|
|
263
|
+
* not cancelled by the caller's abort signal, and a second call for the same
|
|
264
|
+
* idempotency key waits for the first (#2144). See `runKeyedStoreWrite`.
|
|
265
|
+
* Plan mode (`commit: false`) writes nothing and the conditional path is its
|
|
266
|
+
* own atomic transaction, so both run as before.
|
|
267
|
+
*/
|
|
268
|
+
export declare function storeStructuredForApi(params: StructuredStoreApiParams): Promise<{
|
|
269
|
+
store_warnings?: import("./services/observation_source_warning.js").ObservationSourceOmittedWarning[] | undefined;
|
|
270
|
+
success: boolean;
|
|
271
|
+
replayed: boolean;
|
|
272
|
+
source_id: string;
|
|
273
|
+
entities_created: number;
|
|
274
|
+
observations_created: number;
|
|
275
|
+
entities_created_count: number;
|
|
276
|
+
observations_created_count: number;
|
|
277
|
+
unknown_fields_count: number;
|
|
278
|
+
operation_receipt: {
|
|
279
|
+
original_observation_fields: Record<string, unknown>;
|
|
280
|
+
version: 1;
|
|
281
|
+
status: "applied" | "replayed";
|
|
282
|
+
request_fingerprint: string;
|
|
283
|
+
source_id: string;
|
|
284
|
+
entity_id: string;
|
|
285
|
+
entity_type: string;
|
|
286
|
+
observation_id: string;
|
|
287
|
+
schema_identity_digest: string;
|
|
288
|
+
unknown_fields_count: number;
|
|
289
|
+
diagnostics: Record<string, unknown>;
|
|
290
|
+
};
|
|
291
|
+
current_snapshot_status: string;
|
|
292
|
+
postcommit_notifications: {
|
|
293
|
+
attempted: number;
|
|
294
|
+
failed: number;
|
|
295
|
+
status: string;
|
|
296
|
+
};
|
|
297
|
+
entities: {
|
|
298
|
+
entity_id: string;
|
|
299
|
+
entity_type: string;
|
|
300
|
+
observation_id: string;
|
|
301
|
+
entity_snapshot_after: any;
|
|
302
|
+
deduplicated: boolean;
|
|
303
|
+
}[];
|
|
304
|
+
} | {
|
|
279
305
|
success: boolean;
|
|
280
306
|
replayed: boolean;
|
|
281
307
|
source_id: any;
|
|
@@ -351,6 +377,71 @@ export declare function storeStructuredForApi(params: {
|
|
|
351
377
|
commit: boolean;
|
|
352
378
|
source_id: string | null;
|
|
353
379
|
}>;
|
|
380
|
+
export declare function storeUnstructuredForApi(params: {
|
|
381
|
+
userId: string;
|
|
382
|
+
fileContent?: string;
|
|
383
|
+
fileBuffer?: Buffer;
|
|
384
|
+
filePath?: string;
|
|
385
|
+
mimeType: string;
|
|
386
|
+
idempotencyKey?: string;
|
|
387
|
+
originalFilename?: string;
|
|
388
|
+
sourceType?: string;
|
|
389
|
+
storageMode?: "inline" | "reference";
|
|
390
|
+
/**
|
|
391
|
+
* Plan mode (CLI `--plan`/`--dry-run`, request `commit: false`): must be
|
|
392
|
+
* genuinely side-effect-free. Defaults to true (commit) so every existing
|
|
393
|
+
* caller that never passed this field keeps writing exactly as before.
|
|
394
|
+
* When false, neither storeRawContent nor storeRawReference runs — no
|
|
395
|
+
* `sources` row, no raw-storage upload, no reference row — and the
|
|
396
|
+
* response reports `commit: false` with source-derived fields nulled,
|
|
397
|
+
* mirroring storeStructuredForApi's plan-mode response shape.
|
|
398
|
+
*/
|
|
399
|
+
commit?: boolean;
|
|
400
|
+
}): Promise<{
|
|
401
|
+
commit: boolean;
|
|
402
|
+
source_id: null;
|
|
403
|
+
storage_mode: string;
|
|
404
|
+
reference_path: string;
|
|
405
|
+
mime_type: string;
|
|
406
|
+
content_hash?: undefined;
|
|
407
|
+
file_size?: undefined;
|
|
408
|
+
deduplicated?: undefined;
|
|
409
|
+
entities_created?: undefined;
|
|
410
|
+
observations_created?: undefined;
|
|
411
|
+
} | {
|
|
412
|
+
commit: boolean;
|
|
413
|
+
source_id: null;
|
|
414
|
+
content_hash: string;
|
|
415
|
+
file_size: number;
|
|
416
|
+
deduplicated: boolean;
|
|
417
|
+
entities_created: number;
|
|
418
|
+
observations_created: number;
|
|
419
|
+
storage_mode?: undefined;
|
|
420
|
+
reference_path?: undefined;
|
|
421
|
+
mime_type?: undefined;
|
|
422
|
+
} | {
|
|
423
|
+
source_id: string;
|
|
424
|
+
content_hash: string;
|
|
425
|
+
storage_mode: string;
|
|
426
|
+
reference_path: string;
|
|
427
|
+
file_size: number;
|
|
428
|
+
mime_type: string;
|
|
429
|
+
commit?: undefined;
|
|
430
|
+
deduplicated?: undefined;
|
|
431
|
+
entities_created?: undefined;
|
|
432
|
+
observations_created?: undefined;
|
|
433
|
+
} | {
|
|
434
|
+
source_id: string;
|
|
435
|
+
content_hash: string;
|
|
436
|
+
file_size: number;
|
|
437
|
+
deduplicated: boolean;
|
|
438
|
+
entities_created: number;
|
|
439
|
+
observations_created: number;
|
|
440
|
+
commit?: undefined;
|
|
441
|
+
storage_mode?: undefined;
|
|
442
|
+
reference_path?: undefined;
|
|
443
|
+
mime_type?: undefined;
|
|
444
|
+
}>;
|
|
354
445
|
/**
|
|
355
446
|
* Resolve the host the HTTP listener should bind to.
|
|
356
447
|
*
|
|
@@ -365,8 +456,7 @@ export declare function storeStructuredForApi(params: {
|
|
|
365
456
|
* loopback while the socket was actually open on all interfaces).
|
|
366
457
|
*/
|
|
367
458
|
export declare function resolveHttpBindHost(env?: NodeJS.ProcessEnv): string;
|
|
368
|
-
|
|
369
|
-
export declare function isLoopbackHost(host: string): boolean;
|
|
459
|
+
export { isLoopbackHost };
|
|
370
460
|
/**
|
|
371
461
|
* Try to bind on a port/host; resolves with server and port, or rejects on
|
|
372
462
|
* error (e.g. EADDRINUSE).
|
|
@@ -436,5 +526,4 @@ export declare function handleAbandonedAbortRejection(reason: unknown): boolean;
|
|
|
436
526
|
* site were deleted, which is the exact gap #2483's QA review found.
|
|
437
527
|
*/
|
|
438
528
|
export declare function installAbandonedAbortContainment(): void;
|
|
439
|
-
export {};
|
|
440
529
|
//# sourceMappingURL=actions.d.ts.map
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AA2C9B,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC9B,MAAM,mCAAmC,CAAC;AAS3C,OAAO,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|