stellar-memory 0.5.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 (197) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +362 -0
  3. package/dist/api/routes/analytics.d.ts +15 -0
  4. package/dist/api/routes/analytics.js +131 -0
  5. package/dist/api/routes/analytics.js.map +1 -0
  6. package/dist/api/routes/conflicts.d.ts +12 -0
  7. package/dist/api/routes/conflicts.js +67 -0
  8. package/dist/api/routes/conflicts.js.map +1 -0
  9. package/dist/api/routes/consolidation.d.ts +11 -0
  10. package/dist/api/routes/consolidation.js +63 -0
  11. package/dist/api/routes/consolidation.js.map +1 -0
  12. package/dist/api/routes/constellation.d.ts +4 -0
  13. package/dist/api/routes/constellation.js +84 -0
  14. package/dist/api/routes/constellation.js.map +1 -0
  15. package/dist/api/routes/memories.d.ts +4 -0
  16. package/dist/api/routes/memories.js +219 -0
  17. package/dist/api/routes/memories.js.map +1 -0
  18. package/dist/api/routes/observations.d.ts +10 -0
  19. package/dist/api/routes/observations.js +42 -0
  20. package/dist/api/routes/observations.js.map +1 -0
  21. package/dist/api/routes/orbit.d.ts +4 -0
  22. package/dist/api/routes/orbit.js +71 -0
  23. package/dist/api/routes/orbit.js.map +1 -0
  24. package/dist/api/routes/projects.d.ts +15 -0
  25. package/dist/api/routes/projects.js +121 -0
  26. package/dist/api/routes/projects.js.map +1 -0
  27. package/dist/api/routes/scan.d.ts +4 -0
  28. package/dist/api/routes/scan.js +403 -0
  29. package/dist/api/routes/scan.js.map +1 -0
  30. package/dist/api/routes/sun.d.ts +4 -0
  31. package/dist/api/routes/sun.js +43 -0
  32. package/dist/api/routes/sun.js.map +1 -0
  33. package/dist/api/routes/system.d.ts +4 -0
  34. package/dist/api/routes/system.js +70 -0
  35. package/dist/api/routes/system.js.map +1 -0
  36. package/dist/api/routes/temporal.d.ts +13 -0
  37. package/dist/api/routes/temporal.js +82 -0
  38. package/dist/api/routes/temporal.js.map +1 -0
  39. package/dist/api/server.d.ts +2 -0
  40. package/dist/api/server.js +99 -0
  41. package/dist/api/server.js.map +1 -0
  42. package/dist/api/websocket.d.ts +53 -0
  43. package/dist/api/websocket.js +168 -0
  44. package/dist/api/websocket.js.map +1 -0
  45. package/dist/cli/index.d.ts +12 -0
  46. package/dist/cli/index.js +35 -0
  47. package/dist/cli/index.js.map +1 -0
  48. package/dist/cli/init.d.ts +10 -0
  49. package/dist/cli/init.js +163 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/engine/analytics.d.ts +93 -0
  52. package/dist/engine/analytics.js +437 -0
  53. package/dist/engine/analytics.js.map +1 -0
  54. package/dist/engine/conflict.d.ts +54 -0
  55. package/dist/engine/conflict.js +322 -0
  56. package/dist/engine/conflict.js.map +1 -0
  57. package/dist/engine/consolidation.d.ts +83 -0
  58. package/dist/engine/consolidation.js +368 -0
  59. package/dist/engine/consolidation.js.map +1 -0
  60. package/dist/engine/constellation.d.ts +66 -0
  61. package/dist/engine/constellation.js +382 -0
  62. package/dist/engine/constellation.js.map +1 -0
  63. package/dist/engine/corona.d.ts +53 -0
  64. package/dist/engine/corona.js +181 -0
  65. package/dist/engine/corona.js.map +1 -0
  66. package/dist/engine/embedding.d.ts +44 -0
  67. package/dist/engine/embedding.js +168 -0
  68. package/dist/engine/embedding.js.map +1 -0
  69. package/dist/engine/gravity.d.ts +63 -0
  70. package/dist/engine/gravity.js +121 -0
  71. package/dist/engine/gravity.js.map +1 -0
  72. package/dist/engine/multiproject.d.ts +75 -0
  73. package/dist/engine/multiproject.js +241 -0
  74. package/dist/engine/multiproject.js.map +1 -0
  75. package/dist/engine/observation.d.ts +82 -0
  76. package/dist/engine/observation.js +357 -0
  77. package/dist/engine/observation.js.map +1 -0
  78. package/dist/engine/orbit.d.ts +91 -0
  79. package/dist/engine/orbit.js +249 -0
  80. package/dist/engine/orbit.js.map +1 -0
  81. package/dist/engine/planet.d.ts +64 -0
  82. package/dist/engine/planet.js +432 -0
  83. package/dist/engine/planet.js.map +1 -0
  84. package/dist/engine/procedural.d.ts +71 -0
  85. package/dist/engine/procedural.js +259 -0
  86. package/dist/engine/procedural.js.map +1 -0
  87. package/dist/engine/quality.d.ts +48 -0
  88. package/dist/engine/quality.js +245 -0
  89. package/dist/engine/quality.js.map +1 -0
  90. package/dist/engine/repository.d.ts +79 -0
  91. package/dist/engine/repository.js +13 -0
  92. package/dist/engine/repository.js.map +1 -0
  93. package/dist/engine/sun.d.ts +61 -0
  94. package/dist/engine/sun.js +240 -0
  95. package/dist/engine/sun.js.map +1 -0
  96. package/dist/engine/temporal.d.ts +67 -0
  97. package/dist/engine/temporal.js +283 -0
  98. package/dist/engine/temporal.js.map +1 -0
  99. package/dist/engine/types.d.ts +179 -0
  100. package/dist/engine/types.js +27 -0
  101. package/dist/engine/types.js.map +1 -0
  102. package/dist/index.d.ts +2 -0
  103. package/dist/index.js +60 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/mcp/connector-registry.d.ts +20 -0
  106. package/dist/mcp/connector-registry.js +35 -0
  107. package/dist/mcp/connector-registry.js.map +1 -0
  108. package/dist/mcp/server.d.ts +13 -0
  109. package/dist/mcp/server.js +242 -0
  110. package/dist/mcp/server.js.map +1 -0
  111. package/dist/mcp/tools/daemon-tool.d.ts +16 -0
  112. package/dist/mcp/tools/daemon-tool.js +58 -0
  113. package/dist/mcp/tools/daemon-tool.js.map +1 -0
  114. package/dist/mcp/tools/ingestion-tools.d.ts +20 -0
  115. package/dist/mcp/tools/ingestion-tools.js +34 -0
  116. package/dist/mcp/tools/ingestion-tools.js.map +1 -0
  117. package/dist/mcp/tools/memory-tools.d.ts +122 -0
  118. package/dist/mcp/tools/memory-tools.js +1037 -0
  119. package/dist/mcp/tools/memory-tools.js.map +1 -0
  120. package/dist/scanner/cloud/github.d.ts +34 -0
  121. package/dist/scanner/cloud/github.js +260 -0
  122. package/dist/scanner/cloud/github.js.map +1 -0
  123. package/dist/scanner/cloud/google-drive.d.ts +30 -0
  124. package/dist/scanner/cloud/google-drive.js +289 -0
  125. package/dist/scanner/cloud/google-drive.js.map +1 -0
  126. package/dist/scanner/cloud/notion.d.ts +33 -0
  127. package/dist/scanner/cloud/notion.js +231 -0
  128. package/dist/scanner/cloud/notion.js.map +1 -0
  129. package/dist/scanner/cloud/slack.d.ts +38 -0
  130. package/dist/scanner/cloud/slack.js +282 -0
  131. package/dist/scanner/cloud/slack.js.map +1 -0
  132. package/dist/scanner/cloud/types.d.ts +73 -0
  133. package/dist/scanner/cloud/types.js +9 -0
  134. package/dist/scanner/cloud/types.js.map +1 -0
  135. package/dist/scanner/index.d.ts +35 -0
  136. package/dist/scanner/index.js +420 -0
  137. package/dist/scanner/index.js.map +1 -0
  138. package/dist/scanner/local/filesystem.d.ts +33 -0
  139. package/dist/scanner/local/filesystem.js +203 -0
  140. package/dist/scanner/local/filesystem.js.map +1 -0
  141. package/dist/scanner/local/git.d.ts +24 -0
  142. package/dist/scanner/local/git.js +161 -0
  143. package/dist/scanner/local/git.js.map +1 -0
  144. package/dist/scanner/local/parsers/code.d.ts +3 -0
  145. package/dist/scanner/local/parsers/code.js +127 -0
  146. package/dist/scanner/local/parsers/code.js.map +1 -0
  147. package/dist/scanner/local/parsers/index.d.ts +11 -0
  148. package/dist/scanner/local/parsers/index.js +24 -0
  149. package/dist/scanner/local/parsers/index.js.map +1 -0
  150. package/dist/scanner/local/parsers/json-parser.d.ts +3 -0
  151. package/dist/scanner/local/parsers/json-parser.js +117 -0
  152. package/dist/scanner/local/parsers/json-parser.js.map +1 -0
  153. package/dist/scanner/local/parsers/markdown.d.ts +3 -0
  154. package/dist/scanner/local/parsers/markdown.js +120 -0
  155. package/dist/scanner/local/parsers/markdown.js.map +1 -0
  156. package/dist/scanner/local/parsers/text.d.ts +3 -0
  157. package/dist/scanner/local/parsers/text.js +41 -0
  158. package/dist/scanner/local/parsers/text.js.map +1 -0
  159. package/dist/scanner/metadata-scanner.d.ts +67 -0
  160. package/dist/scanner/metadata-scanner.js +356 -0
  161. package/dist/scanner/metadata-scanner.js.map +1 -0
  162. package/dist/scanner/types.d.ts +47 -0
  163. package/dist/scanner/types.js +19 -0
  164. package/dist/scanner/types.js.map +1 -0
  165. package/dist/service/daemon.d.ts +23 -0
  166. package/dist/service/daemon.js +105 -0
  167. package/dist/service/daemon.js.map +1 -0
  168. package/dist/service/scheduler.d.ts +73 -0
  169. package/dist/service/scheduler.js +281 -0
  170. package/dist/service/scheduler.js.map +1 -0
  171. package/dist/storage/database.d.ts +10 -0
  172. package/dist/storage/database.js +265 -0
  173. package/dist/storage/database.js.map +1 -0
  174. package/dist/storage/queries.d.ts +85 -0
  175. package/dist/storage/queries.js +865 -0
  176. package/dist/storage/queries.js.map +1 -0
  177. package/dist/storage/sqlite-repository.d.ts +32 -0
  178. package/dist/storage/sqlite-repository.js +68 -0
  179. package/dist/storage/sqlite-repository.js.map +1 -0
  180. package/dist/storage/vec.d.ts +62 -0
  181. package/dist/storage/vec.js +111 -0
  182. package/dist/storage/vec.js.map +1 -0
  183. package/dist/utils/config.d.ts +5 -0
  184. package/dist/utils/config.js +60 -0
  185. package/dist/utils/config.js.map +1 -0
  186. package/dist/utils/logger.d.ts +36 -0
  187. package/dist/utils/logger.js +86 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/time.d.ts +21 -0
  190. package/dist/utils/time.js +42 -0
  191. package/dist/utils/time.js.map +1 -0
  192. package/dist/utils/tokenizer.d.ts +13 -0
  193. package/dist/utils/tokenizer.js +46 -0
  194. package/dist/utils/tokenizer.js.map +1 -0
  195. package/package.json +77 -0
  196. package/scripts/check-node.mjs +36 -0
  197. package/scripts/setup.mjs +157 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../src/scanner/local/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ParsedContent } from '../types.js';
