@jmylchreest/aide-plugin 0.0.16

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 (64) hide show
  1. package/bin/aide-wrapper.sh +123 -0
  2. package/dist/core/aide-client.d.ts +48 -0
  3. package/dist/core/aide-client.d.ts.map +1 -0
  4. package/dist/core/aide-client.js +166 -0
  5. package/dist/core/aide-client.js.map +1 -0
  6. package/dist/core/cleanup.d.ts +15 -0
  7. package/dist/core/cleanup.d.ts.map +1 -0
  8. package/dist/core/cleanup.js +48 -0
  9. package/dist/core/cleanup.js.map +1 -0
  10. package/dist/core/index.d.ts +17 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/index.js +17 -0
  13. package/dist/core/index.js.map +1 -0
  14. package/dist/core/mcp-sync.d.ts +99 -0
  15. package/dist/core/mcp-sync.d.ts.map +1 -0
  16. package/dist/core/mcp-sync.js +525 -0
  17. package/dist/core/mcp-sync.js.map +1 -0
  18. package/dist/core/persistence-logic.d.ts +24 -0
  19. package/dist/core/persistence-logic.d.ts.map +1 -0
  20. package/dist/core/persistence-logic.js +61 -0
  21. package/dist/core/persistence-logic.js.map +1 -0
  22. package/dist/core/pre-compact-logic.d.ts +11 -0
  23. package/dist/core/pre-compact-logic.d.ts.map +1 -0
  24. package/dist/core/pre-compact-logic.js +29 -0
  25. package/dist/core/pre-compact-logic.js.map +1 -0
  26. package/dist/core/session-init.d.ts +54 -0
  27. package/dist/core/session-init.d.ts.map +1 -0
  28. package/dist/core/session-init.js +349 -0
  29. package/dist/core/session-init.js.map +1 -0
  30. package/dist/core/session-summary-logic.d.ts +29 -0
  31. package/dist/core/session-summary-logic.d.ts.map +1 -0
  32. package/dist/core/session-summary-logic.js +167 -0
  33. package/dist/core/session-summary-logic.js.map +1 -0
  34. package/dist/core/skill-matcher.d.ts +46 -0
  35. package/dist/core/skill-matcher.d.ts.map +1 -0
  36. package/dist/core/skill-matcher.js +242 -0
  37. package/dist/core/skill-matcher.js.map +1 -0
  38. package/dist/core/tool-tracking.d.ts +20 -0
  39. package/dist/core/tool-tracking.d.ts.map +1 -0
  40. package/dist/core/tool-tracking.js +81 -0
  41. package/dist/core/tool-tracking.js.map +1 -0
  42. package/dist/core/types.d.ts +109 -0
  43. package/dist/core/types.d.ts.map +1 -0
  44. package/dist/core/types.js +31 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/lib/aide-downloader.d.ts +90 -0
  47. package/dist/lib/aide-downloader.js +471 -0
  48. package/dist/lib/aide-downloader.js.map +1 -0
  49. package/dist/lib/hook-utils.d.ts +45 -0
  50. package/dist/lib/hook-utils.js +163 -0
  51. package/dist/lib/hook-utils.js.map +1 -0
  52. package/dist/opencode/hooks.d.ts +25 -0
  53. package/dist/opencode/hooks.d.ts.map +1 -0
  54. package/dist/opencode/hooks.js +268 -0
  55. package/dist/opencode/hooks.js.map +1 -0
  56. package/dist/opencode/index.d.ts +30 -0
  57. package/dist/opencode/index.d.ts.map +1 -0
  58. package/dist/opencode/index.js +32 -0
  59. package/dist/opencode/index.js.map +1 -0
  60. package/dist/opencode/types.d.ts +129 -0
  61. package/dist/opencode/types.d.ts.map +1 -0
  62. package/dist/opencode/types.js +12 -0
  63. package/dist/opencode/types.js.map +1 -0
  64. package/package.json +55 -0
