squish-memory 1.0.1 → 1.1.5
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/.env.example +130 -0
- package/CHANGELOG.md +55 -0
- package/README.md +155 -274
- package/config/hooks/claude-code-hooks.json +39 -0
- package/config/hooks/cursor-hooks.json +30 -0
- package/config/hooks/opencode-hooks.json +30 -0
- package/config/hooks/windsurf-hooks.json +30 -0
- package/config/mcp-mode-semantics.json +23 -21
- package/config/plugin-manifest.json +101 -152
- package/{plugin.json → config/plugin.json} +2 -2
- package/config/settings.json +52 -51
- package/{commands → core/commands}/init.md +39 -39
- package/dist/config.d.ts +28 -4
- package/dist/config.js +97 -29
- package/dist/core/adapters/config/claude-code.d.ts +45 -0
- package/dist/core/adapters/config/claude-code.js +113 -0
- package/dist/core/adapters/config/cursor.d.ts +26 -0
- package/dist/core/adapters/config/cursor.js +74 -0
- package/dist/core/adapters/config/opencode.d.ts +23 -0
- package/dist/core/adapters/config/opencode.js +73 -0
- package/dist/core/adapters/config/windsurf.d.ts +26 -0
- package/dist/core/adapters/config/windsurf.js +74 -0
- package/dist/core/adapters/index.d.ts +45 -0
- package/dist/core/adapters/index.js +84 -0
- package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
- package/dist/core/adapters/scripts/install-adapter.js +149 -0
- package/dist/core/adapters/timeline.d.ts +23 -0
- package/dist/core/adapters/timeline.js +88 -0
- package/dist/core/adapters/types.d.ts +157 -0
- package/dist/core/adapters/types.js +50 -0
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
- package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
- package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
- package/dist/core/algorithms/index.d.ts +21 -0
- package/dist/core/algorithms/index.js +26 -0
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
- package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
- package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
- package/dist/core/algorithms/types.d.ts +133 -0
- package/dist/core/algorithms/types.js +5 -0
- package/dist/core/associations.d.ts +1 -2
- package/dist/core/associations.js +1 -2
- package/dist/core/autosave.d.ts +19 -0
- package/dist/core/autosave.js +16 -0
- package/dist/{commands → core/commands}/managed-sync.js +5 -5
- package/dist/core/commands/mcp-server.js +739 -0
- package/dist/core/context/agent-context.d.ts +106 -0
- package/dist/core/context/agent-context.js +274 -0
- package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
- package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
- package/dist/core/context/context-window.d.ts +40 -0
- package/dist/core/context/context-window.js +177 -0
- package/dist/core/context/context.js +22 -0
- package/dist/core/embeddings.d.ts +1 -1
- package/dist/core/embeddings.js +54 -2
- package/dist/core/error-handling.d.ts +63 -0
- package/dist/core/error-handling.js +173 -0
- package/dist/core/external-folder/index.d.ts +102 -0
- package/dist/core/external-folder/index.js +294 -0
- package/dist/core/hooks/agent-hooks.d.ts +74 -0
- package/dist/core/hooks/agent-hooks.js +244 -0
- package/dist/core/hooks/auto-tagger.d.ts +19 -0
- package/dist/core/hooks/auto-tagger.js +155 -0
- package/dist/core/hooks/capture-filter.d.ts +41 -0
- package/dist/core/hooks/capture-filter.js +128 -0
- package/dist/core/index.d.ts +6 -6
- package/dist/core/index.js +6 -6
- package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
- package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
- package/dist/core/ingestion/learnings.d.ts +57 -0
- package/dist/core/ingestion/learnings.js +202 -0
- package/dist/core/lib/db-client.d.ts +114 -0
- package/dist/core/lib/db-client.js +130 -0
- package/dist/core/lib/schemas.d.ts +129 -0
- package/dist/core/lib/schemas.js +87 -0
- package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
- package/dist/core/{utils.js → lib/utils.js} +31 -15
- package/dist/core/lib/validation.d.ts +38 -0
- package/dist/core/lib/validation.js +151 -0
- package/dist/core/lifecycle.d.ts +7 -0
- package/dist/core/lifecycle.js +140 -20
- package/dist/core/local-embeddings.d.ts +6 -1
- package/dist/core/local-embeddings.js +6 -15
- package/dist/core/logger.js +7 -1
- package/dist/core/mcp/server.js +27 -1
- package/dist/core/mcp/tools.js +35 -3
- package/dist/core/mcp/types.d.ts +4 -4
- package/dist/core/memory/categorizer.js +1 -0
- package/dist/core/memory/conflict-detector.js +1 -1
- package/dist/core/memory/consolidation.d.ts +1 -10
- package/dist/core/memory/consolidation.js +2 -11
- package/dist/core/memory/context-collector.js +1 -1
- package/dist/core/memory/edit-workflow.js +1 -1
- package/dist/core/memory/entity-resolver.js +7 -7
- package/dist/core/memory/fact-extractor.js +12 -12
- package/dist/core/memory/feedback-tracker.js +1 -1
- package/dist/core/memory/hooks.d.ts +88 -0
- package/dist/core/memory/hooks.js +174 -0
- package/dist/core/memory/hybrid-retrieval.js +2 -2
- package/dist/core/memory/hybrid-search.d.ts +1 -6
- package/dist/core/memory/hybrid-search.js +70 -84
- package/dist/core/memory/importance.d.ts +8 -13
- package/dist/core/memory/importance.js +47 -74
- package/dist/core/memory/loader.d.ts +31 -0
- package/dist/core/memory/loader.js +141 -0
- package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
- package/dist/core/memory/markdown/markdown-storage.js +243 -0
- package/dist/core/memory/memories.d.ts +12 -4
- package/dist/core/memory/memories.js +196 -181
- package/dist/core/memory/memory-lifecycle.d.ts +8 -0
- package/dist/core/memory/memory-lifecycle.js +55 -0
- package/dist/core/memory/migrate.d.ts +21 -0
- package/dist/core/memory/migrate.js +134 -0
- package/dist/core/memory/normalization.d.ts +22 -0
- package/dist/core/memory/normalization.js +26 -0
- package/dist/core/memory/progressive-disclosure.js +1 -1
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/serialization.d.ts +4 -0
- package/dist/core/memory/serialization.js +49 -0
- package/dist/core/memory/stats.d.ts +5 -0
- package/dist/core/memory/stats.js +63 -12
- package/dist/core/memory/temporal-facts.js +21 -0
- package/dist/core/memory/write-gate.js +1 -1
- package/dist/core/obsidian-vault.d.ts +30 -0
- package/dist/core/obsidian-vault.js +94 -0
- package/dist/core/places/index.d.ts +14 -0
- package/dist/core/places/index.js +14 -0
- package/dist/core/places/memory-places.d.ts +68 -0
- package/dist/core/places/memory-places.js +261 -0
- package/dist/core/places/places.d.ts +88 -0
- package/dist/core/places/places.js +314 -0
- package/dist/core/places/rules.d.ts +74 -0
- package/dist/core/places/rules.js +240 -0
- package/dist/core/places/walking.d.ts +56 -0
- package/dist/core/places/walking.js +121 -0
- package/dist/core/projects.d.ts +5 -0
- package/dist/core/projects.js +39 -18
- package/dist/core/responses.d.ts +96 -0
- package/dist/core/responses.js +122 -0
- package/dist/core/scheduler/cron-scheduler.js +89 -14
- package/dist/core/scheduler/index.d.ts +1 -1
- package/dist/core/scheduler/index.js +1 -1
- package/dist/core/scheduler/job-runner.js +1 -1
- package/dist/core/search/conversations.js +40 -42
- package/dist/core/search/entities.js +6 -9
- package/dist/core/search/graph-boost.d.ts +7 -0
- package/dist/core/search/graph-boost.js +23 -0
- package/dist/core/search/qmd-search.js +4 -4
- package/dist/core/security/encrypt.d.ts +6 -0
- package/dist/core/security/encrypt.js +47 -0
- package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
- package/dist/core/security/governance.js +79 -0
- package/dist/core/session/auto-load.js +6 -6
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/self-iteration-job.d.ts +20 -0
- package/dist/core/session/self-iteration-job.js +282 -0
- package/dist/core/session/session-hooks.d.ts +18 -0
- package/dist/core/session/session-hooks.js +58 -0
- package/dist/core/session-hooks/self-iteration-job.js +35 -35
- package/dist/core/{cache.js → storage/cache.js} +2 -2
- package/dist/core/sync/qmd-sync.d.ts +1 -13
- package/dist/core/sync/qmd-sync.js +1 -13
- package/dist/core/toon.d.ts +43 -0
- package/dist/core/toon.js +160 -0
- package/dist/core/utils/memory-operations.js +1 -1
- package/dist/core/utils/vector-operations.d.ts +71 -0
- package/dist/core/utils/vector-operations.js +129 -0
- package/dist/db/adapter.d.ts +3 -3
- package/dist/db/adapter.js +115 -36
- package/dist/db/bootstrap.js +927 -555
- package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
- package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
- package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
- package/dist/{drizzle → db/drizzle}/schema.js +106 -35
- package/dist/db/drizzle.config.d.ts +3 -0
- package/dist/db/drizzle.config.js +12 -0
- package/dist/db/index.d.ts +1 -5
- package/dist/db/index.js +51 -8
- package/dist/db/neon.d.ts +8 -0
- package/dist/db/neon.js +20 -0
- package/dist/db/schema/index.d.ts +40 -0
- package/dist/db/schema/index.js +105 -0
- package/dist/db/schema/tables/context-sessions.d.ts +9 -0
- package/dist/db/schema/tables/context-sessions.js +37 -0
- package/dist/db/schema/tables/conversations.d.ts +9 -0
- package/dist/db/schema/tables/conversations.js +47 -0
- package/dist/db/schema/tables/core-memory.d.ts +9 -0
- package/dist/db/schema/tables/core-memory.js +41 -0
- package/dist/db/schema/tables/entities.d.ts +9 -0
- package/dist/db/schema/tables/entities.js +39 -0
- package/dist/db/schema/tables/entity-relations.d.ts +9 -0
- package/dist/db/schema/tables/entity-relations.js +31 -0
- package/dist/db/schema/tables/learnings.d.ts +9 -0
- package/dist/db/schema/tables/learnings.js +66 -0
- package/dist/db/schema/tables/memories.d.ts +9 -0
- package/dist/db/schema/tables/memories.js +161 -0
- package/dist/db/schema/tables/memory-associations.d.ts +9 -0
- package/dist/db/schema/tables/memory-associations.js +39 -0
- package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
- package/dist/db/schema/tables/memory-hash-cache.js +29 -0
- package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-history.js +33 -0
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
- package/dist/db/schema/tables/messages.d.ts +9 -0
- package/dist/db/schema/tables/messages.js +41 -0
- package/dist/db/schema/tables/namespaces.d.ts +9 -0
- package/dist/db/schema/tables/namespaces.js +37 -0
- package/dist/db/schema/tables/projects.d.ts +9 -0
- package/dist/db/schema/tables/projects.js +31 -0
- package/dist/db/schema/tables/users.d.ts +9 -0
- package/dist/db/schema/tables/users.js +27 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/supabase.d.ts +9 -0
- package/dist/db/supabase.js +24 -0
- package/dist/index.d.ts +2 -14
- package/dist/index.js +1457 -631
- package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
- package/dist/webui/server.d.ts +5 -0
- package/dist/{api/web/web.js → webui/server.js} +538 -509
- package/generated/mcp/manifest.json +23 -23
- package/{.mcp.json → mcp.json.example} +1 -1
- package/package.json +159 -169
- package/scripts/README.md +60 -0
- package/scripts/copy-runtime-assets.mjs +26 -0
- package/scripts/generate-mcp.mjs +264 -264
- package/scripts/github-release.sh +4 -4
- package/scripts/install-claude-code.sh +85 -0
- package/scripts/install-cursor.sh +56 -0
- package/scripts/install-hooks.sh +73 -0
- package/scripts/install-interactive.mjs +357 -674
- package/scripts/install-opencode.sh +75 -0
- package/scripts/install-windsurf.sh +67 -0
- package/skills/squish-memory/SKILL.md +104 -100
- package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
- package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
- package/skills/squish-memory/write_skill.js +2 -0
- package/.claude-plugin/marketplace.json +0 -20
- package/.claude-plugin/plugin.json +0 -32
- package/.env.mcp.example +0 -56
- package/QUICK-START.md +0 -71
- package/bin/squish-add.mjs +0 -32
- package/bin/squish-rm.mjs +0 -21
- package/commands/observe.md +0 -5
- package/dist/algorithms/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.js.map +0 -1
- package/dist/algorithms/utils/response-builder.d.ts.map +0 -1
- package/dist/algorithms/utils/response-builder.js.map +0 -1
- package/dist/api/web/index.d.ts +0 -3
- package/dist/api/web/index.d.ts.map +0 -1
- package/dist/api/web/index.js +0 -4
- package/dist/api/web/index.js.map +0 -1
- package/dist/api/web/web-server.d.ts +0 -3
- package/dist/api/web/web-server.d.ts.map +0 -1
- package/dist/api/web/web-server.js +0 -6
- package/dist/api/web/web-server.js.map +0 -1
- package/dist/api/web/web.d.ts +0 -4
- package/dist/api/web/web.d.ts.map +0 -1
- package/dist/api/web/web.js.map +0 -1
- package/dist/commands/managed-sync.d.ts.map +0 -1
- package/dist/commands/managed-sync.js.map +0 -1
- package/dist/commands/mcp-server.d.ts.map +0 -1
- package/dist/commands/mcp-server.js +0 -393
- package/dist/commands/mcp-server.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/core/agent-memory.d.ts.map +0 -1
- package/dist/core/agent-memory.js.map +0 -1
- package/dist/core/associations.d.ts.map +0 -1
- package/dist/core/associations.js.map +0 -1
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/cache.js.map +0 -1
- package/dist/core/consolidation.d.ts.map +0 -1
- package/dist/core/consolidation.js.map +0 -1
- package/dist/core/context-paging.d.ts.map +0 -1
- package/dist/core/context-paging.js.map +0 -1
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -24
- package/dist/core/context.js.map +0 -1
- package/dist/core/core-memory.d.ts.map +0 -1
- package/dist/core/core-memory.js.map +0 -1
- package/dist/core/database.d.ts.map +0 -1
- package/dist/core/database.js.map +0 -1
- package/dist/core/embeddings/google-multimodal.d.ts.map +0 -1
- package/dist/core/embeddings/google-multimodal.js.map +0 -1
- package/dist/core/embeddings/qmd-client.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-client.js.map +0 -1
- package/dist/core/embeddings.d.ts.map +0 -1
- package/dist/core/embeddings.js.map +0 -1
- package/dist/core/governance.d.ts.map +0 -1
- package/dist/core/governance.js +0 -64
- package/dist/core/governance.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/layers/generator.d.ts.map +0 -1
- package/dist/core/layers/generator.js.map +0 -1
- package/dist/core/lifecycle.d.ts.map +0 -1
- package/dist/core/lifecycle.js.map +0 -1
- package/dist/core/local-embeddings.d.ts.map +0 -1
- package/dist/core/local-embeddings.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/mcp/client.d.ts.map +0 -1
- package/dist/core/mcp/client.js.map +0 -1
- package/dist/core/mcp/index.d.ts.map +0 -1
- package/dist/core/mcp/index.js.map +0 -1
- package/dist/core/mcp/server.d.ts.map +0 -1
- package/dist/core/mcp/server.js.map +0 -1
- package/dist/core/mcp/standalone-server.d.ts.map +0 -1
- package/dist/core/mcp/standalone-server.js.map +0 -1
- package/dist/core/mcp/tools.d.ts.map +0 -1
- package/dist/core/mcp/tools.js.map +0 -1
- package/dist/core/mcp/types.d.ts.map +0 -1
- package/dist/core/mcp/types.js.map +0 -1
- package/dist/core/memory/bridge-discovery.d.ts.map +0 -1
- package/dist/core/memory/bridge-discovery.js.map +0 -1
- package/dist/core/memory/categorizer.d.ts.map +0 -1
- package/dist/core/memory/categorizer.js.map +0 -1
- package/dist/core/memory/conflict-detector.d.ts.map +0 -1
- package/dist/core/memory/conflict-detector.js.map +0 -1
- package/dist/core/memory/consolidation.d.ts.map +0 -1
- package/dist/core/memory/consolidation.js.map +0 -1
- package/dist/core/memory/context-collector.d.ts.map +0 -1
- package/dist/core/memory/context-collector.js.map +0 -1
- package/dist/core/memory/contradiction-resolver.d.ts.map +0 -1
- package/dist/core/memory/contradiction-resolver.js.map +0 -1
- package/dist/core/memory/edit-workflow.d.ts.map +0 -1
- package/dist/core/memory/edit-workflow.js.map +0 -1
- package/dist/core/memory/entity-extractor.d.ts.map +0 -1
- package/dist/core/memory/entity-extractor.js.map +0 -1
- package/dist/core/memory/entity-resolver.d.ts.map +0 -1
- package/dist/core/memory/entity-resolver.js.map +0 -1
- package/dist/core/memory/fact-extractor.d.ts.map +0 -1
- package/dist/core/memory/fact-extractor.js.map +0 -1
- package/dist/core/memory/feedback-tracker.d.ts.map +0 -1
- package/dist/core/memory/feedback-tracker.js.map +0 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +0 -1
- package/dist/core/memory/hybrid-retrieval.js.map +0 -1
- package/dist/core/memory/hybrid-scorer.d.ts.map +0 -1
- package/dist/core/memory/hybrid-scorer.js.map +0 -1
- package/dist/core/memory/hybrid-search.d.ts.map +0 -1
- package/dist/core/memory/hybrid-search.js.map +0 -1
- package/dist/core/memory/importance.d.ts.map +0 -1
- package/dist/core/memory/importance.js.map +0 -1
- package/dist/core/memory/index.d.ts.map +0 -1
- package/dist/core/memory/index.js.map +0 -1
- package/dist/core/memory/memories.d.ts.map +0 -1
- package/dist/core/memory/memories.js.map +0 -1
- package/dist/core/memory/memory-manager.d.ts.map +0 -1
- package/dist/core/memory/memory-manager.js.map +0 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +0 -1
- package/dist/core/memory/progressive-disclosure.js.map +0 -1
- package/dist/core/memory/query-processor.d.ts.map +0 -1
- package/dist/core/memory/query-processor.js.map +0 -1
- package/dist/core/memory/query-rewriter.d.ts.map +0 -1
- package/dist/core/memory/query-rewriter.js.map +0 -1
- package/dist/core/memory/response-analyzer.d.ts.map +0 -1
- package/dist/core/memory/response-analyzer.js.map +0 -1
- package/dist/core/memory/serialization.d.ts.map +0 -1
- package/dist/core/memory/serialization.js.map +0 -1
- package/dist/core/memory/stats.d.ts.map +0 -1
- package/dist/core/memory/stats.js.map +0 -1
- package/dist/core/memory/telemetry.d.ts.map +0 -1
- package/dist/core/memory/telemetry.js.map +0 -1
- package/dist/core/memory/temporal-facts.d.ts.map +0 -1
- package/dist/core/memory/temporal-facts.js.map +0 -1
- package/dist/core/memory/temporal-parser.d.ts.map +0 -1
- package/dist/core/memory/temporal-parser.js.map +0 -1
- package/dist/core/memory/trigger-detector.d.ts.map +0 -1
- package/dist/core/memory/trigger-detector.js.map +0 -1
- package/dist/core/memory/write-gate.d.ts.map +0 -1
- package/dist/core/memory/write-gate.js.map +0 -1
- package/dist/core/namespaces/index.d.ts.map +0 -1
- package/dist/core/namespaces/index.js.map +0 -1
- package/dist/core/namespaces/uri-parser.d.ts.map +0 -1
- package/dist/core/namespaces/uri-parser.js.map +0 -1
- package/dist/core/observations.d.ts +0 -26
- package/dist/core/observations.d.ts.map +0 -1
- package/dist/core/observations.js +0 -110
- package/dist/core/observations.js.map +0 -1
- package/dist/core/privacy.d.ts.map +0 -1
- package/dist/core/privacy.js.map +0 -1
- package/dist/core/projects.d.ts.map +0 -1
- package/dist/core/projects.js.map +0 -1
- package/dist/core/redis.d.ts.map +0 -1
- package/dist/core/redis.js.map +0 -1
- package/dist/core/requirements.d.ts +0 -20
- package/dist/core/requirements.d.ts.map +0 -1
- package/dist/core/requirements.js +0 -35
- package/dist/core/requirements.js.map +0 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +0 -1
- package/dist/core/scheduler/cron-scheduler.js.map +0 -1
- package/dist/core/scheduler/heartbeat.d.ts.map +0 -1
- package/dist/core/scheduler/heartbeat.js.map +0 -1
- package/dist/core/scheduler/index.d.ts.map +0 -1
- package/dist/core/scheduler/index.js.map +0 -1
- package/dist/core/scheduler/job-runner.d.ts.map +0 -1
- package/dist/core/scheduler/job-runner.js.map +0 -1
- package/dist/core/search/conversations.d.ts.map +0 -1
- package/dist/core/search/conversations.js.map +0 -1
- package/dist/core/search/entities.d.ts.map +0 -1
- package/dist/core/search/entities.js.map +0 -1
- package/dist/core/search/folder-context.d.ts.map +0 -1
- package/dist/core/search/folder-context.js.map +0 -1
- package/dist/core/search/index.d.ts.map +0 -1
- package/dist/core/search/index.js.map +0 -1
- package/dist/core/search/qmd-search.d.ts.map +0 -1
- package/dist/core/search/qmd-search.js.map +0 -1
- package/dist/core/secret-detector.d.ts.map +0 -1
- package/dist/core/secret-detector.js.map +0 -1
- package/dist/core/session/auto-load.d.ts.map +0 -1
- package/dist/core/session/auto-load.js.map +0 -1
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/types.d.ts.map +0 -1
- package/dist/core/session/types.js.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.js.map +0 -1
- package/dist/core/session-hooks/session-hooks.d.ts.map +0 -1
- package/dist/core/session-hooks/session-hooks.js.map +0 -1
- package/dist/core/snapshots/cleanup.d.ts.map +0 -1
- package/dist/core/snapshots/cleanup.js.map +0 -1
- package/dist/core/snapshots/comparison.d.ts.map +0 -1
- package/dist/core/snapshots/comparison.js.map +0 -1
- package/dist/core/snapshots/creation.d.ts.map +0 -1
- package/dist/core/snapshots/creation.js.map +0 -1
- package/dist/core/snapshots/retrieval.d.ts.map +0 -1
- package/dist/core/snapshots/retrieval.js.map +0 -1
- package/dist/core/snapshots/stats.d.ts.map +0 -1
- package/dist/core/snapshots/stats.js.map +0 -1
- package/dist/core/snapshots.d.ts.map +0 -1
- package/dist/core/snapshots.js.map +0 -1
- package/dist/core/summarization/cleanup.d.ts.map +0 -1
- package/dist/core/summarization/cleanup.js.map +0 -1
- package/dist/core/summarization/queries.d.ts.map +0 -1
- package/dist/core/summarization/queries.js.map +0 -1
- package/dist/core/summarization/stats.d.ts.map +0 -1
- package/dist/core/summarization/stats.js.map +0 -1
- package/dist/core/summarization/strategies.d.ts.map +0 -1
- package/dist/core/summarization/strategies.js.map +0 -1
- package/dist/core/summarization.d.ts.map +0 -1
- package/dist/core/summarization.js.map +0 -1
- package/dist/core/sync/qmd-sync.d.ts.map +0 -1
- package/dist/core/sync/qmd-sync.js.map +0 -1
- package/dist/core/temporal-facts.d.ts.map +0 -1
- package/dist/core/temporal-facts.js.map +0 -1
- package/dist/core/tracing/collector.d.ts.map +0 -1
- package/dist/core/tracing/collector.js.map +0 -1
- package/dist/core/tracing/visualizer.d.ts.map +0 -1
- package/dist/core/tracing/visualizer.js.map +0 -1
- package/dist/core/utils/cleanup-operations.d.ts.map +0 -1
- package/dist/core/utils/cleanup-operations.js.map +0 -1
- package/dist/core/utils/content-extraction.d.ts.map +0 -1
- package/dist/core/utils/content-extraction.js.map +0 -1
- package/dist/core/utils/filter-builder.d.ts.map +0 -1
- package/dist/core/utils/filter-builder.js.map +0 -1
- package/dist/core/utils/history-traversal.d.ts.map +0 -1
- package/dist/core/utils/history-traversal.js.map +0 -1
- package/dist/core/utils/memory-operations.d.ts.map +0 -1
- package/dist/core/utils/memory-operations.js.map +0 -1
- package/dist/core/utils/query-operations.d.ts.map +0 -1
- package/dist/core/utils/query-operations.js.map +0 -1
- package/dist/core/utils/summarization-helpers.d.ts.map +0 -1
- package/dist/core/utils/summarization-helpers.js.map +0 -1
- package/dist/core/utils/temporal-queries.d.ts.map +0 -1
- package/dist/core/utils/temporal-queries.js.map +0 -1
- package/dist/core/utils/version-management.d.ts.map +0 -1
- package/dist/core/utils/version-management.js.map +0 -1
- package/dist/core/utils.d.ts.map +0 -1
- package/dist/core/utils.js.map +0 -1
- package/dist/core/worker.d.ts.map +0 -1
- package/dist/core/worker.js.map +0 -1
- package/dist/db/adapter.d.ts.map +0 -1
- package/dist/db/adapter.js.map +0 -1
- package/dist/db/bootstrap.d.ts.map +0 -1
- package/dist/db/bootstrap.js.map +0 -1
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js.map +0 -1
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js.map +0 -1
- package/dist/drizzle/schema-sqlite.d.ts.map +0 -1
- package/dist/drizzle/schema-sqlite.js.map +0 -1
- package/dist/drizzle/schema.d.ts.map +0 -1
- package/dist/drizzle/schema.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/hooks/hooks.json +0 -52
- package/hooks/post-tool-use.js +0 -26
- package/hooks/session-end.js +0 -28
- package/hooks/session-start.js +0 -33
- package/hooks/user-prompt-submit.js +0 -26
- package/hooks/utils.js +0 -153
- package/npx-installer.js +0 -208
- package/packages/plugin-claude-code/README.md +0 -73
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +0 -1
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +0 -1
- package/packages/plugin-claude-code/package.json +0 -31
- package/packages/plugin-openclaw/README.md +0 -70
- package/packages/plugin-openclaw/dist/index.d.ts +0 -49
- package/packages/plugin-openclaw/dist/index.d.ts.map +0 -1
- package/packages/plugin-openclaw/dist/index.js +0 -262
- package/packages/plugin-openclaw/dist/index.js.map +0 -1
- package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
- package/packages/plugin-openclaw/package.json +0 -31
- package/packages/plugin-opencode/install.mjs +0 -217
- package/packages/plugin-opencode/package.json +0 -21
- package/scripts/db/check-db.mjs +0 -88
- package/scripts/db/fix-all-columns.mjs +0 -52
- package/scripts/db/fix-schema-all.mjs +0 -55
- package/scripts/db/fix-schema-full.mjs +0 -46
- package/scripts/db/fix-schema.mjs +0 -38
- package/scripts/db/init-db.mjs +0 -13
- package/scripts/db/recreate-db.mjs +0 -14
- package/scripts/install-mcp.mjs +0 -116
- package/scripts/install-web.sh +0 -120
- package/scripts/install.mjs +0 -340
- package/scripts/openclaw-bootstrap.mjs +0 -127
- package/scripts/package-release.sh +0 -71
- package/scripts/test/test-all-systems.mjs +0 -139
- package/scripts/test/test-memory-system.mjs +0 -139
- package/scripts/test/test-v0.5.0.mjs +0 -210
- package/skills/memory-guide/SKILL.md +0 -256
- package/skills/squish-cli/SKILL.md +0 -200
- package/skills/squish-mcp/SKILL.md +0 -311
- package/skills/squish-memory/claude-desktop.json +0 -12
- package/skills/squish-memory/openclaw.json +0 -13
- package/skills/squish-memory/opencode.json +0 -14
- package/skills/squish-memory/skill.json +0 -32
- /package/{commands → core/commands}/context-paging.md +0 -0
- /package/{commands → core/commands}/context-status.md +0 -0
- /package/{commands → core/commands}/context.md +0 -0
- /package/{commands → core/commands}/core-memory.md +0 -0
- /package/{commands → core/commands}/health.md +0 -0
- /package/{commands → core/commands}/merge.md +0 -0
- /package/{commands → core/commands}/recall.md +0 -0
- /package/{commands → core/commands}/remember.md +0 -0
- /package/{commands → core/commands}/search.md +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
- /package/dist/{commands → core/commands}/managed-sync.d.ts +0 -0
- /package/dist/{commands → core/commands}/mcp-server.d.ts +0 -0
- /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
- /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
- /package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +0 -0
- /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
- /package/dist/core/{privacy.js → security/privacy.js} +0 -0
- /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
- /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
- /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
- /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
- /package/dist/core/{database.js → storage/database.js} +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON Compression - Token-efficient memory format
|
|
3
|
+
*
|
|
4
|
+
* Compact format for memory context using abbreviated notation.
|
|
5
|
+
* Achieves efficient token usage for context injection.
|
|
6
|
+
*
|
|
7
|
+
* Format:
|
|
8
|
+
* {
|
|
9
|
+
* m:[type], // memory type (1-2 chars)
|
|
10
|
+
* c:"...", // content (truncated)
|
|
11
|
+
* t:[], // tags (array)
|
|
12
|
+
* d:123 // days ago
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
const MAX_CONTENT_LENGTH = 80; // Max chars per content
|
|
16
|
+
const MAX_TAGS = 3; // Max tags to include
|
|
17
|
+
/**
|
|
18
|
+
* Compress a memory to TOON format
|
|
19
|
+
*/
|
|
20
|
+
export function compressForContext(content) {
|
|
21
|
+
// If not JSON or already short, just return
|
|
22
|
+
if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
|
|
23
|
+
return content;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(content);
|
|
27
|
+
// Build compact TOON object
|
|
28
|
+
const toon = {
|
|
29
|
+
m: parsed.type?.substring(0, 2) || 'ob', // observation -> ob
|
|
30
|
+
};
|
|
31
|
+
// Truncate content
|
|
32
|
+
if (parsed.content) {
|
|
33
|
+
const truncated = parsed.content.substring(0, MAX_CONTENT_LENGTH);
|
|
34
|
+
toon.c = truncated.length < parsed.content.length ? truncated + '..' : truncated;
|
|
35
|
+
}
|
|
36
|
+
// Add tags (limited)
|
|
37
|
+
if (parsed.tags && Array.isArray(parsed.tags)) {
|
|
38
|
+
toon.t = parsed.tags.slice(0, MAX_TAGS);
|
|
39
|
+
}
|
|
40
|
+
// Add days ago if there's a date
|
|
41
|
+
if (parsed.createdAt) {
|
|
42
|
+
const days = Math.floor((Date.now() - new Date(parsed.createdAt).getTime()) / (1000 * 60 * 60 * 24));
|
|
43
|
+
if (days > 0) {
|
|
44
|
+
toon.d = days;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return JSON.stringify(toon);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Not parseable JSON, return truncated content
|
|
51
|
+
return content.substring(0, MAX_CONTENT_LENGTH);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decompress TOON back to readable format
|
|
56
|
+
*/
|
|
57
|
+
export function decompressFromContext(toonString) {
|
|
58
|
+
// Check if it's TOON format
|
|
59
|
+
if (!isToon(toonString)) {
|
|
60
|
+
return toonString;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(toonString);
|
|
64
|
+
// If it has TOON markers, expand it
|
|
65
|
+
if (parsed.m || parsed.c || parsed.t) {
|
|
66
|
+
const typeMap = {
|
|
67
|
+
ob: 'observation',
|
|
68
|
+
su: 'success',
|
|
69
|
+
f: 'failure',
|
|
70
|
+
fx: 'fix',
|
|
71
|
+
i: 'insight',
|
|
72
|
+
};
|
|
73
|
+
const type = typeMap[parsed.m] || 'observation';
|
|
74
|
+
const parts = [`[${type}]`];
|
|
75
|
+
if (parsed.c) {
|
|
76
|
+
parts.push(parsed.c);
|
|
77
|
+
}
|
|
78
|
+
if (parsed.t && parsed.t.length > 0) {
|
|
79
|
+
parts.push(`#${parsed.t.join(' #')}`);
|
|
80
|
+
}
|
|
81
|
+
if (parsed.d) {
|
|
82
|
+
parts.push(`(${parsed.d}d ago)`);
|
|
83
|
+
}
|
|
84
|
+
return parts.join(' ');
|
|
85
|
+
}
|
|
86
|
+
return toonString;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Not valid TOON, return as-is
|
|
90
|
+
return toonString;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Estimate compression ratio
|
|
95
|
+
*/
|
|
96
|
+
export function estimateCompressionRatio(content) {
|
|
97
|
+
if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
|
|
98
|
+
return 1.0;
|
|
99
|
+
}
|
|
100
|
+
const compressed = compressForContext(content);
|
|
101
|
+
return compressed.length / content.length;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if content is JSON
|
|
105
|
+
*/
|
|
106
|
+
export function isJson(content) {
|
|
107
|
+
try {
|
|
108
|
+
JSON.parse(content);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if content is TOON format
|
|
117
|
+
*/
|
|
118
|
+
export function isToon(content) {
|
|
119
|
+
if (!content.startsWith('{') || !content.endsWith('}')) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const parsed = JSON.parse(content);
|
|
124
|
+
// Has TOON markers
|
|
125
|
+
return parsed.m !== undefined || parsed.c !== undefined;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Count tokens (rough estimate)
|
|
133
|
+
*/
|
|
134
|
+
export function estimateTokens(text) {
|
|
135
|
+
return Math.ceil(text.length / 4);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Truncate to token budget
|
|
139
|
+
*/
|
|
140
|
+
export function truncateToTokenBudget(content, maxTokens) {
|
|
141
|
+
const tokens = estimateTokens(content);
|
|
142
|
+
if (tokens <= maxTokens) {
|
|
143
|
+
return content;
|
|
144
|
+
}
|
|
145
|
+
// Binary search for the right length
|
|
146
|
+
let low = 0;
|
|
147
|
+
let high = content.length;
|
|
148
|
+
while (low < high) {
|
|
149
|
+
const mid = Math.floor((low + high) / 2);
|
|
150
|
+
const estimated = estimateTokens(content.substring(0, mid));
|
|
151
|
+
if (estimated <= maxTokens) {
|
|
152
|
+
low = mid + 1;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
high = mid;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return content.substring(0, low) + '...';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=toon.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { eq } from 'drizzle-orm';
|
|
6
6
|
import { getDb } from '../../db/index.js';
|
|
7
7
|
import { getSchema } from '../../db/schema.js';
|
|
8
|
-
import { createDatabaseClient } from '../database.js';
|
|
8
|
+
import { createDatabaseClient } from '../storage/database.js';
|
|
9
9
|
import { config } from '../../config.js';
|
|
10
10
|
import { logger } from '../logger.js';
|
|
11
11
|
/**
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides mathematical operations for vector computations, primarily focused on
|
|
5
|
+
* cosine similarity calculations for embedding comparisons.
|
|
6
|
+
*
|
|
7
|
+
* All functions handle edge cases gracefully and are optimized for performance.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the cosine similarity between two vectors.
|
|
11
|
+
*
|
|
12
|
+
* Cosine similarity measures the cosine of the angle between two vectors,
|
|
13
|
+
* providing a normalized measure of similarity that ranges from -1 (opposite)
|
|
14
|
+
* to 1 (identical), with 0 indicating orthogonality (no similarity).
|
|
15
|
+
*
|
|
16
|
+
* The implementation uses the standard formula:
|
|
17
|
+
* cos(θ) = (A · B) / (||A|| * ||B||)
|
|
18
|
+
*
|
|
19
|
+
* Edge case handling:
|
|
20
|
+
* - Returns 0 if either vector is null/undefined
|
|
21
|
+
* - Returns 0 if vectors have different lengths
|
|
22
|
+
* - Returns 0 if either vector has zero magnitude (norm = 0)
|
|
23
|
+
*
|
|
24
|
+
* @param a - First vector as array of numbers
|
|
25
|
+
* @param b - Second vector as array of numbers
|
|
26
|
+
* @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const vec1 = [1, 2, 3];
|
|
31
|
+
* const vec2 = [4, 5, 6];
|
|
32
|
+
* const similarity = cosineSimilarity(vec1, vec2); // ~0.974
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @performance
|
|
36
|
+
* - Time complexity: O(n) where n is vector length
|
|
37
|
+
* - Space complexity: O(1) - uses only accumulator variables
|
|
38
|
+
* - Optimized with single-pass computation of dot product and norms
|
|
39
|
+
*/
|
|
40
|
+
export declare function cosineSimilarity(a: number[] | null | undefined, b: number[] | null | undefined): number;
|
|
41
|
+
/**
|
|
42
|
+
* Calculates the Euclidean distance between two vectors.
|
|
43
|
+
*
|
|
44
|
+
* @param a - First vector
|
|
45
|
+
* @param b - Second vector
|
|
46
|
+
* @returns Euclidean distance, or Infinity if vectors have different lengths
|
|
47
|
+
*/
|
|
48
|
+
export declare function euclideanDistance(a: number[] | null | undefined, b: number[] | null | undefined): number;
|
|
49
|
+
/**
|
|
50
|
+
* Normalizes a vector to unit length (magnitude = 1).
|
|
51
|
+
*
|
|
52
|
+
* @param vec - Input vector
|
|
53
|
+
* @returns Normalized vector, or null if input is null or zero vector
|
|
54
|
+
*/
|
|
55
|
+
export declare function normalizeVector(vec: number[] | null | undefined): number[] | null;
|
|
56
|
+
/**
|
|
57
|
+
* Computes the dot product of two vectors.
|
|
58
|
+
*
|
|
59
|
+
* @param a - First vector
|
|
60
|
+
* @param b - Second vector
|
|
61
|
+
* @returns Dot product, or 0 if vectors are invalid or different lengths
|
|
62
|
+
*/
|
|
63
|
+
export declare function dotProduct(a: number[] | null | undefined, b: number[] | null | undefined): number;
|
|
64
|
+
/**
|
|
65
|
+
* Calculates the magnitude (L2 norm) of a vector.
|
|
66
|
+
*
|
|
67
|
+
* @param vec - Input vector
|
|
68
|
+
* @returns Magnitude of the vector, or 0 if input is null
|
|
69
|
+
*/
|
|
70
|
+
export declare function magnitude(vec: number[] | null | undefined): number;
|
|
71
|
+
//# sourceMappingURL=vector-operations.d.ts.map
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides mathematical operations for vector computations, primarily focused on
|
|
5
|
+
* cosine similarity calculations for embedding comparisons.
|
|
6
|
+
*
|
|
7
|
+
* All functions handle edge cases gracefully and are optimized for performance.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the cosine similarity between two vectors.
|
|
11
|
+
*
|
|
12
|
+
* Cosine similarity measures the cosine of the angle between two vectors,
|
|
13
|
+
* providing a normalized measure of similarity that ranges from -1 (opposite)
|
|
14
|
+
* to 1 (identical), with 0 indicating orthogonality (no similarity).
|
|
15
|
+
*
|
|
16
|
+
* The implementation uses the standard formula:
|
|
17
|
+
* cos(θ) = (A · B) / (||A|| * ||B||)
|
|
18
|
+
*
|
|
19
|
+
* Edge case handling:
|
|
20
|
+
* - Returns 0 if either vector is null/undefined
|
|
21
|
+
* - Returns 0 if vectors have different lengths
|
|
22
|
+
* - Returns 0 if either vector has zero magnitude (norm = 0)
|
|
23
|
+
*
|
|
24
|
+
* @param a - First vector as array of numbers
|
|
25
|
+
* @param b - Second vector as array of numbers
|
|
26
|
+
* @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const vec1 = [1, 2, 3];
|
|
31
|
+
* const vec2 = [4, 5, 6];
|
|
32
|
+
* const similarity = cosineSimilarity(vec1, vec2); // ~0.974
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @performance
|
|
36
|
+
* - Time complexity: O(n) where n is vector length
|
|
37
|
+
* - Space complexity: O(1) - uses only accumulator variables
|
|
38
|
+
* - Optimized with single-pass computation of dot product and norms
|
|
39
|
+
*/
|
|
40
|
+
export function cosineSimilarity(a, b) {
|
|
41
|
+
// Guard against null/undefined inputs
|
|
42
|
+
if (!a || !b)
|
|
43
|
+
return 0;
|
|
44
|
+
// Vectors must have same dimensions
|
|
45
|
+
if (a.length !== b.length)
|
|
46
|
+
return 0;
|
|
47
|
+
let dotProduct = 0;
|
|
48
|
+
let normA = 0;
|
|
49
|
+
let normB = 0;
|
|
50
|
+
// Single pass to compute dot product and norms
|
|
51
|
+
for (let i = 0; i < a.length; i++) {
|
|
52
|
+
dotProduct += a[i] * b[i];
|
|
53
|
+
normA += a[i] * a[i];
|
|
54
|
+
normB += b[i] * b[i];
|
|
55
|
+
}
|
|
56
|
+
// Handle zero vectors (avoid division by zero)
|
|
57
|
+
if (normA === 0 || normB === 0)
|
|
58
|
+
return 0;
|
|
59
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Calculates the Euclidean distance between two vectors.
|
|
63
|
+
*
|
|
64
|
+
* @param a - First vector
|
|
65
|
+
* @param b - Second vector
|
|
66
|
+
* @returns Euclidean distance, or Infinity if vectors have different lengths
|
|
67
|
+
*/
|
|
68
|
+
export function euclideanDistance(a, b) {
|
|
69
|
+
if (!a || !b)
|
|
70
|
+
return Infinity;
|
|
71
|
+
if (a.length !== b.length)
|
|
72
|
+
return Infinity;
|
|
73
|
+
let sum = 0;
|
|
74
|
+
for (let i = 0; i < a.length; i++) {
|
|
75
|
+
const diff = a[i] - b[i];
|
|
76
|
+
sum += diff * diff;
|
|
77
|
+
}
|
|
78
|
+
return Math.sqrt(sum);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Normalizes a vector to unit length (magnitude = 1).
|
|
82
|
+
*
|
|
83
|
+
* @param vec - Input vector
|
|
84
|
+
* @returns Normalized vector, or null if input is null or zero vector
|
|
85
|
+
*/
|
|
86
|
+
export function normalizeVector(vec) {
|
|
87
|
+
if (!vec)
|
|
88
|
+
return null;
|
|
89
|
+
let norm = 0;
|
|
90
|
+
for (let i = 0; i < vec.length; i++) {
|
|
91
|
+
norm += vec[i] * vec[i];
|
|
92
|
+
}
|
|
93
|
+
if (norm === 0)
|
|
94
|
+
return null;
|
|
95
|
+
const magnitude = Math.sqrt(norm);
|
|
96
|
+
return vec.map(val => val / magnitude);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Computes the dot product of two vectors.
|
|
100
|
+
*
|
|
101
|
+
* @param a - First vector
|
|
102
|
+
* @param b - Second vector
|
|
103
|
+
* @returns Dot product, or 0 if vectors are invalid or different lengths
|
|
104
|
+
*/
|
|
105
|
+
export function dotProduct(a, b) {
|
|
106
|
+
if (!a || !b || a.length !== b.length)
|
|
107
|
+
return 0;
|
|
108
|
+
let result = 0;
|
|
109
|
+
for (let i = 0; i < a.length; i++) {
|
|
110
|
+
result += a[i] * b[i];
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Calculates the magnitude (L2 norm) of a vector.
|
|
116
|
+
*
|
|
117
|
+
* @param vec - Input vector
|
|
118
|
+
* @returns Magnitude of the vector, or 0 if input is null
|
|
119
|
+
*/
|
|
120
|
+
export function magnitude(vec) {
|
|
121
|
+
if (!vec)
|
|
122
|
+
return 0;
|
|
123
|
+
let sum = 0;
|
|
124
|
+
for (let i = 0; i < vec.length; i++) {
|
|
125
|
+
sum += vec[i] * vec[i];
|
|
126
|
+
}
|
|
127
|
+
return Math.sqrt(sum);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=vector-operations.js.map
|
package/dist/db/adapter.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare function createDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("
|
|
1
|
+
export declare function createDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("./drizzle/schema.js")> & {
|
|
2
2
|
$client: import("pg").Pool;
|
|
3
|
-
}) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("
|
|
3
|
+
}) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("./drizzle/schema-sqlite.js")> & {
|
|
4
4
|
$client: import("better-sqlite3").Database;
|
|
5
|
-
}) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("
|
|
5
|
+
}) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("./drizzle/schema-sqlite.js")>>;
|
|
6
6
|
export default createDb;
|
|
7
7
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/db/adapter.js
CHANGED
|
@@ -1,6 +1,63 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
1
4
|
import { config, getDataDir } from '../config.js';
|
|
2
5
|
import { ensurePostgresSchema, ensureSqliteSchema } from './bootstrap.js';
|
|
3
6
|
import { logger } from '../core/logger.js';
|
|
7
|
+
const SQL_JS_WASM_RELATIVE_PATH = '../vendor/sql.js/sql-wasm.wasm';
|
|
8
|
+
function isBunRuntime() {
|
|
9
|
+
return typeof globalThis.Bun !== 'undefined';
|
|
10
|
+
}
|
|
11
|
+
function formatInitializationError(label, error) {
|
|
12
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
13
|
+
return `${label}: ${message}`;
|
|
14
|
+
}
|
|
15
|
+
function shouldPersistSql(query) {
|
|
16
|
+
return /^\s*(insert|update|delete|create|alter|drop|replace|pragma|begin|commit|rollback|vacuum|reindex)\b/i.test(query);
|
|
17
|
+
}
|
|
18
|
+
function persistSqlJsDatabase(sqlite, dbPath) {
|
|
19
|
+
fs.mkdirSync(path.dirname(dbPath), { recursive: true });
|
|
20
|
+
fs.writeFileSync(dbPath, Buffer.from(sqlite.export()));
|
|
21
|
+
}
|
|
22
|
+
function resolveSqlJsWasmPath() {
|
|
23
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
const candidates = [
|
|
25
|
+
path.resolve(currentDir, SQL_JS_WASM_RELATIVE_PATH),
|
|
26
|
+
path.resolve(currentDir, '../../node_modules/sql.js/dist/sql-wasm.wasm'),
|
|
27
|
+
path.resolve(process.cwd(), 'node_modules/sql.js/dist/sql-wasm.wasm'),
|
|
28
|
+
];
|
|
29
|
+
for (const candidate of candidates) {
|
|
30
|
+
if (fs.existsSync(candidate)) {
|
|
31
|
+
return candidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`sql.js wasm asset not found. Looked in: ${candidates.join(', ')}`);
|
|
35
|
+
}
|
|
36
|
+
function wrapSqlJsStatement(stmt, sqlite, dbPath, query) {
|
|
37
|
+
const persistAfterRun = shouldPersistSql(query);
|
|
38
|
+
if (persistAfterRun && typeof stmt.run === 'function') {
|
|
39
|
+
const originalRun = stmt.run.bind(stmt);
|
|
40
|
+
stmt.run = (...args) => {
|
|
41
|
+
const result = originalRun(...args);
|
|
42
|
+
persistSqlJsDatabase(sqlite, dbPath);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return stmt;
|
|
47
|
+
}
|
|
48
|
+
async function createBunSqliteDb(dbPath) {
|
|
49
|
+
// @ts-ignore - bun:sqlite module not found in types but works at runtime
|
|
50
|
+
const { drizzle } = await import('drizzle-orm/bun-sqlite');
|
|
51
|
+
const schemaModule = await import('./drizzle/schema-sqlite.js');
|
|
52
|
+
// Bun SQLite doesn't need file path for in-memory, but we'll use file path for persistence
|
|
53
|
+
// @ts-ignore - bun:sqlite module not found in types but works at runtime
|
|
54
|
+
const sqlite = new (await import('bun:sqlite')).default(dbPath);
|
|
55
|
+
// Enable foreign keys
|
|
56
|
+
sqlite.exec('PRAGMA foreign_keys = ON');
|
|
57
|
+
await ensureSqliteSchema(sqlite);
|
|
58
|
+
logger.info('SQLite initialized with bun:sqlite');
|
|
59
|
+
return drizzle(sqlite, { schema: schemaModule });
|
|
60
|
+
}
|
|
4
61
|
export async function createDb() {
|
|
5
62
|
if (config.isTeamMode) {
|
|
6
63
|
return createPostgresDb();
|
|
@@ -12,7 +69,7 @@ export async function createDb() {
|
|
|
12
69
|
async function createPostgresDb() {
|
|
13
70
|
const { Pool } = await import('pg');
|
|
14
71
|
const { drizzle } = await import('drizzle-orm/node-postgres');
|
|
15
|
-
const schemaModule = await import('
|
|
72
|
+
const schemaModule = await import('./drizzle/schema.js');
|
|
16
73
|
const pool = new Pool({
|
|
17
74
|
connectionString: process.env.DATABASE_URL,
|
|
18
75
|
max: 20,
|
|
@@ -22,39 +79,46 @@ async function createPostgresDb() {
|
|
|
22
79
|
}
|
|
23
80
|
async function createSqliteDb() {
|
|
24
81
|
const dbPath = `${getDataDir()}/squish.db`;
|
|
25
|
-
|
|
82
|
+
const errors = [];
|
|
83
|
+
if (isBunRuntime()) {
|
|
84
|
+
try {
|
|
85
|
+
return await createBunSqliteDb(dbPath);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
errors.push(formatInitializationError('bun:sqlite', error));
|
|
89
|
+
if (process.env.DEBUG === 'true') {
|
|
90
|
+
logger.warn('bun:sqlite failed, trying Node-compatible drivers', {
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
26
96
|
try {
|
|
27
97
|
return await createBetterSqliteDb(dbPath);
|
|
28
98
|
}
|
|
29
|
-
catch (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
try {
|
|
35
|
-
return await createSqlJsDb(dbPath);
|
|
36
|
-
}
|
|
37
|
-
catch (sqlJsError) {
|
|
38
|
-
// Both failed - this is critical, Squish cannot work without DB
|
|
39
|
-
logger.error('CRITICAL: SQLite database initialization failed', {
|
|
40
|
-
betterSqliteError: betterSqliteError.message,
|
|
41
|
-
sqlJsError: sqlJsError.message
|
|
99
|
+
catch (error) {
|
|
100
|
+
errors.push(formatInitializationError('better-sqlite3', error));
|
|
101
|
+
if (process.env.DEBUG === 'true') {
|
|
102
|
+
logger.warn('better-sqlite3 failed, trying sql.js fallback', {
|
|
103
|
+
error: error instanceof Error ? error.message : String(error),
|
|
42
104
|
});
|
|
43
|
-
throw new Error(`Squish requires SQLite to function. Database initialization failed.\n` +
|
|
44
|
-
`Primary error (better-sqlite3): ${betterSqliteError.message}\n` +
|
|
45
|
-
`Fallback error (sql.js): ${sqlJsError.message}\n\n` +
|
|
46
|
-
`Solutions:\n` +
|
|
47
|
-
`1. Rebuild native module: npm rebuild better-sqlite3\n` +
|
|
48
|
-
`2. Install build tools: npm install -g windows-build-tools (Windows)\n` +
|
|
49
|
-
`3. Or use PostgreSQL instead by setting DATABASE_URL environment variable`);
|
|
50
105
|
}
|
|
51
106
|
}
|
|
107
|
+
try {
|
|
108
|
+
return await createSqlJsDb(dbPath);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
errors.push(formatInitializationError('sql.js', error));
|
|
112
|
+
}
|
|
113
|
+
logger.error('CRITICAL: SQLite database initialization failed', { errors });
|
|
114
|
+
throw new Error('Squish requires a working local SQLite driver. Initialization failed.\n' +
|
|
115
|
+
errors.map((entry, index) => `${index + 1}. ${entry}`).join('\n'));
|
|
52
116
|
}
|
|
53
117
|
async function createBetterSqliteDb(dbPath) {
|
|
54
118
|
const DatabaseModule = await import('better-sqlite3');
|
|
55
119
|
const Database = DatabaseModule.default;
|
|
56
120
|
const { drizzle } = await import('drizzle-orm/better-sqlite3');
|
|
57
|
-
const schemaModule = await import('
|
|
121
|
+
const schemaModule = await import('./drizzle/schema-sqlite.js');
|
|
58
122
|
const sqlite = new Database(dbPath);
|
|
59
123
|
// Enable foreign keys
|
|
60
124
|
sqlite.pragma('foreign_keys = ON');
|
|
@@ -66,29 +130,44 @@ async function createSqlJsDb(dbPath) {
|
|
|
66
130
|
// @ts-ignore - sql.js has no types but works fine
|
|
67
131
|
const initSqlJs = await import('sql.js');
|
|
68
132
|
const { drizzle } = await import('drizzle-orm/sql-js');
|
|
69
|
-
const schemaModule = await import('
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
|
|
133
|
+
const schemaModule = await import('./drizzle/schema-sqlite.js');
|
|
134
|
+
const wasmPath = resolveSqlJsWasmPath();
|
|
135
|
+
const SQL = await initSqlJs.default({
|
|
136
|
+
locateFile: (file) => (file.endsWith('.wasm') ? wasmPath : file),
|
|
137
|
+
});
|
|
73
138
|
let data;
|
|
74
|
-
// Try to load existing database
|
|
75
139
|
if (fs.existsSync(dbPath)) {
|
|
76
140
|
data = fs.readFileSync(dbPath);
|
|
77
141
|
}
|
|
78
142
|
const sqlite = new SQL.Database(data);
|
|
79
|
-
|
|
80
|
-
sqlite.run('PRAGMA foreign_keys = ON');
|
|
81
|
-
// Schema bootstrap
|
|
143
|
+
sqlite.exec('PRAGMA foreign_keys = ON');
|
|
82
144
|
await ensureSqliteSchema(sqlite);
|
|
83
|
-
|
|
145
|
+
persistSqlJsDatabase(sqlite, dbPath);
|
|
84
146
|
const originalExec = sqlite.exec.bind(sqlite);
|
|
85
|
-
sqlite.exec =
|
|
147
|
+
sqlite.exec = (...args) => {
|
|
148
|
+
const [query] = args;
|
|
86
149
|
const result = originalExec(...args);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
150
|
+
if (typeof query === 'string' && shouldPersistSql(query)) {
|
|
151
|
+
persistSqlJsDatabase(sqlite, dbPath);
|
|
152
|
+
}
|
|
90
153
|
return result;
|
|
91
154
|
};
|
|
155
|
+
if (typeof sqlite.run === 'function') {
|
|
156
|
+
const originalRun = sqlite.run.bind(sqlite);
|
|
157
|
+
sqlite.run = (...args) => {
|
|
158
|
+
const [query] = args;
|
|
159
|
+
const result = originalRun(...args);
|
|
160
|
+
if (typeof query === 'string' && shouldPersistSql(query)) {
|
|
161
|
+
persistSqlJsDatabase(sqlite, dbPath);
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const originalPrepare = sqlite.prepare.bind(sqlite);
|
|
167
|
+
sqlite.prepare = (query, ...args) => {
|
|
168
|
+
const stmt = originalPrepare(query, ...args);
|
|
169
|
+
return wrapSqlJsStatement(stmt, sqlite, dbPath, query);
|
|
170
|
+
};
|
|
92
171
|
logger.info('SQLite initialized with sql.js (pure JavaScript fallback)');
|
|
93
172
|
return drizzle(sqlite, { schema: schemaModule });
|
|
94
173
|
}
|