@johnfaleke/fathom 0.2.0 → 0.3.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 +76 -7
- package/dist/ai/context.d.ts +1 -0
- package/dist/ai/context.d.ts.map +1 -1
- package/dist/ai/context.js +10 -1
- package/dist/ai/context.js.map +1 -1
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +5 -1
- package/dist/ai/openai.js.map +1 -1
- package/dist/cli.js +38 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.d.ts +2 -5
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +73 -9
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +26 -6
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/init.d.ts +3 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +9 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/setup.d.ts +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +19 -5
- package/dist/commands/setup.js.map +1 -1
- package/dist/mcp/resources.d.ts +15 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +65 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +24 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +126 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +18 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +251 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/render/terminal.d.ts +2 -0
- package/dist/render/terminal.d.ts.map +1 -1
- package/dist/render/terminal.js +51 -0
- package/dist/render/terminal.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Fathom is a local-first CLI for project Work State. It gives developers a deterministic, evidence-backed view of what is happening in a repo: what is in progress, what has been completed, what changed, and what may be silently broken.
|
|
6
6
|
|
|
7
|
-
Current release: `0.
|
|
7
|
+
Current release: `0.3.0` — Automation surfaces, CI gating, and GitHub Actions annotations.
|
|
8
8
|
|
|
9
9
|
## Why Fathom exists
|
|
10
10
|
|
|
@@ -122,7 +122,8 @@ fathom setup --non-interactive --profile default --provider openai --model gpt-4
|
|
|
122
122
|
```
|
|
123
123
|
|
|
124
124
|
`check --ai` runs deterministic checks first, then adds one clearly labelled
|
|
125
|
-
interpretation using the active profile.
|
|
125
|
+
interpretation using the active profile. The `--ai` flag is the explicit network
|
|
126
|
+
consent boundary; plain `fathom check` never sends project files.
|
|
126
127
|
The lower-level `fathom interpret` command remains available for custom prompts.
|
|
127
128
|
|
|
128
129
|
Multiple profiles and custom OpenAI-compatible endpoints are supported:
|
|
@@ -227,13 +228,81 @@ itself; it is the deliberate release switch.
|
|
|
227
228
|
|
|
228
229
|
| Command | Purpose |
|
|
229
230
|
|---------|---------|
|
|
230
|
-
| `fathom init` | Create `.fathom/` for state, config, and event history |
|
|
231
|
+
| `fathom init [--json]` | Create `.fathom/` for state, config, and event history |
|
|
231
232
|
| `fathom set --current ...` | Update current work and task lists |
|
|
232
|
-
| `fathom status` | Show the current project state |
|
|
233
|
-
| `fathom diff` | Show semantic file changes and project impact |
|
|
234
|
-
| `fathom check` | Detect inconsistent or forgotten wiring |
|
|
233
|
+
| `fathom status [--json]` | Show the current project state |
|
|
234
|
+
| `fathom diff [--json]` | Show semantic file changes and project impact |
|
|
235
|
+
| `fathom check [options]` | Detect inconsistent or forgotten wiring |
|
|
236
|
+
| `fathom scan [--json]` | Build the local Project Model in `.fathom/model.json` |
|
|
237
|
+
| `fathom mcp` | Start Model Context Protocol (MCP) stdio server for agents |
|
|
238
|
+
| `fathom setup [options]` | Guided interactive/non-interactive AI profile setup |
|
|
239
|
+
| `fathom config show\|set` | Inspect or update AI profiles without storing keys |
|
|
240
|
+
| `fathom interpret --consent` | Direct AI interpretation with custom prompt |
|
|
235
241
|
|
|
236
|
-
|
|
242
|
+
## Model Context Protocol (MCP) Server
|
|
243
|
+
|
|
244
|
+
Fathom includes a built-in standard **Model Context Protocol (MCP)** stdio server. This enables AI coding agents (Claude Desktop, Cursor, Antigravity, Windsurf, Roo Code) to inspect and update Work State directly.
|
|
245
|
+
|
|
246
|
+
### Tools provided to agents:
|
|
247
|
+
- `fathom_status` — Read active work state, progress, findings, and attention items.
|
|
248
|
+
- `fathom_scan` — Generate and return evidence-backed Project Model.
|
|
249
|
+
- `fathom_check` — Run deterministic checks and return findings with evidence.
|
|
250
|
+
- `fathom_set_work` — Update current work description, completed tasks, and remaining tasks.
|
|
251
|
+
- `fathom_diff` — Read semantic git changes grouped by project area.
|
|
252
|
+
- `fathom_get_model` — Read `.fathom/model.json`.
|
|
253
|
+
|
|
254
|
+
### MCP Configuration:
|
|
255
|
+
|
|
256
|
+
Add to `claude_desktop_config.json` or `.cursor/mcp.json`:
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"mcpServers": {
|
|
261
|
+
"fathom": {
|
|
262
|
+
"command": "npx",
|
|
263
|
+
"args": ["-y", "@johnfaleke/fathom", "mcp"]
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## CI & Automation
|
|
270
|
+
|
|
271
|
+
Fathom v0.3 introduces first-class automation surfaces for CI pipelines, PR annotations, and gating.
|
|
272
|
+
|
|
273
|
+
### GitHub Actions Annotations
|
|
274
|
+
|
|
275
|
+
Run Fathom in GitHub Actions with `--format github` to annotate PR diffs directly:
|
|
276
|
+
|
|
277
|
+
```yaml
|
|
278
|
+
- name: Run Fathom Checks
|
|
279
|
+
run: npx @johnfaleke/fathom check --format github
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### CI Gating & Exit Codes
|
|
283
|
+
|
|
284
|
+
Gate pull requests based on attention thresholds:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Fail if more than 0 attention items exist
|
|
288
|
+
npx @johnfaleke/fathom check --max-attention 0
|
|
289
|
+
|
|
290
|
+
# Fail if any warning is detected
|
|
291
|
+
npx @johnfaleke/fathom check --fail-on warning
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Exit codes:
|
|
295
|
+
- `0`: Success (clean / no gating violations)
|
|
296
|
+
- `1`: Error (uninitialized workspace or invalid configuration)
|
|
297
|
+
- `2`: Findings detected (warnings or attention items exceeding threshold)
|
|
298
|
+
|
|
299
|
+
### Markdown Report for PR Comments / Step Summary
|
|
300
|
+
|
|
301
|
+
Output formatted Markdown tables directly into `$GITHUB_STEP_SUMMARY`:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
npx @johnfaleke/fathom check --format markdown >> $GITHUB_STEP_SUMMARY
|
|
305
|
+
```
|
|
237
306
|
|
|
238
307
|
## Example status output
|
|
239
308
|
|
package/dist/ai/context.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export interface SafeAIContext {
|
|
|
11
11
|
}>;
|
|
12
12
|
}
|
|
13
13
|
export declare function collectSafeAIContext(ctx: ProjectContext, policy?: AIContextPolicy): Promise<SafeAIContext>;
|
|
14
|
+
export declare function redactSensitiveText(text: string): string;
|
|
14
15
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/ai/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/ai/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/ai/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAA;KAAE,CAAC,CAAC;CACjG;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,cAAc,EACnB,MAAM,GAAE,eAAoB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD"}
|
package/dist/ai/context.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
const DEFAULT_MAX_FILE_BYTES = 50_000;
|
|
2
2
|
const SENSITIVE_NAME = /(^|\/)(\.env(?:\..*)?|.*\.(?:pem|key|p12|pfx|jks|crt|cer|der)|id_rsa(?:\..*)?|credentials(?:\..*)?|secrets?(?:\..*)?)$/i;
|
|
3
3
|
const BINARY_EXTENSION = /\.(?:png|jpe?g|gif|webp|ico|pdf|zip|tar|gz|7z|woff2?|ttf|mp[34]|mov|avi|db|sqlite)$/i;
|
|
4
|
+
const SECRET_ASSIGNMENT = /((?:api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|password|passwd|private[_-]?key|secret)\s*["']?\s*[:=]\s*["']?)([^\s"',}\]]+)/gi;
|
|
5
|
+
const BEARER_TOKEN = /(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi;
|
|
6
|
+
const PEM_BLOCK = /-----BEGIN [^-]+-----[\s\S]*?-----END [^-]+-----/g;
|
|
4
7
|
export async function collectSafeAIContext(ctx, policy = {}) {
|
|
5
8
|
const maxFileBytes = policy.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
|
|
6
9
|
const allowed = policy.includePaths ? new Set(policy.includePaths) : null;
|
|
@@ -26,8 +29,14 @@ export async function collectSafeAIContext(ctx, policy = {}) {
|
|
|
26
29
|
excluded.push({ path: relPath, reason: "too-large" });
|
|
27
30
|
continue;
|
|
28
31
|
}
|
|
29
|
-
files[relPath] = text;
|
|
32
|
+
files[relPath] = redactSensitiveText(text);
|
|
30
33
|
}
|
|
31
34
|
return { files, excluded };
|
|
32
35
|
}
|
|
36
|
+
export function redactSensitiveText(text) {
|
|
37
|
+
return text
|
|
38
|
+
.replace(PEM_BLOCK, "[REDACTED_PRIVATE_KEY]")
|
|
39
|
+
.replace(BEARER_TOKEN, "$1[REDACTED_TOKEN]")
|
|
40
|
+
.replace(SECRET_ASSIGNMENT, "$1[REDACTED]");
|
|
41
|
+
}
|
|
33
42
|
//# sourceMappingURL=context.js.map
|
package/dist/ai/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/ai/context.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,cAAc,GAAG,yHAAyH,CAAC;AACjJ,MAAM,gBAAgB,GAAG,sFAAsF,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/ai/context.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,cAAc,GAAG,yHAAyH,CAAC;AACjJ,MAAM,gBAAgB,GAAG,sFAAsF,CAAC;AAChH,MAAM,iBAAiB,GAAG,mJAAmJ,CAAC;AAC9K,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,SAAS,GAAG,mDAAmD,CAAC;AAYtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAmB,EACnB,SAA0B,EAAE;IAE5B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,OAAO,CAAC,SAAS,EAAE,wBAAwB,CAAC;SAC5C,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC;SAC3C,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/ai/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,qBAAqB;IAepC,SAAS,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAqDjF"}
|
package/dist/ai/openai.js
CHANGED
|
@@ -12,7 +12,11 @@ export class OpenAIProvider {
|
|
|
12
12
|
throw new Error("OpenAI model is required");
|
|
13
13
|
this.apiKey = options.apiKey;
|
|
14
14
|
this.model = options.model;
|
|
15
|
-
|
|
15
|
+
const baseUrl = new URL(options.baseUrl ?? "https://api.openai.com/v1");
|
|
16
|
+
if (!['http:', 'https:'].includes(baseUrl.protocol) || baseUrl.username || baseUrl.password) {
|
|
17
|
+
throw new Error("Provider base URL must be an http(s) URL without embedded credentials");
|
|
18
|
+
}
|
|
19
|
+
this.baseUrl = baseUrl.toString().replace(/\/$/, "");
|
|
16
20
|
this.type = options.providerType ?? "openai";
|
|
17
21
|
this.id = this.type;
|
|
18
22
|
this.name = this.type === "custom" ? "Custom OpenAI-compatible provider" : "OpenAI";
|
package/dist/ai/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,cAAc;IAChB,EAAE,CAAS;IACX,IAAI,CAAS;IACb,IAAI,CAAe;IAEX,MAAM,CAAS;IACf,KAAK,CAAS;IACd,OAAO,CAAS;IAEjC,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,8 @@ import { cmdInterpret } from "./commands/interpret.js";
|
|
|
7
7
|
import { cmdConfig } from "./commands/config.js";
|
|
8
8
|
import { cmdSetup } from "./commands/setup.js";
|
|
9
9
|
import { cmdScan } from "./commands/scan.js";
|
|
10
|
-
|
|
10
|
+
import { cmdMCP } from "./commands/mcp.js";
|
|
11
|
+
const VERSION = "0.3.0";
|
|
11
12
|
function printHelp() {
|
|
12
13
|
console.log(`fathom ${VERSION}
|
|
13
14
|
|
|
@@ -17,23 +18,30 @@ Usage:
|
|
|
17
18
|
fathom <command> [options]
|
|
18
19
|
|
|
19
20
|
Commands:
|
|
20
|
-
init
|
|
21
|
+
init [--json] Initialize Fathom in the current project
|
|
21
22
|
set [--current <text>] [--complete <item>] [--incomplete <item>]
|
|
22
23
|
Update the active work state
|
|
23
24
|
status [--json] Where does the project actually stand?
|
|
24
25
|
diff [--json] What meaningfully changed (git-backed in v0.1)
|
|
25
|
-
check [
|
|
26
|
-
check --ai [
|
|
27
|
-
config show
|
|
28
|
-
config set <key> <value>
|
|
29
|
-
|
|
26
|
+
check [options] Find inconsistencies and forgotten wiring
|
|
27
|
+
check --ai [options] Add opt-in provider interpretation
|
|
28
|
+
config show [--json] Show local configuration
|
|
29
|
+
config set <key> <value> [--json]
|
|
30
|
+
Update AI profile configuration
|
|
31
|
+
setup [options] Guided AI setup for this workspace
|
|
30
32
|
scan [--json] Build the local Project Model
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
mcp Start Model Context Protocol (MCP) stdio server
|
|
34
|
+
interpret --provider openai Opt-in AI interpretation with explicit consent
|
|
35
|
+
|
|
36
|
+
Automation & CI Options:
|
|
37
|
+
--json Emit machine-readable JSON output
|
|
38
|
+
--format <type> Output format: terminal | json | github | markdown
|
|
39
|
+
--max-attention <number> CI gating: fail if attention items exceed threshold
|
|
40
|
+
--fail-on <severity> CI gating: fail on severity: info | potential | warning
|
|
33
41
|
|
|
34
42
|
Options:
|
|
35
|
-
-h, --help
|
|
36
|
-
-v, --version
|
|
43
|
+
-h, --help Show help
|
|
44
|
+
-v, --version Show version
|
|
37
45
|
`);
|
|
38
46
|
}
|
|
39
47
|
async function main() {
|
|
@@ -41,6 +49,10 @@ async function main() {
|
|
|
41
49
|
const command = args[0];
|
|
42
50
|
const statusOptions = parseStatusOptions(args.slice(1));
|
|
43
51
|
const json = statusOptions.json || args.includes("--json");
|
|
52
|
+
const format = parseFormatOption(args.slice(1), json);
|
|
53
|
+
const maxAttentionRaw = parseOption(args.slice(1), "--max-attention");
|
|
54
|
+
const maxAttention = maxAttentionRaw !== undefined ? Number(maxAttentionRaw) : undefined;
|
|
55
|
+
const failOn = parseOption(args.slice(1), "--fail-on");
|
|
44
56
|
if (!command || command === "-h" || command === "--help") {
|
|
45
57
|
printHelp();
|
|
46
58
|
return;
|
|
@@ -51,7 +63,7 @@ async function main() {
|
|
|
51
63
|
}
|
|
52
64
|
switch (command) {
|
|
53
65
|
case "init":
|
|
54
|
-
process.exitCode = await cmdInit(process.cwd());
|
|
66
|
+
process.exitCode = await cmdInit(process.cwd(), { json });
|
|
55
67
|
break;
|
|
56
68
|
case "set":
|
|
57
69
|
process.exitCode = await cmdStatus(process.cwd(), {
|
|
@@ -75,6 +87,9 @@ async function main() {
|
|
|
75
87
|
case "check":
|
|
76
88
|
process.exitCode = await cmdCheck(process.cwd(), {
|
|
77
89
|
json,
|
|
90
|
+
format,
|
|
91
|
+
maxAttention,
|
|
92
|
+
failOn,
|
|
78
93
|
ai: args.includes("--ai"),
|
|
79
94
|
prompt: parseOption(args.slice(1), "--prompt"),
|
|
80
95
|
});
|
|
@@ -90,11 +105,15 @@ async function main() {
|
|
|
90
105
|
baseUrl: parseOption(args.slice(1), "--base-url"),
|
|
91
106
|
apiKeyEnv: parseOption(args.slice(1), "--api-key-env"),
|
|
92
107
|
nonInteractive: args.includes("--non-interactive"),
|
|
108
|
+
json,
|
|
93
109
|
});
|
|
94
110
|
break;
|
|
95
111
|
case "scan":
|
|
96
112
|
process.exitCode = await cmdScan(process.cwd(), { json });
|
|
97
113
|
break;
|
|
114
|
+
case "mcp":
|
|
115
|
+
process.exitCode = await cmdMCP(process.cwd());
|
|
116
|
+
break;
|
|
98
117
|
case "interpret":
|
|
99
118
|
process.exitCode = await cmdInterpret(process.cwd(), {
|
|
100
119
|
json,
|
|
@@ -160,6 +179,13 @@ function parseOption(args, option) {
|
|
|
160
179
|
const value = index >= 0 ? args[index + 1] : undefined;
|
|
161
180
|
return value && !value.startsWith("--") ? value : undefined;
|
|
162
181
|
}
|
|
182
|
+
function parseFormatOption(args, json) {
|
|
183
|
+
const raw = parseOption(args, "--format");
|
|
184
|
+
if (raw === "json" || raw === "github" || raw === "markdown" || raw === "terminal") {
|
|
185
|
+
return raw;
|
|
186
|
+
}
|
|
187
|
+
return json ? "json" : "terminal";
|
|
188
|
+
}
|
|
163
189
|
main().catch((err) => {
|
|
164
190
|
console.error(err);
|
|
165
191
|
process.exitCode = 1;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/check.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
ai?: boolean;
|
|
4
|
-
prompt?: string;
|
|
5
|
-
}): Promise<number>;
|
|
1
|
+
import type { CheckOptions } from "../types.js";
|
|
2
|
+
export declare function cmdCheck(cwd: string, opts?: CheckOptions): Promise<number>;
|
|
6
3
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAG1D,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CA6FjB"}
|
package/dist/commands/check.js
CHANGED
|
@@ -3,12 +3,17 @@ import { builtinChecks } from "../checks/index.js";
|
|
|
3
3
|
import { createProjectContext } from "../core/project.js";
|
|
4
4
|
import { runChecks } from "../core/runner.js";
|
|
5
5
|
import { appendEvent, applyFindings, isInitialized, loadConfig, loadState, saveState, } from "../core/storage.js";
|
|
6
|
-
import { renderFindings, renderInterpretation } from "../render/terminal.js";
|
|
6
|
+
import { renderFindings, renderGitHubAnnotations, renderInterpretation, renderMarkdownSummary, } from "../render/terminal.js";
|
|
7
7
|
import { interpretProject } from "./interpret.js";
|
|
8
8
|
export async function cmdCheck(cwd, opts = {}) {
|
|
9
9
|
const root = path.resolve(cwd);
|
|
10
10
|
if (!(await isInitialized(root))) {
|
|
11
|
-
|
|
11
|
+
if (opts.format === "json" || opts.json) {
|
|
12
|
+
console.error(JSON.stringify({ error: "Fathom is not initialized. Run `fathom init` first." }));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error("Fathom is not initialized. Run `fathom init` first.");
|
|
16
|
+
}
|
|
12
17
|
return 1;
|
|
13
18
|
}
|
|
14
19
|
const config = await loadConfig(root);
|
|
@@ -24,21 +29,80 @@ export async function cmdCheck(cwd, opts = {}) {
|
|
|
24
29
|
});
|
|
25
30
|
let interpretation;
|
|
26
31
|
if (opts.ai) {
|
|
32
|
+
if (config.ai?.enabled !== true) {
|
|
33
|
+
const msg = "AI interpretation is not configured for this workspace.\nRun `fathom setup` first, then review the profile before using `fathom check --ai`.";
|
|
34
|
+
if (opts.format === "json" || opts.json) {
|
|
35
|
+
console.error(JSON.stringify({ error: msg }));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.error(msg);
|
|
39
|
+
}
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
27
42
|
try {
|
|
28
43
|
interpretation = await interpretProject(root, config, opts.prompt);
|
|
29
44
|
}
|
|
30
45
|
catch (error) {
|
|
31
|
-
|
|
46
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
47
|
+
if (opts.format === "json" || opts.json) {
|
|
48
|
+
console.error(JSON.stringify({ error: errMsg }));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error(errMsg);
|
|
52
|
+
}
|
|
32
53
|
return 1;
|
|
33
54
|
}
|
|
34
55
|
}
|
|
35
|
-
|
|
36
|
-
|
|
56
|
+
const format = opts.format ?? (opts.json ? "json" : "terminal");
|
|
57
|
+
switch (format) {
|
|
58
|
+
case "json":
|
|
59
|
+
console.log(JSON.stringify({
|
|
60
|
+
findings,
|
|
61
|
+
attention: state.attention,
|
|
62
|
+
interpretation: interpretation
|
|
63
|
+
? {
|
|
64
|
+
...interpretation.result,
|
|
65
|
+
context: {
|
|
66
|
+
filesIncluded: Object.keys(interpretation.context.files),
|
|
67
|
+
excluded: interpretation.context.excluded,
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
: undefined,
|
|
71
|
+
}, null, 2));
|
|
72
|
+
break;
|
|
73
|
+
case "github":
|
|
74
|
+
process.stdout.write(renderGitHubAnnotations(findings));
|
|
75
|
+
process.stdout.write(renderFindings(findings));
|
|
76
|
+
if (interpretation) {
|
|
77
|
+
process.stdout.write(renderInterpretation(interpretation.result, interpretation.context));
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case "markdown":
|
|
81
|
+
process.stdout.write(renderMarkdownSummary(state, findings, interpretation?.result));
|
|
82
|
+
break;
|
|
83
|
+
case "terminal":
|
|
84
|
+
default:
|
|
85
|
+
process.stdout.write(renderFindings(findings));
|
|
86
|
+
if (interpretation) {
|
|
87
|
+
process.stdout.write(renderInterpretation(interpretation.result, interpretation.context));
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
return evaluateGating(state.attention, findings, opts);
|
|
92
|
+
}
|
|
93
|
+
function evaluateGating(attention, findings, opts) {
|
|
94
|
+
if (opts.maxAttention !== undefined) {
|
|
95
|
+
if (attention > opts.maxAttention)
|
|
96
|
+
return 2;
|
|
97
|
+
return 0;
|
|
37
98
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
99
|
+
if (opts.failOn) {
|
|
100
|
+
const severities = opts.failOn === "info"
|
|
101
|
+
? ["info", "potential", "warning"]
|
|
102
|
+
: opts.failOn === "potential"
|
|
103
|
+
? ["potential", "warning"]
|
|
104
|
+
: ["warning"];
|
|
105
|
+
return findings.some((f) => severities.includes(f.severity)) ? 2 : 0;
|
|
42
106
|
}
|
|
43
107
|
return findings.some((f) => f.severity === "warning") ? 2 : 0;
|
|
44
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC5E"}
|
package/dist/commands/config.js
CHANGED
|
@@ -3,22 +3,42 @@ import { isInitialized, loadConfig, fathomPaths } from "../core/storage.js";
|
|
|
3
3
|
import { writeFile } from "node:fs/promises";
|
|
4
4
|
export async function cmdConfig(cwd, args) {
|
|
5
5
|
const root = path.resolve(cwd);
|
|
6
|
+
const isJson = args.includes("--json");
|
|
7
|
+
const filteredArgs = args.filter((a) => a !== "--json");
|
|
6
8
|
if (!(await isInitialized(root))) {
|
|
7
|
-
|
|
9
|
+
if (isJson) {
|
|
10
|
+
console.error(JSON.stringify({ error: "Fathom is not initialized. Run `fathom init` first." }));
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
console.error("Fathom is not initialized. Run `fathom init` first.");
|
|
14
|
+
}
|
|
8
15
|
return 1;
|
|
9
16
|
}
|
|
10
|
-
if (
|
|
17
|
+
if (filteredArgs[0] === "show") {
|
|
11
18
|
console.log(JSON.stringify(await loadConfig(root), null, 2));
|
|
12
19
|
return 0;
|
|
13
20
|
}
|
|
14
|
-
if (
|
|
15
|
-
|
|
21
|
+
if (filteredArgs[0] !== "set" || !filteredArgs[1] || filteredArgs[2] === undefined) {
|
|
22
|
+
if (isJson) {
|
|
23
|
+
console.error(JSON.stringify({ error: "Usage: fathom config show | fathom config set <key> <value>" }));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.error("Usage: fathom config show | fathom config set <key> <value>");
|
|
27
|
+
}
|
|
16
28
|
return 1;
|
|
17
29
|
}
|
|
30
|
+
const key = filteredArgs[1];
|
|
31
|
+
const rawValue = filteredArgs.slice(2).join(" ");
|
|
32
|
+
const parsedValue = parseValue(rawValue);
|
|
18
33
|
const config = await loadConfig(root);
|
|
19
|
-
setConfigValue(config,
|
|
34
|
+
setConfigValue(config, key, parsedValue);
|
|
20
35
|
await writeFile(fathomPaths(root).config, JSON.stringify(config, null, 2) + "\n", "utf8");
|
|
21
|
-
|
|
36
|
+
if (isJson) {
|
|
37
|
+
console.log(JSON.stringify({ success: true, key, value: parsedValue }, null, 2));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(`Updated ${key}.`);
|
|
41
|
+
}
|
|
22
42
|
return 0;
|
|
23
43
|
}
|
|
24
44
|
function setConfigValue(config, key, value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAc;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { initFathom, isInitialized, fathomPaths, } from "../core/storage.js";
|
|
3
|
-
export async function cmdInit(cwd) {
|
|
3
|
+
export async function cmdInit(cwd, opts = {}) {
|
|
4
4
|
const root = path.resolve(cwd);
|
|
5
|
+
const paths = fathomPaths(root);
|
|
5
6
|
if (await isInitialized(root)) {
|
|
6
|
-
|
|
7
|
+
if (opts.json) {
|
|
8
|
+
console.log(JSON.stringify({ initialized: true, alreadyExisted: true, root, paths }, null, 2));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
console.log(`Fathom already initialized at ${paths.dir}`);
|
|
12
|
+
}
|
|
7
13
|
return 0;
|
|
8
14
|
}
|
|
9
15
|
await initFathom(root);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
if (opts.json) {
|
|
17
|
+
console.log(JSON.stringify({ initialized: true, alreadyExisted: false, root, paths }, null, 2));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.log(`Initialized Fathom in ${paths.dir}`);
|
|
21
|
+
console.log(` state.json — current Work State`);
|
|
22
|
+
console.log(` events.jsonl — append-only observations`);
|
|
23
|
+
console.log(` config.json — local configuration`);
|
|
24
|
+
}
|
|
14
25
|
return 0;
|
|
15
26
|
}
|
|
16
27
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,OAA2B,EAAE;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKzD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { FathomMCPServer } from "../mcp/server.js";
|
|
3
|
+
export async function cmdMCP(cwd) {
|
|
4
|
+
const root = path.resolve(cwd);
|
|
5
|
+
const server = new FathomMCPServer(root);
|
|
6
|
+
await server.start();
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=mcp.js.map
|