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.
Files changed (208) hide show
  1. package/{.env.mcp → .env.mcp.example} +23 -0
  2. package/CHANGELOG.md +102 -0
  3. package/QUICK-START.md +10 -4
  4. package/README.md +73 -4
  5. package/config/plugin-manifest.json +152 -0
  6. package/config/plugin-manifest.schema.json +244 -0
  7. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
  8. package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
  9. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
  10. package/dist/algorithms/analytics/token-estimator.js.map +1 -0
  11. package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
  12. package/dist/algorithms/detection/hash-filters.js.map +1 -0
  13. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
  14. package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
  15. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
  16. package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
  17. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
  18. package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
  19. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
  20. package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
  21. package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
  22. package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
  23. package/dist/algorithms/handlers/approve-merge.js.map +1 -0
  24. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
  25. package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
  26. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
  27. package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
  28. package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
  29. package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
  30. package/dist/algorithms/handlers/get-stats.js.map +1 -0
  31. package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
  32. package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
  33. package/dist/algorithms/handlers/list-proposals.js.map +1 -0
  34. package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
  35. package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
  36. package/dist/algorithms/handlers/preview-merge.js.map +1 -0
  37. package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
  38. package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
  39. package/dist/algorithms/handlers/reject-merge.js.map +1 -0
  40. package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
  41. package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
  42. package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
  43. package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
  44. package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
  45. package/dist/algorithms/safety/safety-checks.js +179 -0
  46. package/dist/algorithms/safety/safety-checks.js.map +1 -0
  47. package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
  48. package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
  49. package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
  50. package/dist/algorithms/utils/response-builder.d.ts +28 -0
  51. package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
  52. package/dist/algorithms/utils/response-builder.js +37 -0
  53. package/dist/algorithms/utils/response-builder.js.map +1 -0
  54. package/dist/api/web/web.d.ts.map +1 -1
  55. package/dist/api/web/web.js +0 -21
  56. package/dist/api/web/web.js.map +1 -1
  57. package/dist/commands/mcp-server.js +1 -1
  58. package/dist/config.d.ts +9 -1
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +35 -32
  61. package/dist/config.js.map +1 -1
  62. package/dist/core/associations.js +2 -2
  63. package/dist/core/associations.js.map +1 -1
  64. package/dist/core/core-memory.d.ts +5 -0
  65. package/dist/core/core-memory.d.ts.map +1 -1
  66. package/dist/core/core-memory.js +17 -5
  67. package/dist/core/core-memory.js.map +1 -1
  68. package/dist/core/embeddings.d.ts +9 -0
  69. package/dist/core/embeddings.d.ts.map +1 -1
  70. package/dist/core/embeddings.js +153 -16
  71. package/dist/core/embeddings.js.map +1 -1
  72. package/dist/core/layers/generator.d.ts +25 -0
  73. package/dist/core/layers/generator.d.ts.map +1 -0
  74. package/dist/core/layers/generator.js +76 -0
  75. package/dist/core/layers/generator.js.map +1 -0
  76. package/dist/core/mcp/tools.d.ts.map +1 -1
  77. package/dist/core/mcp/tools.js +71 -0
  78. package/dist/core/mcp/tools.js.map +1 -1
  79. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
  80. package/dist/core/memory/hybrid-retrieval.js +49 -1
  81. package/dist/core/memory/hybrid-retrieval.js.map +1 -1
  82. package/dist/core/memory/hybrid-search.d.ts.map +1 -1
  83. package/dist/core/memory/hybrid-search.js +0 -7
  84. package/dist/core/memory/hybrid-search.js.map +1 -1
  85. package/dist/core/memory/memories.d.ts.map +1 -1
  86. package/dist/core/memory/memories.js +47 -53
  87. package/dist/core/memory/memories.js.map +1 -1
  88. package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
  89. package/dist/core/memory/progressive-disclosure.js.map +1 -1
  90. package/dist/core/namespaces/index.d.ts +71 -0
  91. package/dist/core/namespaces/index.d.ts.map +1 -0
  92. package/dist/core/namespaces/index.js +296 -0
  93. package/dist/core/namespaces/index.js.map +1 -0
  94. package/dist/core/namespaces/uri-parser.d.ts +31 -0
  95. package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
  96. package/dist/core/namespaces/uri-parser.js +74 -0
  97. package/dist/core/namespaces/uri-parser.js.map +1 -0
  98. package/dist/core/observations.d.ts.map +1 -1
  99. package/dist/core/observations.js +3 -12
  100. package/dist/core/observations.js.map +1 -1
  101. package/dist/core/projects.d.ts.map +1 -1
  102. package/dist/core/projects.js +0 -12
  103. package/dist/core/projects.js.map +1 -1
  104. package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
  105. package/dist/core/scheduler/cron-scheduler.js +14 -0
  106. package/dist/core/scheduler/cron-scheduler.js.map +1 -1
  107. package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
  108. package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
  109. package/dist/core/session-hooks/self-iteration-job.js +278 -0
  110. package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
  111. package/dist/core/session-hooks/session-hooks.d.ts +18 -0
  112. package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
  113. package/dist/core/session-hooks/session-hooks.js +55 -0
  114. package/dist/core/session-hooks/session-hooks.js.map +1 -0
  115. package/dist/core/tracing/collector.d.ts +111 -0
  116. package/dist/core/tracing/collector.d.ts.map +1 -0
  117. package/dist/core/tracing/collector.js +338 -0
  118. package/dist/core/tracing/collector.js.map +1 -0
  119. package/dist/core/tracing/visualizer.d.ts +32 -0
  120. package/dist/core/tracing/visualizer.d.ts.map +1 -0
  121. package/dist/core/tracing/visualizer.js +165 -0
  122. package/dist/core/tracing/visualizer.js.map +1 -0
  123. package/dist/db/bootstrap.d.ts.map +1 -1
  124. package/dist/db/bootstrap.js +33 -6
  125. package/dist/db/bootstrap.js.map +1 -1
  126. package/dist/drizzle/schema-sqlite.d.ts +401 -0
  127. package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
  128. package/dist/drizzle/schema-sqlite.js +66 -0
  129. package/dist/drizzle/schema-sqlite.js.map +1 -1
  130. package/dist/drizzle/schema.d.ts +385 -0
  131. package/dist/drizzle/schema.d.ts.map +1 -1
  132. package/dist/drizzle/schema.js +64 -0
  133. package/dist/drizzle/schema.js.map +1 -1
  134. package/dist/index.d.ts +4 -4
  135. package/dist/index.js +101 -62
  136. package/dist/index.js.map +1 -1
  137. package/generated/mcp/manifest.json +23 -0
  138. package/generated/mcp/mcp-servers.json +25 -0
  139. package/generated/mcp/mcporter.json +34 -0
  140. package/generated/mcp/openclaw-memory-qmd.json +17 -0
  141. package/generated/mcp/runtime.json +12 -0
  142. package/package.json +68 -26
  143. package/packages/plugin-claude-code/README.md +73 -0
  144. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
  145. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
  146. package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
  147. package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
  148. package/packages/plugin-claude-code/package.json +31 -0
  149. package/packages/plugin-openclaw/README.md +70 -0
  150. package/packages/plugin-openclaw/dist/index.d.ts +49 -0
  151. package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
  152. package/packages/plugin-openclaw/dist/index.js +262 -0
  153. package/packages/plugin-openclaw/dist/index.js.map +1 -0
  154. package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
  155. package/packages/plugin-openclaw/package.json +31 -0
  156. package/packages/plugin-opencode/install.mjs +217 -0
  157. package/packages/plugin-opencode/package.json +21 -0
  158. package/scripts/build-release.sh +20 -17
  159. package/scripts/check-secrets.js +132 -0
  160. package/scripts/dependency-manager.mjs +217 -0
  161. package/scripts/detect-clients.mjs +78 -0
  162. package/scripts/github-release.sh +43 -27
  163. package/scripts/install-interactive.mjs +674 -0
  164. package/scripts/install-plugin.mjs +415 -0
  165. package/scripts/test-interactive.mjs +131 -0
  166. package/commands/managed-sync.ts +0 -69
  167. package/commands/mcp-server.ts +0 -519
  168. package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
  169. package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
  170. package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
  171. package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
  172. package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
  173. package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
  174. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
  175. package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
  176. package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
  177. package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
  178. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
  179. package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
  180. package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
  181. package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
  182. package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
  183. package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
  184. package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
  185. package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
  186. package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
  187. package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
  188. package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
  189. package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
  190. package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
  191. package/dist/algorithms/merge/safety/safety-checks.js +0 -215
  192. package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
  193. package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
  194. package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
  195. package/dist/core/embeddings/qmd-provider.d.ts +0 -65
  196. package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
  197. package/dist/core/embeddings/qmd-provider.js +0 -133
  198. package/dist/core/embeddings/qmd-provider.js.map +0 -1
  199. package/scripts/init-dirs.ts +0 -15
  200. /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
  201. /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
  202. /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
  203. /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
  204. /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
  205. /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
  206. /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
  207. /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
  208. /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
