@johnfaleke/fathom 0.2.1 → 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.
Files changed (41) hide show
  1. package/README.md +76 -7
  2. package/dist/cli.js +38 -12
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/check.d.ts +2 -5
  5. package/dist/commands/check.d.ts.map +1 -1
  6. package/dist/commands/check.js +73 -9
  7. package/dist/commands/check.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +26 -6
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/init.d.ts +3 -1
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +17 -6
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/mcp.d.ts +2 -0
  16. package/dist/commands/mcp.d.ts.map +1 -0
  17. package/dist/commands/mcp.js +9 -0
  18. package/dist/commands/mcp.js.map +1 -0
  19. package/dist/commands/setup.d.ts +1 -0
  20. package/dist/commands/setup.d.ts.map +1 -1
  21. package/dist/commands/setup.js +19 -5
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/mcp/resources.d.ts +15 -0
  24. package/dist/mcp/resources.d.ts.map +1 -0
  25. package/dist/mcp/resources.js +65 -0
  26. package/dist/mcp/resources.js.map +1 -0
  27. package/dist/mcp/server.d.ts +24 -0
  28. package/dist/mcp/server.d.ts.map +1 -0
  29. package/dist/mcp/server.js +126 -0
  30. package/dist/mcp/server.js.map +1 -0
  31. package/dist/mcp/tools.d.ts +18 -0
  32. package/dist/mcp/tools.d.ts.map +1 -0
  33. package/dist/mcp/tools.js +251 -0
  34. package/dist/mcp/tools.js.map +1 -0
  35. package/dist/render/terminal.d.ts +2 -0
  36. package/dist/render/terminal.d.ts.map +1 -1
  37. package/dist/render/terminal.js +51 -0
  38. package/dist/render/terminal.js.map +1 -1
  39. package/dist/types.d.ts +9 -0
  40. package/dist/types.d.ts.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ import path from "node:path";
