@swarmdo/cli 1.10.0 → 1.12.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.
- package/README.md +4 -3
- package/dist/src/codegraph/codegraph.d.ts +34 -0
- package/dist/src/codegraph/codegraph.d.ts.map +1 -1
- package/dist/src/codegraph/codegraph.js +98 -2
- package/dist/src/codegraph/codegraph.js.map +1 -1
- package/dist/src/commands/codegraph.d.ts.map +1 -1
- package/dist/src/commands/codegraph.js +85 -11
- package/dist/src/commands/codegraph.js.map +1 -1
- package/dist/src/commands/env.d.ts +16 -0
- package/dist/src/commands/env.d.ts.map +1 -0
- package/dist/src/commands/env.js +137 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +6 -3
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/env/env.d.ts +49 -0
- package/dist/src/env/env.d.ts.map +1 -0
- package/dist/src/env/env.js +103 -0
- package/dist/src/env/env.js.map +1 -0
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +2 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/codegraph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/codegraph-tools.js +56 -1
- package/dist/src/mcp-tools/codegraph-tools.js.map +1 -1
- package/dist/src/mcp-tools/env-tools.d.ts +12 -0
- package/dist/src/mcp-tools/env-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/env-tools.js +62 -0
- package/dist/src/mcp-tools/env-tools.js.map +1 -0
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +1 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/profiles.d.ts.map +1 -1
- package/dist/src/mcp-tools/profiles.js +1 -0
- package/dist/src/mcp-tools/profiles.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
[](https://swarmdo.com)
|
|
4
4
|
|
|
5
|
-
[](https://img.shields.io/badge/npx%20swarmdo-v1.12.0-cb3837?style=for-the-badge&logo=npm&logoColor=white)](https://github.com/SwarmDo/swarmdo/releases)
|
|
6
6
|
[](https://github.com/SwarmDo/swarmdo/blob/main/LICENSE)
|
|
7
7
|
[](https://swarmdo.com)
|
|
8
8
|
[](https://github.com/SwarmDo/swarmdo)
|
|
@@ -277,9 +277,10 @@ The recent release train added a full day-to-day operations layer around the swa
|
|
|
277
277
|
| `swarmdo worktree` (alias `wt`) | **Parallel-agent isolation** on git worktrees — add / list / diff / merge / remove |
|
|
278
278
|
| `swarmdo transcript` (alias `tx`) | **Export any Claude Code session** to clean markdown — system noise stripped, ready to share; `transcript search <query>` full-text-searches every session |
|
|
279
279
|
| `swarmdo compact` | **Compress noisy command output** before it reaches an LLM — strip ANSI, collapse repeats, fold `node_modules` stack frames, window long logs. `npm test 2>&1 \| swarmdo compact` or `swarmdo compact -- npm test` (exit code propagates). Deterministic, zero tokens |
|
|
280
|
-
| `swarmdo codegraph` (alias `cg`) | **Queryable symbol index** — `codegraph index` scans TS/JS for exported symbols; `query <name>` (with `--fuzzy`/`--kind`) and `file <path>` answer "where is X defined / what does this file export" from `.swarm/codegraph.json` instead of grep+read round-trips. 1,
|
|
280
|
+
| `swarmdo codegraph` (alias `cg`) | **Queryable symbol index** — `codegraph index` scans TS/JS for exported symbols; `query <name>` (with `--fuzzy`/`--kind`) and `file <path>` answer "where is X defined / what does this file export" from `.swarm/codegraph.json` instead of grep+read round-trips. `codegraph importers <file>` shows reverse deps ("what breaks if I change this"); `codegraph imports <file>` shows a file's dependencies. 1,786 symbols + import graph across 296 files in <1s. Also MCP tools (`codegraph_query`/`file`/`imports`/`importers`/`index`/`stats`) so agents query the graph in-session |
|
|
281
281
|
| `swarmdo redact` | **Mask secrets before they reach an LLM/log/memory** — detect API keys, tokens, and private keys (gitleaks-style rule catalog + Shannon-entropy fallback) and redact them. Stdin filter (`cat deploy.log \| swarmdo redact`), command-wrap (`swarmdo redact -- npm run deploy`), or `--scan` to fail CI on any secret. Also MCP tools (`redact_text`/`redact_scan`). Deterministic, zero tokens |
|
|
282
282
|
| `swarmdo pack` | **Bundle a repo into one AI-context blob** — walk the tree (respects `.gitignore` + glob `--include`/`--exclude`, skips binaries/node_modules), emit markdown/xml/json/plain with a directory tree and per-file + total token estimates. `swarmdo pack --tokens` for a budget breakdown; `--redact` masks secrets first. Deterministic |
|
|
283
|
+
| `swarmdo env` | **Catch env-var drift before deploy** — statically scan code for `process.env.X` / `import.meta.env.X` / `Deno.env.get` / `os.getenv` references and reconcile against `.env` and `.env.example`: reports **missing** (used but undeclared), **unused**, and **undocumented**. `--ci` exits 1 on missing vars. Also an MCP tool (`env_check`). Deterministic |
|
|
283
284
|
| `swarmdo integrations` (alias `integrate`) | **Use swarmdo from Codex CLI, GitHub Copilot CLI, and pi** — one command wires AGENTS.md + each CLI's MCP config (idempotent, dry-run first, never touches your Claude Code setup) |
|
|
284
285
|
| OpenRouter model pool | **Let swarms pick from any models you configure** — declare tier-mapped OpenRouter models in `swarmdo.config.json`; the router Thompson-samples among them per task and the execution layer dispatches the winner |
|
|
285
286
|
| `swarmdo changelog` (alias `notes`) | **Release notes from conventional commits** — `--out NOTES.md` feeds `gh release create --notes-file` |
|
|
@@ -21,13 +21,39 @@ export interface CodeSymbol {
|
|
|
21
21
|
/** The trimmed declaration line (signature), truncated for storage. */
|
|
22
22
|
signature: string;
|
|
23
23
|
}
|
|
24
|
+
/** A dependency edge: `from` imports module `spec`, resolved to a repo file when relative. */
|
|
25
|
+
export interface ImportEdge {
|
|
26
|
+
/** repo-relative file containing the import */
|
|
27
|
+
from: string;
|
|
28
|
+
/** the raw module specifier as written, e.g. './store.js' or 'node:fs' */
|
|
29
|
+
spec: string;
|
|
30
|
+
/** repo-relative file the spec resolves to, or null for external/unresolved */
|
|
31
|
+
resolved: string | null;
|
|
32
|
+
/** 1-based line of the import */
|
|
33
|
+
line: number;
|
|
34
|
+
}
|
|
24
35
|
export interface CodeIndex {
|
|
25
36
|
/** Repo-relative file → symbols declared in it. */
|
|
26
37
|
symbols: CodeSymbol[];
|
|
38
|
+
/** Dependency edges between files (relative imports resolved; externals kept unresolved). */
|
|
39
|
+
imports: ImportEdge[];
|
|
27
40
|
fileCount: number;
|
|
28
41
|
}
|
|
29
42
|
/** Extract exported symbols from one source file. Pure. */
|
|
30
43
|
export declare function extractSymbols(source: string, file: string): CodeSymbol[];
|
|
44
|
+
/** Extract the raw import specifiers from one source file. Pure. */
|
|
45
|
+
export declare function extractImports(source: string, file: string): Array<{
|
|
46
|
+
from: string;
|
|
47
|
+
spec: string;
|
|
48
|
+
line: number;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve a spec to a repo-relative file in `fileSet`, or null. Only relative
|
|
52
|
+
* specs (`.`/`..`) resolve; bare specifiers (packages, aliases, `node:`) are
|
|
53
|
+
* external → null. Tries the path as-is, common extensions, and `/index.*`,
|
|
54
|
+
* and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention).
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveImport(fromFile: string, spec: string, fileSet: Set<string>): string | null;
|
|
31
57
|
/** Build an index from already-read files. Pure. */
|
|
32
58
|
export declare function buildIndex(files: Array<{
|
|
33
59
|
file: string;
|
|
@@ -43,10 +69,18 @@ export interface QueryOptions {
|
|
|
43
69
|
export declare function queryIndex(index: CodeIndex, name: string, opts?: QueryOptions): CodeSymbol[];
|
|
44
70
|
/** Symbols declared in a specific file (exact repo-relative path). Pure. */
|
|
45
71
|
export declare function symbolsInFile(index: CodeIndex, file: string): CodeSymbol[];
|
|
72
|
+
/** Edges FROM a file — what it imports (resolved repo files + external specs). Pure. */
|
|
73
|
+
export declare function fileImports(index: CodeIndex, file: string): ImportEdge[];
|
|
74
|
+
/** Edges TO a file — who imports it ("what breaks if I change this"). Pure. */
|
|
75
|
+
export declare function fileImporters(index: CodeIndex, file: string): ImportEdge[];
|
|
46
76
|
export interface IndexStats {
|
|
47
77
|
files: number;
|
|
48
78
|
symbols: number;
|
|
49
79
|
byKind: Record<string, number>;
|
|
80
|
+
/** total import edges */
|
|
81
|
+
imports: number;
|
|
82
|
+
/** edges resolved to an in-repo file (vs external packages) */
|
|
83
|
+
internalImports: number;
|
|
50
84
|
}
|
|
51
85
|
/** Summary counts for the index. Pure. */
|
|
52
86
|
export declare function indexStats(index: CodeIndex): IndexStats;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqBD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBzE;AAED,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,6FAA6F;IAC7F,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqBD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBzE;AAeD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBhH;AAeD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAejG;AAED,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAcpF;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,UAAU,EAAE,CAMhG;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAE1E;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAExE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAE1E;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAWvD"}
|
|
@@ -57,15 +57,96 @@ export function extractSymbols(source, file) {
|
|
|
57
57
|
}
|
|
58
58
|
return out;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Module specifiers on a line, from any of: `import … from 'x'`,
|
|
62
|
+
* `export … from 'x'`, side-effect `import 'x'`, `require('x')`, and dynamic
|
|
63
|
+
* `import('x')`. Line-based like the symbol matchers; captures every spec on
|
|
64
|
+
* the line (dynamic imports can be mid-line).
|
|
65
|
+
*/
|
|
66
|
+
const IMPORT_RES = [
|
|
67
|
+
/\bfrom\s*['"]([^'"]+)['"]/g, // import/export … from '…'
|
|
68
|
+
/\bimport\s*['"]([^'"]+)['"]/g, // side-effect import '…'
|
|
69
|
+
/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g, // dynamic import('…')
|
|
70
|
+
/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g, // require('…')
|
|
71
|
+
];
|
|
72
|
+
/** Extract the raw import specifiers from one source file. Pure. */
|
|
73
|
+
export function extractImports(source, file) {
|
|
74
|
+
const out = [];
|
|
75
|
+
const lines = source.split('\n');
|
|
76
|
+
for (let i = 0; i < lines.length; i++) {
|
|
77
|
+
const line = lines[i];
|
|
78
|
+
if (!/\b(?:from|import|require)\b/.test(line))
|
|
79
|
+
continue;
|
|
80
|
+
const seen = new Set();
|
|
81
|
+
for (const re of IMPORT_RES) {
|
|
82
|
+
re.lastIndex = 0;
|
|
83
|
+
let m;
|
|
84
|
+
while ((m = re.exec(line)) !== null) {
|
|
85
|
+
const spec = m[1];
|
|
86
|
+
if (seen.has(spec))
|
|
87
|
+
continue; // same spec caught by two patterns on one line
|
|
88
|
+
seen.add(spec);
|
|
89
|
+
out.push({ from: file, spec, line: i + 1 });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
/** Normalize a relative spec against the importing file's dir → repo-relative POSIX path (no extension). */
|
|
96
|
+
function joinRelative(fromFile, spec) {
|
|
97
|
+
const parts = fromFile.includes('/') ? fromFile.slice(0, fromFile.lastIndexOf('/')).split('/') : [];
|
|
98
|
+
for (const seg of spec.split('/')) {
|
|
99
|
+
if (seg === '' || seg === '.')
|
|
100
|
+
continue;
|
|
101
|
+
if (seg === '..')
|
|
102
|
+
parts.pop();
|
|
103
|
+
else
|
|
104
|
+
parts.push(seg);
|
|
105
|
+
}
|
|
106
|
+
return parts.join('/');
|
|
107
|
+
}
|
|
108
|
+
const RESOLVE_EXTS = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'];
|
|
109
|
+
/**
|
|
110
|
+
* Resolve a spec to a repo-relative file in `fileSet`, or null. Only relative
|
|
111
|
+
* specs (`.`/`..`) resolve; bare specifiers (packages, aliases, `node:`) are
|
|
112
|
+
* external → null. Tries the path as-is, common extensions, and `/index.*`,
|
|
113
|
+
* and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention).
|
|
114
|
+
*/
|
|
115
|
+
export function resolveImport(fromFile, spec, fileSet) {
|
|
116
|
+
if (!spec.startsWith('.'))
|
|
117
|
+
return null;
|
|
118
|
+
const base = joinRelative(fromFile, spec);
|
|
119
|
+
const bases = [base];
|
|
120
|
+
const jsExt = base.match(/\.(js|jsx|mjs|cjs)$/);
|
|
121
|
+
if (jsExt)
|
|
122
|
+
bases.push(base.slice(0, -jsExt[0].length)); // ./x.js → try ./x(.ts…)
|
|
123
|
+
for (const b of bases) {
|
|
124
|
+
for (const ext of RESOLVE_EXTS) {
|
|
125
|
+
if (fileSet.has(b + ext))
|
|
126
|
+
return b + ext;
|
|
127
|
+
}
|
|
128
|
+
for (const ext of RESOLVE_EXTS.slice(1)) {
|
|
129
|
+
if (fileSet.has(b + '/index' + ext))
|
|
130
|
+
return b + '/index' + ext;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
60
135
|
/** Build an index from already-read files. Pure. */
|
|
61
136
|
export function buildIndex(files) {
|
|
62
137
|
const symbols = [];
|
|
138
|
+
const fileSet = new Set(files.map((f) => f.file));
|
|
139
|
+
const imports = [];
|
|
63
140
|
for (const { file, source } of files) {
|
|
64
141
|
symbols.push(...extractSymbols(source, file));
|
|
142
|
+
for (const imp of extractImports(source, file)) {
|
|
143
|
+
imports.push({ ...imp, resolved: resolveImport(imp.from, imp.spec, fileSet) });
|
|
144
|
+
}
|
|
65
145
|
}
|
|
66
146
|
// Stable order: file, then line.
|
|
67
147
|
symbols.sort((a, b) => (a.file < b.file ? -1 : a.file > b.file ? 1 : a.line - b.line));
|
|
68
|
-
|
|
148
|
+
imports.sort((a, b) => (a.from < b.from ? -1 : a.from > b.from ? 1 : a.line - b.line));
|
|
149
|
+
return { symbols, imports, fileCount: files.length };
|
|
69
150
|
}
|
|
70
151
|
/** Look up symbols by name. Pure. */
|
|
71
152
|
export function queryIndex(index, name, opts = {}) {
|
|
@@ -80,11 +161,26 @@ export function queryIndex(index, name, opts = {}) {
|
|
|
80
161
|
export function symbolsInFile(index, file) {
|
|
81
162
|
return index.symbols.filter((s) => s.file === file);
|
|
82
163
|
}
|
|
164
|
+
/** Edges FROM a file — what it imports (resolved repo files + external specs). Pure. */
|
|
165
|
+
export function fileImports(index, file) {
|
|
166
|
+
return (index.imports ?? []).filter((e) => e.from === file);
|
|
167
|
+
}
|
|
168
|
+
/** Edges TO a file — who imports it ("what breaks if I change this"). Pure. */
|
|
169
|
+
export function fileImporters(index, file) {
|
|
170
|
+
return (index.imports ?? []).filter((e) => e.resolved === file);
|
|
171
|
+
}
|
|
83
172
|
/** Summary counts for the index. Pure. */
|
|
84
173
|
export function indexStats(index) {
|
|
85
174
|
const byKind = {};
|
|
86
175
|
for (const s of index.symbols)
|
|
87
176
|
byKind[s.kind] = (byKind[s.kind] ?? 0) + 1;
|
|
88
|
-
|
|
177
|
+
const imports = index.imports ?? [];
|
|
178
|
+
return {
|
|
179
|
+
files: index.fileCount,
|
|
180
|
+
symbols: index.symbols.length,
|
|
181
|
+
byKind,
|
|
182
|
+
imports: imports.length,
|
|
183
|
+
internalImports: imports.filter((e) => e.resolved !== null).length,
|
|
184
|
+
};
|
|
89
185
|
}
|
|
90
186
|
//# sourceMappingURL=codegraph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyCH,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;GAGG;AACH,MAAM,QAAQ,GAA4C;IACxD,2DAA2D;IAC3D,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,6EAA6E,EAAE;IACtG,6CAA6C;IAC7C,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,2DAA2D,EAAE;IACpF,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,yDAAyD,EAAE;IACnF,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,sDAAsD,EAAE;IAC7E,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,0CAA0C,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,qCAAqC,EAAE;IAC3D,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,kDAAkD,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,kDAAkD,EAAE;CAC1E,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY;IACzD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC5C,4EAA4E;QAC5E,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAS;QAC7C,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,IAAI;gBACJ,IAAI;gBACJ,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACzD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAa;IAC3B,4BAA4B,EAAW,2BAA2B;IAClE,8BAA8B,EAAU,yBAAyB;IACjE,wCAAwC,EAAE,sBAAsB;IAChE,yCAAyC,EAAE,eAAe;CAC3D,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY;IACzD,MAAM,GAAG,GAAwD,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;YACjB,IAAI,CAAyB,CAAC;YAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,+CAA+C;gBAC7E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4GAA4G;AAC5G,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;YAAE,SAAS;QACxC,IAAI,GAAG,KAAK,IAAI;YAAE,KAAK,CAAC,GAAG,EAAE,CAAC;;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAExF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAY,EAAE,OAAoB;IAChF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB;IACjF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,GAAG,CAAC;QAC3C,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,UAAU,CAAC,KAA8C;IACvE,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,iCAAiC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AASD,qCAAqC;AACrC,MAAM,UAAU,UAAU,CAAC,KAAgB,EAAE,IAAY,EAAE,OAAqB,EAAE;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAY;IAC1D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,KAAgB,EAAE,IAAY;IACxD,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAY;IAC1D,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AAYD,0CAA0C;AAC1C,MAAM,UAAU,UAAU,CAAC,KAAgB;IACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;QAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,SAAS;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC7B,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM;KACnE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/commands/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/commands/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAiJ1E,eAAO,MAAM,gBAAgB,EAAE,OA0B9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -13,11 +13,15 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import * as path from 'node:path';
|
|
15
15
|
import { output } from '../output.js';
|
|
16
|
-
import { queryIndex, symbolsInFile, indexStats, } from '../codegraph/codegraph.js';
|
|
16
|
+
import { queryIndex, symbolsInFile, indexStats, fileImports, fileImporters, } from '../codegraph/codegraph.js';
|
|
17
17
|
import { INDEX_REL, scanRepo, saveIndex, loadIndex } from '../codegraph/store.js';
|
|
18
18
|
function fmtSymbol(s) {
|
|
19
19
|
return `${s.file}:${s.line} ${output.dim(`[${s.kind}]`)} ${s.signature}`;
|
|
20
20
|
}
|
|
21
|
+
/** Accept an absolute or cwd-relative path; return the repo-relative key. */
|
|
22
|
+
function relKey(root, arg) {
|
|
23
|
+
return path.relative(root, path.resolve(root, arg)).split(path.sep).join('/');
|
|
24
|
+
}
|
|
21
25
|
const indexCommand = {
|
|
22
26
|
name: 'index',
|
|
23
27
|
description: 'Scan the tree for exported symbols and persist the index',
|
|
@@ -124,32 +128,102 @@ const statsCommand = {
|
|
|
124
128
|
output.printJson(stats);
|
|
125
129
|
return { success: true, data: stats };
|
|
126
130
|
}
|
|
127
|
-
output.writeln(output.bold(`codegraph: ${stats.symbols} symbols, ${stats.files} files`));
|
|
131
|
+
output.writeln(output.bold(`codegraph: ${stats.symbols} symbols, ${stats.files} files, ${stats.imports} imports (${stats.internalImports} internal)`));
|
|
128
132
|
output.printList(Object.entries(stats.byKind).sort((a, b) => b[1] - a[1]).map(([k, n]) => `${k}: ${n}`));
|
|
129
133
|
return { success: true, exitCode: 0 };
|
|
130
134
|
},
|
|
131
135
|
};
|
|
136
|
+
const importsCommand = {
|
|
137
|
+
name: 'imports',
|
|
138
|
+
description: 'What a file imports — resolved repo files + external packages',
|
|
139
|
+
options: [
|
|
140
|
+
{ name: 'internal', description: 'only edges resolved to a repo file (hide external packages)', type: 'boolean', default: false },
|
|
141
|
+
{ name: 'json', description: 'machine-readable output', type: 'boolean', default: false },
|
|
142
|
+
],
|
|
143
|
+
action: async (ctx) => {
|
|
144
|
+
const root = ctx.cwd || process.cwd();
|
|
145
|
+
const arg = ctx.args[0];
|
|
146
|
+
if (!arg) {
|
|
147
|
+
output.printError('Usage: swarmdo codegraph imports <path>');
|
|
148
|
+
return { success: false, exitCode: 1 };
|
|
149
|
+
}
|
|
150
|
+
const index = loadIndex(root);
|
|
151
|
+
if (!index) {
|
|
152
|
+
output.printError(`no index — run \`swarmdo codegraph index\` first`);
|
|
153
|
+
return { success: false, exitCode: 1 };
|
|
154
|
+
}
|
|
155
|
+
let edges = fileImports(index, relKey(root, arg));
|
|
156
|
+
if (ctx.flags.internal === true)
|
|
157
|
+
edges = edges.filter((e) => e.resolved !== null);
|
|
158
|
+
if (ctx.flags.json === true) {
|
|
159
|
+
output.printJson(edges);
|
|
160
|
+
return { success: true, data: edges };
|
|
161
|
+
}
|
|
162
|
+
if (edges.length === 0) {
|
|
163
|
+
output.writeln(output.dim(`no imports in ${relKey(root, arg)} (indexed?)`));
|
|
164
|
+
return { success: true, exitCode: 0 };
|
|
165
|
+
}
|
|
166
|
+
for (const e of edges) {
|
|
167
|
+
output.writeln(` ${e.line} ${e.spec}${e.resolved ? output.dim(` → ${e.resolved}`) : output.dim(' (external)')}`);
|
|
168
|
+
}
|
|
169
|
+
return { success: true, exitCode: 0 };
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
const importersCommand = {
|
|
173
|
+
name: 'importers',
|
|
174
|
+
aliases: ['rdeps'],
|
|
175
|
+
description: 'Who imports a file — reverse deps ("what breaks if I change this")',
|
|
176
|
+
options: [{ name: 'json', description: 'machine-readable output', type: 'boolean', default: false }],
|
|
177
|
+
action: async (ctx) => {
|
|
178
|
+
const root = ctx.cwd || process.cwd();
|
|
179
|
+
const arg = ctx.args[0];
|
|
180
|
+
if (!arg) {
|
|
181
|
+
output.printError('Usage: swarmdo codegraph importers <path>');
|
|
182
|
+
return { success: false, exitCode: 1 };
|
|
183
|
+
}
|
|
184
|
+
const index = loadIndex(root);
|
|
185
|
+
if (!index) {
|
|
186
|
+
output.printError(`no index — run \`swarmdo codegraph index\` first`);
|
|
187
|
+
return { success: false, exitCode: 1 };
|
|
188
|
+
}
|
|
189
|
+
const edges = fileImporters(index, relKey(root, arg));
|
|
190
|
+
if (ctx.flags.json === true) {
|
|
191
|
+
output.printJson(edges);
|
|
192
|
+
return { success: true, data: edges };
|
|
193
|
+
}
|
|
194
|
+
if (edges.length === 0) {
|
|
195
|
+
output.writeln(output.dim(`nothing imports ${relKey(root, arg)} (leaf, entrypoint, or not indexed)`));
|
|
196
|
+
return { success: true, exitCode: 0 };
|
|
197
|
+
}
|
|
198
|
+
for (const e of edges)
|
|
199
|
+
output.writeln(` ${e.from}:${e.line} ${output.dim(e.spec)}`);
|
|
200
|
+
return { success: true, exitCode: 0 };
|
|
201
|
+
},
|
|
202
|
+
};
|
|
132
203
|
export const codegraphCommand = {
|
|
133
204
|
name: 'codegraph',
|
|
134
205
|
aliases: ['cg'],
|
|
135
|
-
description: 'Queryable index of exported symbols — where things are defined, without grep+read',
|
|
136
|
-
subcommands: [indexCommand, queryCommand, fileCommand, statsCommand],
|
|
206
|
+
description: 'Queryable index of exported symbols + import graph — where things are defined and what depends on what, without grep+read',
|
|
207
|
+
subcommands: [indexCommand, queryCommand, fileCommand, importsCommand, importersCommand, statsCommand],
|
|
137
208
|
options: [],
|
|
138
209
|
examples: [
|
|
139
|
-
{ command: 'swarmdo codegraph index', description: 'Scan the repo and persist the symbol index' },
|
|
210
|
+
{ command: 'swarmdo codegraph index', description: 'Scan the repo and persist the symbol + import index' },
|
|
140
211
|
{ command: 'swarmdo codegraph query buildIndex', description: 'Find where a symbol is defined' },
|
|
141
212
|
{ command: 'swarmdo codegraph query Handler --fuzzy --kind type', description: 'Fuzzy, kind-filtered lookup' },
|
|
142
213
|
{ command: 'swarmdo codegraph file src/index.ts', description: 'What a file exports' },
|
|
214
|
+
{ command: 'swarmdo codegraph importers src/codegraph/store.ts', description: 'What breaks if I change this file' },
|
|
143
215
|
],
|
|
144
216
|
action: async () => {
|
|
145
|
-
output.writeln(output.bold('swarmdo codegraph — exported-symbol index'));
|
|
217
|
+
output.writeln(output.bold('swarmdo codegraph — exported-symbol index + import graph'));
|
|
146
218
|
output.printList([
|
|
147
|
-
'index [path]
|
|
148
|
-
'query <name>
|
|
149
|
-
'file <path>
|
|
150
|
-
'
|
|
219
|
+
'index [path] scan TS/JS and persist to .swarm/codegraph.json',
|
|
220
|
+
'query <name> find a symbol (--fuzzy, --kind)',
|
|
221
|
+
'file <path> symbols a file exports',
|
|
222
|
+
'imports <path> what a file imports (--internal)',
|
|
223
|
+
'importers <path> who imports a file (reverse deps)',
|
|
224
|
+
'stats index summary',
|
|
151
225
|
]);
|
|
152
|
-
output.writeln(output.dim('MVP: exported top-level symbols
|
|
226
|
+
output.writeln(output.dim('MVP: exported top-level symbols + relative-import edges. Incremental watch is a follow-up.'));
|
|
153
227
|
return { success: true, exitCode: 0 };
|
|
154
228
|
},
|
|
155
229
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/commands/codegraph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/commands/codegraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `swarmdo env` — reconcile the env vars the code references against what
|
|
3
|
+
* `.env` declares (and, if present, `.env.example`). Catches deploy-breaking
|
|
4
|
+
* drift before it ships:
|
|
5
|
+
*
|
|
6
|
+
* swarmdo env # scan cwd vs .env / .env.example
|
|
7
|
+
* swarmdo env src --ci # exit 1 if any referenced var is undeclared
|
|
8
|
+
* swarmdo env --json # machine-readable report
|
|
9
|
+
*
|
|
10
|
+
* Engine (../env/env.ts) is pure + tested; this layer does the fs walk and
|
|
11
|
+
* reads the dotenv files.
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from '../types.js';
|
|
14
|
+
export declare const envCommand: Command;
|
|
15
|
+
export default envCommand;
|
|
16
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA6F1E,eAAO,MAAM,UAAU,EAAE,OAiBxB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `swarmdo env` — reconcile the env vars the code references against what
|
|
3
|
+
* `.env` declares (and, if present, `.env.example`). Catches deploy-breaking
|
|
4
|
+
* drift before it ships:
|
|
5
|
+
*
|
|
6
|
+
* swarmdo env # scan cwd vs .env / .env.example
|
|
7
|
+
* swarmdo env src --ci # exit 1 if any referenced var is undeclared
|
|
8
|
+
* swarmdo env --json # machine-readable report
|
|
9
|
+
*
|
|
10
|
+
* Engine (../env/env.ts) is pure + tested; this layer does the fs walk and
|
|
11
|
+
* reads the dotenv files.
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import { output } from '../output.js';
|
|
16
|
+
import { extractEnvRefs, parseDotenv, reconcile, formatEnvSummary } from '../env/env.js';
|
|
17
|
+
const SOURCE_EXT = new Set(['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs', '.py', '.vue', '.svelte', '.astro']);
|
|
18
|
+
const SKIP_DIRS = new Set([
|
|
19
|
+
'node_modules', '.git', '.swarm', 'dist', 'dist-standalone', 'build',
|
|
20
|
+
'coverage', '.next', '.turbo', 'out', 'vendor', '.cache',
|
|
21
|
+
]);
|
|
22
|
+
// Ubiquitous runtime/CI vars that are almost never declared in a project .env.
|
|
23
|
+
const DEFAULT_IGNORE = ['NODE_ENV', 'CI', 'PATH', 'HOME', 'PWD', 'USER', 'SHELL', 'TERM', 'TZ', 'LANG'];
|
|
24
|
+
function walk(root) {
|
|
25
|
+
const found = [];
|
|
26
|
+
const stack = [root];
|
|
27
|
+
while (stack.length) {
|
|
28
|
+
const dir = stack.pop();
|
|
29
|
+
let entries;
|
|
30
|
+
try {
|
|
31
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
for (const e of entries) {
|
|
37
|
+
const full = path.join(dir, e.name);
|
|
38
|
+
if (e.isDirectory()) {
|
|
39
|
+
if (SKIP_DIRS.has(e.name))
|
|
40
|
+
continue;
|
|
41
|
+
stack.push(full);
|
|
42
|
+
}
|
|
43
|
+
else if (e.isFile()) {
|
|
44
|
+
const ext = path.extname(e.name);
|
|
45
|
+
if (SOURCE_EXT.has(ext) && !e.name.endsWith('.d.ts'))
|
|
46
|
+
found.push(full);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return found;
|
|
51
|
+
}
|
|
52
|
+
function readKeys(file) {
|
|
53
|
+
try {
|
|
54
|
+
return parseDotenv(fs.readFileSync(file, 'utf8'));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function run(ctx) {
|
|
61
|
+
const repoRoot = ctx.cwd || process.cwd();
|
|
62
|
+
const scanRoot = ctx.args[0] ? path.resolve(repoRoot, ctx.args[0]) : repoRoot;
|
|
63
|
+
const envFile = path.resolve(repoRoot, typeof ctx.flags.env === 'string' ? ctx.flags.env : '.env');
|
|
64
|
+
const exampleFlag = typeof ctx.flags.example === 'string' ? ctx.flags.example : '.env.example';
|
|
65
|
+
const exampleFile = path.resolve(repoRoot, exampleFlag);
|
|
66
|
+
const declared = readKeys(envFile);
|
|
67
|
+
if (declared === null) {
|
|
68
|
+
output.printError(`no env file at ${path.relative(repoRoot, envFile)} (use --env <file>)`);
|
|
69
|
+
return { success: false, exitCode: 1 };
|
|
70
|
+
}
|
|
71
|
+
const example = readKeys(exampleFile) ?? undefined;
|
|
72
|
+
const ignore = [...DEFAULT_IGNORE];
|
|
73
|
+
if (typeof ctx.flags.ignore === 'string')
|
|
74
|
+
ignore.push(...ctx.flags.ignore.split(',').map((s) => s.trim()).filter(Boolean));
|
|
75
|
+
const refs = [];
|
|
76
|
+
for (const abs of walk(scanRoot)) {
|
|
77
|
+
let src;
|
|
78
|
+
try {
|
|
79
|
+
src = fs.readFileSync(abs, 'utf8');
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const rel = path.relative(repoRoot, abs).split(path.sep).join('/');
|
|
85
|
+
refs.push(...extractEnvRefs(src, rel));
|
|
86
|
+
}
|
|
87
|
+
const report = reconcile({ refs, declared, example, ignore });
|
|
88
|
+
const hasExample = example !== undefined;
|
|
89
|
+
if (ctx.flags.json === true) {
|
|
90
|
+
output.printJson({ ...report, envFile: path.relative(repoRoot, envFile), hasExample });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const section = (title, keys, withSites = false) => {
|
|
94
|
+
if (keys.length === 0)
|
|
95
|
+
return;
|
|
96
|
+
output.writeln(output.bold(`${title} (${keys.length})`));
|
|
97
|
+
output.printList(keys.map((k) => {
|
|
98
|
+
if (!withSites)
|
|
99
|
+
return k;
|
|
100
|
+
const site = report.refs[k]?.[0];
|
|
101
|
+
return site ? `${k} ${output.dim(`${site.file}:${site.line}`)}` : k;
|
|
102
|
+
}));
|
|
103
|
+
};
|
|
104
|
+
section('Missing — referenced in code, not in .env', report.missing, true);
|
|
105
|
+
section('Unused — declared in .env, never referenced', report.unused);
|
|
106
|
+
if (hasExample)
|
|
107
|
+
section('Undocumented — in .env, not in .env.example', report.undocumented);
|
|
108
|
+
output.writeln(output.dim(formatEnvSummary(report, hasExample)));
|
|
109
|
+
}
|
|
110
|
+
// --ci gates on `missing` (the runtime-breaking bucket); --strict also gates
|
|
111
|
+
// on unused + undocumented.
|
|
112
|
+
const strict = ctx.flags.strict === true;
|
|
113
|
+
const bad = report.missing.length + (strict ? report.unused.length + report.undocumented.length : 0);
|
|
114
|
+
const gate = ctx.flags.ci === true || strict;
|
|
115
|
+
const code = gate && bad > 0 ? 1 : 0;
|
|
116
|
+
return { success: code === 0, exitCode: code };
|
|
117
|
+
}
|
|
118
|
+
export const envCommand = {
|
|
119
|
+
name: 'env',
|
|
120
|
+
description: 'Reconcile env vars referenced in code against .env / .env.example — find missing, unused, and undocumented vars',
|
|
121
|
+
options: [
|
|
122
|
+
{ name: 'env', description: 'path to the env file (default .env)', type: 'string' },
|
|
123
|
+
{ name: 'example', description: 'path to the example env file (default .env.example)', type: 'string' },
|
|
124
|
+
{ name: 'ignore', description: 'comma-separated extra keys to ignore (NODE_ENV/CI/… already ignored)', type: 'string' },
|
|
125
|
+
{ name: 'ci', description: 'exit 1 if any referenced var is undeclared (missing bucket)', type: 'boolean' },
|
|
126
|
+
{ name: 'strict', description: 'exit 1 on missing OR unused OR undocumented', type: 'boolean' },
|
|
127
|
+
{ name: 'json', description: 'machine-readable report', type: 'boolean' },
|
|
128
|
+
],
|
|
129
|
+
examples: [
|
|
130
|
+
{ command: 'swarmdo env', description: 'Reconcile the repo against .env / .env.example' },
|
|
131
|
+
{ command: 'swarmdo env src --ci', description: 'Fail CI if code references an undeclared var' },
|
|
132
|
+
{ command: 'swarmdo env --env .env.production --json', description: 'Check a specific env file, JSON out' },
|
|
133
|
+
],
|
|
134
|
+
action: run,
|
|
135
|
+
};
|
|
136
|
+
export default envCommand;
|
|
137
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
|