squish-memory 0.8.2 → 0.9.2
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 +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.env.mcp +30 -0
- package/.mcp.json +2 -5
- package/CHANGELOG.md +111 -0
- package/QUICK-START.md +65 -0
- package/README.md +188 -530
- package/commands/managed-sync.ts +69 -0
- package/commands/mcp-server.ts +519 -0
- package/config/mcp-cli-fallback-policy.json +22 -0
- package/config/mcp-migration-map.json +22 -0
- package/config/mcp-mode-semantics.json +21 -0
- package/config/mcp-remote-auth.json +36 -0
- package/config/mcp-universal.schema.json +48 -0
- package/config/mcp.json +38 -0
- package/config/remote-memory-policy.json +32 -0
- package/dist/algorithms/merge/detection/hash-filters.js +2 -2
- package/dist/algorithms/merge/detection/hash-filters.js.map +1 -1
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts +5 -2
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -1
- package/dist/algorithms/merge/detection/two-stage-detector.js +139 -22
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -1
- package/dist/api/web/index.d.ts +3 -0
- package/dist/api/web/index.d.ts.map +1 -0
- package/dist/api/web/index.js +4 -0
- package/dist/api/web/index.js.map +1 -0
- package/dist/api/web/web-server.d.ts +3 -0
- package/dist/api/web/web-server.d.ts.map +1 -0
- package/dist/api/web/web-server.js +6 -0
- package/dist/api/web/web-server.js.map +1 -0
- package/dist/api/web/web.d.ts.map +1 -1
- package/dist/api/web/web.js +227 -78
- package/dist/api/web/web.js.map +1 -1
- package/dist/commands/managed-sync.d.ts +10 -0
- package/dist/commands/managed-sync.d.ts.map +1 -0
- package/dist/commands/managed-sync.js +64 -0
- package/dist/commands/managed-sync.js.map +1 -0
- package/dist/commands/mcp-server.d.ts +3 -0
- package/dist/commands/mcp-server.d.ts.map +1 -0
- package/dist/commands/mcp-server.js +389 -0
- package/dist/commands/mcp-server.js.map +1 -0
- package/dist/config.d.ts +24 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -1
- package/dist/config.js.map +1 -1
- package/dist/core/associations.d.ts +1 -1
- package/dist/core/associations.d.ts.map +1 -1
- package/dist/core/consolidation.d.ts +31 -0
- package/dist/core/consolidation.d.ts.map +1 -1
- package/dist/core/consolidation.js +237 -29
- package/dist/core/consolidation.js.map +1 -1
- package/dist/core/embeddings/google-multimodal.d.ts +14 -0
- package/dist/core/embeddings/google-multimodal.d.ts.map +1 -0
- package/dist/core/embeddings/google-multimodal.js +142 -0
- package/dist/core/embeddings/google-multimodal.js.map +1 -0
- package/dist/core/embeddings.d.ts +3 -2
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +61 -39
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/mcp/client.d.ts +17 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +101 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/index.d.ts +6 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +6 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/server.d.ts +18 -0
- package/dist/core/mcp/server.d.ts.map +1 -0
- package/dist/core/mcp/server.js +131 -0
- package/dist/core/mcp/server.js.map +1 -0
- package/dist/core/mcp/standalone-server.d.ts +13 -0
- package/dist/core/mcp/standalone-server.d.ts.map +1 -0
- package/dist/core/mcp/standalone-server.js +46 -0
- package/dist/core/mcp/standalone-server.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +9 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +262 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/mcp/types.d.ts +315 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +48 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/memory/categorizer.d.ts +27 -0
- package/dist/core/memory/categorizer.d.ts.map +1 -0
- package/dist/core/memory/categorizer.js +304 -0
- package/dist/core/memory/categorizer.js.map +1 -0
- package/dist/core/memory/conflict-detector.d.ts +7 -0
- package/dist/core/memory/conflict-detector.d.ts.map +1 -0
- package/dist/core/memory/conflict-detector.js +43 -0
- package/dist/core/memory/conflict-detector.js.map +1 -0
- package/dist/core/memory/context-collector.d.ts +10 -0
- package/dist/core/memory/context-collector.d.ts.map +1 -0
- package/dist/core/memory/context-collector.js +55 -0
- package/dist/core/memory/context-collector.js.map +1 -0
- package/dist/core/memory/contradiction-resolver.d.ts +40 -0
- package/dist/core/memory/contradiction-resolver.d.ts.map +1 -0
- package/dist/core/memory/contradiction-resolver.js +368 -0
- package/dist/core/memory/contradiction-resolver.js.map +1 -0
- package/dist/core/memory/edit-workflow.d.ts +19 -0
- package/dist/core/memory/edit-workflow.d.ts.map +1 -0
- package/dist/core/memory/edit-workflow.js +120 -0
- package/dist/core/memory/edit-workflow.js.map +1 -0
- package/dist/core/memory/feedback-tracker.d.ts +12 -0
- package/dist/core/memory/feedback-tracker.d.ts.map +1 -0
- package/dist/core/memory/feedback-tracker.js +151 -0
- package/dist/core/memory/feedback-tracker.js.map +1 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +11 -12
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/core/memory/hybrid-retrieval.js +56 -28
- package/dist/core/memory/hybrid-retrieval.js.map +1 -1
- package/dist/core/memory/hybrid-scorer.d.ts +5 -16
- package/dist/core/memory/hybrid-scorer.d.ts.map +1 -1
- package/dist/core/memory/hybrid-scorer.js +161 -125
- package/dist/core/memory/hybrid-scorer.js.map +1 -1
- package/dist/core/memory/hybrid-search.js +64 -22
- package/dist/core/memory/hybrid-search.js.map +1 -1
- package/dist/core/memory/memories.d.ts +4 -0
- package/dist/core/memory/memories.d.ts.map +1 -1
- package/dist/core/memory/memories.js +138 -60
- package/dist/core/memory/memories.js.map +1 -1
- package/dist/core/memory/progressive-disclosure.d.ts +43 -0
- package/dist/core/memory/progressive-disclosure.d.ts.map +1 -0
- package/dist/core/memory/progressive-disclosure.js +280 -0
- package/dist/core/memory/progressive-disclosure.js.map +1 -0
- package/dist/core/memory/query-rewriter.d.ts +13 -0
- package/dist/core/memory/query-rewriter.d.ts.map +1 -0
- package/dist/core/memory/query-rewriter.js +118 -0
- package/dist/core/memory/query-rewriter.js.map +1 -0
- package/dist/core/memory/response-analyzer.d.ts +9 -0
- package/dist/core/memory/response-analyzer.d.ts.map +1 -0
- package/dist/core/memory/response-analyzer.js +61 -0
- package/dist/core/memory/response-analyzer.js.map +1 -0
- package/dist/core/memory/stats.d.ts +17 -0
- package/dist/core/memory/stats.d.ts.map +1 -0
- package/dist/core/memory/stats.js +87 -0
- package/dist/core/memory/stats.js.map +1 -0
- package/dist/core/memory/telemetry.d.ts +69 -0
- package/dist/core/memory/telemetry.d.ts.map +1 -0
- package/dist/core/memory/telemetry.js +313 -0
- package/dist/core/memory/telemetry.js.map +1 -0
- package/dist/core/memory/temporal-facts.d.ts +41 -0
- package/dist/core/memory/temporal-facts.d.ts.map +1 -0
- package/dist/core/memory/temporal-facts.js +262 -0
- package/dist/core/memory/temporal-facts.js.map +1 -0
- package/dist/core/memory/trigger-detector.d.ts +14 -0
- package/dist/core/memory/trigger-detector.d.ts.map +1 -0
- package/dist/core/memory/trigger-detector.js +42 -0
- package/dist/core/memory/trigger-detector.js.map +1 -0
- package/dist/core/memory/write-gate.d.ts +54 -0
- package/dist/core/memory/write-gate.d.ts.map +1 -0
- package/dist/core/memory/write-gate.js +210 -0
- package/dist/core/memory/write-gate.js.map +1 -0
- package/dist/core/observations.d.ts.map +1 -1
- package/dist/core/observations.js +1 -0
- package/dist/core/observations.js.map +1 -1
- package/dist/core/projects.d.ts +2 -0
- package/dist/core/projects.d.ts.map +1 -1
- package/dist/core/projects.js +33 -0
- package/dist/core/projects.js.map +1 -1
- package/dist/core/scheduler/cron-scheduler.d.ts +32 -0
- package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/cron-scheduler.js +238 -0
- package/dist/core/scheduler/cron-scheduler.js.map +1 -0
- package/dist/core/scheduler/heartbeat.d.ts +11 -0
- package/dist/core/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/core/scheduler/heartbeat.js +73 -0
- package/dist/core/scheduler/heartbeat.js.map +1 -0
- package/dist/core/scheduler/index.d.ts +8 -0
- package/dist/core/scheduler/index.d.ts.map +1 -0
- package/dist/core/scheduler/index.js +8 -0
- package/dist/core/scheduler/index.js.map +1 -0
- package/dist/core/scheduler/job-runner.d.ts +11 -0
- package/dist/core/scheduler/job-runner.d.ts.map +1 -0
- package/dist/core/scheduler/job-runner.js +161 -0
- package/dist/core/scheduler/job-runner.js.map +1 -0
- package/dist/core/session/auto-load.d.ts +6 -0
- package/dist/core/session/auto-load.d.ts.map +1 -0
- package/dist/core/session/auto-load.js +119 -0
- package/dist/core/session/auto-load.js.map +1 -0
- package/dist/core/session/index.d.ts +7 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +7 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/types.d.ts +26 -0
- package/dist/core/session/types.d.ts.map +1 -0
- package/dist/core/session/types.js +10 -0
- package/dist/core/session/types.js.map +1 -0
- package/dist/core/snapshots/comparison.d.ts.map +1 -1
- package/dist/core/snapshots/comparison.js +8 -2
- package/dist/core/snapshots/comparison.js.map +1 -1
- package/dist/core/utils/content-extraction.d.ts.map +1 -1
- package/dist/core/utils/content-extraction.js +11 -1
- package/dist/core/utils/content-extraction.js.map +1 -1
- package/dist/core/utils/memory-operations.d.ts.map +1 -1
- package/dist/core/utils/memory-operations.js +3 -1
- package/dist/core/utils/memory-operations.js.map +1 -1
- package/dist/core/utils/summarization-helpers.d.ts.map +1 -1
- package/dist/core/utils/summarization-helpers.js +4 -1
- package/dist/core/utils/summarization-helpers.js.map +1 -1
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +26 -3
- package/dist/core/utils.js.map +1 -1
- package/dist/core/worker.d.ts +20 -0
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +86 -0
- package/dist/core/worker.js.map +1 -1
- package/dist/db/adapter.d.ts +1 -5
- package/dist/db/adapter.d.ts.map +1 -1
- package/dist/db/adapter.js +137 -12
- package/dist/db/adapter.js.map +1 -1
- package/dist/db/bootstrap.d.ts.map +1 -1
- package/dist/db/bootstrap.js +178 -3
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/db/index.d.ts +1 -5
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +7 -4
- package/dist/db/index.js.map +1 -1
- package/dist/drizzle/schema-sqlite.d.ts +1953 -612
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.js +134 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -1
- package/dist/drizzle/schema.d.ts +684 -3
- package/dist/drizzle/schema.d.ts.map +1 -1
- package/dist/drizzle/schema.js +81 -1
- package/dist/drizzle/schema.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +152 -13
- package/dist/index.js.map +1 -1
- package/package.json +126 -103
- package/scripts/build-release.sh +33 -0
- package/scripts/db/check-db.mjs +88 -0
- package/scripts/db/fix-all-columns.mjs +52 -0
- package/scripts/db/fix-schema-all.mjs +55 -0
- package/scripts/db/fix-schema-full.mjs +46 -0
- package/scripts/db/fix-schema.mjs +38 -0
- package/scripts/db/init-db.mjs +13 -0
- package/scripts/db/recreate-db.mjs +14 -0
- package/scripts/generate-mcp.mjs +264 -0
- package/scripts/github-release.sh +61 -0
- package/scripts/init-dirs.mjs +13 -0
- package/scripts/init-dirs.ts +15 -0
- package/scripts/install-mcp.mjs +116 -0
- package/scripts/install-web.sh +120 -0
- package/scripts/install.mjs +340 -0
- package/scripts/openclaw-bootstrap.mjs +127 -0
- package/scripts/package-release.sh +71 -0
- package/scripts/remote-preflight.mjs +62 -0
- package/scripts/squish-fallback.mjs +132 -0
- package/scripts/test/test-all-systems.mjs +139 -0
- package/scripts/test/test-memory-system.mjs +139 -0
- package/scripts/test/test-v0.5.0.mjs +210 -0
- package/scripts/verify-mcp.mjs +214 -0
- package/skills/memory-guide/SKILL.md +181 -123
- package/skills/squish-cli/SKILL.md +200 -0
- package/skills/squish-mcp/SKILL.md +311 -0
- package/skills/squish-memory/SKILL.md +100 -62
- package/skills/squish-memory/claude-desktop.json +12 -0
- package/skills/squish-memory/install.mjs +335 -0
- package/skills/squish-memory/install.sh +94 -62
- package/skills/squish-memory/openclaw.json +13 -0
- package/skills/squish-memory/opencode.json +14 -0
- package/skills/squish-memory/skill.json +32 -0
- package/dist/adapters/claude-code/capture.d.ts +0 -11
- package/dist/adapters/claude-code/capture.d.ts.map +0 -1
- package/dist/adapters/claude-code/capture.js +0 -100
- package/dist/adapters/claude-code/capture.js.map +0 -1
- package/dist/adapters/claude-code/index.d.ts +0 -5
- package/dist/adapters/claude-code/index.d.ts.map +0 -1
- package/dist/adapters/claude-code/index.js +0 -6
- package/dist/adapters/claude-code/index.js.map +0 -1
- package/dist/adapters/claude-code/injection.d.ts +0 -34
- package/dist/adapters/claude-code/injection.d.ts.map +0 -1
- package/dist/adapters/claude-code/injection.js +0 -127
- package/dist/adapters/claude-code/injection.js.map +0 -1
- package/dist/adapters/claude-code/plugin-wrapper.d.ts +0 -21
- package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +0 -1
- package/dist/adapters/claude-code/plugin-wrapper.js +0 -239
- package/dist/adapters/claude-code/plugin-wrapper.js.map +0 -1
- package/dist/adapters/claude-code/types.d.ts +0 -46
- package/dist/adapters/claude-code/types.d.ts.map +0 -1
- package/dist/adapters/claude-code/types.js +0 -6
- package/dist/adapters/claude-code/types.js.map +0 -1
package/dist/api/web/web.js
CHANGED
|
@@ -1,85 +1,172 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import cors from 'cors';
|
|
3
3
|
import { logger } from '../../core/logger.js';
|
|
4
|
+
import { getRecentMemories } from '../../core/memory/memories.js';
|
|
5
|
+
import { getObservationsForProject } from '../../core/observations.js';
|
|
6
|
+
import { getAllProjects, getProjectByPath } from '../../core/projects.js';
|
|
7
|
+
import { getDb } from '../../db/index.js';
|
|
8
|
+
import { isDatabaseUnavailableError } from '../../core/utils.js';
|
|
4
9
|
const app = express();
|
|
5
10
|
const PORT = process.env.SQUISH_WEB_PORT || 37777;
|
|
6
11
|
app.use(cors());
|
|
7
12
|
app.use(express.json());
|
|
8
13
|
// Health check endpoint
|
|
9
14
|
app.get('/api/health', async (req, res) => {
|
|
15
|
+
let dbStatus = 'ok';
|
|
16
|
+
let projectInfo = null;
|
|
17
|
+
let allProjects = [];
|
|
18
|
+
try {
|
|
19
|
+
const db = await getDb();
|
|
20
|
+
if (db && typeof db.prepare === 'function') {
|
|
21
|
+
db.prepare('SELECT 1').get();
|
|
22
|
+
}
|
|
23
|
+
// Get all projects from database
|
|
24
|
+
allProjects = await getAllProjects();
|
|
25
|
+
// If there are projects, use the first one as default (most recent)
|
|
26
|
+
if (allProjects.length > 0) {
|
|
27
|
+
projectInfo = { id: allProjects[0].id, name: allProjects[0].name, path: allProjects[0].path };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
dbStatus = 'error';
|
|
32
|
+
logger.error('Health check failed:', error.message);
|
|
33
|
+
}
|
|
10
34
|
res.json({
|
|
11
|
-
status: 'ok',
|
|
12
|
-
version: '0.1
|
|
13
|
-
database:
|
|
14
|
-
project: { id: '
|
|
35
|
+
status: dbStatus === 'ok' ? 'ok' : 'error',
|
|
36
|
+
version: '0.9.1',
|
|
37
|
+
database: dbStatus,
|
|
38
|
+
project: projectInfo || { id: 'unknown', name: 'No Project', path: '' },
|
|
39
|
+
projects: allProjects,
|
|
15
40
|
timestamp: new Date().toISOString()
|
|
16
41
|
});
|
|
17
42
|
});
|
|
18
43
|
// Get recent memories
|
|
19
44
|
app.get('/api/memories', async (req, res) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
projectId: 'demo',
|
|
27
|
-
createdAt: new Date().toISOString()
|
|
45
|
+
try {
|
|
46
|
+
const projectPath = req.query.projectPath || process.cwd();
|
|
47
|
+
const limit = Math.min(Math.max(parseInt(req.query.limit) || 20, 1), 100);
|
|
48
|
+
const project = await getProjectByPath(projectPath);
|
|
49
|
+
if (!project) {
|
|
50
|
+
return res.json({ status: 'ok', data: [], count: 0, message: 'Project not found' });
|
|
28
51
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
52
|
+
const memories = await getRecentMemories(projectPath, limit);
|
|
53
|
+
res.json({
|
|
54
|
+
status: 'ok',
|
|
55
|
+
data: memories,
|
|
56
|
+
count: memories.length,
|
|
57
|
+
project: { id: project.id, name: project.name, path: project.path }
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (isDatabaseUnavailableError(error)) {
|
|
62
|
+
return res.json({ status: 'ok', data: [], count: 0, message: 'Database unavailable' });
|
|
63
|
+
}
|
|
64
|
+
logger.error('Failed to get memories:', error.message);
|
|
65
|
+
res.status(500).json({ status: 'error', message: error.message });
|
|
66
|
+
}
|
|
35
67
|
});
|
|
36
68
|
// Get observations for project
|
|
37
69
|
app.get('/api/observations', async (req, res) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
target: 'project',
|
|
45
|
-
createdAt: new Date().toISOString()
|
|
70
|
+
try {
|
|
71
|
+
const projectPath = req.query.projectPath || process.cwd();
|
|
72
|
+
const limit = Math.min(Math.max(parseInt(req.query.limit) || 20, 1), 100);
|
|
73
|
+
const project = await getProjectByPath(projectPath);
|
|
74
|
+
if (!project) {
|
|
75
|
+
return res.json({ status: 'ok', data: [], count: 0, message: 'Project not found' });
|
|
46
76
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
const observations = await getObservationsForProject(projectPath, limit);
|
|
78
|
+
res.json({
|
|
79
|
+
status: 'ok',
|
|
80
|
+
data: observations,
|
|
81
|
+
count: observations.length,
|
|
82
|
+
project: { id: project.id, name: project.name, path: project.path }
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (isDatabaseUnavailableError(error)) {
|
|
87
|
+
return res.json({ status: 'ok', data: [], count: 0, message: 'Database unavailable' });
|
|
88
|
+
}
|
|
89
|
+
logger.error('Failed to get observations:', error.message);
|
|
90
|
+
res.status(500).json({ status: 'error', message: error.message });
|
|
91
|
+
}
|
|
53
92
|
});
|
|
54
93
|
// Get project context
|
|
55
94
|
app.get('/api/context', async (req, res) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
createdAt: new Date().toISOString()
|
|
95
|
+
try {
|
|
96
|
+
// Get all projects and use first one as default if no projectPath specified
|
|
97
|
+
const allProjects = await getAllProjects();
|
|
98
|
+
let projectPath = req.query.projectPath;
|
|
99
|
+
// If no projectPath provided, use the first project from database
|
|
100
|
+
if (!projectPath && allProjects.length > 0) {
|
|
101
|
+
projectPath = allProjects[0].path;
|
|
64
102
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
103
|
+
if (!projectPath) {
|
|
104
|
+
return res.json({
|
|
105
|
+
status: 'ok',
|
|
106
|
+
project: { id: 'unknown', name: 'No Project', path: '' },
|
|
107
|
+
projects: allProjects,
|
|
108
|
+
memories: [],
|
|
109
|
+
observations: [],
|
|
110
|
+
totalCount: 0,
|
|
111
|
+
message: 'No projects found in database'
|
|
112
|
+
});
|
|
74
113
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
114
|
+
const project = await getProjectByPath(projectPath);
|
|
115
|
+
if (!project) {
|
|
116
|
+
return res.json({
|
|
117
|
+
status: 'ok',
|
|
118
|
+
project: { id: 'unknown', name: 'Project Not Found', path: projectPath },
|
|
119
|
+
projects: allProjects,
|
|
120
|
+
memories: [],
|
|
121
|
+
observations: [],
|
|
122
|
+
totalCount: 0,
|
|
123
|
+
message: 'Project not found in database'
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const memories = await getRecentMemories(projectPath, 20);
|
|
127
|
+
const observations = await getObservationsForProject(projectPath, 20);
|
|
128
|
+
res.json({
|
|
129
|
+
status: 'ok',
|
|
130
|
+
project: { id: project.id, name: project.name, path: project.path },
|
|
131
|
+
projects: allProjects,
|
|
132
|
+
memories: memories,
|
|
133
|
+
observations: observations,
|
|
134
|
+
totalCount: memories.length + observations.length
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (isDatabaseUnavailableError(error)) {
|
|
139
|
+
return res.json({
|
|
140
|
+
status: 'ok',
|
|
141
|
+
project: { id: 'unknown', name: 'Error', path: '' },
|
|
142
|
+
projects: [],
|
|
143
|
+
memories: [],
|
|
144
|
+
observations: [],
|
|
145
|
+
totalCount: 0,
|
|
146
|
+
message: 'Database unavailable'
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
logger.error('Failed to get context:', error.message);
|
|
150
|
+
res.status(500).json({ status: 'error', message: error.message });
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// Get all projects
|
|
154
|
+
app.get('/api/projects', async (req, res) => {
|
|
155
|
+
try {
|
|
156
|
+
const projects = await getAllProjects();
|
|
157
|
+
res.json({
|
|
158
|
+
status: 'ok',
|
|
159
|
+
data: projects,
|
|
160
|
+
count: projects.length
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (isDatabaseUnavailableError(error)) {
|
|
165
|
+
return res.json({ status: 'ok', data: [], count: 0, message: 'Database unavailable' });
|
|
166
|
+
}
|
|
167
|
+
logger.error('Failed to get projects:', error.message);
|
|
168
|
+
res.status(500).json({ status: 'error', message: error.message });
|
|
169
|
+
}
|
|
83
170
|
});
|
|
84
171
|
// Web UI
|
|
85
172
|
app.get('/', (req, res) => {
|
|
@@ -158,6 +245,9 @@ app.get('/', (req, res) => {
|
|
|
158
245
|
</h1>
|
|
159
246
|
</div>
|
|
160
247
|
<div class="flex items-center gap-4">
|
|
248
|
+
<select id="project-select" onchange="changeProject(this.value)" class="bg-card-bg px-4 py-2 rounded-full border-2 border-slate-700/50 text-text-main text-sm font-medium focus:outline-none focus:border-primary">
|
|
249
|
+
<option value="">Loading projects...</option>
|
|
250
|
+
</select>
|
|
161
251
|
<div class="bg-card-bg px-4 py-2 rounded-full border-2 border-slate-700/50 flex items-center gap-2">
|
|
162
252
|
<div class="size-2 rounded-full bg-primary animate-pulse"></div>
|
|
163
253
|
<span class="text-xs font-bold uppercase tracking-widest text-text-muted">Local Server: Online</span>
|
|
@@ -250,23 +340,75 @@ app.get('/', (req, res) => {
|
|
|
250
340
|
</div>
|
|
251
341
|
</footer>
|
|
252
342
|
<script>
|
|
343
|
+
let currentProjectPath = null;
|
|
344
|
+
|
|
345
|
+
async function loadProjects() {
|
|
346
|
+
try {
|
|
347
|
+
const response = await fetch('/api/projects');
|
|
348
|
+
const data = await response.json();
|
|
349
|
+
|
|
350
|
+
if (data.status === 'ok' && data.data && data.data.length > 0) {
|
|
351
|
+
const select = document.getElementById('project-select');
|
|
352
|
+
if (select) {
|
|
353
|
+
select.innerHTML = data.data.map(function(p) {
|
|
354
|
+
return '<option value="' + escapeHtml(p.path) + '">' + escapeHtml(p.name || p.path) + '</option>';
|
|
355
|
+
}).join('');
|
|
356
|
+
|
|
357
|
+
// Try to select current directory
|
|
358
|
+
const cwd = window.location.pathname === '/' ? '' : window.location.pathname;
|
|
359
|
+
const defaultProject = data.data.find(function(p) { return p.path === cwd; }) || data.data[0];
|
|
360
|
+
if (defaultProject) {
|
|
361
|
+
currentProjectPath = defaultProject.path;
|
|
362
|
+
select.value = defaultProject.path;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
} else {
|
|
366
|
+
// No projects yet, use current directory
|
|
367
|
+
currentProjectPath = window.location.pathname === '/' ? '' : window.location.pathname;
|
|
368
|
+
}
|
|
369
|
+
} catch (error) {
|
|
370
|
+
console.error('Failed to load projects:', error);
|
|
371
|
+
currentProjectPath = '';
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
253
375
|
async function loadData() {
|
|
254
376
|
try {
|
|
255
|
-
const
|
|
377
|
+
const url = currentProjectPath ? '/api/context?projectPath=' + encodeURIComponent(currentProjectPath) : '/api/context';
|
|
378
|
+
const response = await fetch(url);
|
|
256
379
|
const data = await response.json();
|
|
257
380
|
|
|
258
381
|
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');
|
|
382
|
+
document.getElementById('memories-count').textContent = data.memories ? data.memories.length : 0;
|
|
383
|
+
document.getElementById('observations-count').textContent = data.observations ? data.observations.length : 0;
|
|
384
|
+
document.getElementById('total-count').textContent = data.totalCount || 0;
|
|
385
|
+
updateStatus(data.memories && data.observations ? 'ok' : 'error');
|
|
386
|
+
|
|
387
|
+
renderMemories(data.memories || []);
|
|
388
|
+
renderObservations(data.observations || []);
|
|
263
389
|
|
|
264
|
-
|
|
265
|
-
|
|
390
|
+
// Update project info
|
|
391
|
+
if (data.project) {
|
|
392
|
+
const projectInfo = document.getElementById('project-info');
|
|
393
|
+
if (projectInfo) {
|
|
394
|
+
projectInfo.textContent = data.project.name || data.project.path || 'Unknown';
|
|
395
|
+
}
|
|
396
|
+
}
|
|
266
397
|
|
|
267
|
-
// Hide error alert
|
|
398
|
+
// Hide error alert if data loaded
|
|
268
399
|
const errorAlert = document.querySelector('.blob-alert');
|
|
269
|
-
if (errorAlert
|
|
400
|
+
if (errorAlert && (data.memories && data.memories.length > 0 || data.observations && data.observations.length > 0)) {
|
|
401
|
+
errorAlert.style.display = 'none';
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Show error alert if message present
|
|
405
|
+
if (data.message) {
|
|
406
|
+
const errorAlert = document.querySelector('.blob-alert');
|
|
407
|
+
if (errorAlert) {
|
|
408
|
+
errorAlert.querySelector('p').textContent = data.message;
|
|
409
|
+
errorAlert.style.display = 'flex';
|
|
410
|
+
}
|
|
411
|
+
}
|
|
270
412
|
} else {
|
|
271
413
|
throw new Error('API returned error status');
|
|
272
414
|
}
|
|
@@ -281,7 +423,7 @@ app.get('/', (req, res) => {
|
|
|
281
423
|
|
|
282
424
|
function renderMemories(memories) {
|
|
283
425
|
const container = document.getElementById('memories');
|
|
284
|
-
if (memories.length === 0) {
|
|
426
|
+
if (!memories || memories.length === 0) {
|
|
285
427
|
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
428
|
return;
|
|
287
429
|
}
|
|
@@ -289,13 +431,12 @@ app.get('/', (req, res) => {
|
|
|
289
431
|
container.innerHTML = memories.map(function(memory) {
|
|
290
432
|
return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
|
|
291
433
|
'<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>' +
|
|
434
|
+
'<span class="bg-primary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + (memory.type || 'memory') + '</span>' +
|
|
293
435
|
'<span class="text-text-muted text-sm">' + formatTime(memory.createdAt) + '</span>' +
|
|
294
436
|
'</div>' +
|
|
295
|
-
'<div class="text-text-main mb-4">' + escapeHtml(memory.content) + '</div>' +
|
|
437
|
+
'<div class="text-text-main mb-4">' + escapeHtml(memory.content || memory.text || '') + '</div>' +
|
|
296
438
|
'<div class="text-text-muted text-sm">' +
|
|
297
|
-
'Tags: ' + (memory.tags ? memory.tags.join(', ') : 'none') +
|
|
298
|
-
'Project: ' + (memory.projectId || 'unknown') +
|
|
439
|
+
'Tags: ' + (memory.tags ? memory.tags.join(', ') : 'none') +
|
|
299
440
|
'</div>' +
|
|
300
441
|
'</div>';
|
|
301
442
|
}).join('');
|
|
@@ -303,7 +444,7 @@ app.get('/', (req, res) => {
|
|
|
303
444
|
|
|
304
445
|
function renderObservations(observations) {
|
|
305
446
|
const container = document.getElementById('observations');
|
|
306
|
-
if (observations.length === 0) {
|
|
447
|
+
if (!observations || observations.length === 0) {
|
|
307
448
|
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
449
|
return;
|
|
309
450
|
}
|
|
@@ -311,19 +452,19 @@ app.get('/', (req, res) => {
|
|
|
311
452
|
container.innerHTML = observations.map(function(obs) {
|
|
312
453
|
return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
|
|
313
454
|
'<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>' +
|
|
455
|
+
'<span class="bg-secondary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + (obs.type || 'observation') + '</span>' +
|
|
315
456
|
'<span class="text-text-muted text-sm">' + formatTime(obs.createdAt) + '</span>' +
|
|
316
457
|
'</div>' +
|
|
317
|
-
'<div class="text-text-main mb-4">' + escapeHtml(obs.summary) + '</div>' +
|
|
458
|
+
'<div class="text-text-main mb-4">' + escapeHtml(obs.summary || obs.content || '') + '</div>' +
|
|
318
459
|
'<div class="text-text-muted text-sm">' +
|
|
319
|
-
'Action: ' + obs.action + ' | ' +
|
|
460
|
+
'Action: ' + (obs.action || 'none') + ' | ' +
|
|
320
461
|
'Target: ' + (obs.target || 'none') +
|
|
321
462
|
'</div>' +
|
|
322
463
|
'</div>';
|
|
323
464
|
}).join('');
|
|
324
465
|
}
|
|
325
466
|
|
|
326
|
-
function updateStatus(status) {
|
|
467
|
+
function updateStatus(status) {
|
|
327
468
|
const statusCard = document.querySelector('.squishy-hover.flex-col');
|
|
328
469
|
if (!statusCard) return;
|
|
329
470
|
|
|
@@ -467,9 +608,17 @@ app.get('/', (req, res) => {
|
|
|
467
608
|
modal.remove();
|
|
468
609
|
}
|
|
469
610
|
}
|
|
611
|
+
|
|
612
|
+
function changeProject(path) {
|
|
613
|
+
currentProjectPath = path;
|
|
614
|
+
loadData();
|
|
615
|
+
}
|
|
470
616
|
|
|
471
|
-
|
|
472
|
-
|
|
617
|
+
// Initialize: load projects first, then data
|
|
618
|
+
loadProjects().then(function() {
|
|
619
|
+
loadData();
|
|
620
|
+
window.refreshInterval = setInterval(loadData, 30000);
|
|
621
|
+
});
|
|
473
622
|
</script>
|
|
474
623
|
</body></html>`;
|
|
475
624
|
res.send(html);
|
package/dist/api/web/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../api/web/web.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../api/web/web.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class ManagedSync {
|
|
2
|
+
private client;
|
|
3
|
+
private syncEnabled;
|
|
4
|
+
constructor();
|
|
5
|
+
sync(): Promise<void>;
|
|
6
|
+
pushMemory(memoryId: string): Promise<void>;
|
|
7
|
+
pullMemory(memoryId: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function startManagedSync(): Promise<ManagedSync>;
|
|
10
|
+
//# sourceMappingURL=managed-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-sync.d.ts","sourceRoot":"","sources":["../../commands/managed-sync.ts"],"names":[],"mappings":"AAKA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAU;;IAQvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBlD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAI7D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { MCPClient } from '../core/mcp/client.js';
|
|
2
|
+
import { config } from '../config.js';
|
|
3
|
+
import { logger } from '../core/logger.js';
|
|
4
|
+
import { searchMemories, rememberMemory } from '../core/memory/memories.js';
|
|
5
|
+
export class ManagedSync {
|
|
6
|
+
client;
|
|
7
|
+
syncEnabled;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.syncEnabled = config.managedMode && !!config.managedApiKey;
|
|
10
|
+
this.client = new MCPClient(config.managedApiUrl);
|
|
11
|
+
}
|
|
12
|
+
async sync() {
|
|
13
|
+
if (!this.syncEnabled) {
|
|
14
|
+
logger.debug('Managed sync disabled');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
await this.client.initialize();
|
|
19
|
+
logger.info('Connected to managed storage');
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
logger.error('Managed sync connection failed:', error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async pushMemory(memoryId) {
|
|
26
|
+
if (!this.syncEnabled)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
const memory = await searchMemories({ query: memoryId, limit: 1 });
|
|
30
|
+
if (memory.length > 0) {
|
|
31
|
+
await this.client.callTool('managed_memory_store', {
|
|
32
|
+
memory: memory[0],
|
|
33
|
+
});
|
|
34
|
+
logger.debug(`Pushed memory ${memoryId} to managed storage`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
logger.error(`Failed to push memory ${memoryId}:`, error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async pullMemory(memoryId) {
|
|
42
|
+
if (!this.syncEnabled)
|
|
43
|
+
return;
|
|
44
|
+
try {
|
|
45
|
+
const result = await this.client.callTool('managed_memory_retrieve', {
|
|
46
|
+
memoryId,
|
|
47
|
+
});
|
|
48
|
+
if (result.content[0]?.text) {
|
|
49
|
+
const memory = JSON.parse(result.content[0].text);
|
|
50
|
+
await rememberMemory(memory);
|
|
51
|
+
logger.debug(`Pulled memory ${memoryId} from managed storage`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.error(`Failed to pull memory ${memoryId}:`, error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function startManagedSync() {
|
|
60
|
+
const sync = new ManagedSync();
|
|
61
|
+
await sync.sync();
|
|
62
|
+
return sync;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=managed-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-sync.js","sourceRoot":"","sources":["../../commands/managed-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5E,MAAM,OAAO,WAAW;IACd,MAAM,CAAY;IAClB,WAAW,CAAU;IAE7B;QACE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAEhE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE;oBACjD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,QAAQ,qBAAqB,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE;gBACnE,QAAQ;aACT,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,iBAAiB,QAAQ,uBAAuB,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../commands/mcp-server.ts"],"names":[],"mappings":""}
|