2
+ import { readFile } from "node:fs/promises";
3
+ import { fathomPaths, isInitialized } from "../core/storage.js";
4
+ export const MCP_RESOURCES = [
5
+ {
6
+ uri: "fathom://state",
7
+ name: "Fathom Work State",
8
+ description: "The active project Work State snapshot (.fathom/state.json)",
9
+ mimeType: "application/json",
10
+ },
11
+ {
12
+ uri: "fathom://model",
13
+ name: "Fathom Project Model",
14
+ description: "The durable evidence-backed Project Model (.fathom/model.json)",
15
+ mimeType: "application/json",
16
+ },
17
+ {
18
+ uri: "fathom://config",
19
+ name: "Fathom Config",
20
+ description: "Local project configuration and ignore rules (.fathom/config.json)",
21
+ mimeType: "application/json",
22
+ },
23
+ {
24
+ uri: "fathom://events",
25
+ name: "Fathom Event Log",
26
+ description: "Append-only log of repository checks, scans, and updates (.fathom/events.jsonl)",
27
+ mimeType: "text/plain",
28
+ },
29
+ ];
30
+ export async function readMCPResource(root, uri) {
31
+ const absRoot = path.resolve(root);
32
+ if (!(await isInitialized(absRoot))) {
33
+ throw new Error("Fathom is not initialized in this workspace.");
34
+ }
35
+ const paths = fathomPaths(absRoot);
36
+ let filePath;
37
+ let mimeType = "application/json";
38
+ switch (uri) {
39
+ case "fathom://state":
40
+ filePath = paths.state;
41
+ break;
42
+ case "fathom://model":
43
+ filePath = paths.model;
44
+ break;
45
+ case "fathom://config":
46
+ filePath = paths.config;
47
+ break;
48
+ case "fathom://events":
49
+ filePath = paths.events;
50
+ mimeType = "text/plain";
51
+ break;
52
+ default:
53
+ throw new Error(`Resource not found: ${uri}`);
54
+ }
55
+ try {
56
+ const text = await readFile(filePath, "utf8");
57
+ return {
58
+ contents: [{ uri, mimeType, text }],
59
+ };
60
+ }
61
+ catch (error) {
62
+ throw new Error(`Failed to read resource ${uri}: ${error instanceof Error ? error.message : String(error)}`);
63
+ }
64
+ }
65
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAShE,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,6DAA6D;QAC1E,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oEAAoE;QACjF,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iFAAiF;QAC9F,QAAQ,EAAE,YAAY;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAAW;IAEX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAQ,GAAG,kBAAkB,CAAC;IAElC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,gBAAgB;YACnB,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;YACvB,MAAM;QACR,KAAK,gBAAgB;YACnB,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;YACvB,MAAM;QACR,KAAK,iBAAiB;YACpB,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;YACxB,MAAM;QACR,KAAK,iBAAiB;YACpB,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;YACxB,QAAQ,GAAG,YAAY,CAAC;YACxB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ interface JSONRPCRequest {
2
+ jsonrpc: "2.0";
3
+ id?: string | number | null;
4
+ method: string;
5
+ params?: Record<string, unknown>;
6
+ }
7
+ interface JSONRPCResponse {
8
+ jsonrpc: "2.0";
9
+ id: string | number | null;
10
+ result?: unknown;
11
+ error?: {
12
+ code: number;
13
+ message: string;
14
+ data?: unknown;
15
+ };
16
+ }
17
+ export declare class FathomMCPServer {
18
+ private readonly root;
19
+ constructor(root: string);
20
+ start(): Promise<void>;
21
+ handleRequest(req: JSONRPCRequest): Promise<JSONRPCResponse | null>;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,IAAI,EAAE,MAAM;IAIlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CA2F1E"}
@@ -0,0 +1,126 @@
1
+ import readline from "node:readline";
2
+ import { MCP_TOOLS, executeMCPTool } from "./tools.js";
3
+ import { MCP_RESOURCES, readMCPResource } from "./resources.js";
4
+ export class FathomMCPServer {
5
+ root;
6
+ constructor(root) {
7
+ this.root = root;
8
+ }
9
+ async start() {
10
+ const rl = readline.createInterface({
11
+ input: process.stdin,
12
+ output: process.stdout,
13
+ terminal: false,
14
+ });
15
+ rl.on("line", async (line) => {
16
+ const trimmed = line.trim();
17
+ if (!trimmed)
18
+ return;
19
+ try {
20
+ const req = JSON.parse(trimmed);
21
+ const res = await this.handleRequest(req);
22
+ if (res) {
23
+ process.stdout.write(JSON.stringify(res) + "\n");
24
+ }
25
+ }
26
+ catch (err) {
27
+ const errorResponse = {
28
+ jsonrpc: "2.0",
29
+ id: null,
30
+ error: {
31
+ code: -32700,
32
+ message: "Parse error",
33
+ data: err instanceof Error ? err.message : String(err),
34
+ },
35
+ };
36
+ process.stdout.write(JSON.stringify(errorResponse) + "\n");
37
+ }
38
+ });
39
+ }
40
+ async handleRequest(req) {
41
+ // If it's a notification without an id, do not respond unless required
42
+ const isNotification = req.id === undefined || req.id === null;
43
+ switch (req.method) {
44
+ case "initialize": {
45
+ const result = {
46
+ protocolVersion: "2024-11-05",
47
+ capabilities: {
48
+ tools: {},
49
+ resources: {},
50
+ },
51
+ serverInfo: {
52
+ name: "fathom",
53
+ version: "0.3.0",
54
+ },
55
+ };
56
+ return { jsonrpc: "2.0", id: req.id ?? null, result };
57
+ }
58
+ case "notifications/initialized":
59
+ case "initialized":
60
+ return null;
61
+ case "ping":
62
+ return { jsonrpc: "2.0", id: req.id ?? null, result: {} };
63
+ case "tools/list": {
64
+ return {
65
+ jsonrpc: "2.0",
66
+ id: req.id ?? null,
67
+ result: {
68
+ tools: MCP_TOOLS,
69
+ },
70
+ };
71
+ }
72
+ case "tools/call": {
73
+ const toolName = String(req.params?.name ?? "");
74
+ const toolArgs = req.params?.arguments ?? {};
75
+ const outcome = await executeMCPTool(this.root, toolName, toolArgs);
76
+ return {
77
+ jsonrpc: "2.0",
78
+ id: req.id ?? null,
79
+ result: outcome,
80
+ };
81
+ }
82
+ case "resources/list": {
83
+ return {
84
+ jsonrpc: "2.0",
85
+ id: req.id ?? null,
86
+ result: {
87
+ resources: MCP_RESOURCES,
88
+ },
89
+ };
90
+ }
91
+ case "resources/read": {
92
+ const uri = String(req.params?.uri ?? "");
93
+ try {
94
+ const outcome = await readMCPResource(this.root, uri);
95
+ return {
96
+ jsonrpc: "2.0",
97
+ id: req.id ?? null,
98
+ result: outcome,
99
+ };
100
+ }
101
+ catch (err) {
102
+ return {
103
+ jsonrpc: "2.0",
104
+ id: req.id ?? null,
105
+ error: {
106
+ code: -32602,
107
+ message: err instanceof Error ? err.message : String(err),
108
+ },
109
+ };
110
+ }
111
+ }
112
+ default:
113
+ if (isNotification)
114
+ return null;
115
+ return {
116
+ jsonrpc: "2.0",
117
+ id: req.id ?? null,
118
+ error: {
119
+ code: -32601,
120
+ message: `Method not found: ${req.method}`,
121
+ },
122
+ };
123
+ }
124
+ }
125
+ }
126
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface MCPToolDefinition {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: "object";
6
+ properties?: Record<string, unknown>;
7
+ required?: string[];
8
+ };
9
+ }
10
+ export declare const MCP_TOOLS: MCPToolDefinition[];
11
+ export declare function executeMCPTool(root: string, toolName: string, args?: Record<string, unknown>): Promise<{
12
+ content: Array<{
13
+ type: "text";
14
+ text: string;
15
+ }>;
16
+ isError?: boolean;
17
+ }>;
18
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,SAAS,EAAE,iBAAiB,EAsExC,CAAC;AAEF,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwKhF"}
@@ -0,0 +1,251 @@
1
+ import path from "node:path";
2
+ import { builtinChecks } from "../checks/index.js";
3
+ import { gitChangedFiles, gitDiffStat, gitIsRepo } from "../core/git.js";
4
+ import { buildProjectModel } from "../core/model.js";
5
+ import { createProjectContext } from "../core/project.js";
6
+ import { runChecks } from "../core/runner.js";
7
+ import { applyFindings, isInitialized, loadConfig, loadProjectModel, loadState, saveProjectModel, saveState, appendEvent, } from "../core/storage.js";
8
+ export const MCP_TOOLS = [
9
+ {
10
+ name: "fathom_status",
11
+ description: "Get current project Work State, active tasks, completed/remaining items, deterministic findings with evidence, and git change impact.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {},
15
+ },
16
+ },
17
+ {
18
+ name: "fathom_scan",
19
+ description: "Scan repository files and manifests to build an evidence-backed Project Model with stack detection and confidence-scored claims in .fathom/model.json.",
20
+ inputSchema: {
21
+ type: "object",
22
+ properties: {},
23
+ },
24
+ },
25
+ {
26
+ name: "fathom_check",
27
+ description: "Run deterministic cross-artifact checks (e.g. missing environment variables in .env.example, undeclared dependencies in package.json).",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {},
31
+ },
32
+ },
33
+ {
34
+ name: "fathom_set_work",
35
+ description: "Update project Work State with active task intent, completed items, and remaining items.",
36
+ inputSchema: {
37
+ type: "object",
38
+ properties: {
39
+ currentWork: {
40
+ type: "string",
41
+ description: "Description of the active work or goal currently in progress",
42
+ },
43
+ completed: {
44
+ type: "array",
45
+ items: { type: "string" },
46
+ description: "List of completed tasks or milestones to add",
47
+ },
48
+ incomplete: {
49
+ type: "array",
50
+ items: { type: "string" },
51
+ description: "List of remaining or follow-up tasks to add",
52
+ },
53
+ },
54
+ },
55
+ },
56
+ {
57
+ name: "fathom_diff",
58
+ description: "Get semantic project-level diff grouped by area (Source, Tests, Docs, Config) and git stat summary.",
59
+ inputSchema: {
60
+ type: "object",
61
+ properties: {},
62
+ },
63
+ },
64
+ {
65
+ name: "fathom_get_model",
66
+ description: "Retrieve the durable Project Model (.fathom/model.json) containing indexed files, observations, and claims.",
67
+ inputSchema: {
68
+ type: "object",
69
+ properties: {},
70
+ },
71
+ },
72
+ ];
73
+ export async function executeMCPTool(root, toolName, args = {}) {
74
+ const absRoot = path.resolve(root);
75
+ if (!(await isInitialized(absRoot))) {
76
+ return {
77
+ content: [
78
+ {
79
+ type: "text",
80
+ text: JSON.stringify({
81
+ error: "Fathom is not initialized in this workspace. Run fathom init first.",
82
+ }),
83
+ },
84
+ ],
85
+ isError: true,
86
+ };
87
+ }
88
+ try {
89
+ const config = await loadConfig(absRoot);
90
+ switch (toolName) {
91
+ case "fathom_status": {
92
+ const ctx = await createProjectContext(absRoot, config);
93
+ const findings = await runChecks(ctx, builtinChecks);
94
+ const changed = await gitChangedFiles(absRoot);
95
+ let state = await loadState(absRoot);
96
+ state = applyFindings(state, findings);
97
+ state.changes = {
98
+ filesChanged: changed.length,
99
+ summary: changed.slice(0, 20).map((f) => `~ ${f}`),
100
+ };
101
+ await saveState(absRoot, state);
102
+ return {
103
+ content: [{ type: "text", text: JSON.stringify(state, null, 2) }],
104
+ };
105
+ }
106
+ case "fathom_scan": {
107
+ const ctx = await createProjectContext(absRoot, config);
108
+ const model = await buildProjectModel(ctx);
109
+ await saveProjectModel(absRoot, model);
110
+ await appendEvent(absRoot, {
111
+ type: "scan",
112
+ at: new Date().toISOString(),
113
+ files: model.project.files,
114
+ claims: model.claims.length,
115
+ });
116
+ return {
117
+ content: [{ type: "text", text: JSON.stringify(model, null, 2) }],
118
+ };
119
+ }
120
+ case "fathom_check": {
121
+ const ctx = await createProjectContext(absRoot, config);
122
+ const findings = await runChecks(ctx, builtinChecks);
123
+ let state = await loadState(absRoot);
124
+ state = applyFindings(state, findings);
125
+ await saveState(absRoot, state);
126
+ return {
127
+ content: [
128
+ {
129
+ type: "text",
130
+ text: JSON.stringify({
131
+ findings,
132
+ attention: state.attention,
133
+ findingsCount: findings.length,
134
+ }, null, 2),
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ case "fathom_set_work": {
140
+ let state = await loadState(absRoot);
141
+ if (typeof args.currentWork === "string") {
142
+ state.currentWork = args.currentWork;
143
+ }
144
+ if (Array.isArray(args.completed)) {
145
+ const titles = args.completed.filter((t) => typeof t === "string");
146
+ state.completed = mergeWorkItems(state.completed, titles, "completed");
147
+ }
148
+ if (Array.isArray(args.incomplete)) {
149
+ const titles = args.incomplete.filter((t) => typeof t === "string");
150
+ state.incomplete = mergeWorkItems(state.incomplete, titles, "incomplete");
151
+ }
152
+ await saveState(absRoot, state);
153
+ await appendEvent(absRoot, {
154
+ type: "set_work",
155
+ at: new Date().toISOString(),
156
+ currentWork: state.currentWork,
157
+ completedCount: state.completed.length,
158
+ incompleteCount: state.incomplete.length,
159
+ });
160
+ return {
161
+ content: [
162
+ {
163
+ type: "text",
164
+ text: JSON.stringify({
165
+ success: true,
166
+ currentWork: state.currentWork,
167
+ completed: state.completed,
168
+ incomplete: state.incomplete,
169
+ }, null, 2),
170
+ },
171
+ ],
172
+ };
173
+ }
174
+ case "fathom_diff": {
175
+ if (!(await gitIsRepo(absRoot))) {
176
+ return {
177
+ content: [{ type: "text", text: JSON.stringify({ error: "Not a git repository." }) }],
178
+ isError: true,
179
+ };
180
+ }
181
+ const files = await gitChangedFiles(absRoot);
182
+ const summary = await gitDiffStat(absRoot);
183
+ return {
184
+ content: [{ type: "text", text: JSON.stringify({ files, summary }, null, 2) }],
185
+ };
186
+ }
187
+ case "fathom_get_model": {
188
+ try {
189
+ const model = await loadProjectModel(absRoot);
190
+ return {
191
+ content: [{ type: "text", text: JSON.stringify(model, null, 2) }],
192
+ };
193
+ }
194
+ catch {
195
+ return {
196
+ content: [
197
+ {
198
+ type: "text",
199
+ text: JSON.stringify({
200
+ error: "Project Model not found. Run fathom_scan first to build model.json.",
201
+ }),
202
+ },
203
+ ],
204
+ isError: true,
205
+ };
206
+ }
207
+ }
208
+ default:
209
+ return {
210
+ content: [{ type: "text", text: JSON.stringify({ error: `Unknown tool: ${toolName}` }) }],
211
+ isError: true,
212
+ };
213
+ }
214
+ }
215
+ catch (error) {
216
+ return {
217
+ content: [
218
+ {
219
+ type: "text",
220
+ text: JSON.stringify({ error: error instanceof Error ? error.message : String(error) }),
221
+ },
222
+ ],
223
+ isError: true,
224
+ };
225
+ }
226
+ }
227
+ function mergeWorkItems(current, nextTitles, status) {
228
+ const clean = nextTitles.map((t) => t.trim()).filter(Boolean);
229
+ const seen = new Set();
230
+ const merged = [];
231
+ for (const item of current) {
232
+ const key = item.title.trim().toLowerCase();
233
+ if (!seen.has(key) && item.status === status) {
234
+ seen.add(key);
235
+ merged.push(item);
236
+ }
237
+ }
238
+ for (const title of clean) {
239
+ const key = title.toLowerCase();
240
+ if (seen.has(key))
241
+ continue;
242
+ seen.add(key);
243
+ merged.push({
244
+ id: `${status}-${title.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`,
245
+ title,
246
+ status,
247
+ });
248
+ }
249
+ return merged;
250
+ }
251
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,6 @@ export declare function renderInterpretation(result: AIInterpretationResult, con
5
5
  export declare function renderFindings(findings: Finding[]): string;
6
6
  export declare function renderStatus(state: WorkState): string;
7
7
  export declare function renderDiff(summary: string[], files: string[]): string;
8
+ export declare function renderGitHubAnnotations(findings: Finding[]): string;
9
+ export declare function renderMarkdownSummary(state: WorkState, findings: Finding[], interpretation?: AIInterpretationResult): string;
8
10
  //# sourceMappingURL=terminal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/render/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAiBnG;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA0B1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA2CrD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CA+BrE"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/render/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAiBnG;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA0B1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA2CrD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CA+BrE;AAoBD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAenE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,CAAC,EAAE,sBAAsB,GACtC,MAAM,CA6CR"}
@@ -126,6 +126,57 @@ function groupFilesByArea(files) {
126
126
  }
127
127
  return [...buckets.entries()].map(([label, items]) => ({ label, items: items.slice(0, 3) }));
128
128
  }
129
+ export function renderGitHubAnnotations(findings) {
130
+ if (findings.length === 0)
131
+ return "";
132
+ const lines = [];
133
+ for (const f of findings) {
134
+ const level = f.severity === "potential" ? "notice" : f.severity === "warning" ? "warning" : "notice";
135
+ const primaryEvidence = f.evidence.find((e) => Boolean(e.path));
136
+ const filePath = primaryEvidence?.path;
137
+ const title = titleCase(f.category);
138
+ const fileAttr = filePath ? ` file=${filePath},` : " ";
139
+ lines.push(`::${level}${fileAttr}title=${title}::${f.message.replace(/\r?\n/g, " ")}`);
140
+ }
141
+ return lines.join("\n") + "\n";
142
+ }
143
+ export function renderMarkdownSummary(state, findings, interpretation) {
144
+ const lines = [
145
+ `# Fathom Report`,
146
+ ``,
147
+ `| Metric | Status |`,
148
+ `| --- | --- |`,
149
+ `| **Current Work** | ${state.currentWork ?? "*(not set)*"} |`,
150
+ `| **Completed** | ${state.completed.length} |`,
151
+ `| **Remaining** | ${state.incomplete.length} |`,
152
+ `| **Attention Items** | ${state.attention} |`,
153
+ `| **Changed Files** | ${state.changes.filesChanged} |`,
154
+ ``,
155
+ ];
156
+ if (findings.length > 0) {
157
+ lines.push(`## Findings (${findings.length})`, ``, `| Severity | Check ID | Message | Evidence |`, `| --- | --- | --- | --- |`);
158
+ for (const f of findings) {
159
+ const badge = f.severity === "warning" ? "⚠️ Warning" : f.severity === "potential" ? "🔍 Potential" : "ℹ️ Info";
160
+ const ev = f.evidence.map((e) => (e.path ? `\`${e.path}\`: ${e.detail}` : e.detail)).join("<br/>");
161
+ lines.push(`| ${badge} | \`${f.id}\`<br/>*${titleCase(f.category)}* | ${f.message} | ${ev || "—"} |`);
162
+ }
163
+ lines.push(``);
164
+ }
165
+ else {
166
+ lines.push(`> ✅ **No inconsistencies found across project wiring.**`, ``);
167
+ }
168
+ if (interpretation) {
169
+ lines.push(`## AI Interpretation (${interpretation.provider})`, ``, `> **Confidence:** ${Math.round(interpretation.confidence * 100)}%`, ``, interpretation.summary, ``);
170
+ if (interpretation.notes.length > 0) {
171
+ lines.push(`### Key Notes:`);
172
+ for (const note of interpretation.notes) {
173
+ lines.push(`- ${note}`);
174
+ }
175
+ lines.push(``);
176
+ }
177
+ }
178
+ return lines.join("\n") + "\n";
179
+ }
129
180
  function titleCase(s) {
130
181
  return s.charAt(0).toUpperCase() + s.slice(1);
131
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/render/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/render/terminal.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -101,4 +101,13 @@ export interface WorkStateSummary {
101
101
  attention: number;
102
102
  findingsCount: number;
103
103
  }
104
+ export type OutputFormat = "terminal" | "json" | "github" | "markdown";
105
+ export interface CheckOptions {
106
+ json?: boolean;
107
+ ai?: boolean;
108
+ prompt?: string;
109
+ format?: OutputFormat;
110
+ maxAttention?: number;
111
+ failOn?: Severity;
112
+ }
104
113
  //# sourceMappingURL=types.d.ts.map