2
+ export interface GitCommit {
3
+ hash: string;
4
+ shortHash: string;
5
+ author: string;
6
+ date: string;
7
+ message: string;
8
+ body: string;
9
+ changedFiles: string[];
10
+ }
11
+ /**
12
+ * Extract recent git commits from a repository at `repoPath`.
13
+ * `limit` caps the number of commits to avoid huge imports.
14
+ */
15
+ export declare function getRecentCommits(repoPath: string, limit?: number): GitCommit[];
16
+ /**
17
+ * Convert a single GitCommit into ParsedContent suitable for memory insertion.
18
+ */
19
+ export declare function commitToMemory(commit: GitCommit, repoPath: string): ParsedContent;
20
+ /**
21
+ * Convenience: pull recent commits from `repoPath` and convert them all.
22
+ */
23
+ export declare function scanGitHistory(repoPath: string, limit?: number): ParsedContent[];
24
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1,161 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ // ---------------------------------------------------------------------------
5
+ // Helpers
6
+ // ---------------------------------------------------------------------------
7
+ function isGitRepo(dirPath) {
8
+ return existsSync(join(dirPath, '.git'));
9
+ }
10
+ function safeExec(cmd, cwd) {
11
+ try {
12
+ return execSync(cmd, { cwd, encoding: 'utf8', timeout: 10_000, stdio: ['pipe', 'pipe', 'pipe'] });
13
+ }
14
+ catch {
15
+ return '';
16
+ }
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Git log parsing
20
+ // ---------------------------------------------------------------------------
21
+ const GIT_SEP = '|GIT_SEP|';
22
+ /**
23
+ * Parse `git log` output using a custom separator format.
24
+ * Format per commit: hash|shortHash|author|date|subject
25
+ */
26
+ function parseGitLog(raw) {
27
+ return raw
28
+ .split('\n')
29
+ .filter((l) => l.trim())
30
+ .map((line) => {
31
+ const parts = line.split(GIT_SEP);
32
+ if (parts.length < 5)
33
+ return null;
34
+ const [hash, shortHash, author, date, ...msgParts] = parts;
35
+ return {
36
+ hash: (hash ?? '').trim(),
37
+ shortHash: (shortHash ?? '').trim(),
38
+ author: (author ?? '').trim(),
39
+ date: (date ?? '').trim(),
40
+ message: msgParts.join(GIT_SEP).trim(),
41
+ };
42
+ })
43
+ .filter((c) => c !== null && c.hash.length > 0);
44
+ }
45
+ /**
46
+ * Fetch the list of files changed in a specific commit.
47
+ */
48
+ function getChangedFiles(cwd, hash) {
49
+ const raw = safeExec(`git diff-tree --no-commit-id -r --name-only ${hash}`, cwd);
50
+ return raw
51
+ .split('\n')
52
+ .map((l) => l.trim())
53
+ .filter(Boolean);
54
+ }
55
+ // ---------------------------------------------------------------------------
56
+ // Public API
57
+ // ---------------------------------------------------------------------------
58
+ /**
59
+ * Extract recent git commits from a repository at `repoPath`.
60
+ * `limit` caps the number of commits to avoid huge imports.
61
+ */
62
+ export function getRecentCommits(repoPath, limit = 50) {
63
+ if (!isGitRepo(repoPath))
64
+ return [];
65
+ const format = `--pretty=format:%H${GIT_SEP}%h${GIT_SEP}%an${GIT_SEP}%aI${GIT_SEP}%s`;
66
+ const raw = safeExec(`git log ${format} -n ${limit}`, repoPath);
67
+ if (!raw.trim())
68
+ return [];
69
+ const parsed = parseGitLog(raw);
70
+ return parsed.map((c) => {
71
+ const changedFiles = getChangedFiles(repoPath, c.hash);
72
+ const bodyRaw = safeExec(`git show -s --format=%b ${c.hash}`, repoPath).trim();
73
+ return {
74
+ ...c,
75
+ body: bodyRaw ? `${c.message}\n\n${bodyRaw}` : c.message,
76
+ changedFiles,
77
+ };
78
+ });
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Convert commits → ParsedContent
82
+ // ---------------------------------------------------------------------------
83
+ /**
84
+ * Infer memory type from commit message keywords.
85
+ * Conventional Commits conventions: feat, fix, chore, refactor, docs, test, etc.
86
+ */
87
+ function inferCommitType(message) {
88
+ const lower = message.toLowerCase();
89
+ // BREAKING CHANGE takes priority (feat!: is a breaking change → decision)
90
+ if (lower.includes('breaking') || /\w+!:/.test(lower))
91
+ return 'decision';
92
+ if (/^feat[(!:]/.test(lower) || lower.includes('add') || lower.includes('implement'))
93
+ return 'milestone';
94
+ if (/^fix[(!:]/.test(lower) || lower.includes('bug') || lower.includes('error'))
95
+ return 'error';
96
+ if (/^(refactor|chore|build|ci)[(!:]/.test(lower))
97
+ return 'decision';
98
+ if (/^(docs|test)[(!:]/.test(lower))
99
+ return 'observation';
100
+ return 'milestone';
101
+ }
102
+ /**
103
+ * Build tags from commit author, date (year-month), and changed paths.
104
+ */
105
+ function buildCommitTags(commit) {
106
+ const tags = ['git', 'commit'];
107
+ // Author name → sanitised tag
108
+ const authorTag = commit.author.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
109
+ if (authorTag)
110
+ tags.push(authorTag);
111
+ // Top-level directories from changed files
112
+ const dirs = new Set();
113
+ for (const f of commit.changedFiles.slice(0, 20)) {
114
+ const seg = f.split('/')[0];
115
+ if (seg && !seg.includes('.'))
116
+ dirs.add(seg.toLowerCase());
117
+ }
118
+ for (const d of dirs)
119
+ tags.push(d);
120
+ return [...new Set(tags)];
121
+ }
122
+ /**
123
+ * Convert a single GitCommit into ParsedContent suitable for memory insertion.
124
+ */
125
+ export function commitToMemory(commit, repoPath) {
126
+ const type = inferCommitType(commit.message);
127
+ const tags = buildCommitTags(commit);
128
+ const filesLine = commit.changedFiles.length > 0
129
+ ? `\nChanged files (${commit.changedFiles.length}): ${commit.changedFiles.slice(0, 10).join(', ')}${commit.changedFiles.length > 10 ? ', ...' : ''}`
130
+ : '';
131
+ const content = [
132
+ `Commit: ${commit.shortHash} — ${commit.message}`,
133
+ `Author: ${commit.author} | Date: ${commit.date}`,
134
+ filesLine,
135
+ commit.body !== commit.message ? `\n${commit.body}` : '',
136
+ `\nRepository: ${repoPath}`,
137
+ ].filter(Boolean).join('\n');
138
+ return {
139
+ title: `[git] ${commit.message.slice(0, 80)}`,
140
+ summary: commit.message.slice(0, 160),
141
+ content,
142
+ type,
143
+ tags,
144
+ metadata: {
145
+ gitHash: commit.hash,
146
+ shortHash: commit.shortHash,
147
+ author: commit.author,
148
+ date: commit.date,
149
+ changedFiles: commit.changedFiles,
150
+ repoPath,
151
+ },
152
+ };
153
+ }
154
+ /**
155
+ * Convenience: pull recent commits from `repoPath` and convert them all.
156
+ */
157
+ export function scanGitHistory(repoPath, limit = 50) {
158
+ const commits = getRecentCommits(repoPath, limit);
159
+ return commits.map((c) => commitToMemory(c, repoPath));
160
+ }
161
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/scanner/local/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FileParser } from '../../types.js';
2
+ export declare const codeParser: FileParser;
3
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1,127 @@
1
+ import { basename, extname } from 'node:path';
2
+ const LANGUAGE_BY_EXT = {
3
+ '.ts': 'typescript', '.tsx': 'typescript',
4
+ '.js': 'javascript', '.jsx': 'javascript', '.mjs': 'javascript', '.cjs': 'javascript',
5
+ '.py': 'python',
6
+ '.java': 'java',
7
+ '.go': 'go',
8
+ '.rs': 'rust',
9
+ '.c': 'c', '.h': 'c',
10
+ '.cpp': 'cpp',
11
+ '.sh': 'shell', '.bash': 'shell', '.zsh': 'shell',
12
+ };
13
+ /** Extract top-level function / class / def names (best-effort regex, not a full AST parse). */
14
+ function extractSymbols(content, ext) {
15
+ const patterns = [];
16
+ if (['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'].includes(ext)) {
17
+ patterns.push(/(?:export\s+)?(?:async\s+)?function\s+(\w+)/g, /(?:export\s+)?class\s+(\w+)/g, /(?:export\s+)?const\s+(\w+)\s*=\s*(?:async\s+)?\(/g, /(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/g);
18
+ }
19
+ else if (ext === '.py') {
20
+ patterns.push(/^(?:async\s+)?def\s+(\w+)/gm, /^class\s+(\w+)/gm);
21
+ }
22
+ else if (ext === '.java') {
23
+ patterns.push(/(?:public|private|protected)?\s+(?:static\s+)?(?:\w+\s+)+(\w+)\s*\(/g, /class\s+(\w+)/g);
24
+ }
25
+ else if (ext === '.go') {
26
+ patterns.push(/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/gm);
27
+ }
28
+ else if (ext === '.rs') {
29
+ patterns.push(/^(?:pub\s+)?fn\s+(\w+)/gm, /^(?:pub\s+)?struct\s+(\w+)/gm);
30
+ }
31
+ const symbols = [];
32
+ for (const re of patterns) {
33
+ let m;
34
+ while ((m = re.exec(content)) !== null) {
35
+ if (m[1] && !symbols.includes(m[1]))
36
+ symbols.push(m[1]);
37
+ if (symbols.length >= 20)
38
+ break;
39
+ }
40
+ }
41
+ return symbols;
42
+ }
43
+ /** Extract block comments and JSDoc / docstrings. */
44
+ function extractComments(content, ext) {
45
+ const comments = [];
46
+ const BLOCK = /\/\*\*([\s\S]*?)\*\//g;
47
+ const LINE = /^\/\/\s*(.+)$/gm;
48
+ const HASH = /^#\s*(.+)$/gm;
49
+ const DOCSTR = /"""([\s\S]*?)"""/g;
50
+ if (['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.java', '.c', '.cpp', '.h', '.go', '.rs'].includes(ext)) {
51
+ let m;
52
+ while ((m = BLOCK.exec(content)) !== null) {
53
+ const text = m[1].replace(/\*\s?/g, '').trim();
54
+ if (text && text.length > 5)
55
+ comments.push(text.slice(0, 200));
56
+ if (comments.length >= 5)
57
+ break;
58
+ }
59
+ while ((m = LINE.exec(content)) !== null && comments.length < 5) {
60
+ if (m[1].trim().length > 5)
61
+ comments.push(m[1].trim());
62
+ }
63
+ }
64
+ else if (['.py', '.sh', '.bash', '.zsh'].includes(ext)) {
65
+ let m;
66
+ while ((m = DOCSTR.exec(content)) !== null) {
67
+ const text = m[1].trim();
68
+ if (text)
69
+ comments.push(text.slice(0, 200));
70
+ if (comments.length >= 5)
71
+ break;
72
+ }
73
+ while ((m = HASH.exec(content)) !== null && comments.length < 5) {
74
+ if (m[1].trim().length > 5)
75
+ comments.push(m[1].trim());
76
+ }
77
+ }
78
+ return comments;
79
+ }
80
+ function inferType(filePath) {
81
+ const lower = filePath.toLowerCase();
82
+ if (lower.includes('test') || lower.includes('spec'))
83
+ return 'observation';
84
+ if (lower.includes('migration') || lower.includes('schema'))
85
+ return 'decision';
86
+ return 'context';
87
+ }
88
+ function buildTags(filePath, ext, language, symbols) {
89
+ const tags = ['code', language];
90
+ const parts = filePath.replace(/\\/g, '/').split('/');
91
+ const interesting = parts.slice(-4, -1);
92
+ for (const part of interesting) {
93
+ if (part && part !== '.' && !part.includes(':'))
94
+ tags.push(part.toLowerCase());
95
+ }
96
+ // Add first few symbols as tags for searchability
97
+ for (const sym of symbols.slice(0, 3))
98
+ tags.push(sym);
99
+ return [...new Set(tags)];
100
+ }
101
+ export const codeParser = {
102
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.py', '.java', '.go', '.rs', '.c', '.cpp', '.h', '.sh', '.bash', '.zsh'],
103
+ parse(filePath, content) {
104
+ const ext = extname(filePath).toLowerCase();
105
+ const language = LANGUAGE_BY_EXT[ext] ?? 'code';
106
+ const title = basename(filePath, ext);
107
+ const symbols = extractSymbols(content, ext);
108
+ const comments = extractComments(content, ext);
109
+ const symbolSummary = symbols.length > 0 ? `Defines: ${symbols.slice(0, 5).join(', ')}` : '';
110
+ const commentSummary = comments.length > 0 ? comments[0].slice(0, 120) : '';
111
+ const summary = (commentSummary || symbolSummary || `${language} file: ${title}`).slice(0, 160);
112
+ return {
113
+ title,
114
+ summary,
115
+ content,
116
+ type: inferType(filePath),
117
+ tags: buildTags(filePath, ext, language, symbols),
118
+ metadata: {
119
+ filePath,
120
+ language,
121
+ symbols,
122
+ lineCount: content.split('\n').length,
123
+ },
124
+ };
125
+ },
126
+ };
127
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../../../src/scanner/local/parsers/code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FileParser } from '../../types.js';
2
+ import { markdownParser } from './markdown.js';
3
+ import { textParser } from './text.js';
4
+ import { codeParser } from './code.js';
5
+ import { jsonParser } from './json-parser.js';
6
+ /** Return the parser registered for `ext` (e.g. ".md"), or null if unsupported. */
7
+ export declare function getParser(ext: string): FileParser | null;
8
+ /** All supported extensions (with leading dot). */
9
+ export declare function supportedExtensions(): string[];
10
+ export { markdownParser, textParser, codeParser, jsonParser };
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { markdownParser } from './markdown.js';
2
+ import { textParser } from './text.js';
3
+ import { codeParser } from './code.js';
4
+ import { jsonParser } from './json-parser.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Parser registry — maps lowercase file extension to the responsible parser
7
+ // ---------------------------------------------------------------------------
8
+ const _parsers = [markdownParser, textParser, codeParser, jsonParser];
9
+ const _registry = new Map();
10
+ for (const parser of _parsers) {
11
+ for (const ext of parser.extensions) {
12
+ _registry.set(ext.toLowerCase(), parser);
13
+ }
14
+ }
15
+ /** Return the parser registered for `ext` (e.g. ".md"), or null if unsupported. */
16
+ export function getParser(ext) {
17
+ return _registry.get(ext.toLowerCase()) ?? null;
18
+ }
19
+ /** All supported extensions (with leading dot). */
20
+ export function supportedExtensions() {
21
+ return [..._registry.keys()];
22
+ }
23
+ export { markdownParser, textParser, codeParser, jsonParser };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scanner/local/parsers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAU,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAU,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAU,kBAAkB,CAAC;AAElD,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,MAAM,QAAQ,GAAiB,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEpF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;AAChD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FileParser } from '../../types.js';
2
+ export declare const jsonParser: FileParser;
3
+ //# sourceMappingURL=json-parser.d.ts.map
@@ -0,0 +1,117 @@
1
+ import { basename, extname } from 'node:path';
2
+ /** Special handling for package.json — extract rich project metadata. */
3
+ function parsePackageJson(pkg, filePath) {
4
+ const name = pkg.name ?? basename(filePath, '.json');
5
+ const deps = Object.keys(pkg.dependencies ?? {});
6
+ const devDeps = Object.keys(pkg.devDependencies ?? {});
7
+ const scripts = Object.keys(pkg.scripts ?? {});
8
+ const summary = pkg.description
9
+ ? `${name}: ${pkg.description}`.slice(0, 160)
10
+ : `package.json for ${name}`;
11
+ const content = [
12
+ `Package: ${name} v${pkg.version ?? 'unknown'}`,
13
+ pkg.description ? `Description: ${pkg.description}` : '',
14
+ deps.length > 0 ? `Dependencies: ${deps.slice(0, 10).join(', ')}` : '',
15
+ devDeps.length > 0 ? `DevDependencies: ${devDeps.slice(0, 10).join(', ')}` : '',
16
+ scripts.length > 0 ? `Scripts: ${scripts.join(', ')}` : '',
17
+ ].filter(Boolean).join('\n');
18
+ const tags = ['package.json', 'project-meta', ...(pkg.keywords ?? []).slice(0, 5)];
19
+ return {
20
+ title: `${name} package.json`,
21
+ summary,
22
+ content,
23
+ type: 'context',
24
+ tags,
25
+ metadata: { filePath, name, version: pkg.version, depCount: deps.length + devDeps.length },
26
+ };
27
+ }
28
+ function inferType(filePath) {
29
+ const lower = filePath.toLowerCase();
30
+ if (lower.includes('package.json'))
31
+ return 'context';
32
+ if (lower.includes('config'))
33
+ return 'context';
34
+ if (lower.includes('schema'))
35
+ return 'decision';
36
+ return 'observation';
37
+ }
38
+ function buildTags(filePath, ext) {
39
+ const tags = [ext === '.jsonl' ? 'jsonl' : 'json'];
40
+ const parts = filePath.replace(/\\/g, '/').split('/');
41
+ const interesting = parts.slice(-4, -1);
42
+ for (const part of interesting) {
43
+ if (part && part !== '.' && !part.includes(':'))
44
+ tags.push(part.toLowerCase());
45
+ }
46
+ const name = basename(filePath, ext);
47
+ tags.push(name.toLowerCase());
48
+ return [...new Set(tags)];
49
+ }
50
+ /** Summarise first line of JSONL (newline-delimited JSON). */
51
+ function summariseJsonl(content, filePath) {
52
+ const title = basename(filePath, '.jsonl');
53
+ const lines = content.split('\n').filter((l) => l.trim());
54
+ const sample = lines[0] ?? '';
55
+ let parsedSample;
56
+ try {
57
+ parsedSample = JSON.parse(sample);
58
+ }
59
+ catch {
60
+ parsedSample = null;
61
+ }
62
+ const summary = `JSONL file with ${lines.length} record${lines.length === 1 ? '' : 's'}`;
63
+ return {
64
+ title,
65
+ summary,
66
+ content: content.slice(0, 2000),
67
+ type: 'observation',
68
+ tags: buildTags(filePath, '.jsonl'),
69
+ metadata: { filePath, lineCount: lines.length, sampleKeys: parsedSample && typeof parsedSample === 'object' ? Object.keys(parsedSample) : [] },
70
+ };
71
+ }
72
+ export const jsonParser = {
73
+ extensions: ['.json', '.jsonl'],
74
+ parse(filePath, content) {
75
+ const ext = extname(filePath).toLowerCase();
76
+ if (ext === '.jsonl')
77
+ return summariseJsonl(content, filePath);
78
+ let parsed;
79
+ try {
80
+ parsed = JSON.parse(content);
81
+ }
82
+ catch {
83
+ // Malformed JSON — treat as plain text observation
84
+ const title = basename(filePath, ext);
85
+ return {
86
+ title,
87
+ summary: `Malformed JSON file: ${title}`,
88
+ content: content.slice(0, 2000),
89
+ type: 'observation',
90
+ tags: buildTags(filePath, ext),
91
+ metadata: { filePath, parseError: true },
92
+ };
93
+ }
94
+ // Special case: package.json
95
+ if (basename(filePath) === 'package.json' && parsed && typeof parsed === 'object') {
96
+ return parsePackageJson(parsed, filePath);
97
+ }
98
+ const title = basename(filePath, ext);
99
+ const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
100
+ ? Object.keys(parsed)
101
+ : [];
102
+ const summary = keys.length > 0
103
+ ? `JSON object with keys: ${keys.slice(0, 8).join(', ')}`
104
+ : Array.isArray(parsed)
105
+ ? `JSON array with ${parsed.length} items`
106
+ : `JSON value in ${title}`;
107
+ return {
108
+ title,
109
+ summary,
110
+ content: content.slice(0, 4000),
111
+ type: inferType(filePath),
112
+ tags: buildTags(filePath, ext),
113
+ metadata: { filePath, topLevelKeys: keys },
114
+ };
115
+ },
116
+ };
117
+ //# sourceMappingURL=json-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parser.js","sourceRoot":"","sources":["../../../../src/scanner/local/parsers/json-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FileParser } from '../../types.js';
2
+ export declare const markdownParser: FileParser;
3
+ //# sourceMappingURL=markdown.d.ts.map