@rangerchaz/aimem 0.1.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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +380 -0
  3. package/dist/cli/commands/git.d.ts +6 -0
  4. package/dist/cli/commands/git.d.ts.map +1 -0
  5. package/dist/cli/commands/git.js +298 -0
  6. package/dist/cli/commands/git.js.map +1 -0
  7. package/dist/cli/commands/hook-session-end.d.ts +7 -0
  8. package/dist/cli/commands/hook-session-end.d.ts.map +1 -0
  9. package/dist/cli/commands/hook-session-end.js +109 -0
  10. package/dist/cli/commands/hook-session-end.js.map +1 -0
  11. package/dist/cli/commands/hook-session-start.d.ts +7 -0
  12. package/dist/cli/commands/hook-session-start.d.ts.map +1 -0
  13. package/dist/cli/commands/hook-session-start.js +116 -0
  14. package/dist/cli/commands/hook-session-start.js.map +1 -0
  15. package/dist/cli/commands/import.d.ts +14 -0
  16. package/dist/cli/commands/import.d.ts.map +1 -0
  17. package/dist/cli/commands/import.js +527 -0
  18. package/dist/cli/commands/import.js.map +1 -0
  19. package/dist/cli/commands/init.d.ts +2 -0
  20. package/dist/cli/commands/init.d.ts.map +1 -0
  21. package/dist/cli/commands/init.js +32 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/mcp-serve.d.ts +2 -0
  24. package/dist/cli/commands/mcp-serve.d.ts.map +1 -0
  25. package/dist/cli/commands/mcp-serve.js +5 -0
  26. package/dist/cli/commands/mcp-serve.js.map +1 -0
  27. package/dist/cli/commands/query.d.ts +8 -0
  28. package/dist/cli/commands/query.d.ts.map +1 -0
  29. package/dist/cli/commands/query.js +83 -0
  30. package/dist/cli/commands/query.js.map +1 -0
  31. package/dist/cli/commands/setup.d.ts +10 -0
  32. package/dist/cli/commands/setup.d.ts.map +1 -0
  33. package/dist/cli/commands/setup.js +504 -0
  34. package/dist/cli/commands/setup.js.map +1 -0
  35. package/dist/cli/commands/start.d.ts +8 -0
  36. package/dist/cli/commands/start.d.ts.map +1 -0
  37. package/dist/cli/commands/start.js +90 -0
  38. package/dist/cli/commands/start.js.map +1 -0
  39. package/dist/cli/commands/status.d.ts +2 -0
  40. package/dist/cli/commands/status.d.ts.map +1 -0
  41. package/dist/cli/commands/status.js +85 -0
  42. package/dist/cli/commands/status.js.map +1 -0
  43. package/dist/cli/commands/stop.d.ts +7 -0
  44. package/dist/cli/commands/stop.d.ts.map +1 -0
  45. package/dist/cli/commands/stop.js +46 -0
  46. package/dist/cli/commands/stop.js.map +1 -0
  47. package/dist/cli/commands/visualize.d.ts +8 -0
  48. package/dist/cli/commands/visualize.d.ts.map +1 -0
  49. package/dist/cli/commands/visualize.js +96 -0
  50. package/dist/cli/commands/visualize.js.map +1 -0
  51. package/dist/cli/index.d.ts +3 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +114 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/db/index.d.ts +55 -0
  56. package/dist/db/index.d.ts.map +1 -0
  57. package/dist/db/index.js +464 -0
  58. package/dist/db/index.js.map +1 -0
  59. package/dist/db/schema.d.ts +4 -0
  60. package/dist/db/schema.d.ts.map +1 -0
  61. package/dist/db/schema.js +200 -0
  62. package/dist/db/schema.js.map +1 -0
  63. package/dist/extractor/index.d.ts +27 -0
  64. package/dist/extractor/index.d.ts.map +1 -0
  65. package/dist/extractor/index.js +227 -0
  66. package/dist/extractor/index.js.map +1 -0
  67. package/dist/git/extractor.d.ts +30 -0
  68. package/dist/git/extractor.d.ts.map +1 -0
  69. package/dist/git/extractor.js +126 -0
  70. package/dist/git/extractor.js.map +1 -0
  71. package/dist/git/hooks.d.ts +36 -0
  72. package/dist/git/hooks.d.ts.map +1 -0
  73. package/dist/git/hooks.js +142 -0
  74. package/dist/git/hooks.js.map +1 -0
  75. package/dist/git/index.d.ts +69 -0
  76. package/dist/git/index.d.ts.map +1 -0
  77. package/dist/git/index.js +250 -0
  78. package/dist/git/index.js.map +1 -0
  79. package/dist/indexer/index.d.ts +20 -0
  80. package/dist/indexer/index.d.ts.map +1 -0
  81. package/dist/indexer/index.js +173 -0
  82. package/dist/indexer/index.js.map +1 -0
  83. package/dist/indexer/parsers/base.d.ts +19 -0
  84. package/dist/indexer/parsers/base.d.ts.map +1 -0
  85. package/dist/indexer/parsers/base.js +46 -0
  86. package/dist/indexer/parsers/base.js.map +1 -0
  87. package/dist/indexer/parsers/cpp.d.ts +3 -0
  88. package/dist/indexer/parsers/cpp.d.ts.map +1 -0
  89. package/dist/indexer/parsers/cpp.js +180 -0
  90. package/dist/indexer/parsers/cpp.js.map +1 -0
  91. package/dist/indexer/parsers/go.d.ts +3 -0
  92. package/dist/indexer/parsers/go.d.ts.map +1 -0
  93. package/dist/indexer/parsers/go.js +98 -0
  94. package/dist/indexer/parsers/go.js.map +1 -0
  95. package/dist/indexer/parsers/java.d.ts +3 -0
  96. package/dist/indexer/parsers/java.d.ts.map +1 -0
  97. package/dist/indexer/parsers/java.js +204 -0
  98. package/dist/indexer/parsers/java.js.map +1 -0
  99. package/dist/indexer/parsers/javascript.d.ts +3 -0
  100. package/dist/indexer/parsers/javascript.d.ts.map +1 -0
  101. package/dist/indexer/parsers/javascript.js +157 -0
  102. package/dist/indexer/parsers/javascript.js.map +1 -0
  103. package/dist/indexer/parsers/kotlin.d.ts +3 -0
  104. package/dist/indexer/parsers/kotlin.d.ts.map +1 -0
  105. package/dist/indexer/parsers/kotlin.js +182 -0
  106. package/dist/indexer/parsers/kotlin.js.map +1 -0
  107. package/dist/indexer/parsers/php.d.ts +3 -0
  108. package/dist/indexer/parsers/php.d.ts.map +1 -0
  109. package/dist/indexer/parsers/php.js +190 -0
  110. package/dist/indexer/parsers/php.js.map +1 -0
  111. package/dist/indexer/parsers/python.d.ts +3 -0
  112. package/dist/indexer/parsers/python.d.ts.map +1 -0
  113. package/dist/indexer/parsers/python.js +101 -0
  114. package/dist/indexer/parsers/python.js.map +1 -0
  115. package/dist/indexer/parsers/ruby.d.ts +3 -0
  116. package/dist/indexer/parsers/ruby.d.ts.map +1 -0
  117. package/dist/indexer/parsers/ruby.js +92 -0
  118. package/dist/indexer/parsers/ruby.js.map +1 -0
  119. package/dist/indexer/parsers/rust.d.ts +3 -0
  120. package/dist/indexer/parsers/rust.d.ts.map +1 -0
  121. package/dist/indexer/parsers/rust.js +190 -0
  122. package/dist/indexer/parsers/rust.js.map +1 -0
  123. package/dist/indexer/watcher-daemon.d.ts +2 -0
  124. package/dist/indexer/watcher-daemon.d.ts.map +1 -0
  125. package/dist/indexer/watcher-daemon.js +27 -0
  126. package/dist/indexer/watcher-daemon.js.map +1 -0
  127. package/dist/indexer/watcher.d.ts +7 -0
  128. package/dist/indexer/watcher.d.ts.map +1 -0
  129. package/dist/indexer/watcher.js +77 -0
  130. package/dist/indexer/watcher.js.map +1 -0
  131. package/dist/mcp/server.d.ts +2 -0
  132. package/dist/mcp/server.d.ts.map +1 -0
  133. package/dist/mcp/server.js +241 -0
  134. package/dist/mcp/server.js.map +1 -0
  135. package/dist/proxy/interceptor-mockttp.d.ts +27 -0
  136. package/dist/proxy/interceptor-mockttp.d.ts.map +1 -0
  137. package/dist/proxy/interceptor-mockttp.js +274 -0
  138. package/dist/proxy/interceptor-mockttp.js.map +1 -0
  139. package/dist/proxy/proxy-daemon.d.ts +5 -0
  140. package/dist/proxy/proxy-daemon.d.ts.map +1 -0
  141. package/dist/proxy/proxy-daemon.js +26 -0
  142. package/dist/proxy/proxy-daemon.js.map +1 -0
  143. package/dist/query/index.d.ts +32 -0
  144. package/dist/query/index.d.ts.map +1 -0
  145. package/dist/query/index.js +135 -0
  146. package/dist/query/index.js.map +1 -0
  147. package/dist/types/index.d.ts +89 -0
  148. package/dist/types/index.d.ts.map +1 -0
  149. package/dist/types/index.js +3 -0
  150. package/dist/types/index.js.map +1 -0
  151. package/dist/visualize/index.d.ts +144 -0
  152. package/dist/visualize/index.d.ts.map +1 -0
  153. package/dist/visualize/index.js +707 -0
  154. package/dist/visualize/index.js.map +1 -0
  155. package/dist/visualize/server.d.ts +7 -0
  156. package/dist/visualize/server.d.ts.map +1 -0
  157. package/dist/visualize/server.js +77 -0
  158. package/dist/visualize/server.js.map +1 -0
  159. package/dist/visualize/template.d.ts +3 -0
  160. package/dist/visualize/template.d.ts.map +1 -0
  161. package/dist/visualize/template.js +3465 -0
  162. package/dist/visualize/template.js.map +1 -0
  163. package/package.json +56 -0
