apple-numbers-mcp 0.5.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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +709 -0
  3. package/build/index.d.ts +3 -0
  4. package/build/index.d.ts.map +1 -0
  5. package/build/index.js +483 -0
  6. package/build/index.js.map +1 -0
  7. package/build/services/fileConfig.d.ts +7 -0
  8. package/build/services/fileConfig.d.ts.map +1 -0
  9. package/build/services/fileConfig.js +52 -0
  10. package/build/services/fileConfig.js.map +1 -0
  11. package/build/services/numbersManager.d.ts +175 -0
  12. package/build/services/numbersManager.d.ts.map +1 -0
  13. package/build/services/numbersManager.js +357 -0
  14. package/build/services/numbersManager.js.map +1 -0
  15. package/build/tools/doctor.d.ts +22 -0
  16. package/build/tools/doctor.d.ts.map +1 -0
  17. package/build/tools/doctor.js +96 -0
  18. package/build/tools/doctor.js.map +1 -0
  19. package/build/tools/resourcesAndPrompts.d.ts +15 -0
  20. package/build/tools/resourcesAndPrompts.d.ts.map +1 -0
  21. package/build/tools/resourcesAndPrompts.js +77 -0
  22. package/build/tools/resourcesAndPrompts.js.map +1 -0
  23. package/build/tools/respond.d.ts +29 -0
  24. package/build/tools/respond.d.ts.map +1 -0
  25. package/build/tools/respond.js +44 -0
  26. package/build/tools/respond.js.map +1 -0
  27. package/build/types.d.ts +128 -0
  28. package/build/types.d.ts.map +1 -0
  29. package/build/types.js +2 -0
  30. package/build/types.js.map +1 -0
  31. package/build/utils/applescript.d.ts +90 -0
  32. package/build/utils/applescript.d.ts.map +1 -0
  33. package/build/utils/applescript.js +248 -0
  34. package/build/utils/applescript.js.map +1 -0
  35. package/build/utils/python.d.ts +12 -0
  36. package/build/utils/python.d.ts.map +1 -0
  37. package/build/utils/python.js +101 -0
  38. package/build/utils/python.js.map +1 -0
  39. package/package.json +91 -0
  40. package/requirements.txt +1 -0
  41. package/scripts/setup.sh +46 -0
  42. package/src/utils/numbers_reader.py +779 -0
