mapra 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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/dist/analyzer/blast-radius.d.ts +27 -0
  4. package/dist/analyzer/blast-radius.d.ts.map +1 -0
  5. package/dist/analyzer/blast-radius.js +58 -0
  6. package/dist/analyzer/blast-radius.js.map +1 -0
  7. package/dist/analyzer/churn.d.ts +26 -0
  8. package/dist/analyzer/churn.d.ts.map +1 -0
  9. package/dist/analyzer/churn.js +96 -0
  10. package/dist/analyzer/churn.js.map +1 -0
  11. package/dist/analyzer/co-change.d.ts +60 -0
  12. package/dist/analyzer/co-change.d.ts.map +1 -0
  13. package/dist/analyzer/co-change.js +153 -0
  14. package/dist/analyzer/co-change.js.map +1 -0
  15. package/dist/analyzer/conventions.d.ts +22 -0
  16. package/dist/analyzer/conventions.d.ts.map +1 -0
  17. package/dist/analyzer/conventions.js +81 -0
  18. package/dist/analyzer/conventions.js.map +1 -0
  19. package/dist/analyzer/git-hash.d.ts +11 -0
  20. package/dist/analyzer/git-hash.d.ts.map +1 -0
  21. package/dist/analyzer/git-hash.js +25 -0
  22. package/dist/analyzer/git-hash.js.map +1 -0
  23. package/dist/analyzer/graph-utils.d.ts +46 -0
  24. package/dist/analyzer/graph-utils.d.ts.map +1 -0
  25. package/dist/analyzer/graph-utils.js +145 -0
  26. package/dist/analyzer/graph-utils.js.map +1 -0
  27. package/dist/analyzer/index.d.ts +34 -0
  28. package/dist/analyzer/index.d.ts.map +1 -0
  29. package/dist/analyzer/index.js +63 -0
  30. package/dist/analyzer/index.js.map +1 -0
  31. package/dist/cli/hooks.d.ts +24 -0
  32. package/dist/cli/hooks.d.ts.map +1 -0
  33. package/dist/cli/hooks.js +126 -0
  34. package/dist/cli/hooks.js.map +1 -0
  35. package/dist/cli/index.d.ts +18 -0
  36. package/dist/cli/index.d.ts.map +1 -0
  37. package/dist/cli/index.js +818 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/cli/plan-parser.d.ts +20 -0
  40. package/dist/cli/plan-parser.d.ts.map +1 -0
  41. package/dist/cli/plan-parser.js +104 -0
  42. package/dist/cli/plan-parser.js.map +1 -0
  43. package/dist/cli/shim.d.ts +3 -0
  44. package/dist/cli/shim.d.ts.map +1 -0
  45. package/dist/cli/shim.js +33 -0
  46. package/dist/cli/shim.js.map +1 -0
  47. package/dist/cli/templates.d.ts +28 -0
  48. package/dist/cli/templates.d.ts.map +1 -0
  49. package/dist/cli/templates.js +91 -0
  50. package/dist/cli/templates.js.map +1 -0
  51. package/dist/encoder/encode.d.ts +17 -0
  52. package/dist/encoder/encode.d.ts.map +1 -0
  53. package/dist/encoder/encode.js +270 -0
  54. package/dist/encoder/encode.js.map +1 -0
  55. package/dist/encoder/layer-infrastructure.d.ts +17 -0
  56. package/dist/encoder/layer-infrastructure.d.ts.map +1 -0
  57. package/dist/encoder/layer-infrastructure.js +232 -0
  58. package/dist/encoder/layer-infrastructure.js.map +1 -0
  59. package/dist/encoder/layer-labels.d.ts +18 -0
  60. package/dist/encoder/layer-labels.d.ts.map +1 -0
  61. package/dist/encoder/layer-labels.js +172 -0
  62. package/dist/encoder/layer-labels.js.map +1 -0
  63. package/dist/encoder/layer-terrain.d.ts +18 -0
  64. package/dist/encoder/layer-terrain.d.ts.map +1 -0
  65. package/dist/encoder/layer-terrain.js +135 -0
  66. package/dist/encoder/layer-terrain.js.map +1 -0
  67. package/dist/encoder/layout.d.ts +53 -0
  68. package/dist/encoder/layout.d.ts.map +1 -0
  69. package/dist/encoder/layout.js +178 -0
  70. package/dist/encoder/layout.js.map +1 -0
  71. package/dist/encoder/parse-strand-header.d.ts +29 -0
  72. package/dist/encoder/parse-strand-header.d.ts.map +1 -0
  73. package/dist/encoder/parse-strand-header.js +59 -0
  74. package/dist/encoder/parse-strand-header.js.map +1 -0
  75. package/dist/encoder/spatial-text-encode.d.ts +22 -0
  76. package/dist/encoder/spatial-text-encode.d.ts.map +1 -0
  77. package/dist/encoder/spatial-text-encode.js +199 -0
  78. package/dist/encoder/spatial-text-encode.js.map +1 -0
  79. package/dist/encoder/strand-format-encode-v1.d.ts +16 -0
  80. package/dist/encoder/strand-format-encode-v1.d.ts.map +1 -0
  81. package/dist/encoder/strand-format-encode-v1.js +296 -0
  82. package/dist/encoder/strand-format-encode-v1.js.map +1 -0
  83. package/dist/encoder/strand-format-encode.d.ts +21 -0
  84. package/dist/encoder/strand-format-encode.d.ts.map +1 -0
  85. package/dist/encoder/strand-format-encode.js +562 -0
  86. package/dist/encoder/strand-format-encode.js.map +1 -0
  87. package/dist/encoder/text-encode.d.ts +13 -0
  88. package/dist/encoder/text-encode.d.ts.map +1 -0
  89. package/dist/encoder/text-encode.js +123 -0
  90. package/dist/encoder/text-encode.js.map +1 -0
  91. package/dist/query/blast-radius.d.ts +14 -0
  92. package/dist/query/blast-radius.d.ts.map +1 -0
  93. package/dist/query/blast-radius.js +81 -0
  94. package/dist/query/blast-radius.js.map +1 -0
  95. package/dist/query/cache.d.ts +29 -0
  96. package/dist/query/cache.d.ts.map +1 -0
  97. package/dist/query/cache.js +138 -0
  98. package/dist/query/cache.js.map +1 -0
  99. package/dist/query/index.d.ts +2 -0
  100. package/dist/query/index.d.ts.map +1 -0
  101. package/dist/query/index.js +46 -0
  102. package/dist/query/index.js.map +1 -0
  103. package/dist/query/resolve.d.ts +7 -0
  104. package/dist/query/resolve.d.ts.map +1 -0
  105. package/dist/query/resolve.js +24 -0
  106. package/dist/query/resolve.js.map +1 -0
  107. package/dist/query/risk-profile.d.ts +30 -0
  108. package/dist/query/risk-profile.d.ts.map +1 -0
  109. package/dist/query/risk-profile.js +94 -0
  110. package/dist/query/risk-profile.js.map +1 -0
  111. package/dist/query/test-map.d.ts +13 -0
  112. package/dist/query/test-map.d.ts.map +1 -0
  113. package/dist/query/test-map.js +43 -0
  114. package/dist/query/test-map.js.map +1 -0
  115. package/dist/scanner/index.d.ts +51 -0
  116. package/dist/scanner/index.d.ts.map +1 -0
  117. package/dist/scanner/index.js +480 -0
  118. package/dist/scanner/index.js.map +1 -0
  119. package/dist/scanner/workspace.d.ts +11 -0
  120. package/dist/scanner/workspace.d.ts.map +1 -0
  121. package/dist/scanner/workspace.js +243 -0
  122. package/dist/scanner/workspace.js.map +1 -0
  123. package/package.json +52 -0
