@rengler33/prov 0.1.1

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 (146) hide show
  1. package/README.md +314 -0
  2. package/dist/cli.d.ts +26 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +381 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/agent.d.ts +107 -0
  7. package/dist/commands/agent.d.ts.map +1 -0
  8. package/dist/commands/agent.js +197 -0
  9. package/dist/commands/agent.js.map +1 -0
  10. package/dist/commands/agent.test.d.ts +5 -0
  11. package/dist/commands/agent.test.d.ts.map +1 -0
  12. package/dist/commands/agent.test.js +199 -0
  13. package/dist/commands/agent.test.js.map +1 -0
  14. package/dist/commands/constraint.d.ts +100 -0
  15. package/dist/commands/constraint.d.ts.map +1 -0
  16. package/dist/commands/constraint.js +763 -0
  17. package/dist/commands/constraint.js.map +1 -0
  18. package/dist/commands/constraint.test.d.ts +9 -0
  19. package/dist/commands/constraint.test.d.ts.map +1 -0
  20. package/dist/commands/constraint.test.js +470 -0
  21. package/dist/commands/constraint.test.js.map +1 -0
  22. package/dist/commands/graph.d.ts +99 -0
  23. package/dist/commands/graph.d.ts.map +1 -0
  24. package/dist/commands/graph.js +552 -0
  25. package/dist/commands/graph.js.map +1 -0
  26. package/dist/commands/graph.test.d.ts +2 -0
  27. package/dist/commands/graph.test.d.ts.map +1 -0
  28. package/dist/commands/graph.test.js +258 -0
  29. package/dist/commands/graph.test.js.map +1 -0
  30. package/dist/commands/impact.d.ts +83 -0
  31. package/dist/commands/impact.d.ts.map +1 -0
  32. package/dist/commands/impact.js +319 -0
  33. package/dist/commands/impact.js.map +1 -0
  34. package/dist/commands/impact.test.d.ts +2 -0
  35. package/dist/commands/impact.test.d.ts.map +1 -0
  36. package/dist/commands/impact.test.js +234 -0
  37. package/dist/commands/impact.test.js.map +1 -0
  38. package/dist/commands/init.d.ts +45 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +94 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/init.test.d.ts +7 -0
  43. package/dist/commands/init.test.d.ts.map +1 -0
  44. package/dist/commands/init.test.js +174 -0
  45. package/dist/commands/init.test.js.map +1 -0
  46. package/dist/commands/integration.test.d.ts +10 -0
  47. package/dist/commands/integration.test.d.ts.map +1 -0
  48. package/dist/commands/integration.test.js +456 -0
  49. package/dist/commands/integration.test.js.map +1 -0
  50. package/dist/commands/mcp.d.ts +21 -0
  51. package/dist/commands/mcp.d.ts.map +1 -0
  52. package/dist/commands/mcp.js +616 -0
  53. package/dist/commands/mcp.js.map +1 -0
  54. package/dist/commands/mcp.test.d.ts +7 -0
  55. package/dist/commands/mcp.test.d.ts.map +1 -0
  56. package/dist/commands/mcp.test.js +132 -0
  57. package/dist/commands/mcp.test.js.map +1 -0
  58. package/dist/commands/plan.d.ts +218 -0
  59. package/dist/commands/plan.d.ts.map +1 -0
  60. package/dist/commands/plan.js +1307 -0
  61. package/dist/commands/plan.js.map +1 -0
  62. package/dist/commands/plan.test.d.ts +9 -0
  63. package/dist/commands/plan.test.d.ts.map +1 -0
  64. package/dist/commands/plan.test.js +569 -0
  65. package/dist/commands/plan.test.js.map +1 -0
  66. package/dist/commands/spec.d.ts +94 -0
  67. package/dist/commands/spec.d.ts.map +1 -0
  68. package/dist/commands/spec.js +635 -0
  69. package/dist/commands/spec.js.map +1 -0
  70. package/dist/commands/spec.test.d.ts +9 -0
  71. package/dist/commands/spec.test.d.ts.map +1 -0
  72. package/dist/commands/spec.test.js +407 -0
  73. package/dist/commands/spec.test.js.map +1 -0
  74. package/dist/commands/trace.d.ts +157 -0
  75. package/dist/commands/trace.d.ts.map +1 -0
  76. package/dist/commands/trace.js +847 -0
  77. package/dist/commands/trace.js.map +1 -0
  78. package/dist/commands/trace.test.d.ts +9 -0
  79. package/dist/commands/trace.test.d.ts.map +1 -0
  80. package/dist/commands/trace.test.js +524 -0
  81. package/dist/commands/trace.test.js.map +1 -0
  82. package/dist/graph.d.ts +204 -0
  83. package/dist/graph.d.ts.map +1 -0
  84. package/dist/graph.js +496 -0
  85. package/dist/graph.js.map +1 -0
  86. package/dist/graph.test.d.ts +2 -0
  87. package/dist/graph.test.d.ts.map +1 -0
  88. package/dist/graph.test.js +382 -0
  89. package/dist/graph.test.js.map +1 -0
  90. package/dist/hash.d.ts +72 -0
  91. package/dist/hash.d.ts.map +1 -0
  92. package/dist/hash.js +137 -0
  93. package/dist/hash.js.map +1 -0
  94. package/dist/hash.test.d.ts +2 -0
  95. package/dist/hash.test.d.ts.map +1 -0
  96. package/dist/hash.test.js +227 -0
  97. package/dist/hash.test.js.map +1 -0
  98. package/dist/index.d.ts +18 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +64 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/index.test.d.ts +2 -0
  103. package/dist/index.test.d.ts.map +1 -0
  104. package/dist/index.test.js +11 -0
  105. package/dist/index.test.js.map +1 -0
  106. package/dist/output.d.ts +84 -0
  107. package/dist/output.d.ts.map +1 -0
  108. package/dist/output.js +175 -0
  109. package/dist/output.js.map +1 -0
  110. package/dist/output.test.d.ts +7 -0
  111. package/dist/output.test.d.ts.map +1 -0
  112. package/dist/output.test.js +146 -0
  113. package/dist/output.test.js.map +1 -0
  114. package/dist/staleness.d.ts +162 -0
  115. package/dist/staleness.d.ts.map +1 -0
  116. package/dist/staleness.js +309 -0
  117. package/dist/staleness.js.map +1 -0
  118. package/dist/staleness.test.d.ts +2 -0
  119. package/dist/staleness.test.d.ts.map +1 -0
  120. package/dist/staleness.test.js +448 -0
  121. package/dist/staleness.test.js.map +1 -0
  122. package/dist/storage.d.ts +267 -0
  123. package/dist/storage.d.ts.map +1 -0
  124. package/dist/storage.js +623 -0
  125. package/dist/storage.js.map +1 -0
  126. package/dist/storage.test.d.ts +5 -0
  127. package/dist/storage.test.d.ts.map +1 -0
  128. package/dist/storage.test.js +434 -0
  129. package/dist/storage.test.js.map +1 -0
  130. package/dist/types.d.ts +270 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +12 -0
  133. package/dist/types.js.map +1 -0
  134. package/dist/types.test.d.ts +2 -0
  135. package/dist/types.test.d.ts.map +1 -0
  136. package/dist/types.test.js +232 -0
  137. package/dist/types.test.js.map +1 -0
  138. package/dist/watcher.d.ts +139 -0
  139. package/dist/watcher.d.ts.map +1 -0
  140. package/dist/watcher.js +406 -0
  141. package/dist/watcher.js.map +1 -0
  142. package/dist/watcher.test.d.ts +5 -0
  143. package/dist/watcher.test.d.ts.map +1 -0
  144. package/dist/watcher.test.js +327 -0
  145. package/dist/watcher.test.js.map +1 -0
  146. package/package.json +53 -0
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Tests for the file watcher module.
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
+ import { mkdirSync, rmSync, existsSync, writeFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { tmpdir } from 'node:os';
8
+ import { getFileType, extractEntityId, computeFileHash, hasFileChanged, getTrackedFiles, scanForChanges, updateHashes, getStaleEntities, FileWatcher, } from './watcher.js';
9
+ import { initialize, setCachedHash } from './storage.js';
10
+ // Test utilities
11
+ function createTestDir() {
12
+ const dir = join(tmpdir(), `prov-watcher-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
13
+ mkdirSync(dir, { recursive: true });
14
+ return dir;
15
+ }
16
+ function cleanupTestDir(dir) {
17
+ if (existsSync(dir)) {
18
+ rmSync(dir, { recursive: true, force: true });
19
+ }
20
+ }
21
+ function createTestFile(dir, path, content) {
22
+ const fullPath = join(dir, path);
23
+ const parentDir = fullPath.substring(0, fullPath.lastIndexOf('/'));
24
+ mkdirSync(parentDir, { recursive: true });
25
+ writeFileSync(fullPath, content);
26
+ }
27
+ describe('getFileType', () => {
28
+ it('identifies spec files', () => {
29
+ expect(getFileType('spec/auth.spec.yaml')).toBe('spec');
30
+ expect(getFileType('specs/core.yaml')).toBe('spec');
31
+ });
32
+ it('identifies constraint files', () => {
33
+ expect(getFileType('constraints/security.yaml')).toBe('constraint');
34
+ });
35
+ it('identifies plan files', () => {
36
+ expect(getFileType('plans/bootstrap.plan.yaml')).toBe('plan');
37
+ });
38
+ it('returns null for unknown paths', () => {
39
+ expect(getFileType('src/index.ts')).toBeNull();
40
+ expect(getFileType('README.md')).toBeNull();
41
+ });
42
+ it('respects custom directories', () => {
43
+ expect(getFileType('custom-specs/auth.yaml', {
44
+ specDirs: ['custom-specs'],
45
+ })).toBe('spec');
46
+ });
47
+ });
48
+ describe('extractEntityId', () => {
49
+ it('extracts spec IDs', () => {
50
+ const content = `
51
+ id: spec:auth:v1
52
+ version: 1.0.0
53
+ title: Auth Spec
54
+ `;
55
+ expect(extractEntityId(content, 'spec')).toBe('spec:auth:v1');
56
+ });
57
+ it('extracts constraint IDs', () => {
58
+ const content = `
59
+ id: constraint:security:v1
60
+ version: 1.0.0
61
+ title: Security Constraint
62
+ `;
63
+ expect(extractEntityId(content, 'constraint')).toBe('constraint:security:v1');
64
+ });
65
+ it('extracts plan IDs', () => {
66
+ const content = `
67
+ id: plan:bootstrap:v1
68
+ version: 1.0.0
69
+ title: Bootstrap Plan
70
+ `;
71
+ expect(extractEntityId(content, 'plan')).toBe('plan:bootstrap:v1');
72
+ });
73
+ it('returns undefined for mismatched types', () => {
74
+ const content = `
75
+ id: spec:auth:v1
76
+ `;
77
+ expect(extractEntityId(content, 'constraint')).toBeUndefined();
78
+ });
79
+ it('returns undefined for invalid YAML', () => {
80
+ expect(extractEntityId('not: valid: yaml:', 'spec')).toBeUndefined();
81
+ });
82
+ it('returns undefined for missing ID', () => {
83
+ expect(extractEntityId('title: No ID Here', 'spec')).toBeUndefined();
84
+ });
85
+ });
86
+ describe('computeFileHash', () => {
87
+ let testDir;
88
+ beforeEach(() => {
89
+ testDir = createTestDir();
90
+ });
91
+ afterEach(() => {
92
+ cleanupTestDir(testDir);
93
+ });
94
+ it('computes hash for existing file', () => {
95
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
96
+ const hash = computeFileHash('spec/test.yaml', testDir);
97
+ expect(hash).not.toBeNull();
98
+ expect(hash).toMatch(/^sha256:[a-f0-9]+$/);
99
+ });
100
+ it('returns null for non-existent file', () => {
101
+ const hash = computeFileHash('does-not-exist.yaml', testDir);
102
+ expect(hash).toBeNull();
103
+ });
104
+ it('produces consistent hashes', () => {
105
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
106
+ const hash1 = computeFileHash('spec/test.yaml', testDir);
107
+ const hash2 = computeFileHash('spec/test.yaml', testDir);
108
+ expect(hash1).toBe(hash2);
109
+ });
110
+ it('produces different hashes for different content', () => {
111
+ createTestFile(testDir, 'spec/a.yaml', 'id: spec:a:v1');
112
+ createTestFile(testDir, 'spec/b.yaml', 'id: spec:b:v1');
113
+ const hashA = computeFileHash('spec/a.yaml', testDir);
114
+ const hashB = computeFileHash('spec/b.yaml', testDir);
115
+ expect(hashA).not.toBe(hashB);
116
+ });
117
+ });
118
+ describe('hasFileChanged', () => {
119
+ let testDir;
120
+ beforeEach(() => {
121
+ testDir = createTestDir();
122
+ initialize(testDir);
123
+ });
124
+ afterEach(() => {
125
+ cleanupTestDir(testDir);
126
+ });
127
+ it('returns true for files without cached hash', () => {
128
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
129
+ expect(hasFileChanged('spec/test.yaml', testDir)).toBe(true);
130
+ });
131
+ it('returns false for unchanged files', () => {
132
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
133
+ const hash = computeFileHash('spec/test.yaml', testDir);
134
+ setCachedHash('spec/test.yaml', hash, testDir);
135
+ expect(hasFileChanged('spec/test.yaml', testDir)).toBe(false);
136
+ });
137
+ it('returns true for changed files', () => {
138
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
139
+ const hash = computeFileHash('spec/test.yaml', testDir);
140
+ setCachedHash('spec/test.yaml', hash, testDir);
141
+ // Modify the file
142
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v2');
143
+ expect(hasFileChanged('spec/test.yaml', testDir)).toBe(true);
144
+ });
145
+ it('returns true for deleted files', () => {
146
+ setCachedHash('spec/deleted.yaml', 'sha256:abc123', testDir);
147
+ expect(hasFileChanged('spec/deleted.yaml', testDir)).toBe(true);
148
+ });
149
+ });
150
+ describe('getTrackedFiles', () => {
151
+ let testDir;
152
+ beforeEach(() => {
153
+ testDir = createTestDir();
154
+ initialize(testDir);
155
+ });
156
+ afterEach(() => {
157
+ cleanupTestDir(testDir);
158
+ });
159
+ it('finds spec files', () => {
160
+ createTestFile(testDir, 'spec/auth.spec.yaml', 'id: spec:auth:v1');
161
+ createTestFile(testDir, 'spec/core.yaml', 'id: spec:core:v1');
162
+ const files = getTrackedFiles(testDir);
163
+ expect(files.length).toBe(2);
164
+ expect(files.every(f => f.type === 'spec')).toBe(true);
165
+ });
166
+ it('finds constraint files', () => {
167
+ createTestFile(testDir, 'constraints/security.yaml', 'id: constraint:security:v1');
168
+ const files = getTrackedFiles(testDir);
169
+ expect(files.length).toBe(1);
170
+ expect(files[0]?.type).toBe('constraint');
171
+ });
172
+ it('finds plan files', () => {
173
+ createTestFile(testDir, 'plans/bootstrap.yaml', 'id: plan:bootstrap:v1');
174
+ const files = getTrackedFiles(testDir);
175
+ expect(files.length).toBe(1);
176
+ expect(files[0]?.type).toBe('plan');
177
+ });
178
+ it('extracts entity IDs', () => {
179
+ createTestFile(testDir, 'spec/auth.yaml', `
180
+ id: spec:auth:v1
181
+ version: 1.0.0
182
+ title: Auth Spec
183
+ `);
184
+ const files = getTrackedFiles(testDir);
185
+ expect(files[0]?.entityId).toBe('spec:auth:v1');
186
+ });
187
+ it('returns empty array for empty project', () => {
188
+ const files = getTrackedFiles(testDir);
189
+ expect(files).toEqual([]);
190
+ });
191
+ it('ignores non-YAML files', () => {
192
+ createTestFile(testDir, 'spec/readme.md', '# Readme');
193
+ createTestFile(testDir, 'spec/data.json', '{}');
194
+ const files = getTrackedFiles(testDir);
195
+ expect(files.length).toBe(0);
196
+ });
197
+ it('respects custom extensions', () => {
198
+ createTestFile(testDir, 'spec/test.yml', 'id: spec:test:v1');
199
+ const files = getTrackedFiles(testDir, { extensions: ['.yml'] });
200
+ expect(files.length).toBe(1);
201
+ });
202
+ });
203
+ describe('scanForChanges', () => {
204
+ let testDir;
205
+ beforeEach(() => {
206
+ testDir = createTestDir();
207
+ initialize(testDir);
208
+ });
209
+ afterEach(() => {
210
+ cleanupTestDir(testDir);
211
+ });
212
+ it('detects new files', () => {
213
+ createTestFile(testDir, 'spec/new.yaml', 'id: spec:new:v1');
214
+ const changes = scanForChanges(testDir);
215
+ expect(changes.added.length).toBe(1);
216
+ expect(changes.added[0]?.path).toBe('spec/new.yaml');
217
+ });
218
+ it('detects changed files', () => {
219
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
220
+ const hash = computeFileHash('spec/test.yaml', testDir);
221
+ setCachedHash('spec/test.yaml', hash, testDir);
222
+ // Modify the file
223
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v2');
224
+ const changes = scanForChanges(testDir);
225
+ expect(changes.changed.length).toBe(1);
226
+ expect(changes.changed[0]?.path).toBe('spec/test.yaml');
227
+ });
228
+ it('reports scanned count', () => {
229
+ createTestFile(testDir, 'spec/a.yaml', 'id: spec:a:v1');
230
+ createTestFile(testDir, 'spec/b.yaml', 'id: spec:b:v1');
231
+ createTestFile(testDir, 'constraints/c.yaml', 'id: constraint:c:v1');
232
+ const changes = scanForChanges(testDir);
233
+ expect(changes.scanned).toBe(3);
234
+ });
235
+ });
236
+ describe('updateHashes', () => {
237
+ let testDir;
238
+ beforeEach(() => {
239
+ testDir = createTestDir();
240
+ initialize(testDir);
241
+ });
242
+ afterEach(() => {
243
+ cleanupTestDir(testDir);
244
+ });
245
+ it('updates hashes for all tracked files', () => {
246
+ createTestFile(testDir, 'spec/a.yaml', 'id: spec:a:v1');
247
+ createTestFile(testDir, 'spec/b.yaml', 'id: spec:b:v1');
248
+ const result = updateHashes(testDir);
249
+ expect(result.updated).toBe(2);
250
+ expect(result.errors.length).toBe(0);
251
+ });
252
+ it('makes files appear unchanged after update', () => {
253
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
254
+ updateHashes(testDir);
255
+ expect(hasFileChanged('spec/test.yaml', testDir)).toBe(false);
256
+ });
257
+ });
258
+ describe('getStaleEntities', () => {
259
+ let testDir;
260
+ beforeEach(() => {
261
+ testDir = createTestDir();
262
+ initialize(testDir);
263
+ });
264
+ afterEach(() => {
265
+ cleanupTestDir(testDir);
266
+ });
267
+ it('returns entity IDs of changed files', () => {
268
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
269
+ const hash = computeFileHash('spec/test.yaml', testDir);
270
+ setCachedHash('spec/test.yaml', hash, testDir);
271
+ // Modify the file
272
+ createTestFile(testDir, 'spec/test.yaml', `
273
+ id: spec:test:v1
274
+ version: 2.0.0
275
+ `);
276
+ const stale = getStaleEntities(testDir);
277
+ expect(stale).toContain('spec:test:v1');
278
+ });
279
+ it('returns entity IDs of new files', () => {
280
+ createTestFile(testDir, 'spec/new.yaml', 'id: spec:new:v1');
281
+ const stale = getStaleEntities(testDir);
282
+ expect(stale).toContain('spec:new:v1');
283
+ });
284
+ it('returns empty array when no changes', () => {
285
+ createTestFile(testDir, 'spec/test.yaml', 'id: spec:test:v1');
286
+ updateHashes(testDir);
287
+ const stale = getStaleEntities(testDir);
288
+ expect(stale.length).toBe(0);
289
+ });
290
+ });
291
+ describe('FileWatcher', () => {
292
+ let testDir;
293
+ let watcher;
294
+ beforeEach(() => {
295
+ testDir = createTestDir();
296
+ initialize(testDir);
297
+ mkdirSync(join(testDir, 'spec'), { recursive: true });
298
+ watcher = new FileWatcher({ projectRoot: testDir });
299
+ });
300
+ afterEach(() => {
301
+ watcher.stop();
302
+ cleanupTestDir(testDir);
303
+ });
304
+ it('starts and stops', () => {
305
+ expect(watcher.isRunning()).toBe(false);
306
+ watcher.start();
307
+ expect(watcher.isRunning()).toBe(true);
308
+ watcher.stop();
309
+ expect(watcher.isRunning()).toBe(false);
310
+ });
311
+ it('can start multiple times safely', () => {
312
+ watcher.start();
313
+ watcher.start();
314
+ expect(watcher.isRunning()).toBe(true);
315
+ });
316
+ it('can stop multiple times safely', () => {
317
+ watcher.start();
318
+ watcher.stop();
319
+ watcher.stop();
320
+ expect(watcher.isRunning()).toBe(false);
321
+ });
322
+ it('is an event emitter', () => {
323
+ expect(typeof watcher.on).toBe('function');
324
+ expect(typeof watcher.emit).toBe('function');
325
+ });
326
+ });
327
+ //# sourceMappingURL=watcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.test.js","sourceRoot":"","sources":["../src/watcher.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@rengler33/prov",
3
+ "version": "0.1.1",
4
+ "description": "Provenance-first planning CLI for AI agent workflows",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "prov": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "build:bun": "bun build ./src/cli.ts --compile --outfile ./bin/prov",
16
+ "dev": "tsc --watch",
17
+ "test": "vitest",
18
+ "test:run": "vitest run",
19
+ "lint": "eslint src --ext .ts",
20
+ "lint:fix": "eslint src --ext .ts --fix",
21
+ "typecheck": "tsc --noEmit",
22
+ "docs": "typedoc",
23
+ "docs:watch": "typedoc --watch",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+ "keywords": [
27
+ "provenance",
28
+ "planning",
29
+ "cli",
30
+ "ai-agent",
31
+ "traceability"
32
+ ],
33
+ "author": "",
34
+ "license": "MIT",
35
+ "devDependencies": {
36
+ "@types/node": "^20.11.0",
37
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
38
+ "@typescript-eslint/parser": "^7.0.0",
39
+ "eslint": "^8.57.0",
40
+ "typedoc": "^0.28.16",
41
+ "typescript": "^5.3.0",
42
+ "vitest": "^1.2.0"
43
+ },
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.25.3",
46
+ "commander": "^12.0.0",
47
+ "yaml": "^2.3.0",
48
+ "zod": "^4.3.6"
49
+ },
50
+ "engines": {
51
+ "node": ">=18.0.0"
52
+ }
53
+ }