@swarmdo/cli 1.5.0 → 1.7.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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![swarmdo](swarmdo/assets/swarmdo-banner.svg)](https://swarmdo.com)
4
4
 
5
- [![npm version (swarmdo)](https://img.shields.io/badge/npx%20swarmdo-v1.4.8-cb3837?style=for-the-badge&logo=npm&logoColor=white)](https://github.com/SwarmDo/swarmdo/releases)
5
+ [![npm version (swarmdo)](https://img.shields.io/badge/npx%20swarmdo-v1.7.0-cb3837?style=for-the-badge&logo=npm&logoColor=white)](https://github.com/SwarmDo/swarmdo/releases)
6
6
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://github.com/SwarmDo/swarmdo/blob/main/LICENSE)
7
7
  [![Website](https://img.shields.io/badge/swarmdo.com-e2a33c?style=for-the-badge&logoColor=black)](https://swarmdo.com)
8
8
  [![Star on GitHub](https://img.shields.io/github/stars/SwarmDo/swarmdo?style=for-the-badge&logo=github&color=gold)](https://github.com/SwarmDo/swarmdo)
@@ -269,13 +269,15 @@ The recent release train added a full day-to-day operations layer around the swa
269
269
 
270
270
  | Command | What it does |
271
271
  |---------|-------------|
272
- | `swarmdo usage` (alias `cost`) | Claude Code **spend analytics** from your local transcripts — `daily`, `monthly`, `models`, `projects`, `sessions`, live 5-hour `blocks` burn, `errors` (tool-failure analytics), and `cache` (prompt-cache efficiency + $ saved) |
272
+ | `swarmdo usage` (alias `cost`) | Claude Code **spend analytics** from your local transcripts — `daily`, `monthly`, `models`, `projects`, `sessions`, live 5-hour `blocks` burn, `errors` (tool-failure analytics), `cache` (prompt-cache efficiency + $ saved), and `diff` (period-over-period comparison with per-model movers) |
273
273
  | `swarmdo usage guard` | **Budget policy** — limits for the active 5h block / today / month via flags or `SWARMDO_GUARD_*` env → ok / warn / over; `--strict` exits 1, safe for CI gates and Stop hooks |
274
274
  | `swarmdo hud` | **One-screen ops HUD** — 5h block burn, task readiness, daemon workers, memory snapshots (`--watch`, `--json`) |
275
275
  | `swarmdo repair` (alias `tdd-repair`) | **Test-Driven Repair** — a bounded, budget-capped headless `claude` loop that fixes source until a failing test passes; dry-run unless `--confirm` |
276
- | `swarmdo task … --dependencies` | **Task dependency DAG** — `task ready` lists unblocked work, `task graph` renders the graph, the dispatcher gates on readiness |
276
+ | `swarmdo task … --dependencies` | **Task dependency DAG** — `task ready` lists unblocked work, `task graph` renders the graph, the dispatcher gates on readiness; `task parse-prd <spec.md>` decomposes a PRD straight into the DAG |
277
277
  | `swarmdo worktree` (alias `wt`) | **Parallel-agent isolation** on git worktrees — add / list / diff / merge / remove |
278
- | `swarmdo transcript` (alias `tx`) | **Export any Claude Code session** to clean markdown — system noise stripped, ready to share |
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
+ | `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,750 symbols across 289 files in <1s |
279
281
  | `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) |
280
282
  | 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 |
281
283
  | `swarmdo changelog` (alias `notes`) | **Release notes from conventional commits** — `--out NOTES.md` feeds `gh release create --notes-file` |
@@ -283,7 +285,7 @@ The recent release train added a full day-to-day operations layer around the swa
283
285
  | `swarmdo hooks notify -d` | **Desktop notifications** — OS-native toast (macOS `osascript`, Linux `notify-send`) |
284
286
  | `swarmdo hooks recipe` | **One-command Claude Code hooks** — "ping me when Claude finishes / needs input"; dry-run by default, idempotent merge that never clobbers your settings |
285
287
  | `swarmdo preset` + `init --preset` | **5-tier capability ladder** — `minimal` → `basic`★ → `standard` → `advanced` → `max`; one word instead of dozens of flags |
286
- | `swarmdo memory export/import -f obsidian` | **Obsidian vault roundtrip** — DB → markdown notes (YAML frontmatter, `[[wikilinks]]` stay live) → edit in Obsidian → sync back, re-embedded |
288
+ | `swarmdo memory export/import -f obsidian` | **Obsidian vault roundtrip** — DB → markdown notes (YAML frontmatter, `[[wikilinks]]` stay live) → edit in Obsidian → sync back, re-embedded; `import --watch` keeps the vault live-synced as you edit |
287
289
  | `swarmdo memory backup` / `revectorize` | WAL-safe nightly DB snapshots · repair hash-era vectors |
288
290
 
289
291
  ```bash
@@ -0,0 +1,53 @@
1
+ /**
2
+ * codegraph.ts — a lightweight, queryable index of a codebase's exported
3
+ * symbols. An agent navigating an unfamiliar repo otherwise spends tool calls
4
+ * (and context) on grep+read round-trips to answer "where is X defined?" or
5
+ * "what does file Y export?". This builds that map once and answers from it.
6
+ *
7
+ * MVP scope: EXPORTED top-level declarations in TS/JS (function, class,
8
+ * interface, type, const/let/var, enum, and `export default`). Deliberately
9
+ * line-based, not a full AST — exported declarations are regular enough that a
10
+ * focused set of patterns captures them with a signature line, and it stays
11
+ * dependency-free and fast. Call-graph edges, incremental watch, and an MCP
12
+ * tool are follow-ups (see the command help). Pure: no I/O here.
13
+ */
14
+ export type SymbolKind = 'function' | 'class' | 'interface' | 'type' | 'const' | 'enum' | 'default';
15
+ export interface CodeSymbol {
16
+ name: string;
17
+ kind: SymbolKind;
18
+ file: string;
19
+ /** 1-based line number of the declaration. */
20
+ line: number;
21
+ /** The trimmed declaration line (signature), truncated for storage. */
22
+ signature: string;
23
+ }
24
+ export interface CodeIndex {
25
+ /** Repo-relative file → symbols declared in it. */
26
+ symbols: CodeSymbol[];
27
+ fileCount: number;
28
+ }
29
+ /** Extract exported symbols from one source file. Pure. */
30
+ export declare function extractSymbols(source: string, file: string): CodeSymbol[];
31
+ /** Build an index from already-read files. Pure. */
32
+ export declare function buildIndex(files: Array<{
33
+ file: string;
34
+ source: string;
35
+ }>): CodeIndex;
36
+ export interface QueryOptions {
37
+ /** Substring/case-insensitive match instead of exact. */
38
+ fuzzy?: boolean;
39
+ /** Restrict to one kind. */
40
+ kind?: SymbolKind;
41
+ }
42
+ /** Look up symbols by name. Pure. */
43
+ export declare function queryIndex(index: CodeIndex, name: string, opts?: QueryOptions): CodeSymbol[];
44
+ /** Symbols declared in a specific file (exact repo-relative path). Pure. */
45
+ export declare function symbolsInFile(index: CodeIndex, file: string): CodeSymbol[];
46
+ export interface IndexStats {
47
+ files: number;
48
+ symbols: number;
49
+ byKind: Record<string, number>;
50
+ }
51
+ /** Summary counts for the index. Pure. */
52
+ export declare function indexStats(index: CodeIndex): IndexStats;
53
+ //# sourceMappingURL=codegraph.d.ts.map
@@ -0,0 +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,CAQpF;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,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAIvD"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * codegraph.ts — a lightweight, queryable index of a codebase's exported
3
+ * symbols. An agent navigating an unfamiliar repo otherwise spends tool calls
4
+ * (and context) on grep+read round-trips to answer "where is X defined?" or
5
+ * "what does file Y export?". This builds that map once and answers from it.
6
+ *
7
+ * MVP scope: EXPORTED top-level declarations in TS/JS (function, class,
8
+ * interface, type, const/let/var, enum, and `export default`). Deliberately
9
+ * line-based, not a full AST — exported declarations are regular enough that a
10
+ * focused set of patterns captures them with a signature line, and it stays
11
+ * dependency-free and fast. Call-graph edges, incremental watch, and an MCP
12
+ * tool are follow-ups (see the command help). Pure: no I/O here.
13
+ */
14
+ const SIG_MAX = 200;
15
+ /**
16
+ * Ordered matchers. Each returns the symbol name + kind from a line already
17
+ * known to start (after indentation) with `export`. First match wins.
18
+ */
19
+ const MATCHERS = [
20
+ // export default function foo | export default class Foo
21
+ { kind: 'default', re: /^export\s+default\s+(?:async\s+)?(?:function\*?|class)\s+([A-Za-z_$][\w$]*)/ },
22
+ // export default <expr> → anonymous default
23
+ { kind: 'default', re: /^export\s+default\b(?!\s+(?:async\s+)?(?:function|class))/ },
24
+ { kind: 'function', re: /^export\s+(?:async\s+)?function\*?\s+([A-Za-z_$][\w$]*)/ },
25
+ { kind: 'class', re: /^export\s+(?:abstract\s+)?class\s+([A-Za-z_$][\w$]*)/ },
26
+ { kind: 'interface', re: /^export\s+interface\s+([A-Za-z_$][\w$]*)/ },
27
+ { kind: 'type', re: /^export\s+type\s+([A-Za-z_$][\w$]*)/ },
28
+ { kind: 'enum', re: /^export\s+(?:const\s+)?enum\s+([A-Za-z_$][\w$]*)/ },
29
+ { kind: 'const', re: /^export\s+(?:const|let|var)\s+([A-Za-z_$][\w$]*)/ },
30
+ ];
31
+ /** Extract exported symbols from one source file. Pure. */
32
+ export function extractSymbols(source, file) {
33
+ const out = [];
34
+ const lines = source.split('\n');
35
+ for (let i = 0; i < lines.length; i++) {
36
+ const raw = lines[i];
37
+ const trimmed = raw.trimStart();
38
+ if (!trimmed.startsWith('export'))
39
+ continue;
40
+ // Skip re-export / bare forms handled elsewhere: `export {` and `export *`.
41
+ if (/^export\s*[*{]/.test(trimmed))
42
+ continue;
43
+ for (const { kind, re } of MATCHERS) {
44
+ const m = trimmed.match(re);
45
+ if (!m)
46
+ continue;
47
+ const name = m[1] ?? 'default';
48
+ out.push({
49
+ name,
50
+ kind,
51
+ file,
52
+ line: i + 1,
53
+ signature: trimmed.slice(0, SIG_MAX).replace(/\s+$/, ''),
54
+ });
55
+ break;
56
+ }
57
+ }
58
+ return out;
59
+ }
60
+ /** Build an index from already-read files. Pure. */
61
+ export function buildIndex(files) {
62
+ const symbols = [];
63
+ for (const { file, source } of files) {
64
+ symbols.push(...extractSymbols(source, file));
65
+ }
66
+ // Stable order: file, then line.
67
+ symbols.sort((a, b) => (a.file < b.file ? -1 : a.file > b.file ? 1 : a.line - b.line));
68
+ return { symbols, fileCount: files.length };
69
+ }
70
+ /** Look up symbols by name. Pure. */
71
+ export function queryIndex(index, name, opts = {}) {
72
+ const needle = name.toLowerCase();
73
+ return index.symbols.filter((s) => {
74
+ if (opts.kind && s.kind !== opts.kind)
75
+ return false;
76
+ return opts.fuzzy ? s.name.toLowerCase().includes(needle) : s.name === name;
77
+ });
78
+ }
79
+ /** Symbols declared in a specific file (exact repo-relative path). Pure. */
80
+ export function symbolsInFile(index, file) {
81
+ return index.symbols.filter((s) => s.file === file);
82
+ }
83
+ /** Summary counts for the index. Pure. */
84
+ export function indexStats(index) {
85
+ const byKind = {};
86
+ for (const s of index.symbols)
87
+ byKind[s.kind] = (byKind[s.kind] ?? 0) + 1;
88
+ return { files: index.fileCount, symbols: index.symbols.length, byKind };
89
+ }
90
+ //# sourceMappingURL=codegraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `swarmdo codegraph` — build and query a symbol index of the codebase, so an
3
+ * agent can answer "where is X defined?" / "what does file Y export?" without
4
+ * grep+read round-trips. Index persists to .swarm/codegraph.json.
5
+ *
6
+ * swarmdo codegraph index [path] # scan and persist
7
+ * swarmdo codegraph query <name> # find a symbol (--fuzzy, --kind)
8
+ * swarmdo codegraph file <path> # symbols a file exports
9
+ * swarmdo codegraph stats # index summary
10
+ *
11
+ * Engine (../codegraph/codegraph.ts) is pure + tested; this layer does the fs
12
+ * walk and JSON persistence. MVP: exported top-level symbols in TS/JS.
13
+ */
14
+ import type { Command } from '../types.js';
15
+ export declare const codegraphCommand: Command;
16
+ export default codegraphCommand;
17
+ //# sourceMappingURL=codegraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/commands/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAmJ1E,eAAO,MAAM,gBAAgB,EAAE,OAuB9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * `swarmdo codegraph` — build and query a symbol index of the codebase, so an
3
+ * agent can answer "where is X defined?" / "what does file Y export?" without
4
+ * grep+read round-trips. Index persists to .swarm/codegraph.json.
5
+ *
6
+ * swarmdo codegraph index [path] # scan and persist
7
+ * swarmdo codegraph query <name> # find a symbol (--fuzzy, --kind)
8
+ * swarmdo codegraph file <path> # symbols a file exports
9
+ * swarmdo codegraph stats # index summary
10
+ *
11
+ * Engine (../codegraph/codegraph.ts) is pure + tested; this layer does the fs
12
+ * walk and JSON persistence. MVP: exported top-level symbols in TS/JS.
13
+ */
14
+ import * as fs from 'node:fs';
15
+ import * as path from 'node:path';
16
+ import { output } from '../output.js';
17
+ import { buildIndex, queryIndex, symbolsInFile, indexStats, } from '../codegraph/codegraph.js';
18
+ const INDEX_REL = path.join('.swarm', 'codegraph.json');
19
+ const SOURCE_EXT = new Set(['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs']);
20
+ const SKIP_DIRS = new Set([
21
+ 'node_modules', '.git', '.swarm', 'dist', 'dist-standalone', 'build',
22
+ 'coverage', '.next', '.turbo', 'out', 'vendor', '.cache',
23
+ ]);
24
+ function walkSourceFiles(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
+ if (e.name.startsWith('.') && e.name !== '.') {
38
+ if (e.isDirectory() && SKIP_DIRS.has(e.name))
39
+ continue;
40
+ }
41
+ const full = path.join(dir, e.name);
42
+ if (e.isDirectory()) {
43
+ if (SKIP_DIRS.has(e.name))
44
+ continue;
45
+ stack.push(full);
46
+ }
47
+ else if (e.isFile()) {
48
+ const ext = path.extname(e.name);
49
+ if (SOURCE_EXT.has(ext) && !e.name.endsWith('.d.ts'))
50
+ found.push(full);
51
+ }
52
+ }
53
+ }
54
+ return found;
55
+ }
56
+ function indexPath(root) {
57
+ return path.join(root, INDEX_REL);
58
+ }
59
+ function loadIndex(root) {
60
+ try {
61
+ return JSON.parse(fs.readFileSync(indexPath(root), 'utf8'));
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ function fmtSymbol(s) {
68
+ return `${s.file}:${s.line} ${output.dim(`[${s.kind}]`)} ${s.signature}`;
69
+ }
70
+ const indexCommand = {
71
+ name: 'index',
72
+ description: 'Scan the tree for exported symbols and persist the index',
73
+ options: [
74
+ { name: 'json', description: 'machine-readable summary', type: 'boolean', default: false },
75
+ ],
76
+ action: async (ctx) => {
77
+ const root = ctx.cwd || process.cwd();
78
+ const scanRoot = ctx.args[0] ? path.resolve(root, ctx.args[0]) : root;
79
+ const files = walkSourceFiles(scanRoot);
80
+ const read = files.map((abs) => ({ file: path.relative(root, abs), source: safeRead(abs) }));
81
+ const index = buildIndex(read.filter((f) => f.source !== null));
82
+ const dir = path.dirname(indexPath(root));
83
+ fs.mkdirSync(dir, { recursive: true });
84
+ fs.writeFileSync(indexPath(root), JSON.stringify(index));
85
+ const stats = indexStats(index);
86
+ if (ctx.flags.json === true) {
87
+ output.printJson({ ...stats, path: INDEX_REL });
88
+ return { success: true, data: stats };
89
+ }
90
+ output.printSuccess(`Indexed ${stats.symbols} symbols across ${stats.files} files → ${INDEX_REL}`);
91
+ output.writeln(output.dim(Object.entries(stats.byKind).map(([k, n]) => `${k}:${n}`).join(' ')));
92
+ return { success: true, exitCode: 0 };
93
+ },
94
+ };
95
+ function safeRead(abs) {
96
+ try {
97
+ return fs.readFileSync(abs, 'utf8');
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ const queryCommand = {
104
+ name: 'query',
105
+ aliases: ['q'],
106
+ description: 'Find a symbol by name (--fuzzy for substring, --kind to filter)',
107
+ options: [
108
+ { name: 'fuzzy', short: 'f', description: 'substring/case-insensitive match', type: 'boolean', default: false },
109
+ { name: 'kind', short: 'k', description: 'restrict to one kind (function/class/interface/type/const/enum/default)', type: 'string' },
110
+ { name: 'json', description: 'machine-readable output', type: 'boolean', default: false },
111
+ ],
112
+ action: async (ctx) => {
113
+ const root = ctx.cwd || process.cwd();
114
+ const name = ctx.args[0];
115
+ if (!name) {
116
+ output.printError('Usage: swarmdo codegraph query <name> [--fuzzy] [--kind <k>]');
117
+ return { success: false, exitCode: 1 };
118
+ }
119
+ const index = loadIndex(root);
120
+ if (!index) {
121
+ output.printError(`no index — run \`swarmdo codegraph index\` first`);
122
+ return { success: false, exitCode: 1 };
123
+ }
124
+ const hits = queryIndex(index, name, { fuzzy: ctx.flags.fuzzy === true, kind: ctx.flags.kind });
125
+ if (ctx.flags.json === true) {
126
+ output.printJson(hits);
127
+ return { success: true, data: hits };
128
+ }
129
+ if (hits.length === 0) {
130
+ output.writeln(output.dim(`no symbol '${name}'${ctx.flags.fuzzy ? ' (fuzzy)' : ''}`));
131
+ return { success: true, exitCode: 0 };
132
+ }
133
+ for (const s of hits)
134
+ output.writeln(fmtSymbol(s));
135
+ return { success: true, exitCode: 0 };
136
+ },
137
+ };
138
+ const fileCommand = {
139
+ name: 'file',
140
+ description: 'List symbols exported by a specific file',
141
+ options: [
142
+ { name: 'json', description: 'machine-readable output', type: 'boolean', default: false },
143
+ ],
144
+ action: async (ctx) => {
145
+ const root = ctx.cwd || process.cwd();
146
+ const arg = ctx.args[0];
147
+ if (!arg) {
148
+ output.printError('Usage: swarmdo codegraph file <path>');
149
+ return { success: false, exitCode: 1 };
150
+ }
151
+ const index = loadIndex(root);
152
+ if (!index) {
153
+ output.printError(`no index — run \`swarmdo codegraph index\` first`);
154
+ return { success: false, exitCode: 1 };
155
+ }
156
+ // Accept an absolute or cwd-relative path; match against repo-relative keys.
157
+ const rel = path.relative(root, path.resolve(root, arg));
158
+ const hits = symbolsInFile(index, rel);
159
+ if (ctx.flags.json === true) {
160
+ output.printJson(hits);
161
+ return { success: true, data: hits };
162
+ }
163
+ if (hits.length === 0) {
164
+ output.writeln(output.dim(`no exported symbols in ${rel} (indexed?)`));
165
+ return { success: true, exitCode: 0 };
166
+ }
167
+ for (const s of hits)
168
+ output.writeln(` ${s.line} ${output.dim(`[${s.kind}]`)} ${s.name}`);
169
+ return { success: true, exitCode: 0 };
170
+ },
171
+ };
172
+ const statsCommand = {
173
+ name: 'stats',
174
+ description: 'Summary of the current index',
175
+ options: [{ name: 'json', description: 'machine-readable output', type: 'boolean', default: false }],
176
+ action: async (ctx) => {
177
+ const root = ctx.cwd || process.cwd();
178
+ const index = loadIndex(root);
179
+ if (!index) {
180
+ output.printError(`no index — run \`swarmdo codegraph index\` first`);
181
+ return { success: false, exitCode: 1 };
182
+ }
183
+ const stats = indexStats(index);
184
+ if (ctx.flags.json === true) {
185
+ output.printJson(stats);
186
+ return { success: true, data: stats };
187
+ }
188
+ output.writeln(output.bold(`codegraph: ${stats.symbols} symbols, ${stats.files} files`));
189
+ output.printList(Object.entries(stats.byKind).sort((a, b) => b[1] - a[1]).map(([k, n]) => `${k}: ${n}`));
190
+ return { success: true, exitCode: 0 };
191
+ },
192
+ };
193
+ export const codegraphCommand = {
194
+ name: 'codegraph',
195
+ aliases: ['cg'],
196
+ description: 'Queryable index of exported symbols — where things are defined, without grep+read',
197
+ subcommands: [indexCommand, queryCommand, fileCommand, statsCommand],
198
+ options: [],
199
+ examples: [
200
+ { command: 'swarmdo codegraph index', description: 'Scan the repo and persist the symbol index' },
201
+ { command: 'swarmdo codegraph query buildIndex', description: 'Find where a symbol is defined' },
202
+ { command: 'swarmdo codegraph query Handler --fuzzy --kind type', description: 'Fuzzy, kind-filtered lookup' },
203
+ { command: 'swarmdo codegraph file src/index.ts', description: 'What a file exports' },
204
+ ],
205
+ action: async () => {
206
+ output.writeln(output.bold('swarmdo codegraph — exported-symbol index'));
207
+ output.printList([
208
+ 'index [path] scan TS/JS and persist to .swarm/codegraph.json',
209
+ 'query <name> find a symbol (--fuzzy, --kind)',
210
+ 'file <path> symbols a file exports',
211
+ 'stats index summary',
212
+ ]);
213
+ output.writeln(output.dim('MVP: exported top-level symbols. Call-graph edges + watch + MCP tool are follow-ups.'));
214
+ return { success: true, exitCode: 0 };
215
+ },
216
+ };
217
+ export default codegraphCommand;
218
+ //# sourceMappingURL=codegraph.js.map
@@ -0,0 +1 @@
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 compact` — compress noisy command output before it reaches an LLM.
3
+ *
4
+ * Two modes:
5
+ * npm test 2>&1 | swarmdo compact # stdin filter
6
+ * swarmdo compact -- npm test # wrap a command (stdout+stderr)
7
+ *
8
+ * Compacted text goes to stdout (pipeable); a one-line savings summary goes to
9
+ * stderr unless --quiet. When wrapping a command, the command's exit code is
10
+ * propagated verbatim — `swarmdo compact -- npm test` still fails if the tests
11
+ * fail. Deterministic, zero tokens (see ../compact/compact.ts).
12
+ */
13
+ import type { Command } from '../types.js';
14
+ export declare const compactCommand: Command;
15
+ export default compactCommand;
16
+ //# sourceMappingURL=compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/commands/compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA4E1E,eAAO,MAAM,cAAc,EAAE,OAiB5B,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * `swarmdo compact` — compress noisy command output before it reaches an LLM.
3
+ *
4
+ * Two modes:
5
+ * npm test 2>&1 | swarmdo compact # stdin filter
6
+ * swarmdo compact -- npm test # wrap a command (stdout+stderr)
7
+ *
8
+ * Compacted text goes to stdout (pipeable); a one-line savings summary goes to
9
+ * stderr unless --quiet. When wrapping a command, the command's exit code is
10
+ * propagated verbatim — `swarmdo compact -- npm test` still fails if the tests
11
+ * fail. Deterministic, zero tokens (see ../compact/compact.ts).
12
+ */
13
+ import { spawnSync } from 'node:child_process';
14
+ import { output } from '../output.js';
15
+ import { compactOutput, formatSavings } from '../compact/compact.js';
16
+ /**
17
+ * Read all of stdin as UTF-8. A stream read (not readFileSync(0)) — the
18
+ * synchronous form throws EAGAIN on a non-blocking pipe on macOS/Linux.
19
+ */
20
+ function readStdin() {
21
+ return new Promise((resolve) => {
22
+ const chunks = [];
23
+ process.stdin.on('data', (c) => chunks.push(Buffer.from(c)));
24
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
25
+ process.stdin.on('error', () => resolve(Buffer.concat(chunks).toString('utf8')));
26
+ });
27
+ }
28
+ function optsFromFlags(ctx) {
29
+ const opts = {
30
+ stripAnsi: ctx.flags['no-ansi'] !== true,
31
+ foldNodeModules: ctx.flags['no-fold'] !== true,
32
+ collapseBlanks: true,
33
+ };
34
+ if (typeof ctx.flags['min-run'] === 'number')
35
+ opts.minRun = ctx.flags['min-run'];
36
+ else if (typeof ctx.flags['min-run'] === 'string')
37
+ opts.minRun = parseInt(ctx.flags['min-run'], 10) || 3;
38
+ const win = ctx.flags.window;
39
+ if (typeof win === 'string' && /^\d+:\d+$/.test(win)) {
40
+ const [head, tail] = win.split(':').map((n) => parseInt(n, 10));
41
+ opts.window = { head, tail };
42
+ }
43
+ return opts;
44
+ }
45
+ async function run(ctx) {
46
+ const opts = optsFromFlags(ctx);
47
+ const quiet = ctx.flags.quiet === true;
48
+ // Command-wrap mode: everything after `--` is the command to run.
49
+ if (ctx.args.length > 0) {
50
+ const [cmd, ...cmdArgs] = ctx.args;
51
+ const r = spawnSync(cmd, cmdArgs, {
52
+ cwd: ctx.cwd,
53
+ encoding: 'utf8',
54
+ maxBuffer: 256 * 1024 * 1024,
55
+ // Merge streams so interleaved stdout/stderr stay in order.
56
+ stdio: ['inherit', 'pipe', 'pipe'],
57
+ });
58
+ if (r.error) {
59
+ output.printError(`failed to run ${cmd}: ${r.error.message}`);
60
+ return { success: false, exitCode: 127 };
61
+ }
62
+ const combined = (r.stdout || '') + (r.stderr || '');
63
+ const { text, stats } = compactOutput(combined, opts);
64
+ process.stdout.write(text);
65
+ if (!quiet)
66
+ process.stderr.write(formatSavings(stats) + '\n');
67
+ // Propagate the wrapped command's exit code verbatim.
68
+ const code = r.status ?? (r.signal ? 1 : 0);
69
+ return { success: code === 0, exitCode: code };
70
+ }
71
+ // Stdin-filter mode.
72
+ if (process.stdin.isTTY) {
73
+ output.writeln(output.error('Usage: swarmdo compact -- <command> OR <command> | swarmdo compact'));
74
+ return { success: false, exitCode: 1 };
75
+ }
76
+ const input = await readStdin();
77
+ const { text, stats } = compactOutput(input, opts);
78
+ if (ctx.flags['stats-json'] === true) {
79
+ process.stderr.write(JSON.stringify(stats) + '\n');
80
+ }
81
+ else if (!quiet) {
82
+ process.stderr.write(formatSavings(stats) + '\n');
83
+ }
84
+ process.stdout.write(text);
85
+ return { success: true, exitCode: 0 };
86
+ }
87
+ export const compactCommand = {
88
+ name: 'compact',
89
+ description: 'Compress noisy command output (tests/builds/logs) before it reaches an LLM — deterministic, zero tokens',
90
+ options: [
91
+ { name: 'no-ansi', description: 'keep ANSI colour/escape codes (default: strip)', type: 'boolean' },
92
+ { name: 'no-fold', description: 'keep full node_modules stack frames (default: fold)', type: 'boolean' },
93
+ { name: 'min-run', description: 'collapse a run of ≥N identical lines (default 3; 0 disables)', type: 'string' },
94
+ { name: 'window', description: 'keep first H + last T lines of long output, e.g. --window 40:20', type: 'string' },
95
+ { name: 'stats-json', description: 'emit compaction stats as JSON on stderr (stdin mode)', type: 'boolean' },
96
+ { name: 'quiet', description: 'suppress the savings summary on stderr', type: 'boolean' },
97
+ ],
98
+ examples: [
99
+ { command: 'npm test 2>&1 | swarmdo compact', description: 'Filter noisy test output on stdin' },
100
+ { command: 'swarmdo compact -- npm run build', description: 'Wrap a command; exit code propagates' },
101
+ { command: 'swarmdo compact --window 40:20 -- pnpm install', description: 'Head+tail window a long install log' },
102
+ ],
103
+ action: run,
104
+ };
105
+ export default compactCommand;
106
+ //# sourceMappingURL=compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/commands/compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAuB,MAAM,uBAAuB,CAAC;AAE1F;;;GAGG;AACH,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,GAAmB;IACxC,MAAM,IAAI,GAAmB;QAC3B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;QACxC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;QAC9C,cAAc,EAAE,IAAI;KACrB,CAAC;IACF,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAW,CAAC;SACtF,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAmB;IACpC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAEvC,kEAAkE;IAClE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;YAChC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;YAC5B,4DAA4D;YAC5D,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC3C,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9D,sDAAsD;QACtD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC,CAAC;QACvG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,yGAAyG;IACtH,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gDAAgD,EAAE,IAAI,EAAE,SAAS,EAAE;QACnG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,qDAAqD,EAAE,IAAI,EAAE,SAAS,EAAE;QACxG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8DAA8D,EAAE,IAAI,EAAE,QAAQ,EAAE;QAChH,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClH,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sDAAsD,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5G,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,wCAAwC,EAAE,IAAI,EAAE,SAAS,EAAE;KAC1F;IACD,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,iCAAiC,EAAE,WAAW,EAAE,mCAAmC,EAAE;QAChG,EAAE,OAAO,EAAE,kCAAkC,EAAE,WAAW,EAAE,sCAAsC,EAAE;QACpG,EAAE,OAAO,EAAE,gDAAgD,EAAE,WAAW,EAAE,qCAAqC,EAAE;KAClH;IACD,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}