- VERSION="0.3.0"
6
+ # Auto-detect version from package.json
7
+ VERSION=$(node -p "require('./package.json').version")
7
8
  REPO="michielhdoteth/squish"
8
9
 
9
- echo "🏷️ Creating GitHub release v$VERSION..."
10
+ echo "Creating GitHub release v$VERSION..."
10
11
 
11
12
  # Build binaries for different platforms
12
- echo "🔨 Building binaries..."
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 bin/squish-linux-x64
17
- tar -czf squish-v${VERSION}-linux-x64.tar.gz bin/ dist/ plugin.json README.md LICENSE
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 bin/squish-linux-arm64
22
- tar -czf squish-v${VERSION}-linux-arm64.tar.gz bin/ dist/ plugin.json README.md LICENSE
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 bin/squish-macos-arm64
27
- tar -czf squish-v${VERSION}-macos-arm64.tar.gz bin/ dist/ plugin.json README.md LICENSE
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 bin/squish-windows-x64.exe
32
- zip squish-v${VERSION}-windows-x64.zip bin/ dist/ plugin.json README.md LICENSE
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
- echo "📦 Binaries created!"
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 (requires gh CLI)
37
- echo "🚀 Creating GitHub release..."
52
+ # Create GitHub release
53
+ echo "Creating GitHub release..."
38
54
  gh release create "v${VERSION}" \
39
- --title "Squish v${VERSION} - Memory Plugin for Claude Code" \
40
- --notes "Local-first persistent memory for Claude Code with code quality improvements and better maintainability.
55
+ --title "Squish v${VERSION} - Universal Memory for AI Agents" \
56
+ --notes "## What's New in v${VERSION}
41
57
 
42
- ## What's New in v0.3.0
58
+ Squish provides universal persistent memory for AI agents with support for MCP, CLI, and HTTP API.
43
59
 
44
- ### Code Quality Improvements
45
- - Reduced complexity in core modules (summarization, temporal-facts, requirements)
46
- - Split long files into focused submodules for better organization
47
- - Eliminated ~200+ lines of duplicated code
48
- - Created 9 shared utility modules in core/utils/
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 "🎉 Release v${VERSION} published!"
77
+ echo "Release v${VERSION} published!"