{"_id":"neotoma","_rev":"59-759a07e3f9f5fe4d8a526ccf53672a7e","name":"neotoma","dist-tags":{"latest":"0.25.0"},"versions":{"0.0.1":{"name":"neotoma","version":"0.0.1","license":"UNLICENSED","_id":"neotoma@0.0.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://github.com/markmhendrickson/neotoma#readme","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"dist":{"shasum":"1cf246355bd927e91e276d648dde709004379681","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.0.1.tgz","fileCount":2,"integrity":"sha512-a068IqeJFFnifZJsUcCMjWKu0xCZCn79uaQkajJ1Z7F3Oppu63s/X6jQMrB01Hm1iaoikVRs2Ol0t9nnYeLgTg==","signatures":[{"sig":"MEYCIQCIZ5HeahGNXxcLrt00q8KX/42YQF7SF5Vn7msMgM4gtgIhAIPt7fVN334hYV6Mv4SLe/BXcnXW+KFXZXP4HCq6+ASE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":627},"gitHead":"50294fd0c37a7d462eee8f1530abe0ce0252edc1","_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.5.0","description":"Reserved namespace for Neotoma (Truth Layer). See https://github.com/markmhendrickson/neotoma or @neotoma/* scoped packages.","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.0.1_1770196782490_0.5967820969743045","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"neotoma","version":"0.3.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":"","license":"MIT","_id":"neotoma@0.3.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"1e911bf1c236e6b0ada8cd0b354e5c853789cad0","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.0.tgz","fileCount":2077,"integrity":"sha512-f77PqvQXUHvOl2LP0/4vo1OEf0JHsxLYRF267HU6TZ6yWsoiMA1hTXPF9rVsP6o4lAxfg+P4Fxl4Lhw6wYP2uw==","signatures":[{"sig":"MEYCIQCiR2oHJk+LAoslJ9WE5rq8g3Ho+OfxOeigWAVrXhXsBAIhAJcK3IXj6hsmSLPSUxkFYm8MWOebHJNC3WNToecLkrCP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24120940},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"7c5cb0e19b63d680752ab98eb56553c0c197f88e","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","postinstall":"node scripts/postinstall.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"_npmVersion":"10.5.0","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.12.2","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.25.2","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.17.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.0_1772108257927_0.3216716306332883","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"neotoma","version":"0.3.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e91e62d8fb576b0e41ebba4d51129ea3123793c9","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.1.tgz","fileCount":404,"integrity":"sha512-rYiYW9mCaeSaqaJLk6OdShsPdJqG0qpeQ6nI6P0QLTtRoS2mFLnTACmGckCq9km8YqgGFFp6pCPtxMBWKfG9kA==","signatures":[{"sig":"MEYCIQDY3rFew30ut/JNItn9D4Yj089WlF1Y6wdhfuuuB6xQtwIhALlY0e/o2AbjGZf4RKj8JGoSP4FHYkgiuvoTKDYTnA/0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3485050},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"3bf07b344fd0b4a19759376df534752f43d5179d","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.5.0","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.12.2","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.1_1772115658411_0.9463264975349113","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"neotoma","version":"0.3.2","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.2","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"ad6adf88004c595bffdb28d52aecbdc1512fb92f","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.2.tgz","fileCount":404,"integrity":"sha512-ejDjjPPO0Iuxtbr3qd+4EoRBz0KDIGodnan1amXPoQVEPIYnOyJsa0YeroQCc63GVGmHZQDDLU0vdO7JvQC/jA==","signatures":[{"sig":"MEUCIQCHChpDzMDdJRpfNfmb8mIGpFSKuM+h+OmXanT79gIVPwIgL2IMsXipVgGlJOpRbhaufVCxqsf7HiKAY+ZKUkDIzz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3488821},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"e8c20f659c0886dbc05075a52e4d56f71add3583","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.2_1772175643785_0.36423857441344865","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"neotoma","version":"0.3.3","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.3","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"42bbe7e19e147ecde999f865a1c8a95a09953d4f","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.3.tgz","fileCount":404,"integrity":"sha512-LEVCHmoqynJuy/a2yhVIp8tallNTHXhA0083ZSVeVJbUtcMjHwXbN3HZY9Viahwg/30IrBUD/OUn7MR7nWnT0g==","signatures":[{"sig":"MEQCICB8ohnn8dOqb5fuRLEx45spVATj6pwQAP1eo6zWhmDZAiBJKpqWE/iap0wQM0ZuSYSpM4LaZQlpACH4MA1uT3afZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3490230},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"dd630dc978dc8a9990c93d346cc74748bcc9b5de","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.5.0","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.12.2","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.3_1772179720652_0.1200548739384526","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"neotoma","version":"0.3.4","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.4","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"c89f7fdc1fdf30523bb389429fec6aabbd14927f","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.4.tgz","fileCount":404,"integrity":"sha512-cea1PXU1CFDZEKv/lNB6k4Cn6u+qTnVam+2/4bFO0ZRupNTF9gh73EJDMcIEpX9baqHBncWpi7ToPQOe8aK3Xw==","signatures":[{"sig":"MEQCICB1ii1uzHQ3CrD+yrJ7pSnaT8fKJePUzwiKVNjpSmjLAiAdbBaLBuzkGhYa7/TXTaoPRSpTYAbPc8Kg/94duuCC/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3493265},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"85636136f2d50349f414e34755f0b9333d39bca0","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.5.0","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.12.2","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.4_1772185345401_0.16582399135476122","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"neotoma","version":"0.3.5","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.5","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"9af513f42a7f52caa9805ced0e1b5fad1197b128","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.5.tgz","fileCount":404,"integrity":"sha512-dHHo5/rkmwMwoZ1QK1K3dAwe9q7o++cHYl0jV0HXjAuU0ARfX5L+Tyxxtmj+JzNksPMnJNug8U6KM6upxHHiiQ==","signatures":[{"sig":"MEUCIEnbaEgD4rbhkMaX5IdtjOSvpkuBO3IchiC7HJC3aSP3AiEAyhNq05wNBFcROXt5wNpPzGLXmXpKgvVx098GBETUXqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3493265},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"d2568c342ceaae2f42baafbc5d1b7c2fc31c53ba","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 8080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 8080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=8080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 8080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 8180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.5.0","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.12.2","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","multer":"^1.4.5-lts.2","openai":"^4.0.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/multer":"^1.4.13","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.5_1772186811128_0.19111377417761943","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"neotoma","version":"0.3.6","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.6","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"be3ba30c0666ea78f9b6a7ec317257bab2bb3dc1","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.6.tgz","fileCount":746,"integrity":"sha512-TyLqmSWwuj19p2Hn5a5jFzaXIVCqVuOXAQXmwYjuhQxdNJR/kIx1FIroMbStH1a5RYRF9WvototWBj3yRnF6lA==","signatures":[{"sig":"MEYCIQCxinoj1SFFVzpThfbAFCOKlgTnc76esBw8quCPnxY4awIhAKbKyhwZ+eTElqfdw+bSkgKrdRSDebxS8HjChv8kw0Vq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4590644},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"14bad7c44ccdbad9779f4cae95a7030fb8f6a9c7","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"q":"https://registry.npmjs.org/q/-/q-1.5.1.tgz","qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1","prebuild-install":"https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"q":"https://registry.npmjs.org/q/-/q-1.5.1.tgz","ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","parquetjs":"^0.11.2","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","@dsnp/parquetjs":"^1.8.7","prebuild-install":"https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"bundleDependencies":["prebuild-install","q"],"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.6_1772448563034_0.008198766849271566","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"neotoma","version":"0.3.7","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.7","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"352f81a5dcae5bedd369448a64e2db9e50c363ce","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.7.tgz","fileCount":408,"integrity":"sha512-/cj261iJIOOOUccFMjmFr6zkM1AwBD7yU2Oag//x8VMd0cwLK7xfEFL2AMq+rewpbBzsZbfSLz+ATNtvDbo50g==","signatures":[{"sig":"MEUCIQCkcC6//33pbFYCeB16QmVGasLwibYKSpq4hmnJPqXpWgIgXjNEPSHfqZdN5IBL5UFCW3njwF58MXAPBAX7s/yBAxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3642997},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"c40886f938aaeb002d07fdbd389238b035a5623f","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","prebuild-install":"github:prebuild/prebuild-install#v7.1.3","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.7_1772529886504_0.29969262485579384","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"neotoma","version":"0.3.8","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.8","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"2d55114fd558bbaab14755dc892d73504cd4ac8d","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.8.tgz","fileCount":413,"integrity":"sha512-gTI8wqUP/GWPHEgAIfrtvdl+xfR0hcG5DOYsL242flmULwEdoA4poIkXyU2A/3LmMPFkABXdOSQgIzDZ3iOzmg==","signatures":[{"sig":"MEQCIEwdmkngR0df4rR6GY6NOyc5F7ofCHXeTvS5miDHNQM3AiBKugQUkNyaFrCe/fgFFn3vrk6tPPwfSEub8YsOqNvU7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3705983},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"122d21da84b3ed8328073387bd61620dad44d7c0","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","prebuild-install":"github:prebuild/prebuild-install#v7.1.3","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.8_1772541160633_0.9367275837098139","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"neotoma","version":"0.3.9","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.9","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"cefe61a11bc32c630a31e6fd2c0dfd5b75131a0a","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.9.tgz","fileCount":413,"integrity":"sha512-6mlqJ/IvMagy9hGrjFbLNV5ch/Og4TOge9UM9UgnxkMsIq+67774Mg0CKye5RI+BYbw9/puGnnwLddnFhS1iIQ==","signatures":[{"sig":"MEYCIQCNh/nhoZ/uWN8L7C/TJZQ0lxs+oC929YQkuArFPxQxSAIhAPOQpd5DPSjQBA8tXkGLDVwXrvFJTs0jYD6I/zJKdVY/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714458},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"ec99f96a892d0db6e2e27e618970023891623ae1","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash foundation/scripts/setup_cursor_copies.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","prebuild-install":"github:prebuild/prebuild-install#v7.1.3","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.9_1772560943272_0.9253367879627294","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"neotoma","version":"0.3.10","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.3.10","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"a1c33cf9fe068aaab86692cdbba9b401de87b61d","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.3.10.tgz","fileCount":413,"integrity":"sha512-5ONlJikcjIpKBcBfHQWqsUWaJaoc8zLsw9vNefVZ03sCtOy6SDPuKoNQ6MAboDlUwwOKMqXGYlfkygWi2wAD4g==","signatures":[{"sig":"MEYCIQC9kpzk7hDfrkRVrzMZJybKwc/2a2mrlqY+9eniHsPKfwIhAKA+SF0/SyM3B2tFIdMX9VIocWJihVZBjIHb2PrqqPxF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3733982},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"0f38c88c8de90caa94ba71899fb4e750af48aeb4","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.2","fast-xml-parser":"^5.4.1"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^2.2.0","prebuild-install":"github:prebuild/prebuild-install#v7.1.3","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.2.1","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.3.10_1773755483536_0.947362424111726","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"neotoma","version":"0.4.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.4.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e56aed7aaca223fa5e04964fac18a144b527598f","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.4.0.tgz","fileCount":429,"integrity":"sha512-iWNkg551PLPCtSHtdMsK9PLE9WXqFdQz+6OQsrD9XbT983RHXAXYMbTj6OD8Db0iTvZ7moaaI7aM2QkBW5FeOw==","signatures":[{"sig":"MEYCIQDXKEMH08h1IW+efWNPdJIPOfH1GA7d0vYeztWViSnO0AIhANg8UzAOIx22wq/0MZIvQ+JJlfrGEsba4n6QJdz6HiZr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3844080},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"65d0bc631a72145dfb516f30330ef8692e199df3","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.2","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.4.0_1775041546492_0.9771335165667923","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"neotoma","version":"0.4.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.4.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e45e2a4dddeea10495f8fade2a5b91e5b3396ef3","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.4.1.tgz","fileCount":429,"integrity":"sha512-pNwN1VkM+/53G7XwW4n+VWtB4cWFcdJgp+tj+6f3RwYNIf7QugUrkP8pIj1LWExJ+8/ryJlTuTeXSABZ+7OqqQ==","signatures":[{"sig":"MEUCICxd47Abz5AN5SCZ7E0f5Op8R6xlNMSLXe6UwZKG/RVMAiEAsjzTQSt2l9TaE5ANREGSFvUSsMRjnmiXBQeIbXNreNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3854879},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"17a4d2ceb19341a68e157d1f4d9f80aaf71edd44","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.4.1_1775752834055_0.9016825271471494","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"neotoma","version":"0.4.2","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.4.2","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"9e757428f324ec77159f339e441264cf30e48966","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.4.2.tgz","fileCount":429,"integrity":"sha512-fuZjHuklU7jgtL4V1Kso2eW919ygoNoQGRA8IlRWjyvD/9TWTdGWyr4+Qqmlv1o5yZYP+XMNptewRaoRYEObMw==","signatures":[{"sig":"MEUCIGz+KP4+qYOaTTwvxZtODTDG0FWZtr40Xf75o/2KqjV8AiEAnHfByQh8/kL3AvTV0cfkOnDHrX6UxpamomdT43FECw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3892400},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"248b89dc27cd22663a06c06541b09f15993f75a9","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.4.2_1775808902621_0.20367777090683337","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"neotoma","version":"0.4.3","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.4.3","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"d52a5a93717257269944e9e249eb429e0f506dfc","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.4.3.tgz","fileCount":441,"integrity":"sha512-j6dkHpKzwdA3c0+RWvarH/AYSZAu2SaahVij7qSL/MQZXAvgFdHLyZeGUm5lwPBpi0jywx2UflU7MiN5i6+RTQ==","signatures":[{"sig":"MEYCIQCdhU9mBNcMYa5V9jB9x+scHpmq5LSWb+lZWU3Fu4R0AgIhAMtcyMfCW9osRcwarCF+4xcd+ihYRcrbWo+KbgMRZ+E2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3903081},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"gitHead":"38065838ef7ddb16df38ee452e429ef785b5f1fa","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":">=2026.3.0"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.4.3_1776244092639_0.06482528760390371","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"neotoma","version":"0.4.5","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.4.5","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"d13ee57c5b75254f952865d942223913dc572c92","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.4.5.tgz","fileCount":505,"integrity":"sha512-bgOR0AP6F8ay5QLNWojaXiUl1yjXlOtT/G1rNWe6LTvmjGQMKdRDF13g5GQo+SoPMdwfKGkAOCj6uyBbk7Sa1Q==","signatures":[{"sig":"MEQCIGvobx+pC1azo9QMLvafVljp0mDDq2cgla7adzP5mQbBAiBkldL1JLdyJs4NoxvmwNCmF2XqCeg5cq/Rd31zTwCpLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4380543},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"e1946fb093b9e1daa052f2ce2c3dbfcdddf0bb58","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.4.5_1776445003056_0.20511605782167797","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"neotoma","version":"0.5.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.5.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"29b42b068974f61200ab2d8d5278ce16bc3226de","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.5.0.tgz","fileCount":517,"integrity":"sha512-7inEvnikF8WOXLgQORG+ffNbyvlzLsixRddNmG9DRngS1hO9a2avW02pU/19L05MPvIX4U/bvPp/L6+1PAN0dg==","signatures":[{"sig":"MEUCIAWK2/lzLZkzSK6QXxEO5JwMTn1+p4zaIjVXmS+C0/t1AiEAva/hD8cmBYOo3eKMms7BMSp2S2FIXGkmrvSx0XquaHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4621383},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"a59834aa12f02edceafb92c1d7b37eef4c6d3b61","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.5.0_1776782850743_0.6036690942905405","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"neotoma","version":"0.5.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.5.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"88a7f3a1ca9b7a2a3605ba7cc935dc1b3bdf3d4e","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.5.1.tgz","fileCount":521,"integrity":"sha512-pYSujYjd6DLh4+PnYGSyO4zPdc62oWKM/OgYQu5rAiSmB0nd9ZYEAPWdjAERPWMPQNXX5/KXeN043iSHNsWzXw==","signatures":[{"sig":"MEQCIE7nGqEryaYYIzQQbZWNjFvNeAzkK4yBHwhrASajSPwxAiAN7g2Ya4Qn4KyaMkIXWBrQzw3cg8gccZa8k7UYAzRz9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4700654},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"a2d569bf0719cd2ab3c481af09d7171d215fe699","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.5.1_1776846371879_0.9142147825311728","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"neotoma","version":"0.6.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.6.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"4830778d07bce9eb031e286f7519bd327de384d8","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.6.0.tgz","fileCount":621,"integrity":"sha512-wMbAh2zGrYLJwEM1HmQjjS65pxPEH01z2eQX18nit4Hg2nhRwfYYv/u661Rw1YIAKySedsCi4vV9wFQR1m36jQ==","signatures":[{"sig":"MEUCIGjTykj1iqHNBu/OkW6vAbgcf7mux8vrh+RHVH6NvME6AiEAukXjnPQ2XnTbi6p/R8p8e9A5zGSmVASU+GHicq7GDok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5352176},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"dd5ed955afd8fce0a177997018980f8a9c5668ae","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.6.0_1776933359260_0.7811990870296537","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"neotoma","version":"0.7.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.7.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"a929ab682a71414438454b5d5ff7197bd4a18b1c","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.7.0.tgz","fileCount":673,"integrity":"sha512-+w2SM6BfZUwC9JAphgHfYKeAZq5a1uYX5jLewP3a+GURnoMfU0xY9oenuRqGQqb8pGkzc/xZdEoJfbBt5L8zew==","signatures":[{"sig":"MEYCIQDbSAiqzF6ONyt0D2gYGJX61q4lKonbemEvdzsP9SMFWgIhAPayJhcrGxuOkcfYV/kGbKJSn56Ngr61EOnLj7z6bedE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5519284},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"3f8444931fe4c99801032bc74249a9b609eaeadb","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.7.0_1777022214285_0.4174667026586927","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"neotoma","version":"0.8.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.8.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e400f24b115ae4e17fbf0399127e1d4a52d8b04c","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.8.0.tgz","fileCount":877,"integrity":"sha512-aW0d5pSs3tH7DiCjw7jpC+k9XJ5zi1D0y3HOm7046iH5FrVQUjlDKrHGSSBZa+4g8vUvUCoXqdIjtuUm55O6Jg==","signatures":[{"sig":"MEUCIFQ6D1Rqx6ZvoznjdhACECM4wv+mPJE7flc6lh5/jmfgAiEA8/r5uBWMg4VHtUeGow/I9PGhUDKUJl6PM3HkusmoeE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6543955},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"8a3b724d5b7ac883d45a197b78d24c26b4ea4767","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"node scripts/pick-port.js 3080 5195 3001 -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta' --names='server,app  ,build ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.8.0_1777292750491_0.026166049971779515","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"neotoma","version":"0.9.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.9.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"549b632fa0389eeb1fc07fcc99e46293a4e80b0b","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.9.0.tgz","fileCount":960,"integrity":"sha512-FwYAj2nmDCv8eYEnUyDK/x0lI1dyRKiaKz19Bh9uZICtPldvbE7R+C4mvqOw+vRbD5uETA4XSNBEFDAyZcNMZw==","signatures":[{"sig":"MEUCIByGACc5EyzAk6Ywyih2WzYnk7g1r92xLgLS4HwnkhiDAiEA8rq7GIn2HkDsN9Z9BQWDV8sigoUpbWOwD759ytx/Vws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9763726},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"50604d81cb5b450f944cf4427224325a28cf7fff","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.9.0_1777382120914_0.20416672730571883","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"neotoma","version":"0.9.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.9.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"570b92da82638b694b09b1e65e03178b8054e0d0","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.9.1.tgz","fileCount":970,"integrity":"sha512-MrYOqtLSWjTZeIMuTGsynHfz9Bk84AxcZvqPw0uGw5huAPo8l/lmr+kOnObsxdh7JskPlImPxHEi1mxB2OaPVQ==","signatures":[{"sig":"MEQCIBw9HALVdf3g9+m8TIxWIIW3ZIV08yx3G9/c9Zome1+eAiBh424WZT3fR55Fo/qS9NMONBSNKwFWfkx+h+Lgdyyq0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9897295},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"36efc6e398de237d81e050936c0ec55988b1f245","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"npm run watch:mcp:dev-shim","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","watch:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.9.1_1777872000824_0.0994677498104477","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"neotoma","version":"0.10.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.10.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"5b8a810aed0b445925f3e2cc28ee8c7599b9558d","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.10.0.tgz","fileCount":970,"integrity":"sha512-6lyozGNCxm8PoQVHaKJzFtw8hcbl3zD7rhDzagEei+233AOS//YwmdydFaIVgFJwlNMpH+RqAQeKUAAli8pm8g==","signatures":[{"sig":"MEUCIQCGOUUAFmkKTdUuLR2SgTDBbUTooFRTMV6NWRUirXY02wIgKMdZ7rxkf2GuHCJUM/SEYacNDC45zjk9fEZGDO5tNT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9912943},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"c7f9af69af956665177f7bcd5ebd2500a3d04098","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"npm run watch:mcp:dev-shim","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","watch:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.10.0_1777888375213_0.16135680779166983","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"neotoma","version":"0.10.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.10.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"6af23a20a02c3d2f6e5f182a4dba05a1bd66c2e9","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.10.1.tgz","fileCount":1002,"integrity":"sha512-7GwRR8KrGbDzdSZxDzn0lBK52XcICYAZNtgjnFt+jIRmvvjMIUsom/kZPr3QmgD5I+eYoDEs7neSjFVuzf+5GA==","signatures":[{"sig":"MEUCIQCoIhcUbsiq2DcyJO0khu0JTewUblsSARIdPR4tgrgi6AIgFduY9gcjqnKwiXBW2YI1rKa58LJJO0fscQ7FrvyqBO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10153280},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"8789b9d29cc4b5f2bf659ab1add1dd307a9f3a44","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"npm run watch:mcp:dev-shim","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","watch:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.10.1_1777991619781_0.690087727151403","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"neotoma","version":"0.11.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.11.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e297a64149f0aba382cfe9f36a3e5d8a26037028","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.11.0.tgz","fileCount":1025,"integrity":"sha512-tdPa2+WXBf5ortF9NKy61sJujPpqf/uGq8rcYRlNQ57U198KSOka/GLx6I+WcwP2NdWV8mXaEOx3ySKHaHoJ8w==","signatures":[{"sig":"MEUCIQDEsxUineMCbHtrp7/OzdTn8Fa3wIiXBz8FIAGhnMkbGQIgTbQMJ2ndipxkkjjdRmgy86iqS0EqDyvlFU42SkqiLbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10279181},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"9df225c694902f148b61dd853345289701d79070","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build,insp ' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput' 'npm run watch:inspector:prod'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"npm run watch:mcp:dev-shim","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput' 'npm run watch:inspector:prod'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","watch:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.11.0_1778053992991_0.4810403100167433","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"neotoma","version":"0.11.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.11.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"96c875d28e177eb987d75fb105965b721846a355","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.11.1.tgz","fileCount":822,"integrity":"sha512-PD4MPLQDtZ89w10FZ/e+GNsMLCoPihO+n4ATyY8fr27fdVxJ4GqLeFiDgx0HqxONI8TlB6clPKP42mzNCGpi7g==","signatures":[{"sig":"MEUCIQC6/5NFqXvxkYju3OBK/RClaJYTS9T8Eol0fSVwf/MpCAIgF8p2LTshwIxy/H+KUtFI40P4ZMa7CnrTv9RuKiZjlc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6605314},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run watch","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"tsx watch src/index.ts","dev:ui":"npm run watch:ui","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env tsx watch src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run watch:dev:tunnel","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build","copy:env":"node scripts/copy-env-to-worktree.js","dev:full":"npm run watch:full","dev:prod":"npm run watch:prod","docs:dev":"vite --config vite.config.ts","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"node scripts/run-dev-task.js vite","wipe:dev":"node scripts/wipe-local-database.js","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"node dist/actions.js","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run watch:server+api","wipe:prod":"node scripts/wipe-local-database.js --env production","dev:server":"npm run watch:server","docs:build":"vite build --config vite.config.ts","docs:serve":"node scripts/serve-docs-react.js","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run build:inspector:watch-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector'","watch:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,build,insp ' 'tsx watch src/actions.ts' 'tsc --watch --preserveWatchOutput' 'npm run watch:inspector:prod'","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts","prewatch:ui":"tsx scripts/repo_info.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"tsc --watch --preserveWatchOutput","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_from_foundation.sh","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"node scripts/run-dev-task.js tsx watch src/actions.ts","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run watch:full:prod","dev:mcp:stdio":"npm run watch:mcp:stdio","dev:mcp:watch":"tsc --watch --preserveWatchOutput","dev:resources":"node scripts/show-dev-resources.js","docs:generate":"tsx src/services/documentation_generator.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:pages:site":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:pages:site' 'npx serve site_pages -p 4000'","dev:server+api":"npm run watch:server+api","dev:server+mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='api   ,mcp   ,build ' 'tsx watch src/actions.ts' 'node dist/index.js' 'tsc --watch --preserveWatchOutput'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production node dist/actions.js","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,build ,links ,insp ' 'npm run watch:server' 'npm run watch:ui' 'tsc --watch --preserveWatchOutput' 'npm run dev:resources:watch' 'npm run watch:inspector:prod'","watch:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:watch","watch:mcp:stdio":"tsx watch src/index.ts","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"npm run watch:mcp:dev-shim","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","watch:pages:site":"node scripts/watch_site.js","watch:server+api":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput'","wipe:dev:storage":"node scripts/wipe-local-database.js --storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_servers.js","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","watch:prod:tunnel":"npm run build:inspector:watch-target:prod && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,api   ,build,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'tsc --watch --preserveWatchOutput' 'npm run watch:inspector:prod'","wipe:prod:storage":"node scripts/wipe-local-database.js --env production --storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:mcp:stdio:prod":"npm run watch:mcp:stdio:prod","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","watch:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"node scripts/show-dev-resources.js --watch","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","feedback:seed-schema":"tsx scripts/seed_product_feedback_schema.ts","release-notes:render":"tsx scripts/render_github_release_notes.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","watch:mcp:stdio:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","illustrations:generate":"tsx scripts/generate_illustrations.ts","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-watch-build":"node scripts/install_launchd_watch_build.js","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","build:inspector:watch-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector npm --prefix inspector run build:vite","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:vite","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.27.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.11.1_1778523837449_0.1368617430015604","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"neotoma","version":"0.12.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.12.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"88606079feeb1e03b93d6205388e19fbaa196967","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.12.0.tgz","fileCount":1297,"integrity":"sha512-K5bZd+CO8CnUOPgksmPKDG6/AIq7MJHCHJsXBi5UtoFLcBNtKFD1YpUwedy6j5PzYZZxabFeA+0+iomGpQH5YA==","signatures":[{"sig":"MEQCID9UhQJxFe8WnLy62hxMCvT7IskYQJl4j9efcoGz9MNXAiA6H+mAz96AcMzzExQL3jH0Q3mMWmH45xh3/2IBmVSm9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11780515},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"c9c2e6b123f4f3261d4ea05b24ccf1cb9df91036","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/colpy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.12.0_1778596419208_0.7881844834734353","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"neotoma","version":"0.12.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.12.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"6daaa640e6456193c4223ccde8a9b53ee6c26206","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.12.1.tgz","fileCount":1297,"integrity":"sha512-VcnikqZKvqJ3VWkQqqBcOVQr+/C0ikvBrrwAkylL5Sbt0jHy/IgFl/zoAorSzqZHje0eFBHEaUum9qlfodGOTA==","signatures":[{"sig":"MEUCIFo21T79p+DQgTzkgLz8Li9xKvkeETLY4kFA7VYbREagAiEA/+aNWaxIC5VpNAmNWNNJx6APH2U3BIa3Ff4Okc/IGB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11781130},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"3860745e84df422eb4eeff98b770848996f7d19a","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/colpy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"cross-env VITEST_SKIP_MIGRATIONS=1 vitest run","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.22.4","clsx":"^2.1.0","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.0.2","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.12.1_1778598581584_0.9121144165211923","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"neotoma","version":"0.13.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.13.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"3aae350a77ac3f878371513406c4d97ab94b13b6","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.13.0.tgz","fileCount":1386,"integrity":"sha512-yFgGd3b9nT0GGX9/EfuhEAi/sTD4MtFcvZTa7Db6PY6C0bbQHcTKxJRCMO8A95IzNyJAVOpHb6RjNO9xknrdWw==","signatures":[{"sig":"MEUCIBidXK9F2ubHKJEENZkWHfmDvH7wnV/8M9tB5r5fULvIAiEAl6Sy/edQv8vhq4s+WZF8OH0NTSGrLOQouzYGjgJbDIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13363138},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"534f91cf6d4e37f6f8a5ff71ee38a24b722ac712","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/colpy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.13.0_1779186064538_0.603748952939756","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"neotoma","version":"0.14.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.14.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"5bee7d400d29cc61ffbe8d358217cbea98772113","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.14.0.tgz","fileCount":1385,"integrity":"sha512-caCDaAZL5IpgjN2hykqhtJBdBkXE1loahhP8VyFMzvuZoxDV1gAoItcITtAO1aTVRAFX1KY1YF9gyToW3Md6/g==","signatures":[{"sig":"MEUCIQC6HLLzqMqMk4RY2Bqf87ue+jGOIpjhYgMkMNdGoX8fcgIgX8C59aPVOPKeQLhy7OCU3sN9AroMxBZUP7HVGCH/iPk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12544459},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"0537296fb9189b4febff6f5e1d8aaa7c1eed32b3","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/colpy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.14.0_1779429091962_0.6554328512529612","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"neotoma","version":"0.15.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.15.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"f9be1731e2261177938f176305977db13556d646","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.15.0.tgz","fileCount":1185,"integrity":"sha512-aaHkmTKk7hFoAnMU7nBMIHvg599VFU8YorOMvcqrpwLJZpiiFnAsy2GLMkzEp+sXDttCWsblhndN36LWGa2dXg==","signatures":[{"sig":"MEYCIQDa3sofuitQAMh1WRhFA0tk8TLccYLunqQGhCrupD3ocgIhAOXnXbTxDRWLd/0n/9B/aUAtAc3sX/cZgAW4sqV7BzYV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11890197},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/colpy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/inspector/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.15.0_1780073647661_0.9194365319595192","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"neotoma","version":"0.16.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.16.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"982bc2b613e8039d84408781a602ee7189de6ee8","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.16.0.tgz","fileCount":1513,"integrity":"sha512-jiCYUn6FQkBtELIR0oDLf6khOuTp66f9RNxHKCFprwdITqpvyZyhiS+vXCfR22ygG/BRawemCtrXotGPxkl3gA==","signatures":[{"sig":"MEYCIQCu7Xx2I+FcSTJG9Q1752KpjFM86PQ76iMx/ySVfZcT/wIhANkKsgzoQ1SAvAILM7ycN7PRUYRD5JpkpwmS/F8khE3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14682624},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"10f9b8e8f5ecfdc6030148e25fd2b33f75792dcf","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.16.0_1781800771512_0.7315330337689048","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"neotoma","version":"0.17.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.17.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"e8fa804f73e09c60439bdb7b985efe68bac610d2","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.17.0.tgz","fileCount":1327,"integrity":"sha512-87pIMSN+2iZplBCLCUChCRTl402VxPFKbMjDbf0jvsADFUFw5AaKjYX01QuSzN+x+anE+PE6XHq6N5sHg6aIng==","signatures":[{"sig":"MEUCIE8k1oiaDzZdXRQcnlcxObA0vO8lupiw8nw6F0MdPXefAiEArghn1SRMgDGdL7Yrd944STLKMWCh+9dsaF0cfmj2UxU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14151754},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && npm run build:scripts","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.19.1","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.17.0_1782380712197_0.8645575363498701","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"neotoma","version":"0.18.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"8aad64738e3211e43ffdf3911574a1bdf7c3e3d4","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.0.tgz","fileCount":1771,"integrity":"sha512-ojWSdn4ujkHFQ9E6MREkxAvgrOK1e5F3StoSwI9y2C9pTsXrlWTkOVa36kM0Nti7P86bqpQvbmvp7pGUsvg50g==","signatures":[{"sig":"MEYCIQChOyeeY6g6ODWr9lmpYcr/3lmw+Uazthh0aGVv5XOHfgIhAKa97KaA0IaEP9XZleEotGDDSkUTkxTxsf7f6V11gXbM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17593057},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.19.1","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.0_1782455525536_0.5674788846015033","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"neotoma","version":"0.18.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"20c26ea16c938be2d960694ffee421dc13692a1c","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.1.tgz","fileCount":1781,"integrity":"sha512-HfZsL89Vzw6inHltBZXgio02AxRScLBnMhGM1srIubfzsb1XiMBpcSyrWxK5rxXtUWJmuDDayI/TEJcGVqaKkg==","signatures":[{"sig":"MEYCIQCkk+/jsIbz2DI9hVpAwIZ6MjzyshU+3KuNFYEnnL8XwwIhALdoHiisafClVEH8ML54rwQMc7qf07IZszqbdP8Fv9IB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17613646},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.19.1","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.1_1782456961479_0.00042225160322217903","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"neotoma","version":"0.18.2","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.2","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"cc6fbf5a79d58c05d6872e69e881a5a369726e30","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.2.tgz","fileCount":1961,"integrity":"sha512-pNtoQIgkaSnqi63DGqQfbMLvlzitJmhwwcFS9Yz0/msz3zzJl46MoettEzmHcPdVY61kMcPDO8dPqFLGGCYBZA==","signatures":[{"sig":"MEUCICnm+CaD1EMjpi9ZCQAanDfha25RPGWHMWfmc2/PEib4AiEAn9htNMEKwSmbU9Smm0icyVkRg2WzV8aSCOv1oMyQTlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18171921},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"f38dd7724b1b2ec0c16dd487d7bc34a4365348ea","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.19.1","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.2_1782468390837_0.10831943773289598","host":"s3://npm-registry-packages-npm-production"}},"0.18.3":{"name":"neotoma","version":"0.18.3","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.3","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"782c97ebc19e9a2829e25021d2d47b9f8354204f","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.3.tgz","fileCount":1993,"integrity":"sha512-F5rYEQW7k89E9rGj2nGmWmkSJ9RP9C8RtPm0E6qAPmudXsPtJXZwOfp6MJju1wHL3HLbTsjUnMFc4lbbK18vCg==","signatures":[{"sig":"MEUCIQDZr0mM0eREZkOD3cIbDn5+nSlmToUvJxg+T+cMgWf78QIgfcuQloF3m0kzo4wv+lTjOdTjGIxWkN6wKDcS1us0JRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18346992},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"739d7c4f8c22a992c813ee1dd94a7ef8971227b2","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.3_1782831259413_0.2735734913353789","host":"s3://npm-registry-packages-npm-production"}},"0.18.4":{"name":"neotoma","version":"0.18.4","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.4","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"369e6151f74984876c8eccc289621d1cc7e3bfc0","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.4.tgz","fileCount":1785,"integrity":"sha512-5P3lrdYtWZF7ytf79WGdg4S0gNWnCkzG5huLUGfZxDb6ZUtqCtu+WagjaegHNhz1hn+9PHA6sStuGantcNayXw==","signatures":[{"sig":"MEUCIHqrC7AW6hxqt/COD22prKzzVvgOwJK3JpK0HPt3Bg45AiEAvu3hFPp8ilMeDF0QU0c1W7MaeOMY7bKOKmPLF/nmjAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17666956},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.4_1782838661062_0.017809036315938664","host":"s3://npm-registry-packages-npm-production"}},"0.18.5":{"name":"neotoma","version":"0.18.5","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.5","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"bacb55c9306c61a6ff7f51e6b2156f7e15517db9","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.5.tgz","fileCount":2002,"integrity":"sha512-cNOoeE4mEANYPa9ai3vavBo7yClmTCkQ+xU4vl7k6QcfiO0jq/RFMrnneWy8CSGV6LZlTe/KJKL7Ps4RWstMHw==","signatures":[{"sig":"MEUCIEmLW9HDGyDTvSQeqMm1Rb0HsVsREl94+dy5yr0wmCM+AiEA00WGsecNgjFPP87nZymDcWQdVAV+AHCrbvX0UJ9n/4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18429950},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"5372359e4f99cd95d7864644b0086212aeac4b5d","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.5_1782900747328_0.5340400685851858","host":"s3://npm-registry-packages-npm-production"}},"0.18.6":{"name":"neotoma","version":"0.18.6","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.6","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"c1611a941a8a585dd258a29b539d1675ce004a8d","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.6.tgz","fileCount":2002,"integrity":"sha512-Sih/M4baVgqC8MtXGjzBgPqdIYFCRcQt6B5EaA6gUgHadIpxBAKhIzad8YBnTOh22JUoaNgB/b1BWDLQOrEhJw==","signatures":[{"sig":"MEQCIA7hYqAm8ZV5Atp1W3VxYMAs5BGKGokPGcgt3bxunmxGAiAAgfDIEBiaCYEYthC3tAeRXUl0xaYEDVb5uyXQsILsSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18430820},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"01344fec9e055c4d26b6ba52d9ec3d5eef54773e","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.6_1782970671899_0.6339399943564237","host":"s3://npm-registry-packages-npm-production"}},"0.18.7":{"name":"neotoma","version":"0.18.7","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.7","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"b6fe4855599d8ebc9e2e637753e0a95dcccb8d9b","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.7.tgz","fileCount":2002,"integrity":"sha512-h6YgLB/c4zDgfoCwe5vHk+k9nR31e7/uKE0esRuOVlTc/GKuNQ+GE/81RIFDmjy/9D83q4Hn/JzvD0KXF0CRpg==","signatures":[{"sig":"MEYCIQDDpyZw7jkKE9Kn87dVV9TCBli2MRyqkIaItyI+xyLSlgIhAMPhlYaZVVCXe/E46qWUyBIZQRM+8/E9Y9D4n1TqG3eN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18430768},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"67faa8cb4a1b31c141ef2236c9330e1ac8a580a1","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.7_1782998833200_0.13766630035861738","host":"s3://npm-registry-packages-npm-production"}},"0.18.8":{"name":"neotoma","version":"0.18.8","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.18.8","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"083b8c997d1c7655c32a3189db26376769413bba","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.18.8.tgz","fileCount":1825,"integrity":"sha512-ESxXatpxll0bNN5HBHbzPL/NtYglRitSGrtRPPPc2sDiFUn0Ii5CVE1AAGkcUuTBE2RVkVmZQJUpnAbd1Dlx2Q==","signatures":[{"sig":"MEYCIQCmVzG8hihAja37x8GCaFMD6yJJsMAeyCVXyZl5jHO1dwIhAJtSujvTpqvZUiY8c8eRGCTgxE7FzjoquhIUEnaX4fo5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17941633},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.18.8_1783525085509_0.9043798202387845","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"neotoma","version":"0.19.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.19.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"4242a57714ce59fecdbc7a523b29909e2c87ef47","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.19.0.tgz","fileCount":1844,"integrity":"sha512-s/lyI22MeCstTjoVC5RRb4pfrs4Jm99fEyq/RF048W9DIXY5iTQzDb9k7gGNdNUIraC6yLh+8COhjnvcSFSKWQ==","signatures":[{"sig":"MEUCIE7rw46bnoylJ9GBGW0PUMfTzH/qQhEEOBj8k4M8V38cAiEA4jaF2AE7cMBHrzP2gRFiX9CKMWf7SKtfNhv6qKs3TW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18124022},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.19.0_1785135709453_0.6824937390192651","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"neotoma","version":"0.20.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.20.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"14b9fbb437f56533d51b69fca1d128b0e50bddce","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.20.0.tgz","fileCount":1852,"integrity":"sha512-XmdtAC3Peu1oK7YQJKSqetNt/K2qfuBwJR7/iw5cRPvv+ciSpV9n3iSM1lmWsHtfFBml8ocjXHmGyulYmVMRhQ==","signatures":[{"sig":"MEYCIQCXPuLV4pXUknX9mzJJdimCgRKYdxkgxMDfnE2kWElpdQIhAKfyJhQ0hHJ+9OYBHLO1wkurdPjiFvrI0fyr9nZWHFv5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18232737},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"c47aa9a796b3be83653bedb5393d9146c562449f","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.20.0_1785168800113_0.48978425604241704","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"neotoma","version":"0.21.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.21.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"64290bd5b197adddc110c9ec24bb8460078e1b79","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.21.0.tgz","fileCount":1888,"integrity":"sha512-EzmbSNUItVWC5651gsHVe4Tol181p+t/3HUDTgN/DVLqcpjZrNCxy9OAx0uxS7KDbHKRWcL6eKma7LE+auQb5A==","signatures":[{"sig":"MEUCIEMSSDqRmBe1TgfaPxV3my9S1nxX5Iyl5Bu04KI1yaW4AiEAxCZK90zv4bg0ZzyCdaztbtoV26HTqKzFX2vNNzwu8o4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18462569},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"e2bf8fda9d3df797989f3e45951a6752ae92572e","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.21.0_1785419022135_0.45504318576607905","host":"s3://npm-registry-packages-npm-production"}},"0.21.2":{"name":"neotoma","version":"0.21.2","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.21.2","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"feb0b932ef13fe5bdf4baf06dd91367a06003f45","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.21.2.tgz","fileCount":1893,"integrity":"sha512-u5sIwN8SECIIe7QYNmCVVfavssKppj6Cs0q1EN+4BVDIWVoWnEelIGDJoJBqHlVv+eSVTLTYmauWfbUok5+Sng==","signatures":[{"sig":"MEYCIQC9RGzUfuC3BKOX7751m/okE8KbD4Q1OMVNexsfgNeP1wIhAObt0Gm9vfeDzsJpid8Lr+VWSZDdQiUg9khmG5dCpNxk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.21.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18514448},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"07e1bc087a5b7ba625cd5f99b06972deb6d77a55","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.21.2_1785951324122_0.5395413885220024","host":"s3://npm-registry-packages-npm-production"}},"0.21.4":{"name":"neotoma","version":"0.21.4","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.21.4","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"21aa843d24c3cc5732b590407d8bfa1037a6b63d","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.21.4.tgz","fileCount":1895,"integrity":"sha512-RwnCmRxChstpasfE1whnu2rDg8kcjEDtqDyr4/dl+YaYKrUNZc0/obHZNpxw6LnaF+gys93tynTfQXT0o0aA+Q==","signatures":[{"sig":"MEQCIEi7FUjb+GGMRoySTOk0qJtcUYvBNrs8CaoK+7UYgPJFAiBhr+FbgVtRi25cgH2BAc/Wx00ELKZ6FW86el2SCQ77Rw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.21.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18556295},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"04b4e85fe0c5c5404369349f43c9a6e91a71c5f5","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.21.4_1786104253463_0.34205559520415685","host":"s3://npm-registry-packages-npm-production"}},"0.21.5":{"name":"neotoma","version":"0.21.5","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.21.5","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"ecf4df5209e9bd61439b6d73ea91b7944c5ffe61","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.21.5.tgz","fileCount":1896,"integrity":"sha512-Nb/tC1h1YUrwXSh1lAnc/5rqexQTg8lGPXuHFYHXYxhNmKrRA7FYl4yi2fEigh07cNGcY8Q94N/WcaYuGBrZNA==","signatures":[{"sig":"MEYCIQCog+pRHKTNheq21F4P3AkjV+KqVSfLlmE49dmAFhQvrgIhAKvV+JrTSgrKvE3gvvMlbXHO7WX33lCTvAlXQ5OgR9Rs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.21.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18572734},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"655f5ff8094194805fb86f439be7dbb63d8003cf","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.21.5_1786355378514_0.5786771759166547","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"neotoma","version":"0.22.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.22.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"8510ccedb4da6c6bac0043e93bf5668abb150b38","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.22.0.tgz","fileCount":1900,"integrity":"sha512-W9MmOEY7goBKdARag9voFW2lmya8rZ+nknAzMwZIbTfGUXQk1TVrOpZXdCNFm4rAszLamc3GICxnY5MLtY/UXw==","signatures":[{"sig":"MEUCIAWLBsBnbiExtHjpnEv/tkc+nzIcyvQdal1QZXyz20N2AiEAocBNZOuBrxsjh+NcpK2gOFPKbYIvtkKTGSY93FmK2rw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18747623},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"72e9a34e51713cce4e287242366411748f0b4e50","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.22.0_1787723720244_0.7240708869365773","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"neotoma","version":"0.22.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.22.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"ca3fb3f03ba8a335fa81ca71727c39bf47b86f77","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.22.1.tgz","fileCount":1901,"integrity":"sha512-qso1XZvBEX43nVJj+le8JfGNEjUPqZ9f/qdFLz+rLi6PqkykG4vwA3/3oUpOOcpr3u7y7EGaMWXl0uCOlx3nLw==","signatures":[{"sig":"MEYCIQDkmEL+iJqD5IJKo8QFGUY3dZohaJz2C5Dnf0q9Sw6KQgIhAJVaaUElsroca/yVeZWALhPLKS2gEZPirNlhJaW6j4zi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.22.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18753363},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"4807d59652c75eae892b0b0536fe938af8c95cb7","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.22.1_1787813738491_0.7169470617365259","host":"s3://npm-registry-packages-npm-production"}},"0.22.2":{"name":"neotoma","version":"0.22.2","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.22.2","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"8e0376db716b2965b63199c2e03df4c786c47041","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.22.2.tgz","fileCount":1927,"integrity":"sha512-gXLuuDi+bm9XIib70/I1401x8G3Ph0dx6xK+FxNTzo1CnBU4ZgPlVSIZzJ6bk/CgLLnPrMhZ3oofydfCT1apvw==","signatures":[{"sig":"MEQCIDRv0wgLIM4aYpgpipFv5f0vTrDhuJOLRd2ZAsjUlsEVAiALyjK4bTD0g8CJX2GvL+ClArJa0rLr2zmTwLw7jszItg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBMsx6pbjvn8wscpgIgjDoIelntQ/cI6mB0AyPRs8xbyAiEAq2Bb6WSzDbeycMUq9eNfLwkmwJJzkcC1uuZpaNYKahg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.22.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19065748},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"2fc45a45afd3c25d369a85c89c95953f20f454e0","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","test:setup":"bash scripts/setup_test_env.sh","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.22.2_1789152170270_0.5466426210603017","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"neotoma","version":"0.23.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.23.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"54cd950249a4920bacae984032844a4462f1c079","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.23.0.tgz","fileCount":1935,"integrity":"sha512-9XlJcaKcs2wYyIZcgmtrRS9Sx5RvLBTb/3oB+yQ2iT3dcpAXdh/eqNNksOA6RVknCKAToTM8WbCb7z6BvpNbNg==","signatures":[{"sig":"MEYCIQDLjVTs5eMSsygTUbBJUUoorIKg9bVu8cZ0TlOXYMLuNAIhALGuCfnhteZKIqVFHWDGWjt0AvhhITLIo3nII+xYqyfq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDCFUtAU9Csj9VL6F/MU1kn5phT8gukJQ1q/uVbOn4q2QIgTKOP2MZ1vL+v9ycECzdVYpwTOCcrae6xFhgB6Raqd78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19170147},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"7f328780216940026fb709d778720f671a6d8c8a","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","test:setup":"bash scripts/setup_test_env.sh","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts tests/integration/mcp_session_recover_in_place.test.ts tests/integration/mcp_session_404_reconnect.test.ts src/proxy/mcp_stdio_proxy.test.ts tests/unit/mcp_proxy.test.ts tests/integration/transcription_contract.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.23.0_1789539594814_0.3431321814735717","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"neotoma","version":"0.23.1","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.23.1","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"40352508c6c3d285b759f5fa32e68ac0029dc02e","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.23.1.tgz","fileCount":1939,"integrity":"sha512-VtdzAn5Qn+X06LNBWfAnP73q1TyEP9Jf+E5Q6XFkEIeep3SPwuRhvkbEKz84ICDRSWqzr78iirMCdqZtGSh3KQ==","signatures":[{"sig":"MEYCIQC5PQwvqWb5qW+87hMIG4PydXHyUbWqOsByMmPWDTklBgIhAIQJvRjMIoejtNy1WvS4Ayy4KbKBQmFPpHE5f8R/SMBE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBwqMVFIRi6ipiwx7MYWburLmTvPFsD8yFoGZG1Bp1VjAiAvUAijuPvgm9Z2g/jjtToZua9gMOXL+tzEESp9VcRBzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.23.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19219176},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"3c4db3709c6fd2eb8f2b067673be2dafedf29958","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","test:setup":"bash scripts/setup_test_env.sh","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts tests/integration/mcp_session_recover_in_place.test.ts tests/integration/mcp_session_404_reconnect.test.ts src/proxy/mcp_stdio_proxy.test.ts tests/unit/mcp_proxy.test.ts tests/integration/transcription_contract.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.23.1_1789566077549_0.32559335894832353","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"neotoma","version":"0.24.0","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"author":{"name":"Mark Hendrickson"},"license":"MIT","_id":"neotoma@0.24.0","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"homepage":"https://neotoma.io","bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"bin":{"neotoma":"dist/cli/bootstrap.js"},"dist":{"shasum":"418c041afe28002b7b157718905c52d134d33066","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.24.0.tgz","fileCount":1983,"integrity":"sha512-N3ZFJp2/7rys9ZcLhkc27UOggZx+Wrw2PPCwmCpGl8mE89fa/P1Gnr0/svixYtadQlukt6Rf9VeuutR0JDLN9A==","signatures":[{"sig":"MEUCIEKITU1m+G9tjSrrirkG0tNgWQ5aQdfhmM4JB+uN5d01AiEAhkm/HDbTDrelFK66JBA6XpEseitmJeWinxYiDvHgxd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG/9zgGO6yO24L1GXL00kYdYBEeZdot18/9y97i50SptAiEA8buCzYBAeEayzlZr63GC//IWlTFiIwKkX9Ji5qAbWCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19974014},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"5bd052d7072da1d6ee86228436759b5550133ee8","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","test:setup":"bash scripts/setup_test_env.sh","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts tests/integration/mcp_session_recover_in_place.test.ts tests/integration/mcp_session_404_reconnect.test.ts src/proxy/mcp_stdio_proxy.test.ts tests/unit/mcp_proxy.test.ts tests/integration/transcription_contract.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/neotoma_0.24.0_1790685839769_0.9030157944924622","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"_id":"neotoma@0.25.0","bin":{"neotoma":"dist/cli/bootstrap.js"},"bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"dist":{"shasum":"55e691b6c5aaee51196e97f16a7fe93f0cdba01c","tarball":"https://registry.npmjs.org/neotoma/-/neotoma-0.25.0.tgz","fileCount":1995,"integrity":"sha512-S8YmzgPYYDlsW4QMXOELTudghE/9kyzEXT03Nkb9W7m7x+3Cr65LcAU3luO4QUBZ+4pjELYMxQbAfA5/mMtiSg==","signatures":[{"sig":"MEUCIA4odbTp5wDU4NmwPmugLKfVqo7pSiCrEAbipw8PFrVTAiEA+Uw0CbOy5Km4SlMHtFqc/wubA945WvO2T6fYDc8ULIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFgMoQuqdjApU5CiXe9alDJi2JmIm0XK56hhJhFoUZkwAiA7Wp0U8RGEQW5GtzhCbBQY7AYOmdQ8+w90eSXUy8t02Q=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/neotoma@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20099408},"main":"dist/index.js","name":"neotoma","type":"module","types":"./dist/index.d.ts","author":{"name":"Mark Hendrickson"},"browser":false,"exports":{".":"./dist/index.js","./core":"./dist/core/operations.js","./aauth":"./dist/sdk/aauth.js","./server":"./dist/server.js","./core/operations":"./dist/core/operations.js"},"gitHead":"8ca1f0a31cb2e40619292e9974177d06d62626ab","license":"MIT","mcpName":"io.github.markmhendrickson/neotoma","scripts":{"cli":"node dist/cli/index.js","dev":"npm run build:inspector:dev-target && node scripts/pick-port.js --print-resources 3080 5195 3001 -- cross-env NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector'","lint":"eslint src --ext .ts","test":"vitest run","build":"npm run build:server && npm run build:inspector","watch":"npm run dev:mcp","dev:ui":"node scripts/run-dev-task.js vite --config vite.config.ts","dev:ws":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,WS_PORT -- cross-env bash scripts/run-neotoma-api-node-watch.sh src/mcp_ws_bridge.ts","doctor":"tsx scripts/doctor.ts","format":"prettier --write 'src/**/*.{ts,tsx,js,json}'","cli:dev":"tsx src/cli/index.ts","dev:api":"npm run dev:server:tunnel","dev:mcp":"tsx watch src/index.ts","migrate":"node scripts/run_migrations.js","prepare":"husky || node -e \"process.exit(0)\"","pretest":"npm run build:server","build:ui":"vite build --config vite.config.ts","copy:env":"node scripts/copy-env-to-worktree.js","dev:docs":"vite --config vite.config.ts","dev:full":"npm run dev","dev:prod":"npm run dev:server:prod","docs:dev":"npm run dev:docs","start:ws":"node dist/mcp_ws_bridge.js","sync:env":"bash scripts/sync-env-from-1password.sh","sync:mcp":"node scripts/sync_mcp_configs.js","test:e2e":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test","watch:ui":"npm run dev:ui","wipe:dev":"npm run wipe:local","dev:links":"node scripts/show-dev-resources.js --watch","dev:serve":"node scripts/run-dev-task.js node scripts/dev-serve.js","dev:types":"tsc --watch --preserveWatchOutput","predev:ui":"npm run prewatch:ui","setup:cli":"npm run build:server && npm link && node -e \"const cp=require('child_process'); const fs=require('fs'); const p=cp.execSync('npm config get prefix',{encoding:'utf8'}).trim(); const bin=p+'/bin'; const neotomaPath=bin+'/neotoma'; const exists=fs.existsSync(neotomaPath); console.log(''); console.log('Step 1: Run this in your terminal (or add to ~/.zshrc):'); console.log('  export PATH=\\\"' + bin + ':\\$PATH\\\"'); console.log(''); console.log('Step 2: Then run: neotoma'); if(exists) { console.log(''); console.log('(Verified: neotoma is linked at ' + neotomaPath + ')'); }\"","start:api":"npm run start:server","start:mcp":"node dist/index.js","test:unit":"vitest run tests/unit tests/services tests/agent tests/contract tests/security tests/cli tests/subscriptions","watch:dev":"npm run dev:server:tunnel:types","wipe:prod":"npm run wipe:local:prod","build:docs":"vite build --config vite.config.ts","dev:server":"bash scripts/run-neotoma-api-node-watch.sh","docs:build":"npm run build:docs","docs:serve":"npm run dev:docs:serve","eval:tier1":"vitest run tests/integration/agentic_eval_matrix.test.ts","pack:local":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:server && npm run build:inspector && npm pack --pack-destination .","recover:db":"node scripts/recover_sqlite_database.js","setup:data":"node scripts/setup-data-symlink.js","test:bench":"cross-env RUN_BENCH=1 vitest run tests/performance","test:setup":"bash scripts/setup_test_env.sh","type-check":"tsc --noEmit","watch:full":"npm run dev","watch:prod":"npm run dev:server:prod","wipe:local":"node scripts/wipe-local-database.js","prebuild:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","prewatch:ui":"tsx scripts/repo_info.ts && tsx scripts/mdx_site_route_inventory.ts && tsx scripts/mdx_site_docs_audit.ts && tsx scripts/mdx_site_translation_audit.ts && tsx scripts/validate_mdx_site_pages.ts","schema:init":"tsx scripts/initialize-schemas.ts","test:parity":"vitest run tests/contract/contract_mcp_cli_parity.test.ts","watch:build":"npm run dev:types","build:server":"tsc && node scripts/copy_pdf_worker_wrapper.js && node scripts/copy_bundle_assets.js && npm run build:scripts && npm run build:bundled-docs","dev:mcp:prod":"cross-env NEOTOMA_ENV=production tsx watch src/index.ts","format:check":"prettier --check 'src/**/*.{ts,tsx,js,json}'","mirror:plans":"echo 'DEPRECATED: Use: neotoma mirror rebuild --profile neotoma-plans' && exit 1","setup:claude":"bash scripts/setup_claude_instructions.sh","setup:cursor":"bash scripts/setup_cursor_copies.sh","start:server":"node dist/actions.js","tunnel:https":"bash scripts/setup-https-tunnel.sh","watch:server":"npm run dev:server","build:scripts":"tsc -p tsconfig.scripts.json","bundles:check":"tsx scripts/bundles_check.ts","dev:full:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js --print-resources 3180 5295 3101 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --prefix-colors='blue,green,magenta,yellow,cyan' --names='server,app  ,types ,links ,insp ' 'npm run dev:server' 'npm run dev:ui' 'npm run dev:types' 'npm run dev:links' 'npm run dev:inspector:prod'","dev:inspector":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build:watch","dev:mcp:stdio":"npm run dev:mcp","dev:mcp:watch":"npm run dev:types","dev:resources":"npm run info:dev-resources","docs:generate":"tsx src/services/documentation_generator.ts","eval:combined":"tsx packages/eval-combined/src/cli.ts run --output tty","mdx:inventory":"tsx scripts/mdx_site_route_inventory.ts","migrate:plans":"tsx scripts/migrate_plans.ts","schema:export":"tsx scripts/export_schema_snapshots.ts","security:lint":"node scripts/security/run_semgrep.js","test:contract":"vitest run tests/contract","test:coverage":"vitest run --coverage","test:frontend":"cross-env RUN_FRONTEND_TESTS=1 vitest run frontend/src","branches:prune":"node scripts/prune-merged-branches.js","check:timeline":"tsx scripts/check_timeline_health.ts","dev:docs:serve":"node scripts/serve-docs-react.js","dev:pages:site":"npm run dev:site:pages","dev:server+api":"npm run dev:server:tunnel:types","dev:server+mcp":"npm run dev:server:mcp","dev:server:mcp":"node scripts/pick-port.js 3080 8280 --vars HTTP_PORT,MCP_HTTP_PORT -- cross-env npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,mcp   ,types ' 'npm run dev:server' 'node dist/index.js' 'npm run dev:types'","dev:site:pages":"npx concurrently --kill-others-on-fail=false --names 'build,serve' 'npm run watch:site:pages' 'npx serve site_pages -p 4000'","eval:scenarios":"tsx packages/eval-harness/src/cli.ts run --mode replay --provider stub --reporter tty","lint:site-copy":"tsx scripts/lint_site_copy_style.ts","mdx:docs-audit":"tsx scripts/mdx_site_docs_audit.ts","mdx:sync-legal":"node scripts/sync_legal_site_mdx.mjs","prepublishOnly":"npm run build:server && npm run build:inspector","setup:env-hook":"bash scripts/setup-env-copy-hook.sh","setup:worktree":"bash scripts/cursor-worktree-init.sh","start:api:prod":"npm run start:server:prod","test:agent-mcp":"vitest run tests/agent","analyze:schemas":"node scripts/analyze-data-dir-schemas.js","build:inspector":"node scripts/build_inspector.js","check:snapshots":"tsx scripts/check_stale_snapshots.ts","dev:server:prod":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 npx concurrently --kill-others-on-fail=false --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='server,types,insp ' 'npm run dev:server' 'npm run dev:types' 'npm run dev:inspector:prod'","ingest:data-dir":"npx tsx scripts/ingest_data_dir.ts","migrate:dry-run":"node scripts/run_migrations.js --dry-run","openapi:bc-diff":"node scripts/openapi_bc_diff.js","parquet:samples":"bash scripts/create_sample_parquet_files_simple.sh","recover:db:prod":"node scripts/recover_sqlite_database.js --env production","security:probes":"bash scripts/security/deployed_probes.sh","test:e2e:headed":"cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test --headed","validate:routes":"tsx scripts/validate_site_route_parity.ts","watch:full:prod":"npm run dev:full:prod","watch:inspector":"npm run dev:inspector","watch:mcp:stdio":"npm run dev:mcp","wipe:local:prod":"node scripts/wipe-local-database.js --env production","build:pages:site":"npm run build:site:pages","build:site:pages":"tsx --tsconfig frontend/tsconfig.json scripts/build_github_pages_site.tsx","bundles:scaffold":"tsx scripts/bundles_scaffold.ts","debug:errors:cli":"node scripts/trigger_error_debug_cli.js","dev:mcp:dev-shim":"tsx src/mcp_dev_shim.ts","openapi:generate":"openapi-typescript ./openapi.yaml --default-non-nullable false -o src/shared/openapi_types.ts && prettier --write src/shared/openapi_types.ts","setup:foundation":"node scripts/setup-foundation-symlink.js","simulate:install":"node scripts/simulate_npm_install.js","test:cross-layer":"vitest run tests/integration/cli_to_mcp_store.test.ts tests/integration/cli_to_mcp_entities.test.ts tests/integration/cli_to_mcp_relationships.test.ts tests/integration/cli_to_mcp_schemas.test.ts","test:integration":"vitest run tests/integration","validate:locales":"tsx --tsconfig frontend/tsconfig.json scripts/validate_locale_parity.ts","watch:dev:tunnel":"npm run dev:server:tunnel","watch:pages:site":"npm run watch:site:pages","watch:server+api":"npm run dev:server:tunnel:types","watch:site:pages":"node scripts/watch_site.js","wipe:dev:storage":"npm run wipe:local:storage","backfill:timeline":"tsx scripts/backfill_timeline_via_recompute.ts","check:pw-coverage":"tsx scripts/check-playwright-coverage.ts","dev:server:tunnel":"cross-env HTTP_PORT=3080 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh'","eval:tier1:update":"cross-env UPDATE_AGENTIC_EVAL_SNAPSHOTS=1 vitest run tests/integration/agentic_eval_matrix.test.ts","monitor:snapshots":"tsx scripts/monitor_and_fix_snapshots.ts","setup:launchd-dev":"node scripts/install_launchd_dev_server.js","start:server:prod":"npm run build:server && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production npm run start:server","test:e2e:coverage":"npm run test:contract && npm run test:cross-layer","validate:coverage":"tsx scripts/validate-coverage-map.ts","validate:doc-deps":"node scripts/validate-doc-dependencies.js --check-modified","validate:mdx-site":"tsx scripts/validate_mdx_site_pages.ts","watch:prod:tunnel":"npm run dev:server:prod:tunnel","wipe:prod:storage":"npm run wipe:local:prod:storage","build:bundled-docs":"tsx scripts/build_bundled_docs.ts","check:bundlephobia":"node scripts/check_bundlephobia.js","dev:inspector:prod":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build:watch","dev:mcp:stdio:prod":"npm run dev:mcp:prod","info:dev-resources":"node scripts/show-dev-resources.js","security:ai-review":"node scripts/security/ai_review.js","start:mcp:dev-shim":"node dist/mcp_dev_shim.js","test:e2e:inspector":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector","watch:mcp:dev-shim":"npm run dev:mcp:dev-shim","wipe:local:storage":"node scripts/wipe-local-database.js --storage","dev:resources:watch":"npm run dev:links","embeddings:backfill":"tsx scripts/backfill_entity_embeddings.ts","schema:cleanup:test":"tsx scripts/cleanup_test_schemas.ts","schema:init:dry-run":"tsx scripts/initialize-schemas.ts --dry-run","release-notes:render":"tsx scripts/render_github_release_notes.ts","security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","test:contract-parity":"vitest run --no-file-parallelism tests/integration/store_reference_source_parity.test.ts tests/integration/http_store_reference_source.test.ts tests/integration/mcp_store_reference_source.test.ts tests/integration/mcp_session_recover_in_place.test.ts tests/integration/mcp_session_404_reconnect.test.ts src/proxy/mcp_stdio_proxy.test.ts tests/unit/mcp_proxy.test.ts tests/integration/transcription_contract.test.ts","test:remote:critical":"cross-env RUN_REMOTE_TESTS=1 vitest run tests/integration/mcp_actions_matrix.test.ts tests/integration/mcp_resources.test.ts tests/integration/mcp_store_unstructured.test.ts tests/integration/mcp_store_parquet.test.ts tests/integration/mcp_schema_actions.test.ts tests/integration/schema_recommendation_integration.test.ts tests/integration/observation_ingestion.test.ts tests/integration/relationship_snapshots.test.ts tests/services/auto_enhancement_converter_detection.test.ts tests/services/auto_enhancement_processor.test.ts","validate:site-export":"tsx scripts/validate_site_export.ts","watch:inspector:prod":"npm run dev:inspector:prod","watch:mcp:stdio:prod":"npm run dev:mcp:prod","generate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts","mdx:translation-audit":"tsx scripts/mdx_site_translation_audit.ts","migrate:plans:dry-run":"tsx scripts/migrate_plans.ts --dry-run","schema:icons:generate":"tsx scripts/generate_schema_icons.ts","security:diff-summary":"node scripts/security/classify_diff.js --json","test:e2e:graph-render":"npm run build:inspector && cross-env PLAYWRIGHT_USE_MOCK_API=1 PLAYWRIGHT_TEST_SEED=ci npx playwright test playwright/tests/inspector/inspector-graph-render.spec.ts --project=chromium","test:transport-parity":"vitest run tests/integration/transport_parity_store_snapshot_auth.test.ts","validate:test-catalog":"tsx scripts/generate-automated-test-catalog.ts --check","dev:server:prod:tunnel":"npm run build:inspector:prod-target && node scripts/pick-port.js 3180 -- cross-env NEOTOMA_ENV=production NEOTOMA_REQUIRE_AUTH=1 NEOTOMA_INSPECTOR_LIVE_BUILD=1 TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types,insp ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types' 'npm run dev:inspector:prod'","illustrations:generate":"tsx scripts/generate_illustrations.ts","reload:launchd-neotoma":"bash scripts/reload_neotoma_launchagents.sh","security:classify-diff":"node scripts/security/classify_diff.js","setup:launchd-cli-sync":"node scripts/install_launchd_watch_build.js","test:coverage:critical":"vitest run --coverage src/services/entity_resolution.ts src/services/event_generation.ts src/services/graph_builder.ts src/services/file_analysis.ts src/services/search.ts","dev:server:tunnel:types":"node scripts/pick-port.js 3080 -- cross-env TUNNEL_NONINTERACTIVE=1 npx concurrently --kill-others-on-fail --restart-tries=0 --timestamp='HH:mm:ss' --prefix='{time} [{name}]' --names='tunnel,server,types ' 'bash scripts/setup-https-tunnel.sh' 'bash scripts/run-dev-server-with-tunnel-url.sh' 'npm run dev:types'","security:manifest:check":"node scripts/security/sync_protected_routes_manifest.js --check","security:manifest:write":"node scripts/security/sync_protected_routes_manifest.js --write","test:integration:report":"cross-env WRITE_TEST_RUN_REPORT=1 vitest run tests/integration","wipe:local:prod:storage":"node scripts/wipe-local-database.js --env production --storage","backfill:canonical-names":"tsx scripts/backfill_canonical_names.ts","feedback:mirror-backfill":"tsx scripts/feedback_mirror_backfill.ts","illustrations:guarantees":"tsx scripts/generate_guarantee_pngs.ts","setup:launchd-dev-server":"npm run setup:launchd-dev","shutdown:launchd-neotoma":"bash scripts/shutdown_neotoma_launchagents.sh","setup:launchd-issues-sync":"node scripts/install_launchd_issues_sync.js","setup:launchd-prod-server":"node scripts/install_launchd_prod_server.js","setup:launchd-skills-sync":"node scripts/install_launchd_skills_sync.js","setup:launchd-watch-build":"npm run setup:launchd-cli-sync","test:security:auth-matrix":"vitest run tests/security/auth_topology_matrix.test.ts","build:inspector:dev-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=dev npm --prefix inspector run build","build:inspector:prod-target":"cross-env VITE_PUBLIC_BASE_PATH=/ NEOTOMA_INSPECTOR_OUT_DIR=../dist/inspector VITE_NEOTOMA_ENV=prod npm --prefix inspector run build","schema:cleanup:test:dry-run":"tsx scripts/cleanup_test_schemas.ts --dry-run","setup:launchd-rc-autodeploy":"node scripts/install_launchd_rc_autodeploy.js","test:remote:critical:report":"cross-env RUN_REMOTE_TESTS=1 WRITE_TEST_RUN_REPORT=1 npm run test:remote:critical","build:inspector:watch-target":"npm run build:inspector:dev-target","generate:capability-manifest":"tsx scripts/generate-capability-manifest.ts","illustrations:guarantees:sym":"tsx scripts/generate_guarantee_sym_hero_pngs.ts","validate:capability-manifest":"tsx scripts/generate-capability-manifest.ts --check","schema:cleanup:test:mark-only":"tsx scripts/cleanup_test_schemas.ts --mark-only","schema:icons:generate:dry-run":"tsx scripts/generate_schema_icons.ts --dry-run","build:inspector:watch-target:prod":"npm run build:inspector:prod-target","illustrations:guarantees:sym:square":"tsx scripts/generate_guarantee_sym_square_icp_pngs.ts"},"version":"0.25.0","_npmUser":{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"},"homepage":"https://neotoma.io","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"openclaw":{"build":{"openclawVersion":"2026.3.24-beta.2"},"compat":{"pluginApi":"2026.3.24-beta.2"},"extensions":["./dist/openclaw_entry.js"]},"overrides":{"qs":"^6.15.0","hono":"^4.12.7","flatted":"^3.4.2","fast-xml-parser":"^5.4.1","@hono/node-server":"^1.19.10"},"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for structured personal data memory with unified source ingestion","directories":{},"maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","zod":"^3.25.76","clsx":"^2.1.0","cmdk":"^1.1.1","cors":"^2.8.5","jose":"^6.2.2","react":"^18.2.0","dotenv":"^16.4.1","helmet":"^7.2.0","libsql":"^0.5.29","morgan":"^1.10.0","openai":"^6.25.0","semver":"^7.7.4","sonner":"^2.0.7","express":"^4.21.2","js-yaml":"^4.1.1","turndown":"^7.2.4","commander":"^14.0.3","csv-parse":"^6.1.0","papaparse":"^5.5.3","pdf-parse":"^2.4.5","react-dom":"^18.2.0","idb-keyval":"^6.2.2","simple-git":"^3.36.0","sqlite-vec":"^0.1.6","next-themes":"^0.4.6","react-icons":"^5.5.0","apache-arrow":"^21.1.0","lucide-react":"^0.344.0","parquet-wasm":"^0.7.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.0.1","cookie-parser":"^1.4.7","openapi-fetch":"^0.15.0","@libsql/client":"^0.17.4","better-sqlite3":"^12.6.2","tailwind-merge":"^2.2.0","react-hook-form":"^7.75.0","react-router-dom":"^7.12.0","typewriter-effect":"^2.22.0","@hellocoop/httpsig":"^1.4.0","express-rate-limit":"^8.3.0","react-helmet-async":"^2.0.5","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","turndown-plugin-gfm":"^1.0.2","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-label":"^2.1.8","@radix-ui/react-toast":"^1.1.5","@tanstack/react-table":"^8.21.3","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.0.0","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@sqlite.org/sqlite-wasm":"^3.51.1-build1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@modelcontextprotocol/sdk":"^1.29.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.0.6","@radix-ui/react-navigation-menu":"^1.2.14","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.1","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^27.2.0","sharp":"^0.33.5","eslint":"^8.56.0","pdfkit":"^0.17.2","shadcn":"^4.7.0","vitest":"^4.0.17","postcss":"^8.4.32","chokidar":"^3.6.0","prettier":"^3.7.4","@types/ws":"^8.18.1","cross-env":"^10.1.0","remark-gfm":"^4.0.1","typescript":"^5.9.3","@types/cors":"^2.8.17","@types/node":"^20.10.6","lint-staged":"^16.2.7","tailwindcss":"^3.4.0","@types/react":"^18.2.45","autoprefixer":"^10.4.16","concurrently":"^8.2.2","@mdx-js/react":"^3.1.1","@types/morgan":"^1.9.7","@types/pdfkit":"^0.17.3","@types/semver":"^7.7.1","@fal-ai/client":"^1.9.5","@mdx-js/rollup":"^3.1.1","@types/express":"^4.17.25","@types/js-yaml":"^4.0.9","@playwright/test":"^1.56.1","@types/pdf-parse":"^1.1.5","@types/react-dom":"^18.2.18","openapi-typescript":"^7.10.1","@types/cookie-parser":"^1.4.10","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^16.3.0","baseline-browser-mapping":"^2.9.15","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.56.1","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"openclaw":"2026.3.24-beta.2"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/neotoma_0.25.0_1790754408201_0.723735408856925"}}},"time":{"created":"2026-02-04T09:19:42.400Z","modified":"2026-09-30T07:46:48.774Z","1.0.0":"2026-02-02T08:38:31.583Z","0.0.1":"2026-02-04T09:19:42.623Z","0.3.0":"2026-02-26T12:17:38.334Z","0.3.1":"2026-02-26T14:20:58.657Z","0.3.2":"2026-02-27T07:00:44.045Z","0.3.3":"2026-02-27T08:08:40.815Z","0.3.4":"2026-02-27T09:42:25.603Z","0.3.5":"2026-02-27T10:06:51.367Z","0.3.6":"2026-03-02T10:49:23.301Z","0.3.7":"2026-03-03T09:24:46.690Z","0.3.8":"2026-03-03T12:32:40.877Z","0.3.9":"2026-03-03T18:02:23.562Z","0.3.10":"2026-03-17T13:51:23.729Z","0.4.0":"2026-04-01T11:05:46.786Z","0.4.1":"2026-04-09T16:40:34.306Z","0.4.2":"2026-04-10T08:15:02.780Z","0.4.3":"2026-04-15T09:08:12.985Z","0.4.5":"2026-04-17T16:56:43.270Z","0.5.0":"2026-04-21T14:47:30.966Z","0.5.1":"2026-04-22T08:26:12.175Z","0.6.0":"2026-04-23T08:35:59.465Z","0.7.0":"2026-04-24T09:16:54.466Z","0.8.0":"2026-04-27T12:25:50.746Z","0.9.0":"2026-04-28T13:15:21.173Z","0.9.1":"2026-05-04T05:20:01.058Z","0.10.0":"2026-05-04T09:52:55.516Z","0.10.1":"2026-05-05T14:33:40.082Z","0.11.0":"2026-05-06T07:53:13.281Z","0.11.1":"2026-05-11T18:23:57.665Z","0.12.0":"2026-05-12T14:33:39.527Z","0.12.1":"2026-05-12T15:09:41.895Z","0.13.0":"2026-05-19T10:21:04.829Z","0.14.0":"2026-05-22T05:51:32.273Z","0.15.0":"2026-05-29T16:54:07.959Z","0.16.0":"2026-06-18T16:39:31.786Z","0.17.0":"2026-06-25T09:45:12.423Z","0.18.0":"2026-06-26T06:32:05.772Z","0.18.1":"2026-06-26T06:56:01.746Z","0.18.2":"2026-06-26T10:06:31.224Z","0.18.3":"2026-06-30T14:54:19.704Z","0.18.4":"2026-06-30T16:57:41.297Z","0.18.5":"2026-07-01T10:12:27.594Z","0.18.6":"2026-07-02T05:37:52.122Z","0.18.7":"2026-07-02T13:27:13.452Z","0.18.8":"2026-07-08T15:38:05.825Z","0.19.0":"2026-07-27T07:01:49.714Z","0.20.0":"2026-07-27T16:13:20.409Z","0.21.0":"2026-07-30T13:43:42.366Z","0.21.2":"2026-08-05T17:35:24.358Z","0.21.4":"2026-08-07T12:04:13.730Z","0.21.5":"2026-08-10T09:49:38.753Z","0.22.0":"2026-08-26T05:55:20.828Z","0.22.1":"2026-08-27T06:55:38.767Z","0.22.2":"2026-09-11T18:42:50.429Z","0.23.0":"2026-09-16T06:19:55.069Z","0.23.1":"2026-09-16T13:41:17.719Z","0.24.0":"2026-09-29T12:44:00.036Z","0.25.0":"2026-09-30T07:46:48.374Z"},"bugs":{"url":"https://github.com/markmhendrickson/neotoma/issues"},"author":{"name":"Mark Hendrickson"},"license":"MIT","homepage":"https://neotoma.io","keywords":["mcp","model-context-protocol","memory","storage","chatgpt"],"repository":{"url":"git+https://github.com/markmhendrickson/neotoma.git","type":"git"},"description":"MCP server for structured personal data memory with unified source ingestion","maintainers":[{"name":"markmhendrickson","email":"markmhendrickson@gmail.com"}],"readme":"# Neotoma\n\n**Agents cannot own work they cannot verify.**\n\nYou cannot delegate real work to agents you cannot hold to account. Accountability has two halves: what was true, and who was authorized. **Neotoma is the system of record for AI agents** — it 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 versions every fact, attributes it to a source, and replays it.\n\nWhat ships today is the foundation: a deterministic, versioned state layer that ingests sources into immutable observations and computes reproducible entity snapshots with full provenance, 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.\n\nIt is built for developers building and operating AI agents who need a persistent, deterministic, auditable memory layer shared across tools. The same engine serves two further groups: individuals running a personal cross-assistant memory 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, and the same observations always reduce to the same state.\n\n**[neotoma.io](https://neotoma.io)** · **[Install](https://neotoma.io/install)** · **[Documentation](https://neotoma.io/docs)** (also served in-app at `/docs`)\n\n## Vision and execution status\n\nAs 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.\n\n| Vision phase | What it means | Status |\n| --- | --- | --- |\n| **P0 — Deterministic single-writer state** | Append-only observations, hash-derived IDs, deterministic reduction, field-level provenance, corrections-win, replayable history | ✅ **Shipped and stable** — the core guarantee, in daily use |\n| **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 |\n| **P2 — Authority over state** | Domain ownership, correction rights, supersession, policy ownership, temporary grants, disclosure logs | 🟡 **Mechanisms exist** (corrections always win, `SUPERSEDES` relationships, per-operation access controls); authority *semantics* — who may correct what, scoped by domain — are future work |\n| **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 |\n| **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 |\n\n[Ateles](https://github.com/markmhendrickson/ateles) is the other half. Accountability has two halves: **Neotoma answers what was true** (truth, memory, provenance); **Ateles answers who was authorized** (initiative, delegation, approval) — against Neotoma state. Neither is sufficient alone. Memory without authority tells you what happened but not whether it was permitted; authority without memory tells you who may act but not against what state.\n\n## What Neotoma is\n\nNeotoma is a state layer, not a chat memory or a vector cache. It records immutable observations from your sources, resolves them into entities, and computes a current snapshot for each entity by reducing its observations in a deterministic order. Nothing is overwritten. Corrections and reinterpretations add new observations; the prior history stays intact and replayable.\n\nThree properties hold across every interface:\n\n- **Deterministic.** Entity IDs, observation IDs, event IDs, and reducer output are all derived from the inputs by hashing. The same observations produce the same snapshot regardless of order or timing. No `Math.random()` or wall-clock values enter the data path.\n- **Immutable and auditable.** Sources and observations are append-only. Every field in a snapshot traces back to the observation that set it, and through that observation to its source, interpretation, agent, and timestamp.\n- **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 everything. In single-user mode the data stays entirely local; multi-user, peer-sync, and hosted modes are opt-in (see Deployment modes).\n\n## How it works\n\n```mermaid\ngraph LR\n  Sources[\"Sources (files, messages, API payloads)\"] --> Obs[Observations]\n  Obs --> Res[Entity resolution]\n  Res --> Snap[\"Entity snapshots (reduced, versioned)\"]\n  Snap --> Graph[\"Graph + timeline\"]\n  Graph <--> MCP[MCP]\n  Graph <--> REST[REST API]\n  Graph <--> CLI[CLI]\n  Graph <--> Inspector[Inspector]\n```\n\n1. **Source.** Raw input is stored once, deduplicated by SHA-256 content hash, with a deterministic source ID.\n2. **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).\n3. **Observation.** Each extracted fact becomes an immutable observation with a hash-based ID, linked to its source and interpretation.\n4. **Entity resolution.** A deterministic canonical name (driven by the type's schema) maps the observation to an entity, creating it if needed.\n5. **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.\n6. **Timeline and relationships.** Date fields emit deterministic timeline events; typed relationships connect entities into a graph.\n\n## What you can do with it\n\nNeotoma exposes roughly 60 MCP tools and about 100 REST endpoints, all backed by the same operations. The capability surface includes:\n\n**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. Writes are idempotent through an `idempotency_key`.\n\n**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.\n\n**Correct and evolve.** Submit corrections that always win in the snapshot (they are high-priority observations, never edits). 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.\n\n**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 view a deterministic, replayable history.\n\n**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.\n\n**Control multi-agent access.** Every write is attributed to an agent identity (verified key thumbprint, JWT subject, or client name), and agent grants express least-privilege capabilities (which operations on which entity types). This is what makes attribution and provenance answerable rather than asserted — it 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](https://neotoma.io/aauth).\n\n**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.\n\n**Export and own your data.** Produce a bounded `MEMORY.md` summary, a JSON snapshot export with full provenance and attribution metadata, or a complete Markdown mirror of every entity, relationship, source, and timeline day.\n\n## Interfaces\n\nThe same state and the same guarantees are reachable four ways. All map to one OpenAPI-backed contract.\n\n| Interface | What it is | Transports |\n| --- | --- | --- |\n| **MCP server** | Model Context Protocol tools for agents to store and retrieve state | stdio, WebSocket, streamable HTTP |\n| **REST API** | Full HTTP interface for application integration | HTTP/HTTPS, OAuth or key-based auth |\n| **CLI** | The `neotoma` command, around 170 commands for setup, scripting, and direct access | local process |\n| **Inspector** | Bundled web app for browsing and managing the store | served by the API server |\n\n### The Inspector\n\nThe Inspector is a single-page web app bundled into the build and served by the API server (at `/` for browsers, no separate deployment). It is an operator console for the data store, with screens for:\n\n- Entities (browse, detail, correct fields, view history and provenance, per-entity timeline)\n- Observations, sources, interpretations, and recent activity\n- An interactive knowledge-graph explorer\n- Relationships and the global timeline\n- Schemas and entity types (browse, register, inspect merge policies)\n- Agents, agent grants (create, suspend, revoke, restore), peers, and subscriptions\n- Issues, conversations and turns (the agent audit trail), access policies, and compliance\n- Search, analytics and usage, settings (including dark mode), a sandbox surface, and an in-app documentation browser at `/docs`\n\n## Install\n\n```bash\nnpm install -g neotoma\nneotoma init\nneotoma setup --tool <cursor|claude-code|codex|...> --yes\nneotoma mcp config\n```\n\nPrerequisites: 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.\n\nThe 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).\n\n### Example\n\n```bash\nneotoma store --json='[{\"entity_type\":\"task\",\"title\":\"Submit expense report\",\"status\":\"open\"}]'\nneotoma entities list --type task\nneotoma upload ./invoice.pdf\n```\n\nAgents perform the same operations through MCP tool calls such as `store`, `retrieve_entities`, and `retrieve_entity_by_identifier`. Each MCP call logs its equivalent CLI invocation.\n\n## Connect your tools\n\nNeotoma works across MCP-capable hosts. Most are a single setup command; some compose MCP with lifecycle hooks for guaranteed capture.\n\n| Host | Modes | Install |\n| --- | --- | --- |\n| Cursor | MCP + hooks | `neotoma setup --tool cursor --yes` |\n| Claude Code | MCP + hooks | `neotoma setup --tool claude-code --yes` |\n| Claude Desktop | MCP (local + remote) | `neotoma setup --tool claude-desktop --yes` |\n| Codex CLI | MCP + hooks | `neotoma setup --tool codex --yes` |\n| OpenClaw | Native plugin + MCP | `neotoma setup --tool openclaw --yes` |\n| ChatGPT | MCP App + Custom GPT Actions | Manual HTTPS + OAuth |\n| Windsurf, Continue, VS Code (Copilot) | MCP | `neotoma setup --tool <host> --yes` |\n| OpenCode | hooks | plugin install |\n\nFull matrix: [Integrations](docs/integrations/matrix.md).\n\n**Hooks** are the reliability floor (guaranteed capture, retrieval injection, compaction awareness) and MCP is the quality ceiling (agent-driven structured writes). 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).\n\n**Client SDKs:** [`@neotoma/client`](packages/client) (TypeScript) and [`neotoma-client`](packages/client-python) (Python).\n\n**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.\n\n## Skills\n\nSkills 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`.\n\n| Skill | Description |\n| --- | --- |\n| **ensure-neotoma** | Install Neotoma, configure MCP, verify connectivity. Prerequisite for the rest. |\n| **remember-email** | Import email, extract contacts, tasks, events, and transactions. |\n| **remember-conversations** | Import ChatGPT/Claude/Slack exports, reconstruct a decision timeline. |\n| **remember-meetings** | Ingest transcripts, extract decisions and action items. |\n| **remember-finances** | Import statements, receipts, and invoices as structured transactions. |\n| **remember-contacts** | Consolidate contacts from email, calendar, chat, vCards. |\n| **remember-calendar** | Import events and commitments. |\n| **remember-codebase** | Repository integration: inventory, decisions, MCP wiring. |\n| **recover-sqlite-database** | Check integrity and recover a corrupted database. |\n\nOrdinary storage and retrieval need no skill: the live MCP tool instructions delivered at\nsession start cover store/query/recall directly.\n\n## Record types\n\nNeotoma stores typed entities with versioned history and provenance. The schema is flexible: store any entity type with whatever fields the data implies, and the system infers and evolves the schema.\n\n| Type | Stores | Examples |\n| --- | --- | --- |\n| **Contacts** | People, companies, roles | `contact`, `company`, `account` |\n| **Tasks** | Obligations, deadlines, goals | `task`, `habit`, `goal` |\n| **Transactions** | Payments, receipts, invoices | `transaction`, `invoice`, `receipt` |\n| **Contracts** | Agreements, clauses, amendments | `contract`, `clause`, `amendment` |\n| **Decisions** | Choices, rationale, reviews | `decision`, `assessment`, `review` |\n| **Events** | Meetings, milestones, outcomes | `event`, `meeting`, `milestone` |\n\n## Storage, privacy, and security\n\n- **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.\n- **Privacy:** Your data is never used for training, and logs and event payloads carry IDs, not PII. In single-user mode the data stays entirely local; once you enable MCP OAuth, peer sync, or a hosted multi-user instance, data is shared per those configurations rather than staying purely local (see Deployment modes).\n- **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).\n- **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).\n\n## Deployment modes\n\nThe same SQLite-backed engine runs in two modes:\n\n- **Local single-user.** Run it on your machine for your own cross-assistant memory. Local auth (or key-based auth when encryption is enabled), data stays local, no network exposure required.\n- **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.\n\nThe \"stays local\" and privacy claims above apply to the local single-user mode. Hosted, OAuth, and peer-sync modes share data per their configuration.\n\n## Who this is for\n\nNeotoma is primarily for developers building and operating AI agents who need a persistent, deterministic, auditable memory layer shared across tools. 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, corrections-win) is memory-engine infrastructure for agent loops, not an end-user app.\n\nTwo further audiences follow from the same code: individuals running a personal cross-assistant memory (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.\n\nIt 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.\n\nFull 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).\n\n## Status\n\n**Version:** v0.17.0 · **License:** MIT · **Storage:** local-only (SQLite + local files).\n\nNeotoma is in developer preview and used daily in real agent workflows. The core guarantees (deterministic state, versioned history, append-only log, full provenance, same contract across CLI and MCP) are stable — phase P0 of the [vision roadmap](#vision-and-execution-status), with P1 partially shipped in hosted mode. Schemas, extraction across versions, long-term replay compatibility, and backward compatibility are not yet guaranteed. Expect breaking changes.\n\n## Development\n\n```bash\ngit clone https://github.com/markmhendrickson/neotoma.git\ncd neotoma\nnpm install\nnpm test\n```\n\nCommon commands:\n\n```bash\nnpm run dev          # MCP server (stdio)\nnpm run dev:full     # API + UI + build watch\nnpm run cli:dev      # CLI in dev mode (tsx)\nnpm run type-check   # TypeScript\nnpm run lint         # ESLint\nnpm test             # unit/contract/security tests\nnpm run test:integration\nnpm run test:e2e     # Playwright (Inspector)\n```\n\n## Documentation\n\nDocumentation is served in-app at `/docs` (browsable in the Inspector), published at [neotoma.io/docs](https://neotoma.io/docs), and stored under `docs/`.\n\n- **Foundations:** [Core identity](docs/foundation/core_identity.md), [Philosophy](docs/foundation/philosophy.md), [Manifest](docs/NEOTOMA_MANIFEST.md)\n- **Architecture:** [Architecture](docs/architecture/architecture.md), [Determinism](docs/architecture/determinism.md)\n- **Interfaces:** [CLI reference](docs/developer/cli_reference.md), [MCP instructions](docs/developer/mcp/instructions.md), [REST API](docs/api/rest_api.md)\n- **Operations:** [Runbook](docs/operations/runbook.md), health check (`neotoma doctor`)\n\n## Contributing\n\nNeotoma is in active development. Open an issue or discussion for questions or collaboration. See [CONTRIBUTING.md](CONTRIBUTING.md) and [SECURITY.md](SECURITY.md). License: MIT.\n","readmeFilename":"README.md"}