squish-memory 0.9.2 → 1.0.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/{.env.mcp → .env.mcp.example} +23 -0
- package/CHANGELOG.md +102 -0
- package/QUICK-START.md +10 -4
- package/README.md +73 -4
- package/config/plugin-manifest.json +152 -0
- package/config/plugin-manifest.schema.json +244 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
- package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
- package/dist/algorithms/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
- package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
- package/dist/algorithms/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
- package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
- package/dist/algorithms/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
- package/dist/algorithms/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
- package/dist/algorithms/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
- package/dist/algorithms/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
- package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/safety/safety-checks.js +179 -0
- package/dist/algorithms/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
- package/dist/algorithms/utils/response-builder.d.ts +28 -0
- package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
- package/dist/algorithms/utils/response-builder.js +37 -0
- package/dist/algorithms/utils/response-builder.js.map +1 -0
- package/dist/api/web/web.d.ts.map +1 -1
- package/dist/api/web/web.js +0 -21
- package/dist/api/web/web.js.map +1 -1
- package/dist/commands/mcp-server.js +1 -1
- package/dist/config.d.ts +9 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +35 -32
- package/dist/config.js.map +1 -1
- package/dist/core/associations.js +2 -2
- package/dist/core/associations.js.map +1 -1
- package/dist/core/core-memory.d.ts +5 -0
- package/dist/core/core-memory.d.ts.map +1 -1
- package/dist/core/core-memory.js +17 -5
- package/dist/core/core-memory.js.map +1 -1
- package/dist/core/embeddings.d.ts +9 -0
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +153 -16
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/layers/generator.d.ts +25 -0
- package/dist/core/layers/generator.d.ts.map +1 -0
- package/dist/core/layers/generator.js +76 -0
- package/dist/core/layers/generator.js.map +1 -0
- package/dist/core/mcp/tools.d.ts.map +1 -1
- package/dist/core/mcp/tools.js +71 -0
- package/dist/core/mcp/tools.js.map +1 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/core/memory/hybrid-retrieval.js +49 -1
- package/dist/core/memory/hybrid-retrieval.js.map +1 -1
- package/dist/core/memory/hybrid-search.d.ts.map +1 -1
- package/dist/core/memory/hybrid-search.js +0 -7
- package/dist/core/memory/hybrid-search.js.map +1 -1
- package/dist/core/memory/memories.d.ts.map +1 -1
- package/dist/core/memory/memories.js +47 -53
- package/dist/core/memory/memories.js.map +1 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
- package/dist/core/memory/progressive-disclosure.js.map +1 -1
- package/dist/core/namespaces/index.d.ts +71 -0
- package/dist/core/namespaces/index.d.ts.map +1 -0
- package/dist/core/namespaces/index.js +296 -0
- package/dist/core/namespaces/index.js.map +1 -0
- package/dist/core/namespaces/uri-parser.d.ts +31 -0
- package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
- package/dist/core/namespaces/uri-parser.js +74 -0
- package/dist/core/namespaces/uri-parser.js.map +1 -0
- package/dist/core/observations.d.ts.map +1 -1
- package/dist/core/observations.js +3 -12
- package/dist/core/observations.js.map +1 -1
- package/dist/core/projects.d.ts.map +1 -1
- package/dist/core/projects.js +0 -12
- package/dist/core/projects.js.map +1 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
- package/dist/core/scheduler/cron-scheduler.js +14 -0
- package/dist/core/scheduler/cron-scheduler.js.map +1 -1
- package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
- package/dist/core/session-hooks/self-iteration-job.js +278 -0
- package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
- package/dist/core/session-hooks/session-hooks.d.ts +18 -0
- package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/session-hooks/session-hooks.js +55 -0
- package/dist/core/session-hooks/session-hooks.js.map +1 -0
- package/dist/core/tracing/collector.d.ts +111 -0
- package/dist/core/tracing/collector.d.ts.map +1 -0
- package/dist/core/tracing/collector.js +338 -0
- package/dist/core/tracing/collector.js.map +1 -0
- package/dist/core/tracing/visualizer.d.ts +32 -0
- package/dist/core/tracing/visualizer.d.ts.map +1 -0
- package/dist/core/tracing/visualizer.js +165 -0
- package/dist/core/tracing/visualizer.js.map +1 -0
- package/dist/db/bootstrap.d.ts.map +1 -1
- package/dist/db/bootstrap.js +33 -6
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/drizzle/schema-sqlite.d.ts +401 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.js +66 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -1
- package/dist/drizzle/schema.d.ts +385 -0
- package/dist/drizzle/schema.d.ts.map +1 -1
- package/dist/drizzle/schema.js +64 -0
- package/dist/drizzle/schema.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +101 -62
- package/dist/index.js.map +1 -1
- package/generated/mcp/manifest.json +23 -0
- package/generated/mcp/mcp-servers.json +25 -0
- package/generated/mcp/mcporter.json +34 -0
- package/generated/mcp/openclaw-memory-qmd.json +17 -0
- package/generated/mcp/runtime.json +12 -0
- package/package.json +68 -26
- package/packages/plugin-claude-code/README.md +73 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
- package/packages/plugin-claude-code/package.json +31 -0
- package/packages/plugin-openclaw/README.md +70 -0
- package/packages/plugin-openclaw/dist/index.d.ts +49 -0
- package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
- package/packages/plugin-openclaw/dist/index.js +262 -0
- package/packages/plugin-openclaw/dist/index.js.map +1 -0
- package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
- package/packages/plugin-openclaw/package.json +31 -0
- package/packages/plugin-opencode/install.mjs +217 -0
- package/packages/plugin-opencode/package.json +21 -0
- package/scripts/build-release.sh +20 -17
- package/scripts/check-secrets.js +132 -0
- package/scripts/dependency-manager.mjs +217 -0
- package/scripts/detect-clients.mjs +78 -0
- package/scripts/github-release.sh +43 -27
- package/scripts/install-interactive.mjs +674 -0
- package/scripts/install-plugin.mjs +415 -0
- package/scripts/test-interactive.mjs +131 -0
- package/commands/managed-sync.ts +0 -69
- package/commands/mcp-server.ts +0 -519
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.js +0 -215
- package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
- package/dist/core/embeddings/qmd-provider.d.ts +0 -65
- package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-provider.js +0 -133
- package/dist/core/embeddings/qmd-provider.js.map +0 -1
- package/scripts/init-dirs.ts +0 -15
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.js +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import os from "node:os";
|
|
7
|
+
|
|
8
|
+
const root = process.cwd();
|
|
9
|
+
|
|
10
|
+
// Load manifest to get pinned versions
|
|
11
|
+
function loadManifest() {
|
|
12
|
+
const manifestPath = path.join(root, "config", "plugin-manifest.json");
|
|
13
|
+
if (!fs.existsSync(manifestPath)) {
|
|
14
|
+
throw new Error(`Plugin manifest not found: ${manifestPath}`);
|
|
15
|
+
}
|
|
16
|
+
return JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function which(binaryName) {
|
|
20
|
+
const isWindows = process.platform === "win32";
|
|
21
|
+
const extensions = isWindows ? [".exe", ".cmd", ".bat"] : [""];
|
|
22
|
+
|
|
23
|
+
const envPath = process.env.PATH || "";
|
|
24
|
+
const paths = envPath.split(path.delimiter);
|
|
25
|
+
|
|
26
|
+
for (const dir of paths) {
|
|
27
|
+
for (const ext of extensions) {
|
|
28
|
+
const fullPath = path.join(dir, binaryName + ext);
|
|
29
|
+
try {
|
|
30
|
+
if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {
|
|
31
|
+
return fullPath;
|
|
32
|
+
}
|
|
33
|
+
} catch {
|
|
34
|
+
// ignore
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function checkBinary(binaryName) {
|
|
42
|
+
const path = which(binaryName);
|
|
43
|
+
if (!path) return { available: false, path: null };
|
|
44
|
+
|
|
45
|
+
const result = spawnSync(binaryName, ["--version"], {
|
|
46
|
+
encoding: "utf8",
|
|
47
|
+
timeout: 5000
|
|
48
|
+
});
|
|
49
|
+
const version = result.stdout.trim().split("\n")[0] || result.stderr.trim().split("\n")[0];
|
|
50
|
+
return { available: true, path, version: version || "unknown" };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function installPackage(packageName, version, packageManager = "npm") {
|
|
54
|
+
console.log(`[DEP] Installing ${packageName}@${version} via ${packageManager}...`);
|
|
55
|
+
const result = spawnSync(
|
|
56
|
+
packageManager,
|
|
57
|
+
["install", "-g", `${packageName}@${version}`],
|
|
58
|
+
{
|
|
59
|
+
encoding: "utf8",
|
|
60
|
+
stdio: "inherit",
|
|
61
|
+
timeout: 120000
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
return result.status === 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function verifyInstallation(binaryName, expectedVersion) {
|
|
68
|
+
const check = checkBinary(binaryName);
|
|
69
|
+
if (!check.available) {
|
|
70
|
+
return { ok: false, error: `${binaryName} not found on PATH` };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Version verification: just check it's present, exact match not required
|
|
74
|
+
// since binary might report different format
|
|
75
|
+
console.log(`[DEP] ✓ ${binaryName} available at ${check.path} (${check.version})`);
|
|
76
|
+
return { ok: true, path: check.path, version: check.version };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function getBinaryName(packageName) {
|
|
80
|
+
// For scoped packages like @tobilu/qmd, the binary is just "qmd"
|
|
81
|
+
if (packageName.startsWith("@")) {
|
|
82
|
+
return packageName.split("/").pop();
|
|
83
|
+
}
|
|
84
|
+
return packageName;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function installDependency(name, depConfig) {
|
|
88
|
+
const { version, autoInstall, optional } = depConfig;
|
|
89
|
+
const binaryName = getBinaryName(name);
|
|
90
|
+
|
|
91
|
+
console.log(`\n[DEP] Checking dependency: ${name}@${version} (binary: ${binaryName})`);
|
|
92
|
+
|
|
93
|
+
const check = checkBinary(binaryName);
|
|
94
|
+
|
|
95
|
+
if (check.available) {
|
|
96
|
+
console.log(`[DEP] ✓ ${name} already installed`);
|
|
97
|
+
return { status: "ok", installed: true, path: check.path };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (!autoInstall) {
|
|
101
|
+
const msg = optional
|
|
102
|
+
? `[DEP] ⚠ ${name} is optional but not installed`
|
|
103
|
+
: `[DEP] ✗ ${name} is required but not installed`;
|
|
104
|
+
console.log(msg);
|
|
105
|
+
return {
|
|
106
|
+
status: optional ? "warning" : "error",
|
|
107
|
+
error: `${name} not found and autoInstall disabled`
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
console.log(`[DEP] Auto-installing ${name}@${version}...`);
|
|
112
|
+
|
|
113
|
+
const packageManagers = ["npm", "bun"];
|
|
114
|
+
let success = false;
|
|
115
|
+
|
|
116
|
+
for (const pm of packageManagers) {
|
|
117
|
+
success = installPackage(name, version, pm);
|
|
118
|
+
if (success) break;
|
|
119
|
+
console.log(`[DEP] ${pm} install failed, trying next...`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (!success) {
|
|
123
|
+
return {
|
|
124
|
+
status: "error",
|
|
125
|
+
error: `Failed to install ${name}@${version}`
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const verify = verifyInstallation(name, version);
|
|
130
|
+
if (!verify.ok) {
|
|
131
|
+
return { status: "error", error: verify.error };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
console.log(`[DEP] ✓ Successfully installed ${name}`);
|
|
135
|
+
return { status: "ok", installed: true, path: verify.path };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function main() {
|
|
139
|
+
const args = process.argv.slice(2);
|
|
140
|
+
const dryRun = args.includes("--dry-run");
|
|
141
|
+
const strict = args.includes("--strict");
|
|
142
|
+
const showVersions = args.includes("--versions");
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
const manifest = loadManifest();
|
|
146
|
+
const dependencies = manifest.dependencies || {};
|
|
147
|
+
|
|
148
|
+
console.log(`[DEP] Squish Dependency Manager v${manifest.version}`);
|
|
149
|
+
console.log(`[DEP] Mode: ${dryRun ? "DRY_RUN" : "LIVE"}`);
|
|
150
|
+
|
|
151
|
+
if (dryRun) {
|
|
152
|
+
console.log("[DEP] DRY RUN - no installations will be performed");
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const results = {};
|
|
156
|
+
let hasErrors = false;
|
|
157
|
+
|
|
158
|
+
for (const [name, config] of Object.entries(dependencies)) {
|
|
159
|
+
const binaryName = getBinaryName(name);
|
|
160
|
+
const check = checkBinary(binaryName);
|
|
161
|
+
|
|
162
|
+
if (showVersions) {
|
|
163
|
+
console.log(`[VER] ${name}: ${check.available ? check.version : "NOT INSTALLED"}`);
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (check.available) {
|
|
168
|
+
console.log(`[DEP] ✓ ${name} ${check.version} (already installed)`);
|
|
169
|
+
results[name] = { status: "ok", installed: true, path: check.path, version: check.version };
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!config.autoInstall) {
|
|
174
|
+
console.log(`[DEP] ${name}: required but not installed (autoInstall=false)`);
|
|
175
|
+
if (strict) {
|
|
176
|
+
hasErrors = true;
|
|
177
|
+
results[name] = { status: "error", error: "required but not installed" };
|
|
178
|
+
} else {
|
|
179
|
+
results[name] = { status: "warning", error: "required but not installed" };
|
|
180
|
+
}
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (dryRun) {
|
|
185
|
+
console.log(`[DEP] [DRY_RUN] Would install ${name}@${config.version}`);
|
|
186
|
+
results[name] = { status: "ok", wouldInstall: true, version: config.version };
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const result = installDependency(name, config);
|
|
191
|
+
results[name] = result;
|
|
192
|
+
if (result.status === "error") {
|
|
193
|
+
hasErrors = true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
console.log("\n[DEP] Dependency check complete");
|
|
198
|
+
|
|
199
|
+
const summary = Object.entries(results)
|
|
200
|
+
.map(([name, res]) => ` ${name}: ${res.status}${res.path ? ` (${res.path})` : ''}`)
|
|
201
|
+
.join("\n");
|
|
202
|
+
console.log(`Results:\n${summary}`);
|
|
203
|
+
|
|
204
|
+
if (hasErrors) {
|
|
205
|
+
console.error("[DEP] Some dependencies failed to install");
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
process.exit(0);
|
|
210
|
+
|
|
211
|
+
} catch (error) {
|
|
212
|
+
console.error("[DEP] Fatal error:", error.message);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
main();
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
|
|
7
|
+
// Client default directories
|
|
8
|
+
const CLIENT_DIRS = {
|
|
9
|
+
"claude-code": path.join(os.homedir(), ".claude"),
|
|
10
|
+
opencode: path.join(os.homedir(), ".config", "opencode"),
|
|
11
|
+
codex: path.join(os.homedir(), ".codex"),
|
|
12
|
+
cursor: path.join(os.homedir(), ".cursor"),
|
|
13
|
+
vscode: path.join(os.homedir(), ".vscode", "mcp"),
|
|
14
|
+
windsurf: path.join(os.homedir(), ".windsurf"),
|
|
15
|
+
openclaw: path.join(os.homedir(), ".openclaw")
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function detectClient(client) {
|
|
19
|
+
const dir = CLIENT_DIRS[client];
|
|
20
|
+
if (!dir) return false;
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
return fs.existsSync(dir);
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function main() {
|
|
30
|
+
const args = process.argv.slice(2);
|
|
31
|
+
const all = args.includes("--all");
|
|
32
|
+
const json = args.includes("--json");
|
|
33
|
+
|
|
34
|
+
const results = {};
|
|
35
|
+
|
|
36
|
+
if (all) {
|
|
37
|
+
for (const client of Object.keys(CLIENT_DIRS)) {
|
|
38
|
+
results[client] = detectClient(client);
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
const clientsToCheck = args.length > 0 ? args : Object.keys(CLIENT_DIRS);
|
|
42
|
+
for (const client of clientsToCheck) {
|
|
43
|
+
if (CLIENT_DIRS[client]) {
|
|
44
|
+
results[client] = detectClient(client);
|
|
45
|
+
} else {
|
|
46
|
+
results[client] = false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (json) {
|
|
52
|
+
console.log(JSON.stringify(results, null, 2));
|
|
53
|
+
} else {
|
|
54
|
+
console.log("\nClient Detection Results:");
|
|
55
|
+
console.log("========================\n");
|
|
56
|
+
|
|
57
|
+
const detected = Object.entries(results).filter(([_, present]) => present);
|
|
58
|
+
const notDetected = Object.entries(results).filter(([_, present]) => !present);
|
|
59
|
+
|
|
60
|
+
if (detected.length > 0) {
|
|
61
|
+
console.log("Detected clients:");
|
|
62
|
+
for (const [client] of detected) {
|
|
63
|
+
console.log(` ✓ ${client} (${CLIENT_DIRS[client]})`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (notDetected.length > 0) {
|
|
68
|
+
console.log("\nNot detected:");
|
|
69
|
+
for (const [client] of notDetected) {
|
|
70
|
+
console.log(` ✗ ${client} (expected at ${CLIENT_DIRS[client]})`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
console.log("\nSummary:", detected.length, "detected,", notDetected.length, "missing");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main();
|
|
@@ -3,49 +3,65 @@
|
|
|
3
3
|
# Squish GitHub Release Script
|
|
4
4
|
# Run after npm publish to create GitHub release
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# Auto-detect version from package.json
|
|
7
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
7
8
|
REPO="michielhdoteth/squish"
|
|
8
9
|
|
|
9
|
-
echo "
|
|
10
|
+
echo "Creating GitHub release v$VERSION..."
|
|
10
11
|
|
|
11
12
|
# Build binaries for different platforms
|
|
12
|
-
echo "
|
|
13
|
+
echo "Building binaries..."
|
|
14
|
+
|
|
15
|
+
# Create temporary directory for release assets
|
|
16
|
+
mkdir -p release-assets
|
|
17
|
+
cd release-assets
|
|
13
18
|
|
|
14
19
|
# Linux x64
|
|
15
20
|
echo "Building linux-x64..."
|
|
16
|
-
npx pkg dist/index.js --targets node18-linux-x64 --output
|
|
17
|
-
tar -czf squish-v${VERSION}-linux-x64.tar.gz
|
|
21
|
+
npx pkg ../dist/index.js --targets node18-linux-x64 --output squish-linux-x64
|
|
22
|
+
tar -czf "../squish-v${VERSION}-linux-x64.tar.gz" squish-linux-x64 ../dist/ ../plugin.json ../README.md ../LICENSE
|
|
18
23
|
|
|
19
24
|
# Linux ARM64
|
|
20
25
|
echo "Building linux-arm64..."
|
|
21
|
-
npx pkg dist/index.js --targets node18-linux-arm64 --output
|
|
22
|
-
tar -czf squish-v${VERSION}-linux-arm64.tar.gz
|
|
26
|
+
npx pkg ../dist/index.js --targets node18-linux-arm64 --output squish-linux-arm64
|
|
27
|
+
tar -czf "../squish-v${VERSION}-linux-arm64.tar.gz" squish-linux-arm64 ../dist/ ../plugin.json ../README.md ../LICENSE
|
|
23
28
|
|
|
24
29
|
# macOS ARM64 (Apple Silicon)
|
|
25
30
|
echo "Building macos-arm64..."
|
|
26
|
-
npx pkg dist/index.js --targets node18-macos-arm64 --output
|
|
27
|
-
tar -czf squish-v${VERSION}-macos-arm64.tar.gz
|
|
31
|
+
npx pkg ../dist/index.js --targets node18-macos-arm64 --output squish-macos-arm64
|
|
32
|
+
tar -czf "../squish-v${VERSION}-macos-arm64.tar.gz" squish-macos-arm64 ../dist/ ../plugin.json ../README.md ../LICENSE
|
|
28
33
|
|
|
29
34
|
# Windows x64
|
|
30
35
|
echo "Building windows-x64..."
|
|
31
|
-
npx pkg dist/index.js --targets node18-win-x64 --output
|
|
32
|
-
zip squish-v${VERSION}-windows-x64.zip
|
|
36
|
+
npx pkg ../dist/index.js --targets node18-win-x64 --output squish-windows-x64.exe
|
|
37
|
+
zip "../squish-v${VERSION}-windows-x64.zip" squish-windows-x64.exe ../dist/ ../plugin.json ../README.md ../LICENSE
|
|
38
|
+
|
|
39
|
+
cd ..
|
|
40
|
+
rm -rf release-assets
|
|
41
|
+
|
|
42
|
+
echo "Binaries created!"
|
|
33
43
|
|
|
34
|
-
|
|
44
|
+
# Check if gh CLI is available and user is authenticated
|
|
45
|
+
if ! command -v gh &> /dev/null; then
|
|
46
|
+
echo "❌ GitHub CLI (gh) not installed. Skipping release creation."
|
|
47
|
+
echo " Install gh CLI and run this script again to create GitHub release."
|
|
48
|
+
echo " Alternatively, create release manually at: https://github.com/$REPO/releases/new?tag=v$VERSION"
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
35
51
|
|
|
36
|
-
# Create GitHub release
|
|
37
|
-
echo "
|
|
52
|
+
# Create GitHub release
|
|
53
|
+
echo "Creating GitHub release..."
|
|
38
54
|
gh release create "v${VERSION}" \
|
|
39
|
-
--title "Squish v${VERSION} - Memory
|
|
40
|
-
--notes "
|
|
55
|
+
--title "Squish v${VERSION} - Universal Memory for AI Agents" \
|
|
56
|
+
--notes "## What's New in v${VERSION}
|
|
41
57
|
|
|
42
|
-
|
|
58
|
+
Squish provides universal persistent memory for AI agents with support for MCP, CLI, and HTTP API.
|
|
43
59
|
|
|
44
|
-
###
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
60
|
+
### Key Features
|
|
61
|
+
- Two-tier memory architecture (QMD search + SQLite/PostgreSQL storage)
|
|
62
|
+
- Trigger detection, contradiction resolution, and temporal facts
|
|
63
|
+
- Universal API compatible with any AI agent framework
|
|
64
|
+
- MCP server integration for Claude Code, OpenClaw, and other MCP clients
|
|
49
65
|
|
|
50
66
|
### Installation
|
|
51
67
|
\`\`\`bash
|
|
@@ -53,9 +69,9 @@ npx squish-install
|
|
|
53
69
|
\`\`\`
|
|
54
70
|
|
|
55
71
|
Or visit: https://github.com/michielhdoteth/squish" \
|
|
56
|
-
squish-v${VERSION}-linux-x64.tar.gz \
|
|
57
|
-
squish-v${VERSION}-linux-arm64.tar.gz \
|
|
58
|
-
squish-v${VERSION}-macos-arm64.tar.gz \
|
|
59
|
-
squish-v${VERSION}-windows-x64.zip
|
|
72
|
+
"squish-v${VERSION}-linux-x64.tar.gz" \
|
|
73
|
+
"squish-v${VERSION}-linux-arm64.tar.gz" \
|
|
74
|
+
"squish-v${VERSION}-macos-arm64.tar.gz" \
|
|
75
|
+
"squish-v${VERSION}-windows-x64.zip"
|
|
60
76
|
|
|
61
|
-
echo "
|
|
77
|
+
echo "Release v${VERSION} published!"
|