@@ -0,0 +1,243 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ function toForwardSlash(p) {
4
+ return p.replace(/\\/g, "/");
5
+ }
6
+ export function detectWorkspaceAliases(scanRoot) {
7
+ const empty = { packages: new Map(), rootOffset: "" };
8
+ const resolvedScanRoot = path.resolve(scanRoot);
9
+ // Walk up to find monorepo root (max 5 levels, stop at fs root or .git)
10
+ let current = resolvedScanRoot;
11
+ let monorepoRoot = null;
12
+ let workspaceGlobs = null;
13
+ for (let level = 0; level < 6; level++) {
14
+ const found = readWorkspaceGlobs(current);
15
+ if (found) {
16
+ monorepoRoot = current;
17
+ workspaceGlobs = found;
18
+ break;
19
+ }
20
+ // Stop conditions (after checking current level)
21
+ if (current === path.dirname(current))
22
+ break; // filesystem root
23
+ if (fs.existsSync(path.join(current, ".git")))
24
+ break; // .git boundary
25
+ current = path.dirname(current);
26
+ }
27
+ if (!monorepoRoot || !workspaceGlobs)
28
+ return empty;
29
+ const dirs = expandWorkspaceGlobs(workspaceGlobs, monorepoRoot);
30
+ const packages = new Map();
31
+ for (const dir of dirs) {
32
+ const pkgPath = path.join(monorepoRoot, dir, "package.json");
33
+ try {
34
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
35
+ const name = pkg.name;
36
+ if (!name)
37
+ continue;
38
+ if (packages.has(name)) {
39
+ console.warn(`Duplicate workspace name '${name}' at ${packages.get(name).dir} and ${dir}, keeping first`);
40
+ continue;
41
+ }
42
+ const entryPoint = extractEntryPoint(pkg);
43
+ const ws = { dir: toForwardSlash(dir) };
44
+ if (entryPoint)
45
+ ws.entryPoint = entryPoint;
46
+ packages.set(name, ws);
47
+ }
48
+ catch (err) {
49
+ console.warn(`Skipping workspace at ${dir}: ${err instanceof Error ? err.message : err}`);
50
+ continue;
51
+ }
52
+ }
53
+ const rootOffset = monorepoRoot === resolvedScanRoot
54
+ ? ""
55
+ : toForwardSlash(path.relative(monorepoRoot, resolvedScanRoot));
56
+ if (packages.size > 0) {
57
+ console.warn(`Found monorepo root at ${monorepoRoot} with ${packages.size} workspace packages`);
58
+ }
59
+ return { packages, rootOffset };
60
+ }
61
+ // --- Internal helpers ---
62
+ function readWorkspaceGlobs(dir) {
63
+ // npm/yarn: package.json with workspaces field
64
+ const pkgPath = path.join(dir, "package.json");
65
+ if (fs.existsSync(pkgPath)) {
66
+ try {
67
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
68
+ if (Array.isArray(pkg.workspaces))
69
+ return pkg.workspaces;
70
+ if (Array.isArray(pkg.workspaces?.packages))
71
+ return pkg.workspaces.packages;
72
+ }
73
+ catch {
74
+ // malformed — try pnpm
75
+ }
76
+ }
77
+ // pnpm: pnpm-workspace.yaml
78
+ const pnpmPath = path.join(dir, "pnpm-workspace.yaml");
79
+ if (fs.existsSync(pnpmPath))
80
+ return parsePnpmWorkspace(pnpmPath);
81
+ return null;
82
+ }
83
+ function parsePnpmWorkspace(filePath) {
84
+ const lines = fs.readFileSync(filePath, "utf-8").split("\n");
85
+ const globs = [];
86
+ let inPackages = false;
87
+ for (const line of lines) {
88
+ if (/^packages\s*:/.test(line)) {
89
+ inPackages = true;
90
+ continue;
91
+ }
92
+ if (inPackages) {
93
+ if (line.trim() !== "" && !/^\s/.test(line))
94
+ break; // new top-level key
95
+ const stripped = line.replace(/#.*$/, ""); // strip inline comments
96
+ const match = stripped.match(/^\s*-\s*['"]?([^'"\s]+)['"]?\s*$/);
97
+ if (match?.[1])
98
+ globs.push(match[1]);
99
+ }
100
+ }
101
+ return globs.length > 0 ? globs : null;
102
+ }
103
+ function expandWorkspaceGlobs(globs, rootDir) {
104
+ const positive = [];
105
+ const negations = [];
106
+ for (const g of globs) {
107
+ if (g.startsWith("!"))
108
+ negations.push(g.slice(1));
109
+ else
110
+ positive.push(g);
111
+ }
112
+ let dirs = [];
113
+ for (const glob of positive) {
114
+ if (glob.includes("**")) {
115
+ const baseDir = glob.replace(/\/?\*\*.*$/, "");
116
+ const absBase = path.join(rootDir, baseDir);
117
+ if (fs.existsSync(absBase))
118
+ dirs.push(...walkForPackages(absBase, rootDir));
119
+ }
120
+ else if (glob.includes("*")) {
121
+ const parentDir = glob.replace(/\/?\*$/, "");
122
+ const absParent = path.join(rootDir, parentDir);
123
+ if (fs.existsSync(absParent)) {
124
+ for (const e of fs.readdirSync(absParent, { withFileTypes: true })) {
125
+ if (e.isDirectory()) {
126
+ dirs.push(toForwardSlash(path.relative(rootDir, path.join(absParent, e.name))));
127
+ }
128
+ }
129
+ }
130
+ }
131
+ else {
132
+ const absPath = path.join(rootDir, glob);
133
+ if (fs.existsSync(absPath) && fs.statSync(absPath).isDirectory()) {
134
+ dirs.push(toForwardSlash(glob));
135
+ }
136
+ }
137
+ }
138
+ if (negations.length > 0) {
139
+ dirs = dirs.filter((d) => !negations.some((neg) => matchGlob(d, neg)));
140
+ }
141
+ return dirs;
142
+ }
143
+ function walkForPackages(dir, rootDir) {
144
+ const results = [];
145
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
146
+ if (!e.isDirectory() || e.name === "node_modules" || e.name === ".git")
147
+ continue;
148
+ const full = path.join(dir, e.name);
149
+ if (fs.existsSync(path.join(full, "package.json"))) {
150
+ results.push(toForwardSlash(path.relative(rootDir, full)));
151
+ }
152
+ results.push(...walkForPackages(full, rootDir));
153
+ }
154
+ return results;
155
+ }
156
+ function matchGlob(value, pattern) {
157
+ const escaped = pattern
158
+ .replace(/[.+?^${}()|[\]\\]/g, "\\$&")
159
+ .replace(/\\\*\\\*/g, ".*")
160
+ .replace(/\\\*/g, "[^/]*");
161
+ return new RegExp("^" + escaped + "$").test(value);
162
+ }
163
+ function extractEntryPoint(pkg) {
164
+ if (pkg.exports && typeof pkg.exports === "object") {
165
+ const dot = pkg.exports["."];
166
+ if (dot) {
167
+ const resolved = unwrapConditionalExport(dot, 0);
168
+ if (resolved)
169
+ return resolved.replace(/^\.\//, "");
170
+ }
171
+ }
172
+ if (typeof pkg.main === "string")
173
+ return pkg.main.replace(/^\.\//, "");
174
+ return undefined;
175
+ }
176
+ function unwrapConditionalExport(value, depth) {
177
+ if (depth > 3)
178
+ return null;
179
+ if (typeof value === "string")
180
+ return value;
181
+ if (typeof value === "object" && value !== null) {
182
+ const obj = value;
183
+ for (const key of ["import", "default", "require"]) {
184
+ if (key in obj) {
185
+ const result = unwrapConditionalExport(obj[key], depth + 1);
186
+ if (result)
187
+ return result;
188
+ }
189
+ }
190
+ }
191
+ return null;
192
+ }
193
+ export function resolveWorkspaceImport(importPath, ctx, hasNode) {
194
+ // 1. Find longest matching workspace package
195
+ let matchedName = null;
196
+ let matchedPkg = null;
197
+ for (const [name, pkg] of ctx.packages) {
198
+ const isMatch = importPath === name || importPath.startsWith(name + "/");
199
+ if (isMatch && (matchedName === null || name.length > matchedName.length)) {
200
+ matchedName = name;
201
+ matchedPkg = pkg;
202
+ }
203
+ }
204
+ if (!matchedName || !matchedPkg)
205
+ return null;
206
+ // 2. Split into package name + subpath
207
+ const subpath = importPath.length > matchedName.length
208
+ ? importPath.slice(matchedName.length + 1) // skip the "/"
209
+ : null;
210
+ // 3. Resolve to file path
211
+ let resolvedPath;
212
+ if (subpath) {
213
+ resolvedPath = matchedPkg.dir + "/" + subpath;
214
+ }
215
+ else {
216
+ // Bare import
217
+ resolvedPath = matchedPkg.entryPoint
218
+ ? matchedPkg.dir + "/" + matchedPkg.entryPoint
219
+ : matchedPkg.dir + "/index";
220
+ }
221
+ // 4. Adjust for rootOffset
222
+ const adjusted = adjustForRootOffset(resolvedPath, ctx.rootOffset);
223
+ if (adjusted === null)
224
+ return null;
225
+ // 5. src/ fallback (subpath only)
226
+ if (subpath && !hasNode(adjusted)) {
227
+ const srcPath = matchedPkg.dir + "/src/" + subpath;
228
+ const srcAdjusted = adjustForRootOffset(srcPath, ctx.rootOffset);
229
+ if (srcAdjusted !== null && hasNode(srcAdjusted)) {
230
+ return srcAdjusted;
231
+ }
232
+ }
233
+ return adjusted;
234
+ }
235
+ function adjustForRootOffset(resolvedPath, rootOffset) {
236
+ if (rootOffset === "")
237
+ return resolvedPath;
238
+ const prefix = rootOffset + "/";
239
+ if (resolvedPath.startsWith(prefix))
240
+ return resolvedPath.slice(prefix.length);
241
+ return null; // outside scan root
242
+ }
243
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/scanner/workspace.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "mapra",
3
+ "version": "0.1.0",
4
+ "description": "Codebase intelligence for AI agents — stop exploring, start building",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/joellopezjl96/mapra"
8
+ },
9
+ "type": "module",
10
+ "bin": {
11
+ "mapra": "dist/cli/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsx",
16
+ "scan": "tsx src/cli/scan.ts",
17
+ "encode": "tsx src/encoder/encode.ts",
18
+ "batch": "tsx src/cli/index.ts batch",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest"
21
+ },
22
+ "files": [
23
+ "dist/",
24
+ "!dist/**/__tests__/",
25
+ "!dist/batch/",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "keywords": [
33
+ "ai",
34
+ "codebase",
35
+ "llm",
36
+ "developer-tools",
37
+ "claude",
38
+ "claude-code",
39
+ "context-window",
40
+ "static-analysis",
41
+ "blast-radius"
42
+ ],
43
+ "author": "Joel Lopez Berrum",
44
+ "license": "MIT",
45
+ "devDependencies": {
46
+ "@anthropic-ai/sdk": "^0.78.0",
47
+ "@types/node": "^25.3.2",
48
+ "tsx": "^4.21.0",
49
+ "typescript": "^5.9.3",
50
+ "vitest": "^4.0.18"
51
+ }
52
+ }