@monoes/monomindcli 2.8.4 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/helpers/auto-memory-hook.mjs +0 -0
- package/.claude/helpers/handlers/route-handler.cjs +12 -0
- package/.claude/helpers/handlers/session-restore-handler.cjs +28 -7
- package/.claude/helpers/hook-handler.cjs +0 -0
- package/.claude/helpers/utils/micro-agents.cjs +22 -0
- package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +11 -6
- package/.claude/skills/monodesign/scripts/live-inject.mjs +20 -7
- package/.claude/skills/monodesign/scripts/live-server.mjs +38 -2
- package/LICENSE +191 -0
- package/README.md +8 -6
- package/dist/src/browser/dashboard/server.d.ts +5 -0
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +59 -4
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +18 -8
- package/dist/src/browser/workflow/store.d.ts.map +1 -1
- package/dist/src/browser/workflow/store.js +3 -2
- package/dist/src/browser/workflow/store.js.map +1 -1
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +14 -9
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +22 -18
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/download-embeddings.d.ts +8 -0
- package/dist/src/commands/download-embeddings.d.ts.map +1 -0
- package/dist/src/commands/download-embeddings.js +34 -0
- package/dist/src/commands/download-embeddings.js.map +1 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +14 -0
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init-wizard.js +1 -1
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +48 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +35 -1
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +10 -0
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +195 -31
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts +1 -0
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +139 -3
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/route.d.ts +1 -9
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +42 -65
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts.map +1 -1
- package/dist/src/commands/security-cve.js +2 -1
- package/dist/src/commands/security-cve.js.map +1 -1
- package/dist/src/index.d.ts +0 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -15
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/copy-assets.d.ts +17 -0
- package/dist/src/init/copy-assets.d.ts.map +1 -0
- package/dist/src/init/copy-assets.js +271 -0
- package/dist/src/init/copy-assets.js.map +1 -0
- package/dist/src/init/executor.d.ts +2 -30
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +56 -2493
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +9 -0
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +0 -4
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts +112 -0
- package/dist/src/init/shared.d.ts.map +1 -0
- package/dist/src/init/shared.js +475 -0
- package/dist/src/init/shared.js.map +1 -0
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +37 -0
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/upgrade.d.ts +34 -0
- package/dist/src/init/upgrade.d.ts.map +1 -0
- package/dist/src/init/upgrade.js +477 -0
- package/dist/src/init/upgrade.js.map +1 -0
- package/dist/src/init/write-antigravity.d.ts +13 -0
- package/dist/src/init/write-antigravity.d.ts.map +1 -0
- package/dist/src/init/write-antigravity.js +117 -0
- package/dist/src/init/write-antigravity.js.map +1 -0
- package/dist/src/init/write-capabilities.d.ts +9 -0
- package/dist/src/init/write-capabilities.d.ts.map +1 -0
- package/dist/src/init/write-capabilities.js +392 -0
- package/dist/src/init/write-capabilities.js.map +1 -0
- package/dist/src/init/write-claude.d.ts +25 -0
- package/dist/src/init/write-claude.d.ts.map +1 -0
- package/dist/src/init/write-claude.js +279 -0
- package/dist/src/init/write-claude.js.map +1 -0
- package/dist/src/init/write-kimicode.d.ts +19 -0
- package/dist/src/init/write-kimicode.d.ts.map +1 -0
- package/dist/src/init/write-kimicode.js +223 -0
- package/dist/src/init/write-kimicode.js.map +1 -0
- package/dist/src/init/write-opencode.d.ts +14 -0
- package/dist/src/init/write-opencode.d.ts.map +1 -0
- package/dist/src/init/write-opencode.js +130 -0
- package/dist/src/init/write-opencode.js.map +1 -0
- package/dist/src/init/write-runtime-config.d.ts +14 -0
- package/dist/src/init/write-runtime-config.d.ts.map +1 -0
- package/dist/src/init/write-runtime-config.js +214 -0
- package/dist/src/init/write-runtime-config.js.map +1 -0
- package/dist/src/init/write-sample-org.d.ts +9 -0
- package/dist/src/init/write-sample-org.d.ts.map +1 -0
- package/dist/src/init/write-sample-org.js +39 -0
- package/dist/src/init/write-sample-org.js.map +1 -0
- package/dist/src/knowledge/eval/golden-set.js +1 -1
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +2 -25
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -1
- package/dist/src/mcp-tools/auto-install.js +2 -1
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +26 -0
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +2 -37
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts +5 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.js +177 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/build-tools.d.ts +9 -0
- package/dist/src/mcp-tools/monograph/build-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/build-tools.js +299 -0
- package/dist/src/mcp-tools/monograph/build-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/group-tools.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/group-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/group-tools.js +225 -0
- package/dist/src/mcp-tools/monograph/group-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/health-tools.d.ts +6 -0
- package/dist/src/mcp-tools/monograph/health-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/health-tools.js +113 -0
- package/dist/src/mcp-tools/monograph/health-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/impact-tools.d.ts +9 -0
- package/dist/src/mcp-tools/monograph/impact-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/impact-tools.js +532 -0
- package/dist/src/mcp-tools/monograph/impact-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/index.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/index.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/index.js +73 -0
- package/dist/src/mcp-tools/monograph/index.js.map +1 -0
- package/dist/src/mcp-tools/monograph/query-tools.d.ts +11 -0
- package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/query-tools.js +500 -0
- package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/shared.d.ts +64 -0
- package/dist/src/mcp-tools/monograph/shared.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/shared.js +215 -0
- package/dist/src/mcp-tools/monograph/shared.js.map +1 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.js +382 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph-tools.d.ts +4 -23
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +4 -2439
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/monomind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.js +13 -1
- package/dist/src/mcp-tools/monomind-tools.js.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +31 -2
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +31 -1
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +8 -27
- package/dist/src/mcp-tools/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/types.js +9 -91
- package/dist/src/mcp-tools/types.js.map +1 -1
- package/dist/src/memory/file-permissions.d.ts +15 -0
- package/dist/src/memory/file-permissions.d.ts.map +1 -0
- package/dist/src/memory/file-permissions.js +25 -0
- package/dist/src/memory/file-permissions.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +94 -34
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-crud.d.ts.map +1 -1
- package/dist/src/memory/memory-crud.js +298 -275
- package/dist/src/memory/memory-crud.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +2 -4
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +53 -76
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/memory-migrations.d.ts +1 -14
- package/dist/src/memory/memory-migrations.d.ts.map +1 -1
- package/dist/src/memory/memory-migrations.js +52 -105
- package/dist/src/memory/memory-migrations.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +1 -1
- package/dist/src/memory/sona-optimizer.js +1 -1
- package/dist/src/monovector/index.d.ts +16 -19
- package/dist/src/monovector/index.d.ts.map +1 -1
- package/dist/src/monovector/index.js +50 -8
- package/dist/src/monovector/index.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +16 -0
- package/dist/src/orgrt/approvals.d.ts.map +1 -0
- package/dist/src/orgrt/approvals.js +72 -0
- package/dist/src/orgrt/approvals.js.map +1 -0
- package/dist/src/orgrt/bus.d.ts.map +1 -1
- package/dist/src/orgrt/bus.js +21 -0
- package/dist/src/orgrt/bus.js.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts +19 -0
- package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -0
- package/dist/src/orgrt/checkpoint-ops.js +219 -0
- package/dist/src/orgrt/checkpoint-ops.js.map +1 -0
- package/dist/src/orgrt/checkpoint.d.ts +33 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +50 -6
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/cross-org.d.ts +32 -0
- package/dist/src/orgrt/cross-org.d.ts.map +1 -0
- package/dist/src/orgrt/cross-org.js +256 -0
- package/dist/src/orgrt/cross-org.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +131 -157
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +356 -966
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +33 -0
- package/dist/src/orgrt/decisions.d.ts.map +1 -0
- package/dist/src/orgrt/decisions.js +169 -0
- package/dist/src/orgrt/decisions.js.map +1 -0
- package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +5 -1
- package/dist/src/orgrt/kimicode-runner.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +10 -2
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/org-memory.d.ts +45 -0
- package/dist/src/orgrt/org-memory.d.ts.map +1 -0
- package/dist/src/orgrt/org-memory.js +220 -0
- package/dist/src/orgrt/org-memory.js.map +1 -0
- package/dist/src/orgrt/policy.d.ts +4 -0
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +13 -1
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/prechecks.d.ts +15 -0
- package/dist/src/orgrt/prechecks.d.ts.map +1 -0
- package/dist/src/orgrt/prechecks.js +21 -0
- package/dist/src/orgrt/prechecks.js.map +1 -0
- package/dist/src/orgrt/questions.d.ts +39 -0
- package/dist/src/orgrt/questions.d.ts.map +1 -0
- package/dist/src/orgrt/questions.js +135 -0
- package/dist/src/orgrt/questions.js.map +1 -0
- package/dist/src/orgrt/remote.d.ts +25 -0
- package/dist/src/orgrt/remote.d.ts.map +1 -0
- package/dist/src/orgrt/remote.js +73 -0
- package/dist/src/orgrt/remote.js.map +1 -0
- package/dist/src/orgrt/scheduler-integration.d.ts +19 -0
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -0
- package/dist/src/orgrt/scheduler-integration.js +90 -0
- package/dist/src/orgrt/scheduler-integration.js.map +1 -0
- package/dist/src/orgrt/server.d.ts.map +1 -1
- package/dist/src/orgrt/server.js +70 -2
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +30 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +184 -53
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/state-detector.d.ts +19 -0
- package/dist/src/orgrt/state-detector.d.ts.map +1 -0
- package/dist/src/orgrt/state-detector.js +59 -0
- package/dist/src/orgrt/state-detector.js.map +1 -0
- package/dist/src/orgrt/task-dag.d.ts +27 -0
- package/dist/src/orgrt/task-dag.d.ts.map +1 -0
- package/dist/src/orgrt/task-dag.js +100 -0
- package/dist/src/orgrt/task-dag.js.map +1 -0
- package/dist/src/orgrt/tool-fence.d.ts +7 -4
- package/dist/src/orgrt/tool-fence.d.ts.map +1 -1
- package/dist/src/orgrt/tool-fence.js +47 -6
- package/dist/src/orgrt/tool-fence.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +57 -2
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +34 -3
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/routing/model-download.d.ts +49 -0
- package/dist/src/routing/model-download.d.ts.map +1 -0
- package/dist/src/routing/model-download.js +106 -0
- package/dist/src/routing/model-download.js.map +1 -0
- package/dist/src/services/crash-reporter.d.ts +5 -0
- package/dist/src/services/crash-reporter.d.ts.map +1 -1
- package/dist/src/services/crash-reporter.js +49 -0
- package/dist/src/services/crash-reporter.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +18 -15
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
- package/dist/src/transfer/anonymization/index.js +7 -119
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/ui/dashboard.html +606 -7
- package/dist/src/ui/orgs.html +7 -1
- package/dist/src/ui/routes-monograph.mjs +6 -0
- package/dist/src/ui/server.mjs +327 -7
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +2 -1
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts.map +1 -1
- package/dist/src/update/executor.js +7 -3
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +0 -1
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +5 -24
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/utils/db-mutex.d.ts +11 -0
- package/dist/src/utils/db-mutex.d.ts.map +1 -0
- package/dist/src/utils/db-mutex.js +23 -0
- package/dist/src/utils/db-mutex.js.map +1 -0
- package/dist/src/utils/input-guards.d.ts +23 -0
- package/dist/src/utils/input-guards.d.ts.map +1 -1
- package/dist/src/utils/input-guards.js +72 -0
- package/dist/src/utils/input-guards.js.map +1 -1
- package/dist/src/utils/npm-command.d.ts +10 -0
- package/dist/src/utils/npm-command.d.ts.map +1 -0
- package/dist/src/utils/npm-command.js +12 -0
- package/dist/src/utils/npm-command.js.map +1 -0
- package/dist/src/utils/paths.d.ts +28 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +108 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
- package/scripts/download-embedding-model.mjs +97 -0
- package/scripts/publish.sh +0 -0
- package/scripts/sync-claude-assets.sh +0 -0
- package/dist/src/production/circuit-breaker.d.ts +0 -121
- package/dist/src/production/circuit-breaker.d.ts.map +0 -1
- package/dist/src/production/circuit-breaker.js +0 -262
- package/dist/src/production/circuit-breaker.js.map +0 -1
- package/dist/src/production/error-handler.d.ts +0 -119
- package/dist/src/production/error-handler.d.ts.map +0 -1
- package/dist/src/production/error-handler.js +0 -324
- package/dist/src/production/error-handler.js.map +0 -1
- package/dist/src/production/index.d.ts +0 -6
- package/dist/src/production/index.d.ts.map +0 -1
- package/dist/src/production/index.js +0 -6
- package/dist/src/production/index.js.map +0 -1
- package/dist/src/production/monitoring.d.ts +0 -181
- package/dist/src/production/monitoring.d.ts.map +0 -1
- package/dist/src/production/monitoring.js +0 -375
- package/dist/src/production/monitoring.js.map +0 -1
- package/dist/src/production/rate-limiter.d.ts +0 -125
- package/dist/src/production/rate-limiter.d.ts.map +0 -1
- package/dist/src/production/rate-limiter.js +0 -218
- package/dist/src/production/rate-limiter.js.map +0 -1
- package/dist/src/production/retry.d.ts +0 -48
- package/dist/src/production/retry.d.ts.map +0 -1
- package/dist/src/production/retry.js +0 -189
- package/dist/src/production/retry.js.map +0 -1
- package/dist/src/transfer/types.d.ts +0 -245
- package/dist/src/transfer/types.d.ts.map +0 -1
- package/dist/src/transfer/types.js +0 -6
- package/dist/src/transfer/types.js.map +0 -1
|
@@ -2,97 +2,15 @@
|
|
|
2
2
|
* MCP Tool Types for CLI
|
|
3
3
|
*
|
|
4
4
|
* Local type definitions to avoid external imports outside package boundary.
|
|
5
|
-
*/
|
|
6
|
-
import { statSync, readFileSync, existsSync, mkdirSync, copyFileSync } from 'node:fs';
|
|
7
|
-
import { join, dirname, resolve } from 'node:path';
|
|
8
|
-
/**
|
|
9
|
-
* Returns the effective project working directory.
|
|
10
|
-
* Prefers MONOMIND_CWD (set by the install script for global/MCP installs
|
|
11
|
-
* where process.cwd() may resolve to '/') over the real process.cwd().
|
|
12
|
-
*/
|
|
13
|
-
export function getProjectCwd() {
|
|
14
|
-
return process.env.MONOMIND_CWD || process.cwd();
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Returns the stable Monomind data root that survives branch switches and is
|
|
18
|
-
* shared across all git worktrees of the same repository.
|
|
19
|
-
*
|
|
20
|
-
* Resolution order:
|
|
21
|
-
* 1. MONOMIND_DATA_DIR env var — allows overriding to e.g. ~/.monomind/<project>
|
|
22
|
-
* 2. <repo>/.git/monomind/ — regular repo (branch-agnostic, shared by design)
|
|
23
|
-
* 3. <main-repo>/.git/monomind/— worktree: .git is a pointer file → resolve to
|
|
24
|
-
* the shared .git dir of the main worktree
|
|
25
|
-
* 4. <cwd>/.monomind/ — fallback when git is unavailable
|
|
26
|
-
*
|
|
27
|
-
* Mirrors the _getGitMonomindDir() function in server.mjs so session, task,
|
|
28
|
-
* memory, and org data all land in the same stable location.
|
|
29
|
-
*/
|
|
30
|
-
const _dataRootCache = new Map();
|
|
31
|
-
export function getMonomindDataRoot(cwd) {
|
|
32
|
-
if (process.env.MONOMIND_DATA_DIR)
|
|
33
|
-
return process.env.MONOMIND_DATA_DIR;
|
|
34
|
-
const workDir = cwd || getProjectCwd();
|
|
35
|
-
if (_dataRootCache.has(workDir))
|
|
36
|
-
return _dataRootCache.get(workDir);
|
|
37
|
-
let result;
|
|
38
|
-
try {
|
|
39
|
-
const gitEntry = join(workDir, '.git');
|
|
40
|
-
const st = statSync(gitEntry);
|
|
41
|
-
if (st.isDirectory()) {
|
|
42
|
-
result = join(gitEntry, 'monomind');
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// Worktree: .git is a text file "gitdir: /main/.git/worktrees/name"
|
|
46
|
-
const m = readFileSync(gitEntry, 'utf8').match(/^gitdir:\s*(.+)/m);
|
|
47
|
-
if (m) {
|
|
48
|
-
const worktreeDir = resolve(workDir, m[1].trim());
|
|
49
|
-
const commonGitDir = dirname(dirname(worktreeDir));
|
|
50
|
-
result = join(commonGitDir, 'monomind');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
result = join(workDir, '.monomind');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
result = join(workDir, '.monomind');
|
|
59
|
-
}
|
|
60
|
-
_dataRootCache.set(workDir, result);
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* One-time migration for the agent/task/hive/swarm stores that historically lived
|
|
65
|
-
* under `<projectCwd>/.monomind/<subpath>` (via getProjectCwd()) before being
|
|
66
|
-
* consolidated onto the canonical getMonomindDataRoot() location (typically
|
|
67
|
-
* `<repo>/.git/monomind/<subpath>`). Several MCP tool files (agent-tools.ts,
|
|
68
|
-
* hive-mind-tools.ts, swarm-tools.ts, system-tools.ts) used to read/write the
|
|
69
|
-
* legacy path directly, causing the same logical store to physically split from
|
|
70
|
-
* task-tools.ts/session-tools.ts, which always used getMonomindDataRoot().
|
|
71
|
-
*
|
|
72
|
-
* If the canonical file is missing but the legacy file exists, copy (never move,
|
|
73
|
-
* for safety) the legacy file into place so pre-existing data isn't silently
|
|
74
|
-
* orphaned. Best-effort and idempotent — never throws, and it's a no-op once the
|
|
75
|
-
* canonical file exists or when the two paths already coincide (e.g. no .git).
|
|
76
5
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
6
|
+
* A1: path helpers (getProjectCwd / getMonomindDataRoot / migrateLegacyStoreFile)
|
|
7
|
+
* used to be defined inline here, which inverted the dependency direction —
|
|
8
|
+
* every layer (commands/, mcp-client.ts, monovector/, orgrt/) imported from
|
|
9
|
+
* mcp-tools/ just to resolve the project root. They now live in
|
|
10
|
+
* `utils/paths.ts` and are re-exported here so existing imports keep working.
|
|
11
|
+
* New code should import from `../utils/paths.js` directly.
|
|
81
12
|
*/
|
|
82
|
-
export
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return;
|
|
86
|
-
const legacyPath = join(cwd || getProjectCwd(), '.monomind', legacySubpath);
|
|
87
|
-
if (legacyPath === canonicalPath)
|
|
88
|
-
return;
|
|
89
|
-
if (!existsSync(legacyPath))
|
|
90
|
-
return;
|
|
91
|
-
mkdirSync(dirname(canonicalPath), { recursive: true });
|
|
92
|
-
copyFileSync(legacyPath, canonicalPath);
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
// Best-effort; leave both stores as-is on any failure.
|
|
96
|
-
}
|
|
97
|
-
}
|
|
13
|
+
// Re-export the path helpers for backward compatibility with existing callers
|
|
14
|
+
// that import from this module. New code should prefer `utils/paths.js`.
|
|
15
|
+
export { getProjectCwd, getMonomindDataRoot, migrateLegacyStoreFile } from '../utils/paths.js';
|
|
98
16
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp-tools/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp-tools/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8EAA8E;AAC9E,yEAAyE;AACzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-permission hardening for the local memory store.
|
|
3
|
+
*
|
|
4
|
+
* memory.db holds personal "second brain" data (memories, knowledge,
|
|
5
|
+
* session notes). sql.js exports it via writeFileSync, which creates the
|
|
6
|
+
* file with the process umask default — world-readable on many systems.
|
|
7
|
+
* Restrict the persisted DB to owner read/write (0600) after every write.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Restrict a persisted memory DB file to owner-only (0600).
|
|
11
|
+
* No-op on win32 (POSIX modes unsupported) and best-effort elsewhere —
|
|
12
|
+
* a chmod failure must never break a memory write.
|
|
13
|
+
*/
|
|
14
|
+
export declare function secureDbFilePermissions(filePath: string): void;
|
|
15
|
+
//# sourceMappingURL=file-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-permissions.d.ts","sourceRoot":"","sources":["../../../src/memory/file-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAO9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-permission hardening for the local memory store.
|
|
3
|
+
*
|
|
4
|
+
* memory.db holds personal "second brain" data (memories, knowledge,
|
|
5
|
+
* session notes). sql.js exports it via writeFileSync, which creates the
|
|
6
|
+
* file with the process umask default — world-readable on many systems.
|
|
7
|
+
* Restrict the persisted DB to owner read/write (0600) after every write.
|
|
8
|
+
*/
|
|
9
|
+
import { chmodSync } from 'node:fs';
|
|
10
|
+
/**
|
|
11
|
+
* Restrict a persisted memory DB file to owner-only (0600).
|
|
12
|
+
* No-op on win32 (POSIX modes unsupported) and best-effort elsewhere —
|
|
13
|
+
* a chmod failure must never break a memory write.
|
|
14
|
+
*/
|
|
15
|
+
export function secureDbFilePermissions(filePath) {
|
|
16
|
+
if (process.platform === 'win32')
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
chmodSync(filePath, 0o600);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// best effort — e.g. filesystem without POSIX permission support
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=file-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-permissions.js","sourceRoot":"","sources":["../../../src/memory/file-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IACzC,IAAI,CAAC;QACH,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-bridge.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"memory-bridge.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,20 @@ import * as fs from 'fs';
|
|
|
16
16
|
// ===== Embedding validation =====
|
|
17
17
|
const MAX_EMBEDDING_DIMS = 8192;
|
|
18
18
|
const MAX_EMBEDDING_JSON_BYTES = MAX_EMBEDDING_DIMS * 32; // ~256KB ceiling
|
|
19
|
+
/**
|
|
20
|
+
* R1: surface swallowed errors when DEBUG/MONOMIND_DEBUG is on. The bridge
|
|
21
|
+
* has ~12 `} catch { return null; }` sites that collapse SQLITE_BUSY,
|
|
22
|
+
* EACCES, disk-full, and schema mismatches into "no matches" with zero
|
|
23
|
+
* diagnostic. Behavior contract (return null on failure) is unchanged;
|
|
24
|
+
* observability is added. Caller passes the bridge fn name + the thrown
|
|
25
|
+
* value so the log is greppable per call site.
|
|
26
|
+
*/
|
|
27
|
+
function logBridgeError(label, err) {
|
|
28
|
+
if (!(process.env.DEBUG || process.env.MONOMIND_DEBUG))
|
|
29
|
+
return;
|
|
30
|
+
const msg = err instanceof Error ? `${err.name}: ${err.message}` : String(err);
|
|
31
|
+
console.error(`[bridge:${label}] ${msg}`);
|
|
32
|
+
}
|
|
19
33
|
export function safeParseEmbedding(raw) {
|
|
20
34
|
if (typeof raw !== 'string' || raw.length === 0)
|
|
21
35
|
return null;
|
|
@@ -190,7 +204,8 @@ function getAutomemConfig() {
|
|
|
190
204
|
? Math.max(0, Math.min(1, config.scaffold.feedbackInfluence)) : defaults.feedbackInfluence,
|
|
191
205
|
};
|
|
192
206
|
}
|
|
193
|
-
catch {
|
|
207
|
+
catch (e) {
|
|
208
|
+
logBridgeError('loadBridgeConfig', e);
|
|
194
209
|
return defaults;
|
|
195
210
|
}
|
|
196
211
|
}
|
|
@@ -367,8 +382,13 @@ async function getBackend(dbPath) {
|
|
|
367
382
|
if (backendSlots.size >= MAX_BACKEND_SLOTS) {
|
|
368
383
|
const oldest = backendSlots.keys().next().value;
|
|
369
384
|
const evicted = backendSlots.get(oldest);
|
|
385
|
+
// shutdownBridge() below uses .shutdown() — that's the real method these
|
|
386
|
+
// backends expose. .close() doesn't exist on either backend class, so this
|
|
387
|
+
// resolved to undefined via the optional chain every time and never actually
|
|
388
|
+
// released the connection: every 6th distinct database path opened in this
|
|
389
|
+
// process leaked the oldest slot's connection for the process lifetime.
|
|
370
390
|
try {
|
|
371
|
-
evicted?.instance?.
|
|
391
|
+
await evicted?.instance?.shutdown?.();
|
|
372
392
|
}
|
|
373
393
|
catch { /* best effort */ }
|
|
374
394
|
backendSlots.delete(oldest);
|
|
@@ -416,6 +436,12 @@ async function getBackend(dbPath) {
|
|
|
416
436
|
optimize: true,
|
|
417
437
|
defaultNamespace: 'default',
|
|
418
438
|
embeddingGenerator: _embedder ?? undefined,
|
|
439
|
+
// R3: when the MCP server and a CLI hook subprocess hit the same
|
|
440
|
+
// memory.db at the same time, SQLite returns SQLITE_BUSY and the
|
|
441
|
+
// bridge silently no-ops. busy_timeout tells SQLite to wait up to
|
|
442
|
+
// 5s for a lock before giving up, which covers the normal handoff
|
|
443
|
+
// window. The native @monoes/memory backend reads this key.
|
|
444
|
+
busyTimeoutMs: 5000,
|
|
419
445
|
};
|
|
420
446
|
const origLog = console.log;
|
|
421
447
|
console.log = (...args) => {
|
|
@@ -444,11 +470,12 @@ async function getBackend(dbPath) {
|
|
|
444
470
|
slot.available = true;
|
|
445
471
|
return backend;
|
|
446
472
|
}
|
|
447
|
-
catch {
|
|
473
|
+
catch (e) {
|
|
448
474
|
slot.attempts++;
|
|
449
475
|
slot.promise = null;
|
|
450
476
|
if (slot.attempts >= MAX_INIT_ATTEMPTS)
|
|
451
477
|
slot.available = false;
|
|
478
|
+
logBridgeError('getBackend', e);
|
|
452
479
|
return null;
|
|
453
480
|
}
|
|
454
481
|
})();
|
|
@@ -613,34 +640,61 @@ export async function bridgeSearchEntries(options) {
|
|
|
613
640
|
// so keyword results are merged into semantic results (union, deduplicated
|
|
614
641
|
// by key) to ensure every findable entry surfaces regardless of whether
|
|
615
642
|
// it has an embedding. Semantic hits take priority on score.
|
|
643
|
+
//
|
|
644
|
+
// Issue #66: When the backend has FTS5, keyword matching runs inside
|
|
645
|
+
// SQLite via MATCH — orders of magnitude faster than the old path that
|
|
646
|
+
// loaded up to 50k rows and scanned them in JS. The JS fallback is
|
|
647
|
+
// kept for sql.js WASM builds that lack the FTS5 extension.
|
|
616
648
|
{
|
|
617
|
-
const entries = await backend.query({
|
|
618
|
-
type: 'exact',
|
|
619
|
-
...(namespace ? { namespace } : {}),
|
|
620
|
-
limit: 50000,
|
|
621
|
-
});
|
|
622
649
|
const tokens = queryStr.toLowerCase().split(/[^a-z0-9]+/).filter(t => t.length > 1);
|
|
650
|
+
let keywordHits = [];
|
|
623
651
|
if (tokens.length) {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
.
|
|
631
|
-
.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
652
|
+
// ── FTS5 fast path ──────────────────────────────────────────
|
|
653
|
+
const fts5Results = typeof backend.keywordSearch === 'function'
|
|
654
|
+
? await backend.keywordSearch(queryStr, { namespace, limit }).catch(() => null)
|
|
655
|
+
: null;
|
|
656
|
+
if (fts5Results !== null && fts5Results.length > 0) {
|
|
657
|
+
// FTS5 rank is negative (lower = better); normalise to 0–1.
|
|
658
|
+
const maxRank = Math.max(...fts5Results.map((r) => Math.abs(r.rank)), 1);
|
|
659
|
+
keywordHits = fts5Results.map((r) => ({
|
|
660
|
+
id: r.id,
|
|
661
|
+
key: r.key,
|
|
662
|
+
content: capResultContent(r.content || ''),
|
|
663
|
+
score: Math.abs(r.rank) / maxRank, // normalised 0–1
|
|
664
|
+
namespace: r.namespace,
|
|
665
|
+
provenance: `keyword-fts5:${(Math.abs(r.rank) / maxRank).toFixed(2)}`,
|
|
666
|
+
tags: [],
|
|
667
|
+
_createdAt: 0,
|
|
668
|
+
}));
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
// ── JS fallback (no FTS5 or empty FTS5 result) ────────────
|
|
672
|
+
const entries = await backend.query({
|
|
673
|
+
type: 'exact',
|
|
674
|
+
...(namespace ? { namespace } : {}),
|
|
675
|
+
limit: 50000,
|
|
676
|
+
});
|
|
677
|
+
keywordHits = entries
|
|
678
|
+
.map((e) => {
|
|
679
|
+
const haystack = `${e.key || ''} ${e.content || ''}`.toLowerCase();
|
|
680
|
+
const hits = tokens.filter(t => haystack.includes(t)).length;
|
|
681
|
+
return { e, score: hits / tokens.length };
|
|
682
|
+
})
|
|
683
|
+
.filter((x) => x.score > 0)
|
|
684
|
+
.sort((a, b) => b.score - a.score)
|
|
685
|
+
.slice(0, limit)
|
|
686
|
+
.map(({ e, score }) => ({
|
|
687
|
+
id: e.id,
|
|
688
|
+
key: e.key,
|
|
689
|
+
content: capResultContent(e.content || ''),
|
|
690
|
+
// Raw token-overlap fraction, NOT rescaled to look like a cosine.
|
|
691
|
+
score,
|
|
692
|
+
namespace: e.namespace,
|
|
693
|
+
provenance: `keyword:${score.toFixed(2)}`,
|
|
694
|
+
tags: e.tags ?? [],
|
|
695
|
+
_createdAt: e.createdAt || 0,
|
|
696
|
+
}));
|
|
697
|
+
}
|
|
644
698
|
if (results.length === 0) {
|
|
645
699
|
// No semantic results — keyword is all we have.
|
|
646
700
|
results = keywordHits;
|
|
@@ -708,7 +762,8 @@ export async function bridgeSearchEntries(options) {
|
|
|
708
762
|
...(searchMethod === 'semantic' ? {} : { fallbackReason }),
|
|
709
763
|
};
|
|
710
764
|
}
|
|
711
|
-
catch {
|
|
765
|
+
catch (e) {
|
|
766
|
+
logBridgeError('bridgeSearchEntries', e);
|
|
712
767
|
return null;
|
|
713
768
|
}
|
|
714
769
|
}
|
|
@@ -740,7 +795,8 @@ export async function bridgeListEntries(options) {
|
|
|
740
795
|
total: entries.length,
|
|
741
796
|
};
|
|
742
797
|
}
|
|
743
|
-
catch {
|
|
798
|
+
catch (e) {
|
|
799
|
+
logBridgeError('bridgeListEntries', e);
|
|
744
800
|
return null;
|
|
745
801
|
}
|
|
746
802
|
}
|
|
@@ -770,7 +826,8 @@ export async function bridgeGetEntry(options) {
|
|
|
770
826
|
},
|
|
771
827
|
};
|
|
772
828
|
}
|
|
773
|
-
catch {
|
|
829
|
+
catch (e) {
|
|
830
|
+
logBridgeError('bridgeGetEntry', e);
|
|
774
831
|
return null;
|
|
775
832
|
}
|
|
776
833
|
}
|
|
@@ -793,7 +850,8 @@ export async function bridgeDeleteEntry(options) {
|
|
|
793
850
|
await flushBackend(backend);
|
|
794
851
|
return { success: true, deleted };
|
|
795
852
|
}
|
|
796
|
-
catch {
|
|
853
|
+
catch (e) {
|
|
854
|
+
logBridgeError('bridgeDeleteEntry', e);
|
|
797
855
|
return { success: false, deleted: false };
|
|
798
856
|
}
|
|
799
857
|
}
|
|
@@ -806,7 +864,8 @@ export async function bridgeGenerateEmbedding(text, dbPath) {
|
|
|
806
864
|
const emb = await _embedder(text);
|
|
807
865
|
return { embedding: Array.from(emb), dimensions: emb.length, model: BRIDGE_EMBEDDING_MODEL };
|
|
808
866
|
}
|
|
809
|
-
catch {
|
|
867
|
+
catch (e) {
|
|
868
|
+
logBridgeError('bridgeEmbedText', e);
|
|
810
869
|
return null;
|
|
811
870
|
}
|
|
812
871
|
}
|
|
@@ -826,7 +885,8 @@ export async function bridgeLoadEmbeddingModel(dbPath) {
|
|
|
826
885
|
loadTime: Date.now() - startTime,
|
|
827
886
|
};
|
|
828
887
|
}
|
|
829
|
-
catch {
|
|
888
|
+
catch (e) {
|
|
889
|
+
logBridgeError('bridgeLoadEmbeddingModel', e);
|
|
830
890
|
return null;
|
|
831
891
|
}
|
|
832
892
|
}
|