@@ -0,0 +1,471 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AIDE Binary Downloader
4
+ *
5
+ * Downloads the aide binary from GitHub releases.
6
+ *
7
+ * Usage:
8
+ * node dist/lib/aide-downloader.js --plugin # Install to plugin's bin/ (postinstall)
9
+ * node dist/lib/aide-downloader.js --cwd /path # Install to project's .aide/bin/
10
+ *
11
+ * The binary is downloaded from the release matching the plugin version.
12
+ */
13
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, renameSync, realpathSync, createWriteStream, } from "fs";
14
+ import { join, dirname } from "path";
15
+ import { execFileSync } from "child_process";
16
+ import { fileURLToPath } from "url";
17
+ import { Readable, Transform } from "stream";
18
+ import { pipeline } from "stream/promises";
19
+ // Canonical binary finder — import for local use, re-export for backward compat
20
+ import { findAideBinary } from "./hook-utils.js";
21
+ export { findAideBinary };
22
+ /**
23
+ * Get the plugin version from package.json
24
+ */
25
+ export function getPluginVersion() {
26
+ const pluginRoot = getPluginRoot();
27
+ if (!pluginRoot)
28
+ return null;
29
+ try {
30
+ const pkgPath = join(pluginRoot, "package.json");
31
+ if (existsSync(pkgPath)) {
32
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
33
+ if (pkg.version && pkg.version !== "0.0.0") {
34
+ return pkg.version;
35
+ }
36
+ }
37
+ }
38
+ catch {
39
+ // skip invalid files
40
+ }
41
+ return null;
42
+ }
43
+ /**
44
+ * Get the version of an installed aide binary
45
+ * Returns full semver including prerelease (e.g., "0.0.5-dev.21+abc1234")
46
+ */
47
+ export function getBinaryVersion(binaryPath) {
48
+ try {
49
+ const output = execFileSync(binaryPath, ["version"], {
50
+ stdio: "pipe",
51
+ timeout: 5000,
52
+ })
53
+ .toString()
54
+ .trim();
55
+ // Match full semver: 0.0.5-dev.21+abc1234 or plain 0.0.4
56
+ const match = output.match(/(\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?(?:\+[a-zA-Z0-9.]+)?)/);
57
+ return match ? match[1] : null;
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * Check if a version string is a dev/prerelease build
65
+ */
66
+ export function isDevBuild(version) {
67
+ return version.includes("-dev.");
68
+ }
69
+ /**
70
+ * Extract the base semver (major.minor.patch) from a full version string
71
+ * e.g., "0.0.5-dev.21+abc1234" → "0.0.5"
72
+ */
73
+ export function getBaseVersion(version) {
74
+ const dashIdx = version.indexOf("-");
75
+ return dashIdx === -1 ? version : version.substring(0, dashIdx);
76
+ }
77
+ /**
78
+ * Check the latest release version from GitHub API
79
+ * Returns null if check fails (network error, rate limit, etc.)
80
+ */
81
+ export async function getLatestGitHubVersion() {
82
+ try {
83
+ const controller = new AbortController();
84
+ const timeout = setTimeout(() => controller.abort(), 5000);
85
+ const response = await fetch("https://api.github.com/repos/jmylchreest/aide/releases/latest", {
86
+ headers: {
87
+ Accept: "application/vnd.github.v3+json",
88
+ "User-Agent": "aide-plugin",
89
+ },
90
+ signal: controller.signal,
91
+ });
92
+ clearTimeout(timeout);
93
+ if (!response.ok) {
94
+ return null;
95
+ }
96
+ const data = (await response.json());
97
+ // tag_name is typically "v0.0.4", strip the "v"
98
+ const tagName = data.tag_name;
99
+ if (tagName && tagName.startsWith("v")) {
100
+ return tagName.slice(1);
101
+ }
102
+ return tagName || null;
103
+ }
104
+ catch {
105
+ // Network error, timeout, etc. - don't block on this
106
+ return null;
107
+ }
108
+ }
109
+ /**
110
+ * Compare semantic versions
111
+ * Returns: -1 if a < b, 0 if a == b, 1 if a > b
112
+ */
113
+ export function compareVersions(a, b) {
114
+ const partsA = a.split(".").map(Number);
115
+ const partsB = b.split(".").map(Number);
116
+ for (let i = 0; i < 3; i++) {
117
+ const numA = partsA[i] || 0;
118
+ const numB = partsB[i] || 0;
119
+ if (numA < numB)
120
+ return -1;
121
+ if (numA > numB)
122
+ return 1;
123
+ }
124
+ return 0;
125
+ }
126
+ /**
127
+ * Get the download URL for the current platform
128
+ */
129
+ export function getDownloadUrl() {
130
+ const platform = process.platform; // 'darwin', 'linux', 'win32'
131
+ const arch = process.arch; // 'x64', 'arm64'
132
+ const goos = platform === "win32" ? "windows" : platform;
133
+ const goarch = arch === "x64" ? "amd64" : arch;
134
+ const ext = platform === "win32" ? ".exe" : "";
135
+ const binaryName = `aide-${goos}-${goarch}${ext}`;
136
+ const version = getPluginVersion();
137
+ if (version) {
138
+ return `https://github.com/jmylchreest/aide/releases/download/v${version}/${binaryName}`;
139
+ }
140
+ // Fallback to latest if version can't be determined
141
+ return `https://github.com/jmylchreest/aide/releases/latest/download/${binaryName}`;
142
+ }
143
+ /**
144
+ * Get the plugin root directory (where package.json lives)
145
+ */
146
+ export function getPluginRoot() {
147
+ // Check AIDE_PLUGIN_ROOT or CLAUDE_PLUGIN_ROOT env var
148
+ const envRoot = process.env.AIDE_PLUGIN_ROOT || process.env.CLAUDE_PLUGIN_ROOT;
149
+ if (envRoot && existsSync(join(envRoot, "package.json"))) {
150
+ return envRoot;
151
+ }
152
+ // Calculate from this script's location: dist/lib/aide-downloader.js -> ../../
153
+ try {
154
+ const scriptPath = fileURLToPath(import.meta.url);
155
+ const pluginRoot = join(dirname(scriptPath), "..", "..");
156
+ if (existsSync(join(pluginRoot, "package.json"))) {
157
+ return pluginRoot;
158
+ }
159
+ }
160
+ catch {
161
+ // import.meta.url not available
162
+ }
163
+ return null;
164
+ }
165
+ // findAideBinary is imported from hook-utils.ts and re-exported at the top.
166
+ // See hook-utils.ts for the canonical implementation.
167
+ /**
168
+ * Download aide binary
169
+ *
170
+ * @param destDir - Directory to install the binary (e.g., plugin's bin/ or project's .aide/bin/)
171
+ * @param options - Download options
172
+ */
173
+ export async function downloadAideBinary(destDir, options = {}) {
174
+ const { force = false, quiet = false, useStderr = false } = options;
175
+ // Use stderr for output when called from hooks (stdout reserved for JSON)
176
+ const log = useStderr ? console.error : console.log;
177
+ const ext = process.platform === "win32" ? ".exe" : "";
178
+ const destPath = join(destDir, `aide${ext}`);
179
+ // Check if already exists (unless force)
180
+ if (!force && existsSync(destPath)) {
181
+ // Verify it works
182
+ try {
183
+ execFileSync(destPath, ["version"], { stdio: "pipe", timeout: 5000 });
184
+ return {
185
+ success: true,
186
+ path: destPath,
187
+ message: `Using existing aide at ${destPath}`,
188
+ cached: true,
189
+ };
190
+ }
191
+ catch {
192
+ // Existing binary is broken, re-download
193
+ if (!quiet)
194
+ log("[aide] Existing binary is invalid, re-downloading...");
195
+ try {
196
+ unlinkSync(destPath);
197
+ }
198
+ catch {
199
+ // Ignore delete errors
200
+ }
201
+ }
202
+ }
203
+ const url = getDownloadUrl();
204
+ if (!quiet) {
205
+ log(`[aide] Downloading from: ${url}`);
206
+ }
207
+ try {
208
+ // Create bin directory
209
+ if (!existsSync(destDir)) {
210
+ mkdirSync(destDir, { recursive: true });
211
+ }
212
+ // Download using native fetch (follows redirects by default)
213
+ const response = await fetch(url, {
214
+ headers: { "User-Agent": "aide-plugin" },
215
+ });
216
+ if (!response.ok) {
217
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
218
+ }
219
+ if (!response.body) {
220
+ throw new Error("Response body is null");
221
+ }
222
+ const totalBytes = Number(response.headers.get("content-length") || 0);
223
+ let downloadedBytes = 0;
224
+ let lastPercent = -1;
225
+ // Stream to a temp file, then atomic rename into place.
226
+ // destPath is never opened for writing, so exec() cannot hit ETXTBSY.
227
+ const tmpPath = destPath + `.tmp.${process.pid}`;
228
+ const nodeStream = Readable.fromWeb(response.body);
229
+ const fileStream = createWriteStream(tmpPath, { mode: 0o755 });
230
+ const progress = new Transform({
231
+ transform(chunk, _encoding, callback) {
232
+ downloadedBytes += chunk.length;
233
+ if (!quiet && totalBytes > 0) {
234
+ const percent = Math.floor((downloadedBytes / totalBytes) * 100);
235
+ if (percent !== lastPercent) {
236
+ lastPercent = percent;
237
+ const mb = (downloadedBytes / 1024 / 1024).toFixed(1);
238
+ const totalMb = (totalBytes / 1024 / 1024).toFixed(1);
239
+ log(`[aide] Downloading... ${mb}/${totalMb} MB (${percent}%)`);
240
+ }
241
+ }
242
+ callback(null, chunk);
243
+ },
244
+ });
245
+ await pipeline(nodeStream, progress, fileStream);
246
+ renameSync(tmpPath, destPath);
247
+ if (!quiet) {
248
+ log(`[aide] ✓ Binary installed successfully`);
249
+ }
250
+ return {
251
+ success: true,
252
+ path: destPath,
253
+ message: `Downloaded aide to ${destPath}`,
254
+ cached: false,
255
+ };
256
+ }
257
+ catch (err) {
258
+ const errorMsg = err instanceof Error ? err.message : String(err);
259
+ if (!quiet) {
260
+ log(`[aide] ✗ Download failed: ${errorMsg}`);
261
+ }
262
+ return {
263
+ success: false,
264
+ path: null,
265
+ message: `Failed to download aide: ${errorMsg}`,
266
+ cached: false,
267
+ };
268
+ }
269
+ }
270
+ /**
271
+ * Ensure aide binary is present with version checking and auto-download
272
+ *
273
+ * This function:
274
+ * 1. Checks if binary exists
275
+ * 2. Verifies binary version matches plugin version
276
+ * 3. Auto-downloads if missing or version mismatch
277
+ * 4. Checks GitHub for newer releases (non-blocking)
278
+ * 5. Returns warnings for plugin updates
279
+ */
280
+ export async function ensureAideBinary(cwd) {
281
+ const pluginRoot = getPluginRoot();
282
+ const pluginVersion = getPluginVersion();
283
+ let downloaded = false;
284
+ let warning = null;
285
+ // Step 1: Check for existing binary
286
+ let binaryPath = findAideBinary(cwd);
287
+ let binaryVersion = binaryPath ? getBinaryVersion(binaryPath) : null;
288
+ // Step 2: Check version match
289
+ // Skip download if the binary is a dev build with base version >= plugin version
290
+ // (i.e., a locally-built binary that's ahead of the released plugin)
291
+ const isNewerDev = binaryVersion &&
292
+ pluginVersion &&
293
+ isDevBuild(binaryVersion) &&
294
+ compareVersions(getBaseVersion(binaryVersion), pluginVersion) >= 0;
295
+ const needsDownload = !binaryPath ||
296
+ (!isNewerDev &&
297
+ pluginVersion &&
298
+ binaryVersion &&
299
+ binaryVersion !== pluginVersion);
300
+ if (isNewerDev) {
301
+ console.error(`[aide] Dev build v${binaryVersion} (base ${getBaseVersion(binaryVersion)} >= plugin v${pluginVersion}), skipping download`);
302
+ }
303
+ if (needsDownload) {
304
+ // Can't download without plugin root
305
+ if (!pluginRoot) {
306
+ return {
307
+ binary: binaryPath,
308
+ error: binaryPath
309
+ ? null
310
+ : "AIDE binary not found and plugin root could not be determined for download",
311
+ warning: null,
312
+ downloaded: false,
313
+ };
314
+ }
315
+ const destDir = join(pluginRoot, "bin");
316
+ const reason = !binaryPath
317
+ ? "not found"
318
+ : `outdated (v${binaryVersion} → v${pluginVersion})`;
319
+ // Print to stderr so user sees progress (stdout is reserved for JSON hook response)
320
+ console.error(`[aide] Binary ${reason}, downloading v${pluginVersion || "latest"}...`);
321
+ // Auto-download
322
+ const result = await downloadAideBinary(destDir, {
323
+ force: true,
324
+ quiet: false,
325
+ useStderr: true,
326
+ });
327
+ if (result.success && result.path) {
328
+ binaryPath = result.path;
329
+ binaryVersion = getBinaryVersion(result.path);
330
+ downloaded = true;
331
+ }
332
+ else {
333
+ // Download failed - return error with manual instructions
334
+ const platform = process.platform === "win32" ? "windows" : process.platform;
335
+ const arch = process.arch === "x64" ? "amd64" : process.arch;
336
+ const ext = process.platform === "win32" ? ".exe" : "";
337
+ const binaryName = `aide-${platform}-${arch}${ext}`;
338
+ const errorMsg = `**AIDE Binary ${!binaryPath ? "Not Found" : "Outdated"}**
339
+
340
+ Auto-download failed: ${result.message}
341
+
342
+ **Manual fix:**
343
+ \`\`\`bash
344
+ # Download the binary
345
+ curl -fSL "https://github.com/jmylchreest/aide/releases/download/v${pluginVersion || "latest"}/${binaryName}" -o "${destDir}/aide${ext}"
346
+ chmod +x "${destDir}/aide${ext}"
347
+ \`\`\`
348
+
349
+ Or visit: https://github.com/jmylchreest/aide/releases`;
350
+ return {
351
+ binary: null,
352
+ error: errorMsg,
353
+ warning: null,
354
+ downloaded: false,
355
+ };
356
+ }
357
+ }
358
+ // Step 3: Check for newer GitHub release (non-blocking)
359
+ if (pluginVersion) {
360
+ try {
361
+ console.error(`[aide] Checking for updates...`);
362
+ const latestVersion = await getLatestGitHubVersion();
363
+ if (latestVersion && compareVersions(pluginVersion, latestVersion) < 0) {
364
+ warning = `**AIDE Update Available**
365
+
366
+ A newer version of AIDE is available: **v${latestVersion}** (you have v${pluginVersion})
367
+
368
+ \`\`\`bash
369
+ claude plugin update aide
370
+ \`\`\`
371
+
372
+ Then restart Claude Code to use the new version.`;
373
+ }
374
+ }
375
+ catch {
376
+ // Ignore - version check is best-effort
377
+ }
378
+ }
379
+ return {
380
+ binary: binaryPath,
381
+ error: null,
382
+ warning,
383
+ downloaded,
384
+ };
385
+ }
386
+ /**
387
+ * Synchronous version for simple existence check (no download, no version check)
388
+ * Use ensureAideBinary() for full functionality
389
+ */
390
+ export function findAideBinarySync(cwd) {
391
+ return findAideBinary(cwd);
392
+ }
393
+ // --- CLI Mode ---
394
+ // Run as standalone script for postinstall or manual download
395
+ async function main() {
396
+ const args = process.argv.slice(2);
397
+ let destDir = null;
398
+ let force = false;
399
+ let pluginMode = false;
400
+ for (let i = 0; i < args.length; i++) {
401
+ if (args[i] === "--plugin") {
402
+ pluginMode = true;
403
+ }
404
+ else if (args[i] === "--cwd" && args[i + 1]) {
405
+ destDir = join(args[i + 1], ".aide", "bin");
406
+ i++;
407
+ }
408
+ else if (args[i] === "--dest" && args[i + 1]) {
409
+ destDir = args[i + 1];
410
+ i++;
411
+ }
412
+ else if (args[i] === "--force") {
413
+ force = true;
414
+ }
415
+ else if (args[i] === "--help" || args[i] === "-h") {
416
+ console.log(`AIDE Binary Downloader
417
+
418
+ Usage: node aide-downloader.js [options]
419
+
420
+ Options:
421
+ --plugin Install to plugin's bin/ directory (used by postinstall)
422
+ --cwd <path> Install to <path>/.aide/bin/
423
+ --dest <path> Install to specific directory
424
+ --force Download even if binary exists
425
+ --help Show this help
426
+
427
+ Downloads the aide binary from GitHub releases.
428
+ `);
429
+ process.exit(0);
430
+ }
431
+ }
432
+ // Determine destination
433
+ if (pluginMode) {
434
+ const pluginRoot = getPluginRoot();
435
+ if (!pluginRoot) {
436
+ console.error("Error: Could not determine plugin root directory");
437
+ process.exit(1);
438
+ }
439
+ destDir = join(pluginRoot, "bin");
440
+ }
441
+ else if (!destDir) {
442
+ // Default to current directory's .aide/bin
443
+ destDir = join(process.cwd(), ".aide", "bin");
444
+ }
445
+ const result = await downloadAideBinary(destDir, { force, quiet: false });
446
+ if (result.success) {
447
+ process.exit(0);
448
+ }
449
+ else {
450
+ process.exit(1);
451
+ }
452
+ }
453
+ // Run CLI if executed directly
454
+ // Use realpath to handle symlinks (e.g., src-office -> dtkr4-cnjjf)
455
+ const isMain = (() => {
456
+ try {
457
+ const scriptPath = realpathSync(fileURLToPath(import.meta.url));
458
+ const argPath = realpathSync(process.argv[1]);
459
+ return scriptPath === argPath;
460
+ }
461
+ catch {
462
+ return false;
463
+ }
464
+ })();
465
+ if (isMain) {
466
+ main().catch((err) => {
467
+ console.error("Error:", err);
468
+ process.exit(1);
469
+ });
470
+ }
471
+ //# sourceMappingURL=aide-downloader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aide-downloader.js","sourceRoot":"","sources":["../../src/lib/aide-downloader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared utilities for Claude Code hooks
3
+ *
4
+ * This module provides common functions used across multiple hooks
5
+ * to reduce code duplication and ensure consistent behavior.
6
+ */
7
+ /**
8
+ * Read JSON input from stdin (used by all hooks)
9
+ */
10
+ export declare function readStdin(): Promise<string>;
11
+ /**
12
+ * Find the aide binary — canonical implementation.
13
+ *
14
+ * Search order:
15
+ * 1. <CLAUDE_PLUGIN_ROOT>/bin/aide (CLAUDE_PLUGIN_ROOT = project root)
16
+ * 2. PATH fallback (system-wide install)
17
+ *
18
+ * All hooks and utilities should use this single function.
19
+ */
20
+ export declare function findAideBinary(cwd?: string): string | null;
21
+ /**
22
+ * Escape a string for safe shell usage
23
+ */
24
+ export declare function shellEscape(str: string): string;
25
+ /**
26
+ * Set state in aide (global or per-agent)
27
+ */
28
+ export declare function setMemoryState(cwd: string, key: string, value: string, agentId?: string): boolean;
29
+ /**
30
+ * Get state from aide
31
+ */
32
+ export declare function getMemoryState(cwd: string, key: string, agentId?: string): string | null;
33
+ /**
34
+ * Delete a state key from aide
35
+ */
36
+ export declare function deleteMemoryState(cwd: string, key: string, agentId?: string): boolean;
37
+ /**
38
+ * Clear all state for an agent
39
+ */
40
+ export declare function clearAgentState(cwd: string, agentId: string): boolean;
41
+ /**
42
+ * Run an aide command with proper escaping
43
+ */
44
+ export declare function runAide(cwd: string, args: string[]): string | null;
45
+ //# sourceMappingURL=hook-utils.d.ts.map