@@ -0,0 +1,90 @@
1
+ import { spawn } from 'child_process';
2
+ import { existsSync, writeFileSync, readFileSync } from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import chalk from 'chalk';
6
+ import { getDataDir, ensureDataDir } from '../../db/index.js';
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ function isProcessRunning(pid) {
9
+ try {
10
+ process.kill(pid, 0);
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ function getServicePid(name) {
18
+ const pidFile = join(getDataDir(), `${name}.pid`);
19
+ if (!existsSync(pidFile))
20
+ return null;
21
+ try {
22
+ const pid = parseInt(readFileSync(pidFile, 'utf-8').trim(), 10);
23
+ return isProcessRunning(pid) ? pid : null;
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ function writePidFile(name, pid) {
30
+ const pidFile = join(getDataDir(), `${name}.pid`);
31
+ writeFileSync(pidFile, String(pid));
32
+ }
33
+ export async function startCommand(options) {
34
+ ensureDataDir();
35
+ const dataDir = getDataDir();
36
+ const startProxy = options.proxy !== false;
37
+ const startWatcher = options.watcher !== false;
38
+ const port = options.port || 8080;
39
+ console.log(chalk.bold('Starting aimem services...\n'));
40
+ // Start proxy (mockttp-based)
41
+ if (startProxy) {
42
+ const existingPid = getServicePid('proxy');
43
+ if (existingPid) {
44
+ console.log(chalk.yellow(`Proxy already running (PID ${existingPid})`));
45
+ }
46
+ else {
47
+ const interceptorPath = join(__dirname, '..', '..', 'proxy', 'interceptor-mockttp.js');
48
+ const child = spawn('node', [interceptorPath], {
49
+ detached: true,
50
+ stdio: 'ignore',
51
+ env: {
52
+ ...process.env,
53
+ AIMEM_DATA_DIR: dataDir,
54
+ AIMEM_PROXY_PORT: String(port),
55
+ },
56
+ });
57
+ if (child.pid) {
58
+ writePidFile('proxy', child.pid);
59
+ child.unref();
60
+ console.log(chalk.green(`Proxy started on port ${port} (PID ${child.pid})`));
61
+ console.log(chalk.gray(` Configure tools with: HTTPS_PROXY=http://localhost:${port}`));
62
+ const certPath = join(dataDir, 'ca-cert.pem');
63
+ console.log(chalk.gray(` CA certificate: ${certPath}`));
64
+ }
65
+ }
66
+ }
67
+ // Start watcher
68
+ if (startWatcher) {
69
+ const existingPid = getServicePid('watcher');
70
+ if (existingPid) {
71
+ console.log(chalk.yellow(`Watcher already running (PID ${existingPid})`));
72
+ }
73
+ else {
74
+ const watcherPath = join(__dirname, '..', '..', 'indexer', 'watcher-daemon.js');
75
+ const child = spawn('node', [watcherPath], {
76
+ detached: true,
77
+ stdio: 'ignore',
78
+ env: { ...process.env, AIMEM_DATA_DIR: dataDir },
79
+ });
80
+ if (child.pid) {
81
+ writePidFile('watcher', child.pid);
82
+ child.unref();
83
+ console.log(chalk.green(`Watcher started (PID ${child.pid})`));
84
+ }
85
+ }
86
+ }
87
+ console.log(chalk.gray('\nUse `aimem status` to check service status'));
88
+ console.log(chalk.gray('Use `aimem stop` to stop services'));
89
+ }
90
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function statusCommand(): void;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAwCA,wBAAgB,aAAa,IAAI,IAAI,CAqDpC"}
@@ -0,0 +1,85 @@
1
+ import chalk from 'chalk';
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { spawnSync } from 'child_process';
5
+ import { getStats, getAllProjects, getDataDir } from '../../db/index.js';
6
+ function isMitmproxyInstalled() {
7
+ try {
8
+ const result = spawnSync('mitmdump', ['--version'], {
9
+ encoding: 'utf-8',
10
+ timeout: 5000,
11
+ stdio: ['pipe', 'pipe', 'pipe']
12
+ });
13
+ return result.status === 0;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ function getServiceStatus(name) {
20
+ const pidFile = join(getDataDir(), `${name}.pid`);
21
+ if (!existsSync(pidFile)) {
22
+ return { running: false };
23
+ }
24
+ try {
25
+ const pid = parseInt(readFileSync(pidFile, 'utf-8').trim(), 10);
26
+ // Check if process is running
27
+ process.kill(pid, 0);
28
+ return { running: true, pid };
29
+ }
30
+ catch {
31
+ return { running: false };
32
+ }
33
+ }
34
+ export function statusCommand() {
35
+ const dataDir = getDataDir();
36
+ console.log(chalk.bold('aimem status\n'));
37
+ // Data directory
38
+ console.log(chalk.gray(`Data directory: ${dataDir}`));
39
+ console.log();
40
+ // Dependencies
41
+ const mitmproxyOk = isMitmproxyInstalled();
42
+ if (!mitmproxyOk) {
43
+ console.log(chalk.bold('Dependencies:'));
44
+ console.log(` mitmproxy: ${chalk.red('not installed')} ${chalk.gray('(pip install mitmproxy)')}`);
45
+ console.log();
46
+ }
47
+ // Services
48
+ console.log(chalk.bold('Services:'));
49
+ const proxy = getServiceStatus('proxy');
50
+ const watcher = getServiceStatus('watcher');
51
+ console.log(` Proxy: ${proxy.running ? chalk.green(`running (PID ${proxy.pid})`) : chalk.gray('stopped')}`);
52
+ console.log(` Watcher: ${watcher.running ? chalk.green(`running (PID ${watcher.pid})`) : chalk.gray('stopped')}`);
53
+ console.log();
54
+ // Database stats
55
+ console.log(chalk.bold('Database:'));
56
+ try {
57
+ const stats = getStats();
58
+ console.log(` Projects: ${chalk.cyan(stats.projects)}`);
59
+ console.log(` Files: ${chalk.cyan(stats.files)}`);
60
+ console.log(` Structures: ${chalk.cyan(stats.structures)}`);
61
+ console.log(` Conversations: ${chalk.cyan(stats.conversations)}`);
62
+ console.log(` Links: ${chalk.cyan(stats.links)}`);
63
+ }
64
+ catch (err) {
65
+ console.log(chalk.gray(' (no database yet)'));
66
+ }
67
+ console.log();
68
+ // Projects
69
+ console.log(chalk.bold('Projects:'));
70
+ try {
71
+ const projects = getAllProjects();
72
+ if (projects.length === 0) {
73
+ console.log(chalk.gray(' (none)'));
74
+ }
75
+ else {
76
+ for (const p of projects) {
77
+ console.log(` ${chalk.cyan(p.name)} - ${chalk.gray(p.path)}`);
78
+ }
79
+ }
80
+ }
81
+ catch {
82
+ console.log(chalk.gray(' (no database yet)'));
83
+ }
84
+ }
85
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface StopOptions {
2
+ proxy?: boolean;
3
+ watcher?: boolean;
4
+ }
5
+ export declare function stopCommand(options: StopOptions): void;
6
+ export {};
7
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAgCA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAmBtD"}
@@ -0,0 +1,46 @@
1
+ import { existsSync, readFileSync, unlinkSync } from 'fs';
2
+ import { join } from 'path';
3
+ import chalk from 'chalk';
4
+ import { getDataDir } from '../../db/index.js';
5
+ function stopService(name) {
6
+ const pidFile = join(getDataDir(), `${name}.pid`);
7
+ if (!existsSync(pidFile)) {
8
+ return false;
9
+ }
10
+ try {
11
+ const pid = parseInt(readFileSync(pidFile, 'utf-8').trim(), 10);
12
+ // Try to kill the process
13
+ try {
14
+ process.kill(pid, 'SIGTERM');
15
+ console.log(chalk.green(`Stopped ${name} (PID ${pid})`));
16
+ }
17
+ catch {
18
+ console.log(chalk.gray(`${name} was not running`));
19
+ }
20
+ // Remove PID file
21
+ unlinkSync(pidFile);
22
+ return true;
23
+ }
24
+ catch (err) {
25
+ console.log(chalk.red(`Error stopping ${name}: ${err}`));
26
+ return false;
27
+ }
28
+ }
29
+ export function stopCommand(options) {
30
+ const stopProxy = options.proxy !== false;
31
+ const stopWatcher = options.watcher !== false;
32
+ console.log(chalk.bold('Stopping aimem services...\n'));
33
+ let stopped = 0;
34
+ if (stopProxy) {
35
+ if (stopService('proxy'))
36
+ stopped++;
37
+ }
38
+ if (stopWatcher) {
39
+ if (stopService('watcher'))
40
+ stopped++;
41
+ }
42
+ if (stopped === 0) {
43
+ console.log(chalk.gray('No services were running'));
44
+ }
45
+ }
46
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhE,0BAA0B;QAC1B,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,kBAAkB;QAClB,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAExD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,WAAW,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,WAAW,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface VisualizeOptions {
2
+ output?: string;
3
+ open?: boolean;
4
+ serve?: boolean;
5
+ port?: number;
6
+ }
7
+ export declare function visualizeCommand(options: VisualizeOptions): Promise<void>;
8
+ //# sourceMappingURL=visualize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/visualize.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqF/E"}
@@ -0,0 +1,96 @@
1
+ import chalk from 'chalk';
2
+ import { writeFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { exec } from 'child_process';
5
+ import { findProjectForPath, getProjectFiles, getAllProjectStructures, getAllProjectLinks, getAllProjectExtractions, getFullConversations, } from '../../db/index.js';
6
+ import { buildVisualizationData, generateDashboard } from '../../visualize/index.js';
7
+ import { startDashboardServer } from '../../visualize/server.js';
8
+ export async function visualizeCommand(options) {
9
+ const cwd = process.cwd();
10
+ // Find project
11
+ const project = findProjectForPath(cwd);
12
+ if (!project) {
13
+ console.log(chalk.red('Error: No aimem project found for current directory.'));
14
+ console.log(chalk.gray('Run "aimem init" first to initialize a project.'));
15
+ process.exit(1);
16
+ }
17
+ console.log(chalk.bold(`Generating visualization for: ${project.name}\n`));
18
+ // Gather data
19
+ console.log(chalk.gray('Gathering data...'));
20
+ const structures = getAllProjectStructures(project.id);
21
+ const files = getProjectFiles(project.id);
22
+ const links = getAllProjectLinks(project.id);
23
+ const extractions = getAllProjectExtractions(project.id);
24
+ const conversations = getFullConversations(project.id, 1000); // Get up to 1000 conversations
25
+ console.log(chalk.gray(` ${structures.length} structures`));
26
+ console.log(chalk.gray(` ${files.length} files`));
27
+ console.log(chalk.gray(` ${links.length} links`));
28
+ console.log(chalk.gray(` ${extractions.length} extractions`));
29
+ console.log(chalk.gray(` ${conversations.length} conversations`));
30
+ console.log();
31
+ if (structures.length === 0) {
32
+ console.log(chalk.yellow('Warning: No structures found. The codebase may not be indexed yet.'));
33
+ console.log(chalk.gray('Run "aimem start" to begin indexing.'));
34
+ }
35
+ // Build visualization data
36
+ const vizData = buildVisualizationData(project, structures, files, links, extractions, conversations);
37
+ if (options.serve) {
38
+ // Serve mode
39
+ const port = options.port || 8080;
40
+ console.log(chalk.cyan(`Starting dashboard server on port ${port}...`));
41
+ try {
42
+ await startDashboardServer({
43
+ port,
44
+ getData: () => buildVisualizationData(project, getAllProjectStructures(project.id), getProjectFiles(project.id), getAllProjectLinks(project.id), getAllProjectExtractions(project.id), getFullConversations(project.id, 1000)),
45
+ });
46
+ const url = `http://localhost:${port}`;
47
+ console.log(chalk.green(`\nDashboard running at: ${chalk.bold(url)}`));
48
+ console.log(chalk.gray('Press Ctrl+C to stop\n'));
49
+ // Open in browser if requested
50
+ if (options.open) {
51
+ openBrowser(url);
52
+ }
53
+ }
54
+ catch (error) {
55
+ console.log(chalk.red(`Error starting server: ${error.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ else {
60
+ // Static file mode
61
+ const outputPath = options.output || join(cwd, 'aimem-dashboard.html');
62
+ console.log(chalk.gray('Generating HTML...'));
63
+ const html = generateDashboard(vizData);
64
+ writeFileSync(outputPath, html, 'utf-8');
65
+ console.log(chalk.green(`\nDashboard saved to: ${chalk.bold(outputPath)}`));
66
+ // Open in browser if requested
67
+ if (options.open) {
68
+ console.log(chalk.gray('Opening in browser...'));
69
+ openBrowser(outputPath);
70
+ }
71
+ else {
72
+ console.log(chalk.gray('Use --open to open in browser'));
73
+ }
74
+ }
75
+ }
76
+ function openBrowser(url) {
77
+ const platform = process.platform;
78
+ let command;
79
+ if (platform === 'darwin') {
80
+ command = `open "${url}"`;
81
+ }
82
+ else if (platform === 'win32') {
83
+ command = `start "" "${url}"`;
84
+ }
85
+ else {
86
+ // Linux and others
87
+ command = `xdg-open "${url}"`;
88
+ }
89
+ exec(command, (error) => {
90
+ if (error) {
91
+ console.log(chalk.yellow(`Could not open browser automatically.`));
92
+ console.log(chalk.gray(`Open manually: ${url}`));
93
+ }
94
+ });
95
+ }
96
+ //# sourceMappingURL=visualize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize.js","sourceRoot":"","sources":["../../../src/cli/commands/visualize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { initCommand } from './commands/init.js';
4
+ import { startCommand } from './commands/start.js';
5
+ import { stopCommand } from './commands/stop.js';
6
+ import { statusCommand } from './commands/status.js';
7
+ import { queryCommand } from './commands/query.js';
8
+ import { mcpServeCommand } from './commands/mcp-serve.js';
9
+ import { setupCommand } from './commands/setup.js';
10
+ import { importCommand } from './commands/import.js';
11
+ import { visualizeCommand } from './commands/visualize.js';
12
+ import { gitCommand } from './commands/git.js';
13
+ const program = new Command();
14
+ program
15
+ .name('aimem')
16
+ .description('Local memory system for AI coding assistants')
17
+ .version('0.1.0');
18
+ program
19
+ .command('init [path]')
20
+ .description('Initialize aimem for a codebase')
21
+ .action(initCommand);
22
+ program
23
+ .command('start')
24
+ .description('Start proxy and watcher services')
25
+ .option('--no-proxy', 'Do not start the proxy')
26
+ .option('--no-watcher', 'Do not start the file watcher')
27
+ .option('-p, --port <port>', 'Proxy port', '8080')
28
+ .action((options) => {
29
+ startCommand({
30
+ proxy: options.proxy,
31
+ watcher: options.watcher,
32
+ port: parseInt(options.port, 10),
33
+ });
34
+ });
35
+ program
36
+ .command('stop')
37
+ .description('Stop running services')
38
+ .option('--proxy', 'Only stop the proxy')
39
+ .option('--watcher', 'Only stop the watcher')
40
+ .action((options) => {
41
+ const stopProxy = options.proxy || (!options.proxy && !options.watcher);
42
+ const stopWatcher = options.watcher || (!options.proxy && !options.watcher);
43
+ stopCommand({ proxy: stopProxy, watcher: stopWatcher });
44
+ });
45
+ program
46
+ .command('status')
47
+ .description('Show status of aimem services and database')
48
+ .action(statusCommand);
49
+ program
50
+ .command('query <search>')
51
+ .description('Query structures and conversations (scoped to current project by default)')
52
+ .option('-t, --type <type>', 'Query type: all, structures, conversations', 'all')
53
+ .option('-l, --limit <limit>', 'Maximum results', '10')
54
+ .option('-g, --global', 'Search across all projects')
55
+ .action((search, options) => {
56
+ queryCommand(search, {
57
+ type: options.type,
58
+ limit: parseInt(options.limit, 10),
59
+ global: options.global,
60
+ });
61
+ });
62
+ program
63
+ .command('mcp-serve')
64
+ .description('Start MCP server for Claude Code integration')
65
+ .action(mcpServeCommand);
66
+ // Setup commands for integrating with AI coding tools
67
+ program
68
+ .command('setup [tool]')
69
+ .description('Configure aimem for an AI coding tool (e.g., claude-code, proxy, cursor, continue)')
70
+ .option('-f, --force', 'Overwrite existing configuration')
71
+ .option('-p, --port <port>', 'Proxy port (default: 8080)')
72
+ .option('-i, --install', 'Full install: add cert to system trust store and configure shell profile')
73
+ .option('-a, --autostart', 'Configure proxy to start automatically on login')
74
+ .action((tool, options) => {
75
+ setupCommand(tool, { force: options.force, port: options.port, install: options.install, autostart: options.autostart });
76
+ });
77
+ // Import old conversations from AI coding tools
78
+ program
79
+ .command('import')
80
+ .description('Import conversation history from AI coding tools (Claude, Aider, Continue.dev)')
81
+ .option('-p, --project <path>', 'Project path (defaults to cwd)')
82
+ .option('-s, --source <source>', 'Source to import: claude, aider, continue, all (default: all)')
83
+ .option('-n, --dry-run', 'Show what would be imported without making changes')
84
+ .option('-l, --limit <count>', 'Maximum extractions to import', '1000')
85
+ .option('-f, --full', 'Store complete conversation content (for long-term memory)')
86
+ .action((options) => {
87
+ importCommand({
88
+ project: options.project,
89
+ source: options.source,
90
+ dryRun: options.dryRun,
91
+ limit: parseInt(options.limit, 10),
92
+ full: options.full,
93
+ });
94
+ });
95
+ // Visualize codebase as interactive dashboard
96
+ program
97
+ .command('visualize')
98
+ .description('Generate an interactive visualization dashboard of the codebase')
99
+ .option('-o, --output <path>', 'Output file path (default: ./aimem-dashboard.html)')
100
+ .option('--open', 'Open dashboard in browser after generating')
101
+ .option('-s, --serve', 'Start a local server instead of generating a static file')
102
+ .option('-p, --port <port>', 'Server port when using --serve (default: 8080)')
103
+ .action(async (options) => {
104
+ await visualizeCommand({
105
+ output: options.output,
106
+ open: options.open,
107
+ serve: options.serve,
108
+ port: options.port ? parseInt(options.port, 10) : undefined,
109
+ });
110
+ });
111
+ // Git integration commands
112
+ program.addCommand(gitCommand);
113
+ program.parse();
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import Database from 'better-sqlite3';
2
+ import type { Project, File, Structure, Conversation, Link, Extraction, IndexStats, Commit, CommitLink } from '../types/index.js';
3
+ export declare function getDataDir(): string;
4
+ export declare function ensureDataDir(): void;
5
+ export declare function getDb(): Database.Database;
6
+ export declare function closeDb(): void;
7
+ export declare function createProject(path: string, name: string): Project;
8
+ export declare function getProject(id: number): Project | undefined;
9
+ export declare function getProjectByPath(path: string): Project | undefined;
10
+ export declare function getAllProjects(): Project[];
11
+ export declare function upsertFile(projectId: number, path: string, hash: string): File;
12
+ export declare function getFile(id: number): File | undefined;
13
+ export declare function getFileByPath(projectId: number, path: string): File | undefined;
14
+ export declare function deleteFile(id: number): void;
15
+ export declare function getProjectFiles(projectId: number): File[];
16
+ export declare function insertStructure(fileId: number, type: Structure['type'], name: string, lineStart: number, lineEnd: number, signature: string | null, rawContent: string, metadata?: Record<string, unknown>): Structure;
17
+ export declare function deleteFileStructures(fileId: number): void;
18
+ export declare function searchStructures(query: string, limit?: number, projectId?: number): Structure[];
19
+ export declare function getStructuresByName(name: string, projectId?: number): Structure[];
20
+ export declare function findProjectForPath(targetPath: string): Project | undefined;
21
+ export declare function insertConversation(rawContent: string, projectId?: number | null, model?: string | null, tool?: string | null, summary?: string | null): Conversation;
22
+ export declare function searchConversations(query: string, limit?: number, projectId?: number): Conversation[];
23
+ export declare function createLink(sourceType: Link['source_type'], sourceId: number, targetType: Link['target_type'], targetId: number, linkType: Link['link_type']): Link;
24
+ export declare function getLinksFrom(sourceType: Link['source_type'], sourceId: number): Link[];
25
+ export declare function getLinksTo(targetType: Link['target_type'], targetId: number): Link[];
26
+ export declare function insertExtraction(conversationId: number, type: Extraction['type'], content: string, metadata?: Record<string, unknown>): Extraction;
27
+ export declare function getConversationExtractions(conversationId: number): Extraction[];
28
+ export declare function getExtraction(id: number): Extraction | undefined;
29
+ export declare function searchExtractions(query: string, limit?: number, projectId?: number): Extraction[];
30
+ export declare function isDuplicateExtraction(content: string, projectId: number | null, windowSeconds?: number): boolean;
31
+ export declare function getStats(): IndexStats;
32
+ export declare function structureExists(name: string): boolean;
33
+ export declare function fileExists(path: string): boolean;
34
+ export declare function getConversationById(id: number): Conversation | undefined;
35
+ export declare function getFullConversations(projectId: number, limit?: number, offset?: number): Conversation[];
36
+ export declare function searchFullConversations(query: string, limit?: number, projectId?: number): Conversation[];
37
+ export interface StructureWithFile extends Structure {
38
+ file_path: string;
39
+ }
40
+ export declare function getAllProjectStructures(projectId: number): StructureWithFile[];
41
+ export declare function getAllProjectLinks(projectId: number): Link[];
42
+ export declare function getAllProjectExtractions(projectId: number): Extraction[];
43
+ export declare function upsertCommit(projectId: number, hash: string, shortHash: string | null, authorName: string | null, authorEmail: string | null, timestamp: string, subject: string, body: string | null, parentHashes?: string[]): Commit;
44
+ export declare function getCommitByHash(projectId: number, hash: string): Commit | undefined;
45
+ export declare function getCommitById(id: number): Commit | undefined;
46
+ export declare function searchCommits(query: string, limit?: number, projectId?: number): Commit[];
47
+ export declare function getRecentCommits(projectId: number, limit?: number): Commit[];
48
+ export declare function createCommitLink(commitId: number, targetType: CommitLink['target_type'], targetId: number, linkType: CommitLink['link_type']): CommitLink | undefined;
49
+ export declare function getCommitLinks(commitId: number): CommitLink[];
50
+ export declare function getLinksToCommit(targetType: CommitLink['target_type'], targetId: number): CommitLink[];
51
+ export declare function getCommitsForStructure(structureId: number): Commit[];
52
+ export declare function getCommitsForExtraction(extractionId: number): Commit[];
53
+ export declare function updateStructureAuthorship(structureId: number, author: string | null, authorEmail: string | null, commitHash: string | null): void;
54
+ export declare function getUncommittedExtractions(projectId: number, sinceCommitHash?: string): Extraction[];
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}