@@ -0,0 +1,175 @@
1
+ import { type SetFormulaResult, type SetFormulasBatchResult, type CellStyle, type CellStyleResult, type BatchStyleEntry, type SetCellsStyleBatchResult, type SetDimensionResult, type MergeResult } from "../utils/applescript.js";
2
+ import type { NumbersFileInfo, TableData, SearchResult, ExportResult, CellValue, CreateResult, SetCellResult, SetCellsBatchResult, AddRowsResult, DeleteRowsResult, AddSheetResult, AddTableResult, ImportResult, UpdateRowsResult, RenameResult } from "../types.js";
3
+ export declare class NumbersManager {
4
+ private validatePath;
5
+ /**
6
+ * Resolve and validate an output path for new files.
7
+ * Expands ~ and checks .numbers extension, but does NOT require the file to exist.
8
+ */
9
+ private validateOutputPath;
10
+ /**
11
+ * Resolve a generic path (expand ~ and resolve).
12
+ */
13
+ private resolvePath;
14
+ /**
15
+ * Get file structure: sheets, tables, dimensions, headers.
16
+ */
17
+ getFileInfo(filePath: string): NumbersFileInfo;
18
+ /**
19
+ * Read data from a table with optional range filtering.
20
+ */
21
+ readTable(filePath: string, sheet?: string, table?: string, options?: {
22
+ startRow?: number;
23
+ endRow?: number;
24
+ columns?: (string | number)[];
25
+ }): TableData;
26
+ /**
27
+ * Search for a string value across all cells in the file.
28
+ */
29
+ search(filePath: string, query: string, sheet?: string): {
30
+ results: SearchResult[];
31
+ count: number;
32
+ };
33
+ /**
34
+ * Export a table to CSV, TSV, or JSON file.
35
+ */
36
+ exportTable(filePath: string, format: "csv" | "json" | "tsv", outputPath: string, sheet?: string, table?: string): ExportResult;
37
+ /**
38
+ * Read a single cell value by row/col index. Set verbose for formula/metadata.
39
+ */
40
+ getCell(filePath: string, sheet: string, table: string, row: number, col: number, verbose?: boolean): CellValue;
41
+ /**
42
+ * Create a new .numbers file with headers and optional data rows.
43
+ */
44
+ createSpreadsheet(filePath: string, headers: string[], options?: {
45
+ sheetName?: string;
46
+ tableName?: string;
47
+ rows?: unknown[][];
48
+ }): CreateResult;
49
+ /**
50
+ * Write a single cell value in an existing file.
51
+ */
52
+ setCell(filePath: string, row: number, col: number, value: unknown, options?: {
53
+ sheet?: string;
54
+ table?: string;
55
+ type?: string;
56
+ }): SetCellResult;
57
+ /**
58
+ * Write multiple cell values in one operation.
59
+ */
60
+ setCellsBatch(filePath: string, updates: {
61
+ row: number;
62
+ col: number;
63
+ value: unknown;
64
+ type?: string;
65
+ }[], options?: {
66
+ sheet?: string;
67
+ table?: string;
68
+ }): SetCellsBatchResult;
69
+ /**
70
+ * Append rows of data to an existing table.
71
+ */
72
+ addRows(filePath: string, rows: unknown[][], options?: {
73
+ sheet?: string;
74
+ table?: string;
75
+ }): AddRowsResult;
76
+ /**
77
+ * Delete rows from a table by index range (inclusive).
78
+ */
79
+ deleteRows(filePath: string, startRow: number, endRow: number, options?: {
80
+ sheet?: string;
81
+ table?: string;
82
+ }): DeleteRowsResult;
83
+ /**
84
+ * Add a new sheet to an existing file.
85
+ */
86
+ addSheet(filePath: string, sheetName: string, options?: {
87
+ tableName?: string;
88
+ headers?: string[];
89
+ numRows?: number;
90
+ numCols?: number;
91
+ }): AddSheetResult;
92
+ /**
93
+ * Add a new table to an existing sheet.
94
+ */
95
+ addTable(filePath: string, options?: {
96
+ sheet?: string;
97
+ tableName?: string;
98
+ headers?: string[];
99
+ numRows?: number;
100
+ numCols?: number;
101
+ }): AddTableResult;
102
+ /**
103
+ * Import a CSV/TSV/JSON file into a new .numbers file.
104
+ */
105
+ importFile(inputPath: string, outputPath: string, options?: {
106
+ format?: "auto" | "csv" | "tsv" | "json";
107
+ sheetName?: string;
108
+ tableName?: string;
109
+ }): ImportResult;
110
+ /**
111
+ * Write full rows by index.
112
+ */
113
+ updateRows(filePath: string, updates: {
114
+ row: number;
115
+ values: unknown[];
116
+ }[], options?: {
117
+ sheet?: string;
118
+ table?: string;
119
+ }): UpdateRowsResult;
120
+ /**
121
+ * Rename a sheet.
122
+ */
123
+ renameSheet(filePath: string, newName: string, sheet?: string): RenameResult;
124
+ /**
125
+ * Rename a table.
126
+ */
127
+ renameTable(filePath: string, newName: string, options?: {
128
+ sheet?: string;
129
+ table?: string;
130
+ }): RenameResult;
131
+ /**
132
+ * Set a formula on a cell via AppleScript. Requires Numbers.app to be running.
133
+ */
134
+ setCellFormula(filePath: string, sheet: string, table: string, row: number, col: number, formula: string): SetFormulaResult;
135
+ /**
136
+ * Set formulas on multiple cells via AppleScript. Requires Numbers.app to be running.
137
+ */
138
+ setCellFormulasBatch(filePath: string, sheet: string, table: string, formulas: {
139
+ row: number;
140
+ col: number;
141
+ formula: string;
142
+ }[]): SetFormulasBatchResult;
143
+ /**
144
+ * Set cell style via AppleScript. Requires Numbers.app.
145
+ */
146
+ setCellStyle(filePath: string, sheet: string, table: string, row: number, col: number, style: CellStyle): CellStyleResult;
147
+ /**
148
+ * Set styles on multiple cells via AppleScript. Requires Numbers.app.
149
+ */
150
+ setCellsStyleBatch(filePath: string, sheet: string, table: string, entries: BatchStyleEntry[]): SetCellsStyleBatchResult;
151
+ /**
152
+ * Set column width via AppleScript. Requires Numbers.app.
153
+ */
154
+ setColumnWidth(filePath: string, sheet: string, table: string, col: number, width: number): SetDimensionResult;
155
+ /**
156
+ * Set row height via AppleScript. Requires Numbers.app.
157
+ */
158
+ setRowHeight(filePath: string, sheet: string, table: string, row: number, height: number): SetDimensionResult;
159
+ /**
160
+ * Merge a range of cells via AppleScript. Requires Numbers.app.
161
+ */
162
+ mergeCells(filePath: string, sheet: string, table: string, startRow: number, startCol: number, endRow: number, endCol: number): MergeResult;
163
+ /**
164
+ * Unmerge a range of cells via AppleScript. Requires Numbers.app.
165
+ */
166
+ unmergeCells(filePath: string, sheet: string, table: string, startRow: number, startCol: number, endRow: number, endCol: number): MergeResult;
167
+ /**
168
+ * Check that Python and numbers-parser are available.
169
+ */
170
+ healthCheck(): {
171
+ ok: boolean;
172
+ message: string;
173
+ };
174
+ }
175
+ //# sourceMappingURL=numbersManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbersManager.d.ts","sourceRoot":"","sources":["../../src/services/numbersManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,357 @@
1
+ import { runNumbersReader, checkDependencies } from "../utils/python.js";
2
+ import { setFormula, setFormulasBatch, setCellStyle, setCellsStyleBatch, setColumnWidth, setRowHeight, mergeCells, unmergeCells, } from "../utils/applescript.js";
3
+ import { existsSync } from "node:fs";
4
+ import { resolve, extname } from "node:path";
5
+ import { homedir } from "node:os";
6
+ export class NumbersManager {
7
+ validatePath(filePath) {
8
+ // Expand ~ to home directory
9
+ const expanded = filePath.startsWith("~") ? filePath.replace(/^~/, homedir()) : filePath;
10
+ const resolved = resolve(expanded);
11
+ if (!existsSync(resolved)) {
12
+ throw new Error(`File not found: ${resolved}`);
13
+ }
14
+ if (extname(resolved).toLowerCase() !== ".numbers") {
15
+ throw new Error(`Not a Numbers file: ${resolved}. Expected .numbers extension.`);
16
+ }
17
+ return resolved;
18
+ }
19
+ /**
20
+ * Resolve and validate an output path for new files.
21
+ * Expands ~ and checks .numbers extension, but does NOT require the file to exist.
22
+ */
23
+ validateOutputPath(filePath) {
24
+ const expanded = filePath.startsWith("~") ? filePath.replace(/^~/, homedir()) : filePath;
25
+ const resolved = resolve(expanded);
26
+ if (extname(resolved).toLowerCase() !== ".numbers") {
27
+ throw new Error(`Not a Numbers file path: ${resolved}. Expected .numbers extension.`);
28
+ }
29
+ return resolved;
30
+ }
31
+ /**
32
+ * Resolve a generic path (expand ~ and resolve).
33
+ */
34
+ resolvePath(filePath) {
35
+ const expanded = filePath.startsWith("~") ? filePath.replace(/^~/, homedir()) : filePath;
36
+ return resolve(expanded);
37
+ }
38
+ /**
39
+ * Get file structure: sheets, tables, dimensions, headers.
40
+ */
41
+ getFileInfo(filePath) {
42
+ const resolved = this.validatePath(filePath);
43
+ const result = runNumbersReader("info", [resolved]);
44
+ if (result.error)
45
+ throw new Error(result.error);
46
+ return result.data;
47
+ }
48
+ /**
49
+ * Read data from a table with optional range filtering.
50
+ */
51
+ readTable(filePath, sheet, table, options) {
52
+ const resolved = this.validatePath(filePath);
53
+ const args = [resolved];
54
+ if (sheet)
55
+ args.push("--sheet", sheet);
56
+ if (table)
57
+ args.push("--table", table);
58
+ if (options?.startRow !== undefined)
59
+ args.push("--start-row", String(options.startRow));
60
+ if (options?.endRow !== undefined)
61
+ args.push("--end-row", String(options.endRow));
62
+ if (options?.columns)
63
+ args.push("--columns", JSON.stringify(options.columns));
64
+ const result = runNumbersReader("read", args);
65
+ if (result.error)
66
+ throw new Error(result.error);
67
+ return result.data;
68
+ }
69
+ /**
70
+ * Search for a string value across all cells in the file.
71
+ */
72
+ search(filePath, query, sheet) {
73
+ const resolved = this.validatePath(filePath);
74
+ const args = [resolved, query];
75
+ if (sheet)
76
+ args.push("--sheet", sheet);
77
+ const result = runNumbersReader("search", args);
78
+ if (result.error)
79
+ throw new Error(result.error);
80
+ return result.data;
81
+ }
82
+ /**
83
+ * Export a table to CSV, TSV, or JSON file.
84
+ */
85
+ exportTable(filePath, format, outputPath, sheet, table) {
86
+ const resolved = this.validatePath(filePath);
87
+ const outputResolved = this.resolvePath(outputPath);
88
+ const args = [resolved, format, outputResolved];
89
+ if (sheet)
90
+ args.push("--sheet", sheet);
91
+ if (table)
92
+ args.push("--table", table);
93
+ const result = runNumbersReader("export", args);
94
+ if (result.error)
95
+ throw new Error(result.error);
96
+ return result.data;
97
+ }
98
+ /**
99
+ * Read a single cell value by row/col index. Set verbose for formula/metadata.
100
+ */
101
+ getCell(filePath, sheet, table, row, col, verbose) {
102
+ const resolved = this.validatePath(filePath);
103
+ const args = [resolved, sheet, table, String(row), String(col)];
104
+ if (verbose)
105
+ args.push("--verbose");
106
+ const result = runNumbersReader("cell", args);
107
+ if (result.error)
108
+ throw new Error(result.error);
109
+ return result.data;
110
+ }
111
+ /**
112
+ * Create a new .numbers file with headers and optional data rows.
113
+ */
114
+ createSpreadsheet(filePath, headers, options) {
115
+ const resolved = this.validateOutputPath(filePath);
116
+ const args = [resolved, JSON.stringify(headers)];
117
+ if (options?.sheetName)
118
+ args.push("--sheet-name", options.sheetName);
119
+ if (options?.tableName)
120
+ args.push("--table-name", options.tableName);
121
+ if (options?.rows)
122
+ args.push("--rows", JSON.stringify(options.rows));
123
+ const result = runNumbersReader("create", args);
124
+ if (result.error)
125
+ throw new Error(result.error);
126
+ return result.data;
127
+ }
128
+ /**
129
+ * Write a single cell value in an existing file.
130
+ */
131
+ setCell(filePath, row, col, value, options) {
132
+ const resolved = this.validatePath(filePath);
133
+ const args = [resolved, String(row), String(col), JSON.stringify(value)];
134
+ if (options?.sheet)
135
+ args.push("--sheet", options.sheet);
136
+ if (options?.table)
137
+ args.push("--table", options.table);
138
+ if (options?.type)
139
+ args.push("--type", options.type);
140
+ const result = runNumbersReader("set-cell", args);
141
+ if (result.error)
142
+ throw new Error(result.error);
143
+ return result.data;
144
+ }
145
+ /**
146
+ * Write multiple cell values in one operation.
147
+ */
148
+ setCellsBatch(filePath, updates, options) {
149
+ const resolved = this.validatePath(filePath);
150
+ const args = [resolved, JSON.stringify(updates)];
151
+ if (options?.sheet)
152
+ args.push("--sheet", options.sheet);
153
+ if (options?.table)
154
+ args.push("--table", options.table);
155
+ const result = runNumbersReader("set-cells", args);
156
+ if (result.error)
157
+ throw new Error(result.error);
158
+ return result.data;
159
+ }
160
+ /**
161
+ * Append rows of data to an existing table.
162
+ */
163
+ addRows(filePath, rows, options) {
164
+ const resolved = this.validatePath(filePath);
165
+ const args = [resolved, JSON.stringify(rows)];
166
+ if (options?.sheet)
167
+ args.push("--sheet", options.sheet);
168
+ if (options?.table)
169
+ args.push("--table", options.table);
170
+ const result = runNumbersReader("add-rows", args);
171
+ if (result.error)
172
+ throw new Error(result.error);
173
+ return result.data;
174
+ }
175
+ /**
176
+ * Delete rows from a table by index range (inclusive).
177
+ */
178
+ deleteRows(filePath, startRow, endRow, options) {
179
+ const resolved = this.validatePath(filePath);
180
+ const args = [resolved, String(startRow), String(endRow)];
181
+ if (options?.sheet)
182
+ args.push("--sheet", options.sheet);
183
+ if (options?.table)
184
+ args.push("--table", options.table);
185
+ const result = runNumbersReader("delete-rows", args);
186
+ if (result.error)
187
+ throw new Error(result.error);
188
+ return result.data;
189
+ }
190
+ /**
191
+ * Add a new sheet to an existing file.
192
+ */
193
+ addSheet(filePath, sheetName, options) {
194
+ const resolved = this.validatePath(filePath);
195
+ const args = [resolved, sheetName];
196
+ if (options?.tableName)
197
+ args.push("--table-name", options.tableName);
198
+ if (options?.headers)
199
+ args.push("--headers", JSON.stringify(options.headers));
200
+ if (options?.numRows !== undefined)
201
+ args.push("--num-rows", String(options.numRows));
202
+ if (options?.numCols !== undefined)
203
+ args.push("--num-cols", String(options.numCols));
204
+ const result = runNumbersReader("add-sheet", args);
205
+ if (result.error)
206
+ throw new Error(result.error);
207
+ return result.data;
208
+ }
209
+ /**
210
+ * Add a new table to an existing sheet.
211
+ */
212
+ addTable(filePath, options) {
213
+ const resolved = this.validatePath(filePath);
214
+ const args = [resolved];
215
+ if (options?.sheet)
216
+ args.push("--sheet", options.sheet);
217
+ if (options?.tableName)
218
+ args.push("--table-name", options.tableName);
219
+ if (options?.headers)
220
+ args.push("--headers", JSON.stringify(options.headers));
221
+ if (options?.numRows !== undefined)
222
+ args.push("--num-rows", String(options.numRows));
223
+ if (options?.numCols !== undefined)
224
+ args.push("--num-cols", String(options.numCols));
225
+ const result = runNumbersReader("add-table", args);
226
+ if (result.error)
227
+ throw new Error(result.error);
228
+ return result.data;
229
+ }
230
+ /**
231
+ * Import a CSV/TSV/JSON file into a new .numbers file.
232
+ */
233
+ importFile(inputPath, outputPath, options) {
234
+ const inputResolved = this.resolvePath(inputPath);
235
+ if (!existsSync(inputResolved)) {
236
+ throw new Error(`Input file not found: ${inputResolved}`);
237
+ }
238
+ const outputResolved = this.validateOutputPath(outputPath);
239
+ const args = [inputResolved, outputResolved];
240
+ if (options?.format && options.format !== "auto")
241
+ args.push("--format", options.format);
242
+ if (options?.sheetName)
243
+ args.push("--sheet-name", options.sheetName);
244
+ if (options?.tableName)
245
+ args.push("--table-name", options.tableName);
246
+ const result = runNumbersReader("import", args);
247
+ if (result.error)
248
+ throw new Error(result.error);
249
+ return result.data;
250
+ }
251
+ /**
252
+ * Write full rows by index.
253
+ */
254
+ updateRows(filePath, updates, options) {
255
+ const resolved = this.validatePath(filePath);
256
+ const args = [resolved, JSON.stringify(updates)];
257
+ if (options?.sheet)
258
+ args.push("--sheet", options.sheet);
259
+ if (options?.table)
260
+ args.push("--table", options.table);
261
+ const result = runNumbersReader("update-rows", args);
262
+ if (result.error)
263
+ throw new Error(result.error);
264
+ return result.data;
265
+ }
266
+ /**
267
+ * Rename a sheet.
268
+ */
269
+ renameSheet(filePath, newName, sheet) {
270
+ const resolved = this.validatePath(filePath);
271
+ const args = [resolved, newName];
272
+ if (sheet)
273
+ args.push("--sheet", sheet);
274
+ const result = runNumbersReader("rename-sheet", args);
275
+ if (result.error)
276
+ throw new Error(result.error);
277
+ return result.data;
278
+ }
279
+ /**
280
+ * Rename a table.
281
+ */
282
+ renameTable(filePath, newName, options) {
283
+ const resolved = this.validatePath(filePath);
284
+ const args = [resolved, newName];
285
+ if (options?.sheet)
286
+ args.push("--sheet", options.sheet);
287
+ if (options?.table)
288
+ args.push("--table", options.table);
289
+ const result = runNumbersReader("rename-table", args);
290
+ if (result.error)
291
+ throw new Error(result.error);
292
+ return result.data;
293
+ }
294
+ /**
295
+ * Set a formula on a cell via AppleScript. Requires Numbers.app to be running.
296
+ */
297
+ setCellFormula(filePath, sheet, table, row, col, formula) {
298
+ const resolved = this.validatePath(filePath);
299
+ return setFormula(resolved, sheet, table, row, col, formula);
300
+ }
301
+ /**
302
+ * Set formulas on multiple cells via AppleScript. Requires Numbers.app to be running.
303
+ */
304
+ setCellFormulasBatch(filePath, sheet, table, formulas) {
305
+ const resolved = this.validatePath(filePath);
306
+ return setFormulasBatch(resolved, sheet, table, formulas);
307
+ }
308
+ /**
309
+ * Set cell style via AppleScript. Requires Numbers.app.
310
+ */
311
+ setCellStyle(filePath, sheet, table, row, col, style) {
312
+ const resolved = this.validatePath(filePath);
313
+ return setCellStyle(resolved, sheet, table, row, col, style);
314
+ }
315
+ /**
316
+ * Set styles on multiple cells via AppleScript. Requires Numbers.app.
317
+ */
318
+ setCellsStyleBatch(filePath, sheet, table, entries) {
319
+ const resolved = this.validatePath(filePath);
320
+ return setCellsStyleBatch(resolved, sheet, table, entries);
321
+ }
322
+ /**
323
+ * Set column width via AppleScript. Requires Numbers.app.
324
+ */
325
+ setColumnWidth(filePath, sheet, table, col, width) {
326
+ const resolved = this.validatePath(filePath);
327
+ return setColumnWidth(resolved, sheet, table, col, width);
328
+ }
329
+ /**
330
+ * Set row height via AppleScript. Requires Numbers.app.
331
+ */
332
+ setRowHeight(filePath, sheet, table, row, height) {
333
+ const resolved = this.validatePath(filePath);
334
+ return setRowHeight(resolved, sheet, table, row, height);
335
+ }
336
+ /**
337
+ * Merge a range of cells via AppleScript. Requires Numbers.app.
338
+ */
339
+ mergeCells(filePath, sheet, table, startRow, startCol, endRow, endCol) {
340
+ const resolved = this.validatePath(filePath);
341
+ return mergeCells(resolved, sheet, table, startRow, startCol, endRow, endCol);
342
+ }
343
+ /**
344
+ * Unmerge a range of cells via AppleScript. Requires Numbers.app.
345
+ */
346
+ unmergeCells(filePath, sheet, table, startRow, startCol, endRow, endCol) {
347
+ const resolved = this.validatePath(filePath);
348
+ return unmergeCells(resolved, sheet, table, startRow, startCol, endRow, endCol);
349
+ }
350
+ /**
351
+ * Check that Python and numbers-parser are available.
352
+ */
353
+ healthCheck() {
354
+ return checkDependencies();
355
+ }
356
+ }
357
+ //# sourceMappingURL=numbersManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbersManager.js","sourceRoot":"","sources":["../../src/services/numbersManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { NumbersManager } from "../services/numbersManager.js";
2
+ export type CheckStatus = "ok" | "warn" | "fail";
3
+ export interface DoctorCheck {
4
+ name: string;
5
+ status: CheckStatus;
6
+ detail: string;
7
+ }
8
+ export interface DoctorReport {
9
+ healthy: boolean;
10
+ checks: DoctorCheck[];
11
+ }
12
+ /**
13
+ * Run all diagnostic checks. This function NEVER throws — every probe is wrapped
14
+ * in try/catch and converted to a fail/warn/ok check.
15
+ *
16
+ * The `manager` parameter is accepted for symmetry with the other tools and to
17
+ * leave room for future manager-backed probes; the current checks don't need it.
18
+ */
19
+ export declare function runDoctor(_manager: NumbersManager): DoctorReport;
20
+ /** Render a DoctorReport as readable text. */
21
+ export declare function formatDoctorReport(r: DoctorReport): string;
22
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/tools/doctor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AACjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAKD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY,CAqEhE;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAK1D"}