squish-memory 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +32 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +556 -0
- package/commands/context-paging.md +51 -0
- package/commands/context-status.md +22 -0
- package/commands/context.md +5 -0
- package/commands/core-memory.md +56 -0
- package/commands/health.md +5 -0
- package/commands/init.md +39 -0
- package/commands/merge.md +113 -0
- package/commands/observe.md +5 -0
- package/commands/recall.md +5 -0
- package/commands/remember.md +11 -0
- package/commands/search.md +10 -0
- package/dist/adapters/claude-code/capture.d.ts +11 -0
- package/dist/adapters/claude-code/capture.d.ts.map +1 -0
- package/dist/adapters/claude-code/capture.js +100 -0
- package/dist/adapters/claude-code/capture.js.map +1 -0
- package/dist/adapters/claude-code/index.d.ts +5 -0
- package/dist/adapters/claude-code/index.d.ts.map +1 -0
- package/dist/adapters/claude-code/index.js +6 -0
- package/dist/adapters/claude-code/index.js.map +1 -0
- package/dist/adapters/claude-code/injection.d.ts +34 -0
- package/dist/adapters/claude-code/injection.d.ts.map +1 -0
- package/dist/adapters/claude-code/injection.js +127 -0
- package/dist/adapters/claude-code/injection.js.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts +21 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.js +239 -0
- package/dist/adapters/claude-code/plugin-wrapper.js.map +1 -0
- package/dist/adapters/claude-code/types.d.ts +46 -0
- package/dist/adapters/claude-code/types.d.ts.map +1 -0
- package/dist/adapters/claude-code/types.js +6 -0
- package/dist/adapters/claude-code/types.js.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts +50 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.js +154 -0
- package/dist/algorithms/merge/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts +47 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.js +190 -0
- package/dist/algorithms/merge/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts +32 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js +118 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts +49 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js +185 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts +22 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.js +179 -0
- package/dist/algorithms/merge/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts +47 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js +165 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts +39 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.js +88 -0
- package/dist/algorithms/merge/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts +45 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.js +83 -0
- package/dist/algorithms/merge/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts +39 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.js +93 -0
- package/dist/algorithms/merge/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts +28 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.js +69 -0
- package/dist/algorithms/merge/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts +21 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js +121 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts +22 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.js +215 -0
- package/dist/algorithms/merge/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts +32 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js +337 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +1 -0
- package/dist/api/web/web.d.ts +4 -0
- package/dist/api/web/web.d.ts.map +1 -0
- package/dist/api/web/web.js +484 -0
- package/dist/api/web/web.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-memory.d.ts +22 -0
- package/dist/core/agent-memory.d.ts.map +1 -0
- package/dist/core/agent-memory.js +111 -0
- package/dist/core/agent-memory.js.map +1 -0
- package/dist/core/associations.d.ts +32 -0
- package/dist/core/associations.d.ts.map +1 -0
- package/dist/core/associations.js +249 -0
- package/dist/core/associations.js.map +1 -0
- package/dist/core/cache.d.ts +13 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +202 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/consolidation.d.ts +6 -0
- package/dist/core/consolidation.d.ts.map +1 -0
- package/dist/core/consolidation.js +40 -0
- package/dist/core/consolidation.js.map +1 -0
- package/dist/core/context-paging.d.ts +90 -0
- package/dist/core/context-paging.d.ts.map +1 -0
- package/dist/core/context-paging.js +348 -0
- package/dist/core/context-paging.js.map +1 -0
- package/dist/core/context.d.ts +7 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +24 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/core-memory.d.ts +73 -0
- package/dist/core/core-memory.d.ts.map +1 -0
- package/dist/core/core-memory.js +214 -0
- package/dist/core/core-memory.js.map +1 -0
- package/dist/core/database.d.ts +12 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +12 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/embeddings/qmd-client.d.ts +136 -0
- package/dist/core/embeddings/qmd-client.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-client.js +403 -0
- package/dist/core/embeddings/qmd-client.js.map +1 -0
- package/dist/core/embeddings/qmd-provider.d.ts +65 -0
- package/dist/core/embeddings/qmd-provider.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-provider.js +133 -0
- package/dist/core/embeddings/qmd-provider.js.map +1 -0
- package/dist/core/embeddings.d.ts +19 -0
- package/dist/core/embeddings.d.ts.map +1 -0
- package/dist/core/embeddings.js +297 -0
- package/dist/core/embeddings.js.map +1 -0
- package/dist/core/governance.d.ts +21 -0
- package/dist/core/governance.d.ts.map +1 -0
- package/dist/core/governance.js +64 -0
- package/dist/core/governance.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +19 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +182 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/local-embeddings.d.ts +14 -0
- package/dist/core/local-embeddings.d.ts.map +1 -0
- package/dist/core/local-embeddings.js +94 -0
- package/dist/core/local-embeddings.js.map +1 -0
- package/dist/core/logger.d.ts +16 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +34 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memory/bridge-discovery.d.ts +50 -0
- package/dist/core/memory/bridge-discovery.d.ts.map +1 -0
- package/dist/core/memory/bridge-discovery.js +291 -0
- package/dist/core/memory/bridge-discovery.js.map +1 -0
- package/dist/core/memory/entity-extractor.d.ts +33 -0
- package/dist/core/memory/entity-extractor.d.ts.map +1 -0
- package/dist/core/memory/entity-extractor.js +336 -0
- package/dist/core/memory/entity-extractor.js.map +1 -0
- package/dist/core/memory/entity-resolver.d.ts +23 -0
- package/dist/core/memory/entity-resolver.d.ts.map +1 -0
- package/dist/core/memory/entity-resolver.js +64 -0
- package/dist/core/memory/entity-resolver.js.map +1 -0
- package/dist/core/memory/fact-extractor.d.ts +24 -0
- package/dist/core/memory/fact-extractor.d.ts.map +1 -0
- package/dist/core/memory/fact-extractor.js +89 -0
- package/dist/core/memory/fact-extractor.js.map +1 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +30 -0
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -0
- package/dist/core/memory/hybrid-retrieval.js +63 -0
- package/dist/core/memory/hybrid-retrieval.js.map +1 -0
- package/dist/core/memory/hybrid-scorer.d.ts +51 -0
- package/dist/core/memory/hybrid-scorer.d.ts.map +1 -0
- package/dist/core/memory/hybrid-scorer.js +248 -0
- package/dist/core/memory/hybrid-scorer.js.map +1 -0
- package/dist/core/memory/index.d.ts +8 -0
- package/dist/core/memory/index.d.ts.map +1 -0
- package/dist/core/memory/index.js +10 -0
- package/dist/core/memory/index.js.map +1 -0
- package/dist/core/memory/memories.d.ts +35 -0
- package/dist/core/memory/memories.d.ts.map +1 -0
- package/dist/core/memory/memories.js +338 -0
- package/dist/core/memory/memories.js.map +1 -0
- package/dist/core/memory/memory-manager.d.ts +15 -0
- package/dist/core/memory/memory-manager.d.ts.map +1 -0
- package/dist/core/memory/memory-manager.js +46 -0
- package/dist/core/memory/memory-manager.js.map +1 -0
- package/dist/core/memory/query-processor.d.ts +21 -0
- package/dist/core/memory/query-processor.d.ts.map +1 -0
- package/dist/core/memory/query-processor.js +72 -0
- package/dist/core/memory/query-processor.js.map +1 -0
- package/dist/core/memory/serialization.d.ts +6 -0
- package/dist/core/memory/serialization.d.ts.map +1 -0
- package/dist/core/memory/serialization.js +35 -0
- package/dist/core/memory/serialization.js.map +1 -0
- package/dist/core/memory/temporal-parser.d.ts +32 -0
- package/dist/core/memory/temporal-parser.d.ts.map +1 -0
- package/dist/core/memory/temporal-parser.js +385 -0
- package/dist/core/memory/temporal-parser.js.map +1 -0
- package/dist/core/observations.d.ts +26 -0
- package/dist/core/observations.d.ts.map +1 -0
- package/dist/core/observations.js +118 -0
- package/dist/core/observations.js.map +1 -0
- package/dist/core/privacy.d.ts +23 -0
- package/dist/core/privacy.d.ts.map +1 -0
- package/dist/core/privacy.js +82 -0
- package/dist/core/privacy.js.map +1 -0
- package/dist/core/projects.d.ts +10 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +66 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/redis.d.ts +11 -0
- package/dist/core/redis.d.ts.map +1 -0
- package/dist/core/redis.js +69 -0
- package/dist/core/redis.js.map +1 -0
- package/dist/core/requirements.d.ts +20 -0
- package/dist/core/requirements.d.ts.map +1 -0
- package/dist/core/requirements.js +35 -0
- package/dist/core/requirements.js.map +1 -0
- package/dist/core/search/conversations.d.ts +25 -0
- package/dist/core/search/conversations.d.ts.map +1 -0
- package/dist/core/search/conversations.js +112 -0
- package/dist/core/search/conversations.js.map +1 -0
- package/dist/core/search/entities.d.ts +12 -0
- package/dist/core/search/entities.d.ts.map +1 -0
- package/dist/core/search/entities.js +34 -0
- package/dist/core/search/entities.js.map +1 -0
- package/dist/core/search/folder-context.d.ts +25 -0
- package/dist/core/search/folder-context.d.ts.map +1 -0
- package/dist/core/search/folder-context.js +119 -0
- package/dist/core/search/folder-context.js.map +1 -0
- package/dist/core/search/index.d.ts +4 -0
- package/dist/core/search/index.d.ts.map +1 -0
- package/dist/core/search/index.js +5 -0
- package/dist/core/search/index.js.map +1 -0
- package/dist/core/search/qmd-search.d.ts +61 -0
- package/dist/core/search/qmd-search.d.ts.map +1 -0
- package/dist/core/search/qmd-search.js +178 -0
- package/dist/core/search/qmd-search.js.map +1 -0
- package/dist/core/secret-detector.d.ts +32 -0
- package/dist/core/secret-detector.d.ts.map +1 -0
- package/dist/core/secret-detector.js +88 -0
- package/dist/core/secret-detector.js.map +1 -0
- package/dist/core/snapshots/cleanup.d.ts +9 -0
- package/dist/core/snapshots/cleanup.d.ts.map +1 -0
- package/dist/core/snapshots/cleanup.js +12 -0
- package/dist/core/snapshots/cleanup.js.map +1 -0
- package/dist/core/snapshots/comparison.d.ts +19 -0
- package/dist/core/snapshots/comparison.d.ts.map +1 -0
- package/dist/core/snapshots/comparison.js +37 -0
- package/dist/core/snapshots/comparison.js.map +1 -0
- package/dist/core/snapshots/creation.d.ts +19 -0
- package/dist/core/snapshots/creation.d.ts.map +1 -0
- package/dist/core/snapshots/creation.js +126 -0
- package/dist/core/snapshots/creation.js.map +1 -0
- package/dist/core/snapshots/retrieval.d.ts +7 -0
- package/dist/core/snapshots/retrieval.d.ts.map +1 -0
- package/dist/core/snapshots/retrieval.js +41 -0
- package/dist/core/snapshots/retrieval.js.map +1 -0
- package/dist/core/snapshots/stats.d.ts +11 -0
- package/dist/core/snapshots/stats.d.ts.map +1 -0
- package/dist/core/snapshots/stats.js +52 -0
- package/dist/core/snapshots/stats.js.map +1 -0
- package/dist/core/snapshots.d.ts +29 -0
- package/dist/core/snapshots.d.ts.map +1 -0
- package/dist/core/snapshots.js +220 -0
- package/dist/core/snapshots.js.map +1 -0
- package/dist/core/summarization/cleanup.d.ts +9 -0
- package/dist/core/summarization/cleanup.d.ts.map +1 -0
- package/dist/core/summarization/cleanup.js +12 -0
- package/dist/core/summarization/cleanup.js.map +1 -0
- package/dist/core/summarization/queries.d.ts +9 -0
- package/dist/core/summarization/queries.d.ts.map +1 -0
- package/dist/core/summarization/queries.js +28 -0
- package/dist/core/summarization/queries.js.map +1 -0
- package/dist/core/summarization/stats.d.ts +14 -0
- package/dist/core/summarization/stats.d.ts.map +1 -0
- package/dist/core/summarization/stats.js +52 -0
- package/dist/core/summarization/stats.js.map +1 -0
- package/dist/core/summarization/strategies.d.ts +24 -0
- package/dist/core/summarization/strategies.d.ts.map +1 -0
- package/dist/core/summarization/strategies.js +28 -0
- package/dist/core/summarization/strategies.js.map +1 -0
- package/dist/core/summarization.d.ts +37 -0
- package/dist/core/summarization.d.ts.map +1 -0
- package/dist/core/summarization.js +188 -0
- package/dist/core/summarization.js.map +1 -0
- package/dist/core/sync/qmd-sync.d.ts +106 -0
- package/dist/core/sync/qmd-sync.d.ts.map +1 -0
- package/dist/core/sync/qmd-sync.js +213 -0
- package/dist/core/sync/qmd-sync.js.map +1 -0
- package/dist/core/temporal-facts.d.ts +54 -0
- package/dist/core/temporal-facts.d.ts.map +1 -0
- package/dist/core/temporal-facts.js +193 -0
- package/dist/core/temporal-facts.js.map +1 -0
- package/dist/core/utils/cleanup-operations.d.ts +13 -0
- package/dist/core/utils/cleanup-operations.d.ts.map +1 -0
- package/dist/core/utils/cleanup-operations.js +44 -0
- package/dist/core/utils/cleanup-operations.js.map +1 -0
- package/dist/core/utils/content-extraction.d.ts +19 -0
- package/dist/core/utils/content-extraction.d.ts.map +1 -0
- package/dist/core/utils/content-extraction.js +65 -0
- package/dist/core/utils/content-extraction.js.map +1 -0
- package/dist/core/utils/filter-builder.d.ts +13 -0
- package/dist/core/utils/filter-builder.d.ts.map +1 -0
- package/dist/core/utils/filter-builder.js +44 -0
- package/dist/core/utils/filter-builder.js.map +1 -0
- package/dist/core/utils/history-traversal.d.ts +13 -0
- package/dist/core/utils/history-traversal.d.ts.map +1 -0
- package/dist/core/utils/history-traversal.js +50 -0
- package/dist/core/utils/history-traversal.js.map +1 -0
- package/dist/core/utils/memory-operations.d.ts +17 -0
- package/dist/core/utils/memory-operations.d.ts.map +1 -0
- package/dist/core/utils/memory-operations.js +41 -0
- package/dist/core/utils/memory-operations.js.map +1 -0
- package/dist/core/utils/query-operations.d.ts +18 -0
- package/dist/core/utils/query-operations.d.ts.map +1 -0
- package/dist/core/utils/query-operations.js +65 -0
- package/dist/core/utils/query-operations.js.map +1 -0
- package/dist/core/utils/summarization-helpers.d.ts +21 -0
- package/dist/core/utils/summarization-helpers.d.ts.map +1 -0
- package/dist/core/utils/summarization-helpers.js +35 -0
- package/dist/core/utils/summarization-helpers.js.map +1 -0
- package/dist/core/utils/temporal-queries.d.ts +13 -0
- package/dist/core/utils/temporal-queries.d.ts.map +1 -0
- package/dist/core/utils/temporal-queries.js +27 -0
- package/dist/core/utils/temporal-queries.js.map +1 -0
- package/dist/core/utils/version-management.d.ts +9 -0
- package/dist/core/utils/version-management.d.ts.map +1 -0
- package/dist/core/utils/version-management.js +61 -0
- package/dist/core/utils/version-management.js.map +1 -0
- package/dist/core/utils.d.ts +13 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +51 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/worker.d.ts +62 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +186 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/db/adapter.d.ts +6 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +43 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/bootstrap.d.ts +9 -0
- package/dist/db/bootstrap.d.ts.map +1 -0
- package/dist/db/bootstrap.js +444 -0
- package/dist/db/bootstrap.js.map +1 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +43 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +11 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/drizzle/schema-sqlite.d.ts +3046 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -0
- package/dist/drizzle/schema-sqlite.js +405 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -0
- package/dist/drizzle/schema.d.ts +2969 -0
- package/dist/drizzle/schema.d.ts.map +1 -0
- package/dist/drizzle/schema.js +555 -0
- package/dist/drizzle/schema.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +784 -0
- package/dist/index.js.map +1 -0
- package/hooks/hooks.json +52 -0
- package/hooks/post-tool-use.js +26 -0
- package/hooks/session-end.js +28 -0
- package/hooks/session-start.js +33 -0
- package/hooks/user-prompt-submit.js +26 -0
- package/hooks/utils.js +153 -0
- package/npx-installer.js +208 -0
- package/package.json +101 -0
- package/plugin.json +32 -0
- package/skills/memory-guide/SKILL.md +198 -0
- package/skills/squish-memory/SKILL.md +87 -0
- package/skills/squish-memory/install.sh +91 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import { logger } from '../../core/logger.js';
|
|
4
|
+
const app = express();
|
|
5
|
+
const PORT = process.env.SQUISH_WEB_PORT || 37777;
|
|
6
|
+
app.use(cors());
|
|
7
|
+
app.use(express.json());
|
|
8
|
+
// Health check endpoint
|
|
9
|
+
app.get('/api/health', async (req, res) => {
|
|
10
|
+
res.json({
|
|
11
|
+
status: 'ok',
|
|
12
|
+
version: '0.1.0',
|
|
13
|
+
database: 'ok',
|
|
14
|
+
project: { id: 'demo', name: 'Demo Project', path: process.cwd() },
|
|
15
|
+
timestamp: new Date().toISOString()
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
// Get recent memories
|
|
19
|
+
app.get('/api/memories', async (req, res) => {
|
|
20
|
+
const mockMemories = [
|
|
21
|
+
{
|
|
22
|
+
id: '1',
|
|
23
|
+
type: 'conversation',
|
|
24
|
+
content: 'User asked about implementing a new feature for the dashboard',
|
|
25
|
+
tags: ['feature', 'dashboard'],
|
|
26
|
+
projectId: 'demo',
|
|
27
|
+
createdAt: new Date().toISOString()
|
|
28
|
+
}
|
|
29
|
+
];
|
|
30
|
+
res.json({
|
|
31
|
+
status: 'ok',
|
|
32
|
+
data: mockMemories,
|
|
33
|
+
count: mockMemories.length
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
// Get observations for project
|
|
37
|
+
app.get('/api/observations', async (req, res) => {
|
|
38
|
+
const mockObservations = [
|
|
39
|
+
{
|
|
40
|
+
id: '1',
|
|
41
|
+
type: 'tool_usage',
|
|
42
|
+
summary: 'User ran a build command',
|
|
43
|
+
action: 'build',
|
|
44
|
+
target: 'project',
|
|
45
|
+
createdAt: new Date().toISOString()
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
res.json({
|
|
49
|
+
status: 'ok',
|
|
50
|
+
data: mockObservations,
|
|
51
|
+
count: mockObservations.length
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
// Get project context
|
|
55
|
+
app.get('/api/context', async (req, res) => {
|
|
56
|
+
const mockMemories = [
|
|
57
|
+
{
|
|
58
|
+
id: '1',
|
|
59
|
+
type: 'conversation',
|
|
60
|
+
content: 'Enhanced web UI with modern design',
|
|
61
|
+
tags: ['ui', 'enhancement'],
|
|
62
|
+
projectId: 'demo',
|
|
63
|
+
createdAt: new Date().toISOString()
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
const mockObservations = [
|
|
67
|
+
{
|
|
68
|
+
id: '1',
|
|
69
|
+
type: 'tool_usage',
|
|
70
|
+
summary: 'Web UI server started successfully',
|
|
71
|
+
action: 'start',
|
|
72
|
+
target: 'server',
|
|
73
|
+
createdAt: new Date().toISOString()
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
res.json({
|
|
77
|
+
status: 'ok',
|
|
78
|
+
project: { id: 'demo', name: 'Demo Project', path: process.cwd() },
|
|
79
|
+
memories: mockMemories,
|
|
80
|
+
observations: mockObservations,
|
|
81
|
+
totalCount: mockMemories.length + mockObservations.length
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
// Web UI
|
|
85
|
+
app.get('/', (req, res) => {
|
|
86
|
+
const html = `<!DOCTYPE html>
|
|
87
|
+
<html class="dark" lang="en"><head>
|
|
88
|
+
<meta charset="utf-8"/>
|
|
89
|
+
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
|
90
|
+
<title>Squish Memory Viewer - Playful Dashboard</title>
|
|
91
|
+
<link href="https://fonts.googleapis.com" rel="preconnect"/>
|
|
92
|
+
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
|
93
|
+
<link href="https://fonts.googleapis.com/css2?family=Spline+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet"/>
|
|
94
|
+
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
95
|
+
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
|
96
|
+
<script id="tailwind-config">
|
|
97
|
+
tailwind.config = {
|
|
98
|
+
darkMode: "class",
|
|
99
|
+
theme: {
|
|
100
|
+
extend: {
|
|
101
|
+
colors: {
|
|
102
|
+
"primary": "#00ffbf",
|
|
103
|
+
"secondary": "#ff6392",
|
|
104
|
+
"accent": "#ffcd26",
|
|
105
|
+
"background-dark": "#0f172a",
|
|
106
|
+
"card-bg": "#1e293b",
|
|
107
|
+
"text-main": "#f8fafc",
|
|
108
|
+
"text-muted": "#94a3b8",
|
|
109
|
+
"alert-orange": "rgba(251, 146, 60, 0.1)"
|
|
110
|
+
},
|
|
111
|
+
fontFamily: {
|
|
112
|
+
"display": ["Spline Sans", "sans-serif"]
|
|
113
|
+
},
|
|
114
|
+
borderRadius: {
|
|
115
|
+
"pill": "2.5rem",
|
|
116
|
+
"blob": "30% 70% 70% 30% / 30% 30% 70% 70%"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
}
|
|
121
|
+
</script>
|
|
122
|
+
<style type="text/tailwindcss">
|
|
123
|
+
@layer base {
|
|
124
|
+
body { @apply font-display text-text-main bg-background-dark antialiased; }
|
|
125
|
+
}
|
|
126
|
+
.squish-pill {
|
|
127
|
+
border-radius: 3rem;
|
|
128
|
+
}
|
|
129
|
+
.blob-alert {
|
|
130
|
+
border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
|
|
131
|
+
}
|
|
132
|
+
.squishy-hover {
|
|
133
|
+
transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
134
|
+
}
|
|
135
|
+
.squishy-hover:hover {
|
|
136
|
+
transform: scale(1.02) translateY(-4px);
|
|
137
|
+
}
|
|
138
|
+
.pulse-red {
|
|
139
|
+
animation: pulse 2s infinite;
|
|
140
|
+
}
|
|
141
|
+
@keyframes pulse {
|
|
142
|
+
0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); }
|
|
143
|
+
70% { transform: scale(1); box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); }
|
|
144
|
+
100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
|
|
145
|
+
}
|
|
146
|
+
</style>
|
|
147
|
+
</head>
|
|
148
|
+
<body class="min-h-screen selection:bg-primary/30 pb-20">
|
|
149
|
+
<header class="w-full px-6 py-8">
|
|
150
|
+
<div class="max-w-6xl mx-auto flex items-center justify-between">
|
|
151
|
+
<div class="flex items-center gap-4">
|
|
152
|
+
<div class="relative size-12 flex items-center justify-center">
|
|
153
|
+
<div class="absolute inset-0 bg-secondary/20 blur-xl rounded-full"></div>
|
|
154
|
+
<span class="material-symbols-outlined text-secondary text-5xl relative z-10">psychology</span>
|
|
155
|
+
</div>
|
|
156
|
+
<h1 class="text-3xl font-black tracking-tight flex items-center gap-2">
|
|
157
|
+
Squish <span class="text-primary italic">Memory Viewer</span>
|
|
158
|
+
</h1>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="flex items-center gap-4">
|
|
161
|
+
<div class="bg-card-bg px-4 py-2 rounded-full border-2 border-slate-700/50 flex items-center gap-2">
|
|
162
|
+
<div class="size-2 rounded-full bg-primary animate-pulse"></div>
|
|
163
|
+
<span class="text-xs font-bold uppercase tracking-widest text-text-muted">Local Server: Online</span>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</header>
|
|
168
|
+
<main class="max-w-6xl mx-auto px-6 space-y-12">
|
|
169
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
170
|
+
<div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
|
|
171
|
+
<p class="text-4xl font-black mb-1" id="memories-count">-</p>
|
|
172
|
+
<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Memories</p>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
|
|
175
|
+
<p class="text-4xl font-black mb-1" id="observations-count">-</p>
|
|
176
|
+
<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Observations</p>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
|
|
179
|
+
<p class="text-4xl font-black mb-1" id="total-count">-</p>
|
|
180
|
+
<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Total Items</p>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 flex flex-col items-center justify-center squishy-hover shadow-xl">
|
|
183
|
+
<div class="flex items-center gap-3">
|
|
184
|
+
<div class="size-4 bg-red-500 rounded-full pulse-red"></div>
|
|
185
|
+
<p class="text-2xl font-black text-red-400 italic">Error</p>
|
|
186
|
+
</div>
|
|
187
|
+
<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="relative py-6 px-10 bg-orange-500/10 border-2 border-orange-500/20 blob-alert flex items-center gap-6 overflow-hidden">
|
|
191
|
+
<div class="absolute top-0 left-0 w-full h-full bg-orange-500/5 -z-10"></div>
|
|
192
|
+
<span class="material-symbols-outlined text-orange-400 text-3xl">warning</span>
|
|
193
|
+
<div>
|
|
194
|
+
<h4 class="font-black text-orange-400 italic uppercase text-sm tracking-wider">Communication Breakdown</h4>
|
|
195
|
+
<p class="text-orange-200/80 font-medium">Failed to load data: Unknown error. Is the blob server running?</p>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12">
|
|
199
|
+
<section class="space-y-6">
|
|
200
|
+
<div class="flex items-center gap-4 border-b-4 border-primary/20 pb-4">
|
|
201
|
+
<div class="size-10 bg-primary/20 rounded-full flex items-center justify-center border-2 border-primary">
|
|
202
|
+
<span class="material-symbols-outlined text-primary font-bold">neurology</span>
|
|
203
|
+
</div>
|
|
204
|
+
<h2 class="text-2xl font-black italic text-primary uppercase">Recent Memories</h2>
|
|
205
|
+
</div>
|
|
206
|
+
<div class="space-y-4" id="memories">
|
|
207
|
+
<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60">
|
|
208
|
+
<div class="size-12 border-4 border-primary border-t-transparent rounded-full animate-spin mb-4"></div>
|
|
209
|
+
<p class="font-black italic text-text-muted">Loading memories...</p>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</section>
|
|
213
|
+
<section class="space-y-6">
|
|
214
|
+
<div class="flex items-center gap-4 border-b-4 border-primary/20 pb-4">
|
|
215
|
+
<div class="size-10 bg-primary/20 rounded-full flex items-center justify-center border-2 border-primary">
|
|
216
|
+
<span class="material-symbols-outlined text-primary font-bold">visibility</span>
|
|
217
|
+
</div>
|
|
218
|
+
<h2 class="text-2xl font-black italic text-primary uppercase">Recent Observations</h2>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="space-y-4" id="observations">
|
|
221
|
+
<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60">
|
|
222
|
+
<div class="size-12 border-4 border-primary border-t-transparent rounded-full animate-spin mb-4"></div>
|
|
223
|
+
<p class="font-black italic text-text-muted">Loading observations...</p>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</section>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="pt-12 flex justify-center">
|
|
229
|
+
<div class="bg-card-bg border-4 border-slate-700/50 p-2 rounded-full flex gap-2">
|
|
230
|
+
<button class="bg-primary text-black px-8 py-3 rounded-full font-black text-sm uppercase hover:scale-105 transition-transform flex items-center gap-2">
|
|
231
|
+
<span class="material-symbols-outlined text-sm">refresh</span>
|
|
232
|
+
Reconnect
|
|
233
|
+
</button>
|
|
234
|
+
<button class="text-text-main px-8 py-3 rounded-full font-black text-sm uppercase hover:bg-slate-700/50 transition-colors" onclick="openDocs()">
|
|
235
|
+
Docs
|
|
236
|
+
</button>
|
|
237
|
+
<button class="text-text-main px-8 py-3 rounded-full font-black text-sm uppercase hover:bg-slate-700/50 transition-colors" onclick="openSettings()">
|
|
238
|
+
Settings
|
|
239
|
+
</button>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</main>
|
|
243
|
+
<footer class="mt-20 px-6 opacity-30">
|
|
244
|
+
<div class="max-w-6xl mx-auto flex justify-between items-center py-8 border-t border-slate-700">
|
|
245
|
+
<p class="text-xs font-black uppercase">© 2026 Squish-Memory Dashboard</p>
|
|
246
|
+
<div class="flex gap-4">
|
|
247
|
+
<span class="material-symbols-outlined text-sm">database</span>
|
|
248
|
+
<span class="text-xs font-black uppercase italic">Local-First Engine v1.0</span>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
</footer>
|
|
252
|
+
<script>
|
|
253
|
+
async function loadData() {
|
|
254
|
+
try {
|
|
255
|
+
const response = await fetch('/api/context');
|
|
256
|
+
const data = await response.json();
|
|
257
|
+
|
|
258
|
+
if (data.status === 'ok') {
|
|
259
|
+
document.getElementById('memories-count').textContent = data.memories.length;
|
|
260
|
+
document.getElementById('observations-count').textContent = data.observations.length;
|
|
261
|
+
document.getElementById('total-count').textContent = data.totalCount;
|
|
262
|
+
updateStatus('ok');
|
|
263
|
+
|
|
264
|
+
renderMemories(data.memories);
|
|
265
|
+
renderObservations(data.observations);
|
|
266
|
+
|
|
267
|
+
// Hide error alert
|
|
268
|
+
const errorAlert = document.querySelector('.blob-alert');
|
|
269
|
+
if (errorAlert) errorAlert.style.display = 'none';
|
|
270
|
+
} else {
|
|
271
|
+
throw new Error('API returned error status');
|
|
272
|
+
}
|
|
273
|
+
} catch (error) {
|
|
274
|
+
updateStatus('error');
|
|
275
|
+
|
|
276
|
+
// Show error alert
|
|
277
|
+
const errorAlert = document.querySelector('.blob-alert');
|
|
278
|
+
if (errorAlert) errorAlert.style.display = 'flex';
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function renderMemories(memories) {
|
|
283
|
+
const container = document.getElementById('memories');
|
|
284
|
+
if (memories.length === 0) {
|
|
285
|
+
container.innerHTML = '<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60"><p class="font-black italic text-text-muted">No memories found</p></div>';
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
container.innerHTML = memories.map(function(memory) {
|
|
290
|
+
return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
|
|
291
|
+
'<div class="flex items-start justify-between mb-4">' +
|
|
292
|
+
'<span class="bg-primary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + memory.type + '</span>' +
|
|
293
|
+
'<span class="text-text-muted text-sm">' + formatTime(memory.createdAt) + '</span>' +
|
|
294
|
+
'</div>' +
|
|
295
|
+
'<div class="text-text-main mb-4">' + escapeHtml(memory.content) + '</div>' +
|
|
296
|
+
'<div class="text-text-muted text-sm">' +
|
|
297
|
+
'Tags: ' + (memory.tags ? memory.tags.join(', ') : 'none') + ' | ' +
|
|
298
|
+
'Project: ' + (memory.projectId || 'unknown') +
|
|
299
|
+
'</div>' +
|
|
300
|
+
'</div>';
|
|
301
|
+
}).join('');
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function renderObservations(observations) {
|
|
305
|
+
const container = document.getElementById('observations');
|
|
306
|
+
if (observations.length === 0) {
|
|
307
|
+
container.innerHTML = '<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60"><p class="font-black italic text-text-muted">No observations found</p></div>';
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
container.innerHTML = observations.map(function(obs) {
|
|
312
|
+
return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
|
|
313
|
+
'<div class="flex items-start justify-between mb-4">' +
|
|
314
|
+
'<span class="bg-secondary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + obs.type + '</span>' +
|
|
315
|
+
'<span class="text-text-muted text-sm">' + formatTime(obs.createdAt) + '</span>' +
|
|
316
|
+
'</div>' +
|
|
317
|
+
'<div class="text-text-main mb-4">' + escapeHtml(obs.summary) + '</div>' +
|
|
318
|
+
'<div class="text-text-muted text-sm">' +
|
|
319
|
+
'Action: ' + obs.action + ' | ' +
|
|
320
|
+
'Target: ' + (obs.target || 'none') +
|
|
321
|
+
'</div>' +
|
|
322
|
+
'</div>';
|
|
323
|
+
}).join('');
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function updateStatus(status) {
|
|
327
|
+
const statusCard = document.querySelector('.squishy-hover.flex-col');
|
|
328
|
+
if (!statusCard) return;
|
|
329
|
+
|
|
330
|
+
if (status === 'ok') {
|
|
331
|
+
statusCard.innerHTML = '<div class="flex items-center gap-3">' +
|
|
332
|
+
'<div class="size-4 bg-primary rounded-full animate-pulse"></div>' +
|
|
333
|
+
'<p class="text-2xl font-black text-primary italic">OK</p>' +
|
|
334
|
+
'</div>' +
|
|
335
|
+
'<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>';
|
|
336
|
+
} else {
|
|
337
|
+
statusCard.innerHTML = '<div class="flex items-center gap-3">' +
|
|
338
|
+
'<div class="size-4 bg-red-500 rounded-full pulse-red"></div>' +
|
|
339
|
+
'<p class="text-2xl font-black text-red-400 italic">Error</p>' +
|
|
340
|
+
'</div>' +
|
|
341
|
+
'<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>';
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function formatTime(timestamp) {
|
|
346
|
+
if (!timestamp) return 'Unknown';
|
|
347
|
+
const date = new Date(timestamp);
|
|
348
|
+
return date.toLocaleString();
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function escapeHtml(text) {
|
|
352
|
+
const div = document.createElement('div');
|
|
353
|
+
div.textContent = text;
|
|
354
|
+
return div.innerHTML;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
function openDocs() {
|
|
358
|
+
// Create and show documentation modal
|
|
359
|
+
const modal = document.createElement('div');
|
|
360
|
+
modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50';
|
|
361
|
+
modal.innerHTML = '<div class="bg-card-bg p-8 rounded-3xl border-2 border-slate-700/50 max-w-2xl w-full mx-4 max-h-[80vh] overflow-y-auto">' +
|
|
362
|
+
'<div class="flex justify-between items-center mb-6">' +
|
|
363
|
+
'<h2 class="text-2xl font-black text-primary italic">Documentation</h2>' +
|
|
364
|
+
'<button onclick="closeModal(this)" class="text-text-muted hover:text-text-main text-2xl">×</button>' +
|
|
365
|
+
'</div>' +
|
|
366
|
+
'<div class="space-y-4 text-text-main">' +
|
|
367
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
368
|
+
'<h3 class="font-bold text-primary mb-2">🧠 Memory System</h3>' +
|
|
369
|
+
'<p class="text-sm">The Squish Memory Plugin captures and stores conversations, tool usage, and project insights across sessions.</p>' +
|
|
370
|
+
'</div>' +
|
|
371
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
372
|
+
'<h3 class="font-bold text-primary mb-2">📊 API Endpoints</h3>' +
|
|
373
|
+
'<ul class="text-sm space-y-1">' +
|
|
374
|
+
'<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/health</code> - Service health status</li>' +
|
|
375
|
+
'<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/memories</code> - Recent memories</li>' +
|
|
376
|
+
'<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/observations</code> - Tool usage observations</li>' +
|
|
377
|
+
'<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/context</code> - Combined data</li>' +
|
|
378
|
+
'</ul>' +
|
|
379
|
+
'</div>' +
|
|
380
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
381
|
+
'<h3 class="font-bold text-primary mb-2">⚙️ Configuration</h3>' +
|
|
382
|
+
'<p class="text-sm">Configure via environment variables: <code class="bg-slate-700/50 px-2 py-1 rounded">SQUISH_WEB_PORT</code>, <code class="bg-slate-700/50 px-2 py-1 rounded">DATABASE_URL</code>, etc.</p>' +
|
|
383
|
+
'</div>' +
|
|
384
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
385
|
+
'<h3 class="font-bold text-primary mb-2">🚀 Getting Started</h3>' +
|
|
386
|
+
'<p class="text-sm">1. Install the plugin<br>2. Configure your database<br>3. Start the web UI<br>4. Access at http://localhost:37777</p>' +
|
|
387
|
+
'</div>' +
|
|
388
|
+
'</div>' +
|
|
389
|
+
'</div>';
|
|
390
|
+
document.body.appendChild(modal);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
function openSettings() {
|
|
394
|
+
// Create and show settings modal
|
|
395
|
+
const modal = document.createElement('div');
|
|
396
|
+
modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50';
|
|
397
|
+
modal.innerHTML = '<div class="bg-card-bg p-8 rounded-3xl border-2 border-slate-700/50 max-w-md w-full mx-4">' +
|
|
398
|
+
'<div class="flex justify-between items-center mb-6">' +
|
|
399
|
+
'<h2 class="text-2xl font-black text-primary italic">Settings</h2>' +
|
|
400
|
+
'<button onclick="closeModal(this)" class="text-text-muted hover:text-text-main text-2xl">×</button>' +
|
|
401
|
+
'</div>' +
|
|
402
|
+
'<div class="space-y-4">' +
|
|
403
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
404
|
+
'<label class="block text-sm font-bold text-text-main mb-2">Refresh Interval</label>' +
|
|
405
|
+
'<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeRefreshInterval(this.value)">' +
|
|
406
|
+
'<option value="10000">10 seconds</option>' +
|
|
407
|
+
'<option value="30000" selected>30 seconds</option>' +
|
|
408
|
+
'<option value="60000">1 minute</option>' +
|
|
409
|
+
'<option value="300000">5 minutes</option>' +
|
|
410
|
+
'</select>' +
|
|
411
|
+
'</div>' +
|
|
412
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
413
|
+
'<label class="block text-sm font-bold text-text-main mb-2">Theme</label>' +
|
|
414
|
+
'<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeTheme(this.value)">' +
|
|
415
|
+
'<option value="dark" selected>Dark</option>' +
|
|
416
|
+
'<option value="light">Light</option>' +
|
|
417
|
+
'</select>' +
|
|
418
|
+
'</div>' +
|
|
419
|
+
'<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
|
|
420
|
+
'<label class="block text-sm font-bold text-text-main mb-2">Items per Page</label>' +
|
|
421
|
+
'<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeItemsPerPage(this.value)">' +
|
|
422
|
+
'<option value="10">10</option>' +
|
|
423
|
+
'<option value="25" selected>25</option>' +
|
|
424
|
+
'<option value="50">50</option>' +
|
|
425
|
+
'<option value="100">100</option>' +
|
|
426
|
+
'</select>' +
|
|
427
|
+
'</div>' +
|
|
428
|
+
'<div class="flex justify-end space-x-3 mt-6">' +
|
|
429
|
+
'<button onclick="closeModal(this)" class="px-4 py-2 bg-slate-700/50 hover:bg-slate-600/50 rounded-lg text-text-main transition-colors">Cancel</button>' +
|
|
430
|
+
'<button onclick="saveSettings()" class="px-4 py-2 bg-primary text-black rounded-lg hover:bg-primary/80 transition-colors">Save</button>' +
|
|
431
|
+
'</div>' +
|
|
432
|
+
'</div>' +
|
|
433
|
+
'</div>';
|
|
434
|
+
document.body.appendChild(modal);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function closeModal(button) {
|
|
438
|
+
const modal = button.closest('.fixed');
|
|
439
|
+
if (modal) {
|
|
440
|
+
modal.remove();
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
function changeRefreshInterval(interval) {
|
|
445
|
+
clearInterval(window.refreshInterval);
|
|
446
|
+
window.refreshInterval = setInterval(loadData, parseInt(interval));
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
function changeTheme(theme) {
|
|
450
|
+
if (theme === 'light') {
|
|
451
|
+
document.documentElement.classList.remove('dark');
|
|
452
|
+
} else {
|
|
453
|
+
document.documentElement.classList.add('dark');
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
function changeItemsPerPage(count) {
|
|
458
|
+
// This would require updating the API calls, for now just store in localStorage
|
|
459
|
+
localStorage.setItem('itemsPerPage', count);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function saveSettings() {
|
|
463
|
+
// Close the modal and show success message
|
|
464
|
+
const modal = document.querySelector('.fixed');
|
|
465
|
+
if (modal) {
|
|
466
|
+
// Could show a toast notification here
|
|
467
|
+
modal.remove();
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
loadData();
|
|
472
|
+
window.refreshInterval = setInterval(loadData, 30000);
|
|
473
|
+
</script>
|
|
474
|
+
</body></html>`;
|
|
475
|
+
res.send(html);
|
|
476
|
+
});
|
|
477
|
+
// Start server
|
|
478
|
+
export function startWebServer() {
|
|
479
|
+
app.listen(PORT, () => {
|
|
480
|
+
logger.info('Web UI available at http://localhost:' + PORT);
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
export default app;
|
|
484
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../api/web/web.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare function getDataDir(): string;
|
|
2
|
+
export declare const config: {
|
|
3
|
+
isTeamMode: boolean;
|
|
4
|
+
redisEnabled: boolean;
|
|
5
|
+
dataDir: string;
|
|
6
|
+
embeddingsProvider: "openai" | "ollama" | "local" | "none" | "qmd" | "hybrid";
|
|
7
|
+
openAiApiKey: string;
|
|
8
|
+
openAiApiUrl: string;
|
|
9
|
+
openAiEmbeddingModel: string;
|
|
10
|
+
ollamaUrl: string;
|
|
11
|
+
ollamaEmbeddingModel: string;
|
|
12
|
+
lifecycleEnabled: boolean;
|
|
13
|
+
lifecycleInterval: number;
|
|
14
|
+
summarizationEnabled: boolean;
|
|
15
|
+
incrementalThreshold: number;
|
|
16
|
+
rollingWindowSize: number;
|
|
17
|
+
agentIsolationEnabled: boolean;
|
|
18
|
+
defaultVisibilityScope: "private" | "project" | "team" | "global";
|
|
19
|
+
governanceEnabled: boolean;
|
|
20
|
+
consolidationEnabled: boolean;
|
|
21
|
+
consolidationSimilarityThreshold: number;
|
|
22
|
+
qmdEnabled: boolean;
|
|
23
|
+
qmdCollectionsPath: string;
|
|
24
|
+
qmdFallbackMode: "qmd-only" | "cloud-first" | "hybrid" | "local-only";
|
|
25
|
+
qmdCollectionMapping: any;
|
|
26
|
+
};
|
|
27
|
+
export default config;
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AA+CD,eAAO,MAAM,MAAM;;;;wBAMD,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ;;;;;;;;;;;;4BAkBO,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ;;;;;;qBAYrF,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY;;CAEzF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { mkdirSync, existsSync } from 'fs';
|
|
3
|
+
export function getDataDir() {
|
|
4
|
+
// Use project working directory, not user home directory
|
|
5
|
+
const projectRoot = process.env.CLAUDE_WORKING_DIRECTORY || process.cwd();
|
|
6
|
+
const dir = process.env.SQUISH_DATA_DIR || join(projectRoot, '.squish');
|
|
7
|
+
if (!existsSync(dir))
|
|
8
|
+
mkdirSync(dir, { recursive: true });
|
|
9
|
+
return dir;
|
|
10
|
+
}
|
|
11
|
+
const isTeamMode = !!process.env.DATABASE_URL?.startsWith('postgres');
|
|
12
|
+
const openAiApiKey = process.env.SQUISH_OPENAI_API_KEY || process.env.OPENAI_API_KEY || '';
|
|
13
|
+
// Embeddings strategy:
|
|
14
|
+
// - Priority: QMD > Ollama (nomic-embed-text-v1.5) > OpenAI > Local TF-IDF
|
|
15
|
+
// - QMD provides hybrid BM25+vector+rerank search for best quality
|
|
16
|
+
// - Nomic provides excellent quality for memory systems with local inference
|
|
17
|
+
const embeddingsProvider = (() => {
|
|
18
|
+
const explicit = process.env.SQUISH_EMBEDDINGS_PROVIDER?.toLowerCase();
|
|
19
|
+
// If explicitly set, respect the user's choice
|
|
20
|
+
if (explicit && ['openai', 'ollama', 'local', 'none', 'qmd', 'hybrid'].includes(explicit)) {
|
|
21
|
+
return explicit;
|
|
22
|
+
}
|
|
23
|
+
// Default: Ollama with nomic-embed-text-v1.5 (recommended for Squish)
|
|
24
|
+
// QMD can be enabled by setting SQUISH_EMBEDDINGS_PROVIDER=qmd or hybrid
|
|
25
|
+
return 'ollama';
|
|
26
|
+
})();
|
|
27
|
+
// QMD Integration (v0.7.0)
|
|
28
|
+
const qmdEnabled = process.env.SQUISH_QMD_ENABLED === 'true';
|
|
29
|
+
const qmdCollectionsPath = process.env.SQUISH_QMD_COLLECTIONS ||
|
|
30
|
+
getDataDir().replace('.squish', 'qmd-collections');
|
|
31
|
+
const qmdFallbackMode = (() => {
|
|
32
|
+
const mode = process.env.SQUISH_QMD_FALLBACK || 'hybrid';
|
|
33
|
+
if (['qmd-only', 'cloud-first', 'hybrid', 'local-only'].includes(mode)) {
|
|
34
|
+
return mode;
|
|
35
|
+
}
|
|
36
|
+
return 'hybrid';
|
|
37
|
+
})();
|
|
38
|
+
// Default collection mapping for memory types
|
|
39
|
+
const defaultCollectionMapping = {
|
|
40
|
+
observation: 'squish-observations',
|
|
41
|
+
fact: 'squish-facts',
|
|
42
|
+
decision: 'squish-decisions',
|
|
43
|
+
context: 'squish-context',
|
|
44
|
+
preference: 'squish-preferences'
|
|
45
|
+
};
|
|
46
|
+
const qmdCollectionMapping = process.env.SQUISH_QMD_COLLECTION_MAPPING
|
|
47
|
+
? JSON.parse(process.env.SQUISH_QMD_COLLECTION_MAPPING)
|
|
48
|
+
: defaultCollectionMapping;
|
|
49
|
+
export const config = {
|
|
50
|
+
isTeamMode,
|
|
51
|
+
redisEnabled: !!process.env.REDIS_URL,
|
|
52
|
+
dataDir: getDataDir(),
|
|
53
|
+
embeddingsProvider: (['openai', 'ollama', 'local', 'none', 'qmd', 'hybrid'].includes(embeddingsProvider)
|
|
54
|
+
? embeddingsProvider
|
|
55
|
+
: 'local'),
|
|
56
|
+
openAiApiKey,
|
|
57
|
+
openAiApiUrl: process.env.SQUISH_OPENAI_API_URL || 'https://api.openai.com/v1/embeddings',
|
|
58
|
+
openAiEmbeddingModel: process.env.SQUISH_OPENAI_EMBEDDING_MODEL || 'text-embedding-3-small',
|
|
59
|
+
ollamaUrl: process.env.SQUISH_OLLAMA_URL || 'http://localhost:11434',
|
|
60
|
+
ollamaEmbeddingModel: process.env.SQUISH_OLLAMA_EMBEDDING_MODEL || 'nomic-embed-text:v1.5',
|
|
61
|
+
// v0.3.0: Lifecycle Management (DEFAULT ON)
|
|
62
|
+
lifecycleEnabled: process.env.SQUISH_LIFECYCLE_ENABLED !== 'false',
|
|
63
|
+
lifecycleInterval: parseInt(process.env.SQUISH_LIFECYCLE_INTERVAL || '3600000'), // 1 hour
|
|
64
|
+
// v0.3.0: Session Summarization (DEFAULT ON)
|
|
65
|
+
summarizationEnabled: process.env.SQUISH_SUMMARIZATION_ENABLED !== 'false',
|
|
66
|
+
incrementalThreshold: parseInt(process.env.SQUISH_INCREMENTAL_THRESHOLD || '10'),
|
|
67
|
+
rollingWindowSize: parseInt(process.env.SQUISH_ROLLING_WINDOW_SIZE || '50'),
|
|
68
|
+
// v0.3.0: Agent-Aware Memory (DEFAULT ON)
|
|
69
|
+
agentIsolationEnabled: process.env.SQUISH_AGENT_ISOLATION_ENABLED !== 'false',
|
|
70
|
+
defaultVisibilityScope: (process.env.SQUISH_DEFAULT_VISIBILITY || 'private'),
|
|
71
|
+
// v0.3.0: Memory Governance (DEFAULT ON)
|
|
72
|
+
governanceEnabled: process.env.SQUISH_GOVERNANCE_ENABLED !== 'false',
|
|
73
|
+
// v0.3.0: Memory Consolidation (OPT-IN, DEFAULT OFF)
|
|
74
|
+
consolidationEnabled: process.env.SQUISH_CONSOLIDATION_ENABLED === 'true',
|
|
75
|
+
consolidationSimilarityThreshold: parseFloat(process.env.SQUISH_CONSOLIDATION_THRESHOLD || '0.8'),
|
|
76
|
+
// v0.7.0: QMD Integration (OPT-IN, DEFAULT OFF)
|
|
77
|
+
qmdEnabled,
|
|
78
|
+
qmdCollectionsPath,
|
|
79
|
+
qmdFallbackMode: qmdFallbackMode,
|
|
80
|
+
qmdCollectionMapping,
|
|
81
|
+
};
|
|
82
|
+
export default config;
|
|
83
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-Aware Memory Management
|
|
3
|
+
* Provides agent isolation and visibility rules
|
|
4
|
+
*/
|
|
5
|
+
export type VisibilityScope = 'private' | 'project' | 'team' | 'global';
|
|
6
|
+
export interface AgentContext {
|
|
7
|
+
agentId: string;
|
|
8
|
+
agentRole?: string;
|
|
9
|
+
userId?: string;
|
|
10
|
+
projectId?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Store a memory with agent context
|
|
14
|
+
*/
|
|
15
|
+
export declare function storeAgentMemory(content: string, context: AgentContext, options?: {
|
|
16
|
+
type?: string;
|
|
17
|
+
sector?: string;
|
|
18
|
+
visibilityScope?: VisibilityScope;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
}): Promise<string>;
|
|
22
|
+
//# sourceMappingURL=agent-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory.d.ts","sourceRoot":"","sources":["../../core/agent-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,GACL,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
|