midas-mcp 3.0.0 → 3.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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ai.d.ts +2 -0
  3. package/dist/ai.d.ts.map +1 -1
  4. package/dist/ai.js +28 -45
  5. package/dist/ai.js.map +1 -1
  6. package/dist/analyzer.d.ts.map +1 -1
  7. package/dist/analyzer.js +129 -135
  8. package/dist/analyzer.js.map +1 -1
  9. package/dist/config.d.ts +16 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +109 -15
  12. package/dist/config.js.map +1 -1
  13. package/dist/context.d.ts +8 -1
  14. package/dist/context.d.ts.map +1 -1
  15. package/dist/context.js +76 -7
  16. package/dist/context.js.map +1 -1
  17. package/dist/docs/DEPLOYMENT.md +190 -0
  18. package/dist/index.js +4 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/monitoring.d.ts +97 -0
  21. package/dist/monitoring.d.ts.map +1 -0
  22. package/dist/monitoring.js +258 -0
  23. package/dist/monitoring.js.map +1 -0
  24. package/dist/prompts/grow.d.ts.map +1 -1
  25. package/dist/prompts/grow.js +155 -47
  26. package/dist/prompts/grow.js.map +1 -1
  27. package/dist/providers.d.ts +46 -0
  28. package/dist/providers.d.ts.map +1 -0
  29. package/dist/providers.js +349 -0
  30. package/dist/providers.js.map +1 -0
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +28 -3
  33. package/dist/server.js.map +1 -1
  34. package/dist/state/phase.d.ts +19 -4
  35. package/dist/state/phase.d.ts.map +1 -1
  36. package/dist/state/phase.js +19 -10
  37. package/dist/state/phase.js.map +1 -1
  38. package/dist/tools/analyze.d.ts.map +1 -1
  39. package/dist/tools/analyze.js +21 -9
  40. package/dist/tools/analyze.js.map +1 -1
  41. package/dist/tools/completeness.d.ts +36 -0
  42. package/dist/tools/completeness.d.ts.map +1 -0
  43. package/dist/tools/completeness.js +838 -0
  44. package/dist/tools/completeness.js.map +1 -0
  45. package/dist/tools/config.d.ts +73 -0
  46. package/dist/tools/config.d.ts.map +1 -0
  47. package/dist/tools/config.js +94 -0
  48. package/dist/tools/config.js.map +1 -0
  49. package/dist/tools/grow.d.ts +157 -0
  50. package/dist/tools/grow.d.ts.map +1 -0
  51. package/dist/tools/grow.js +532 -0
  52. package/dist/tools/grow.js.map +1 -0
  53. package/dist/tools/index.d.ts +4 -0
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +8 -0
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/tools/validate.d.ts +60 -0
  58. package/dist/tools/validate.d.ts.map +1 -0
  59. package/dist/tools/validate.js +234 -0
  60. package/dist/tools/validate.js.map +1 -0
  61. package/dist/tools/verify.d.ts +4 -4
  62. package/dist/tui.d.ts.map +1 -1
  63. package/dist/tui.js +302 -180
  64. package/dist/tui.js.map +1 -1
  65. package/docs/DEPLOYMENT.md +190 -0
  66. package/package.json +17 -5
  67. package/dist/tests/analyze.test.d.ts +0 -2
  68. package/dist/tests/analyze.test.d.ts.map +0 -1
  69. package/dist/tests/analyze.test.js +0 -120
  70. package/dist/tests/analyze.test.js.map +0 -1
  71. package/dist/tests/context.test.d.ts +0 -2
  72. package/dist/tests/context.test.d.ts.map +0 -1
  73. package/dist/tests/context.test.js +0 -213
  74. package/dist/tests/context.test.js.map +0 -1
  75. package/dist/tests/edge-cases.test.d.ts +0 -2
  76. package/dist/tests/edge-cases.test.d.ts.map +0 -1
  77. package/dist/tests/edge-cases.test.js +0 -234
  78. package/dist/tests/edge-cases.test.js.map +0 -1
  79. package/dist/tests/journal.test.d.ts +0 -2
  80. package/dist/tests/journal.test.d.ts.map +0 -1
  81. package/dist/tests/journal.test.js +0 -184
  82. package/dist/tests/journal.test.js.map +0 -1
  83. package/dist/tests/metrics.test.d.ts +0 -2
  84. package/dist/tests/metrics.test.d.ts.map +0 -1
  85. package/dist/tests/metrics.test.js +0 -178
  86. package/dist/tests/metrics.test.js.map +0 -1
  87. package/dist/tests/phase.test.d.ts +0 -2
  88. package/dist/tests/phase.test.d.ts.map +0 -1
  89. package/dist/tests/phase.test.js +0 -110
  90. package/dist/tests/phase.test.js.map +0 -1
  91. package/dist/tests/prompts.test.d.ts +0 -2
  92. package/dist/tests/prompts.test.d.ts.map +0 -1
  93. package/dist/tests/prompts.test.js +0 -157
  94. package/dist/tests/prompts.test.js.map +0 -1
  95. package/dist/tests/search.test.d.ts +0 -2
  96. package/dist/tests/search.test.d.ts.map +0 -1
  97. package/dist/tests/search.test.js +0 -228
  98. package/dist/tests/search.test.js.map +0 -1
  99. package/dist/tests/security.test.d.ts +0 -2
  100. package/dist/tests/security.test.d.ts.map +0 -1
  101. package/dist/tests/security.test.js +0 -105
  102. package/dist/tests/security.test.js.map +0 -1
  103. package/dist/tests/server.test.d.ts +0 -2
  104. package/dist/tests/server.test.d.ts.map +0 -1
  105. package/dist/tests/server.test.js +0 -93
  106. package/dist/tests/server.test.js.map +0 -1
  107. package/dist/tests/techstack.test.d.ts +0 -2
  108. package/dist/tests/techstack.test.d.ts.map +0 -1
  109. package/dist/tests/techstack.test.js +0 -187
  110. package/dist/tests/techstack.test.js.map +0 -1
  111. package/dist/tests/tools.test.d.ts +0 -2
  112. package/dist/tests/tools.test.d.ts.map +0 -1
  113. package/dist/tests/tools.test.js +0 -137
  114. package/dist/tests/tools.test.js.map +0 -1
  115. package/dist/tests/tracker.test.d.ts +0 -2
  116. package/dist/tests/tracker.test.d.ts.map +0 -1
  117. package/dist/tests/tracker.test.js +0 -197
  118. package/dist/tests/tracker.test.js.map +0 -1
@@ -1,157 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from 'node:test';
2
- import assert from 'node:assert';
3
- import { mkdirSync, rmSync } from 'fs';
4
- import { join } from 'path';
5
- import { tmpdir } from 'os';
6
- import { suggestPrompt } from '../tools/analyze.js';
7
- import { setPhase } from '../state/phase.js';
8
- describe('Prompt Generation System', () => {
9
- const testDir = join(tmpdir(), 'midas-prompts-test-' + Date.now());
10
- beforeEach(() => {
11
- mkdirSync(testDir, { recursive: true });
12
- });
13
- afterEach(() => {
14
- rmSync(testDir, { recursive: true, force: true });
15
- });
16
- describe('EAGLE_SIGHT prompts', () => {
17
- it('IDEA step focuses on problem definition', () => {
18
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'IDEA' });
19
- const result = suggestPrompt({ projectPath: testDir });
20
- assert.strictEqual(result.prompt.includes('problem'), true);
21
- assert.strictEqual(result.prompt.includes('Who'), true);
22
- });
23
- it('RESEARCH step focuses on competitive analysis', () => {
24
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'RESEARCH' });
25
- const result = suggestPrompt({ projectPath: testDir });
26
- assert.strictEqual(result.prompt.includes('similar solutions'), true);
27
- });
28
- it('BRAINLIFT step captures unique insights', () => {
29
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'BRAINLIFT' });
30
- const result = suggestPrompt({ projectPath: testDir });
31
- assert.strictEqual(result.prompt.includes('unique insights'), true);
32
- assert.strictEqual(result.prompt.includes('conventional wisdom'), true);
33
- });
34
- it('PRD step defines goals and non-goals', () => {
35
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'PRD' });
36
- const result = suggestPrompt({ projectPath: testDir });
37
- assert.strictEqual(result.prompt.includes('PRD'), true);
38
- assert.strictEqual(result.prompt.includes('Goals'), true);
39
- assert.strictEqual(result.prompt.includes('Non-goals'), true);
40
- });
41
- it('GAMEPLAN step plans implementation', () => {
42
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'GAMEPLAN' });
43
- const result = suggestPrompt({ projectPath: testDir });
44
- assert.strictEqual(result.prompt.includes('gameplan'), true);
45
- assert.strictEqual(result.prompt.includes('Tech stack'), true);
46
- });
47
- });
48
- describe('BUILD prompts', () => {
49
- it('RULES step loads constraints', () => {
50
- setPhase(testDir, { phase: 'BUILD', step: 'RULES' });
51
- const result = suggestPrompt({ projectPath: testDir });
52
- assert.strictEqual(result.prompt.includes('rules'), true);
53
- });
54
- it('INDEX step understands architecture', () => {
55
- setPhase(testDir, { phase: 'BUILD', step: 'INDEX' });
56
- const result = suggestPrompt({ projectPath: testDir });
57
- assert.strictEqual(result.prompt.includes('codebase structure'), true);
58
- });
59
- it('READ step loads specific files', () => {
60
- setPhase(testDir, { phase: 'BUILD', step: 'READ' });
61
- const result = suggestPrompt({ projectPath: testDir });
62
- assert.strictEqual(result.prompt.includes('Read'), true);
63
- assert.strictEqual(result.prompt.includes('files'), true);
64
- });
65
- it('RESEARCH step gathers external knowledge', () => {
66
- setPhase(testDir, { phase: 'BUILD', step: 'RESEARCH' });
67
- const result = suggestPrompt({ projectPath: testDir });
68
- assert.strictEqual(result.prompt.includes('documentation'), true);
69
- });
70
- it('IMPLEMENT step follows TDD', () => {
71
- setPhase(testDir, { phase: 'BUILD', step: 'IMPLEMENT' });
72
- const result = suggestPrompt({ projectPath: testDir });
73
- assert.strictEqual(result.prompt.includes('test'), true);
74
- assert.strictEqual(result.prompt.includes('one thing'), true);
75
- });
76
- it('TEST step verifies implementation', () => {
77
- setPhase(testDir, { phase: 'BUILD', step: 'TEST' });
78
- const result = suggestPrompt({ projectPath: testDir });
79
- assert.strictEqual(result.prompt.includes('Run the tests'), true);
80
- assert.strictEqual(result.prompt.includes('edge case'), true);
81
- });
82
- it('DEBUG step uses Tornado approach', () => {
83
- setPhase(testDir, { phase: 'BUILD', step: 'DEBUG' });
84
- const result = suggestPrompt({ projectPath: testDir });
85
- assert.strictEqual(result.prompt.includes('Tornado'), true);
86
- assert.strictEqual(result.prompt.includes('Research'), true);
87
- assert.strictEqual(result.prompt.includes('logs'), true);
88
- });
89
- });
90
- describe('SHIP prompts', () => {
91
- it('REVIEW step audits security and performance', () => {
92
- setPhase(testDir, { phase: 'SHIP', step: 'REVIEW' });
93
- const result = suggestPrompt({ projectPath: testDir });
94
- assert.strictEqual(result.prompt.includes('security'), true);
95
- assert.strictEqual(result.prompt.includes('performance'), true);
96
- });
97
- it('DEPLOY step prepares deployment', () => {
98
- setPhase(testDir, { phase: 'SHIP', step: 'DEPLOY' });
99
- const result = suggestPrompt({ projectPath: testDir });
100
- assert.strictEqual(result.prompt.includes('deployment'), true);
101
- assert.strictEqual(result.prompt.includes('environment'), true);
102
- });
103
- it('MONITOR step sets up observability', () => {
104
- setPhase(testDir, { phase: 'SHIP', step: 'MONITOR' });
105
- const result = suggestPrompt({ projectPath: testDir });
106
- assert.strictEqual(result.prompt.includes('monitoring'), true);
107
- assert.strictEqual(result.prompt.includes('alerts'), true);
108
- });
109
- });
110
- describe('GROW prompts', () => {
111
- it('FEEDBACK step analyzes user input', () => {
112
- setPhase(testDir, { phase: 'GROW', step: 'FEEDBACK' });
113
- const result = suggestPrompt({ projectPath: testDir });
114
- assert.strictEqual(result.prompt.includes('feedback'), true);
115
- assert.strictEqual(result.prompt.includes('patterns'), true);
116
- });
117
- it('ANALYZE step reviews metrics', () => {
118
- setPhase(testDir, { phase: 'GROW', step: 'ANALYZE' });
119
- const result = suggestPrompt({ projectPath: testDir });
120
- assert.strictEqual(result.prompt.includes('metrics'), true);
121
- assert.strictEqual(result.prompt.includes('bottleneck'), true);
122
- });
123
- it('ITERATE step plans next cycle', () => {
124
- setPhase(testDir, { phase: 'GROW', step: 'ITERATE' });
125
- const result = suggestPrompt({ projectPath: testDir });
126
- assert.strictEqual(result.prompt.includes('iteration'), true);
127
- assert.strictEqual(result.prompt.includes('brainlift'), true);
128
- });
129
- });
130
- describe('Context substitution', () => {
131
- it('substitutes feature context in IMPLEMENT', () => {
132
- setPhase(testDir, { phase: 'BUILD', step: 'IMPLEMENT' });
133
- const result = suggestPrompt({
134
- projectPath: testDir,
135
- context: 'user authentication module'
136
- });
137
- assert.strictEqual(result.prompt.includes('user authentication module'), true);
138
- });
139
- it('substitutes idea context in EAGLE_SIGHT:IDEA', () => {
140
- setPhase(testDir, { phase: 'EAGLE_SIGHT', step: 'IDEA' });
141
- const result = suggestPrompt({
142
- projectPath: testDir,
143
- context: 'task management app'
144
- });
145
- assert.strictEqual(result.prompt.includes('task management app'), true);
146
- });
147
- it('substitutes problem context in DEBUG', () => {
148
- setPhase(testDir, { phase: 'BUILD', step: 'DEBUG' });
149
- const result = suggestPrompt({
150
- projectPath: testDir,
151
- context: 'authentication fails on refresh'
152
- });
153
- assert.strictEqual(result.prompt.includes('authentication fails on refresh'), true);
154
- });
155
- });
156
- });
157
- //# sourceMappingURL=prompts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../../src/tests/prompts.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=search.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../src/tests/search.test.ts"],"names":[],"mappings":""}
@@ -1,228 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from 'node:test';
2
- import assert from 'node:assert';
3
- import { mkdirSync, rmSync, writeFileSync } from 'fs';
4
- import { join } from 'path';
5
- import { tmpdir } from 'os';
6
- import { indexJournalEntries, indexCodeFiles, indexError, search, getSearchStats, rebuildIndex } from '../search.js';
7
- import { saveToJournal } from '../tools/journal.js';
8
- describe('Search Module', () => {
9
- const testDir = join(tmpdir(), 'midas-search-test-' + Date.now());
10
- beforeEach(() => {
11
- mkdirSync(testDir, { recursive: true });
12
- });
13
- afterEach(() => {
14
- rmSync(testDir, { recursive: true, force: true });
15
- });
16
- describe('indexJournalEntries', () => {
17
- it('indexes journal entries', () => {
18
- // Create some journal entries
19
- saveToJournal({
20
- projectPath: testDir,
21
- title: 'Implemented authentication',
22
- conversation: 'We added JWT tokens and password hashing for user login.',
23
- });
24
- const count = indexJournalEntries(testDir);
25
- assert.strictEqual(count, 1);
26
- });
27
- it('indexes multiple entries', () => {
28
- saveToJournal({
29
- projectPath: testDir,
30
- title: 'First entry',
31
- conversation: 'Content one',
32
- });
33
- saveToJournal({
34
- projectPath: testDir,
35
- title: 'Second entry',
36
- conversation: 'Content two',
37
- });
38
- const count = indexJournalEntries(testDir);
39
- assert.strictEqual(count, 2);
40
- });
41
- it('returns zero for empty project', () => {
42
- const count = indexJournalEntries(testDir);
43
- assert.strictEqual(count, 0);
44
- });
45
- });
46
- describe('indexCodeFiles', () => {
47
- it('indexes TypeScript files', () => {
48
- const srcDir = join(testDir, 'src');
49
- mkdirSync(srcDir);
50
- writeFileSync(join(srcDir, 'app.ts'), 'export function hello() { return "world"; }');
51
- writeFileSync(join(srcDir, 'utils.ts'), 'export const add = (a: number, b: number) => a + b;');
52
- const count = indexCodeFiles(testDir);
53
- assert.strictEqual(count, 2);
54
- });
55
- it('ignores node_modules', () => {
56
- mkdirSync(join(testDir, 'node_modules', 'pkg'), { recursive: true });
57
- writeFileSync(join(testDir, 'node_modules', 'pkg', 'index.js'), 'module.exports = {}');
58
- writeFileSync(join(testDir, 'app.js'), 'console.log("hello")');
59
- const count = indexCodeFiles(testDir);
60
- assert.strictEqual(count, 1);
61
- });
62
- it('respects max files limit', () => {
63
- const srcDir = join(testDir, 'src');
64
- mkdirSync(srcDir);
65
- for (let i = 0; i < 20; i++) {
66
- writeFileSync(join(srcDir, `file${i}.ts`), `// file ${i}`);
67
- }
68
- const count = indexCodeFiles(testDir, 5);
69
- assert.strictEqual(count, 5);
70
- });
71
- it('indexes markdown files', () => {
72
- writeFileSync(join(testDir, 'README.md'), '# My Project\n\nThis is a test.');
73
- const count = indexCodeFiles(testDir);
74
- assert.strictEqual(count, 1);
75
- });
76
- });
77
- describe('indexError', () => {
78
- it('adds error to index', () => {
79
- indexError(testDir, 'TypeError: Cannot read property of null', 'src/app.ts');
80
- const stats = getSearchStats(testDir);
81
- assert.strictEqual(stats.byType['error'], 1);
82
- });
83
- it('keeps only recent errors', () => {
84
- // Add 25 errors
85
- for (let i = 0; i < 25; i++) {
86
- indexError(testDir, `Error ${i}`, `file${i}.ts`);
87
- }
88
- const stats = getSearchStats(testDir);
89
- // Max 20 errors, but check it's capped (may be 19-21 due to timing)
90
- assert.strictEqual(stats.byType['error'] <= 21, true);
91
- });
92
- });
93
- describe('search', () => {
94
- it('finds matching journal entries', () => {
95
- saveToJournal({
96
- projectPath: testDir,
97
- title: 'Implementation feature',
98
- conversation: 'We implemented feature implementation implementation implementation.',
99
- });
100
- indexJournalEntries(testDir);
101
- // Verify indexing worked
102
- const stats = getSearchStats(testDir);
103
- assert.strictEqual(stats.byType['journal'], 1);
104
- // Search for keywords - if results empty, that's a search algorithm issue not indexing
105
- const results = search(testDir, 'implementation feature');
106
- // At minimum verify the search runs without error
107
- assert.strictEqual(Array.isArray(results), true);
108
- });
109
- it('finds matching code files', () => {
110
- mkdirSync(join(testDir, 'src'));
111
- writeFileSync(join(testDir, 'src', 'auth.ts'), 'export function validate(token) { return verify(token); } validate validate validate');
112
- indexCodeFiles(testDir);
113
- // Verify indexing worked
114
- const stats = getSearchStats(testDir);
115
- assert.strictEqual(stats.byType['code'], 1);
116
- // Search - verify it runs without error
117
- const results = search(testDir, 'validate token verify');
118
- assert.strictEqual(Array.isArray(results), true);
119
- });
120
- it('returns empty for no matches', () => {
121
- saveToJournal({
122
- projectPath: testDir,
123
- title: 'Unrelated topic',
124
- conversation: 'Nothing about databases here.',
125
- });
126
- indexJournalEntries(testDir);
127
- const results = search(testDir, 'graphql apollo');
128
- assert.strictEqual(results.length, 0);
129
- });
130
- it('filters by type', () => {
131
- saveToJournal({
132
- projectPath: testDir,
133
- title: 'Auth work',
134
- conversation: 'Implemented authentication.',
135
- });
136
- indexJournalEntries(testDir);
137
- indexError(testDir, 'Authentication error occurred', 'auth.ts');
138
- const journalOnly = search(testDir, 'authentication', { types: ['journal'] });
139
- assert.strictEqual(journalOnly.every(r => r.type === 'journal'), true);
140
- });
141
- it('respects limit', () => {
142
- for (let i = 0; i < 10; i++) {
143
- saveToJournal({
144
- projectPath: testDir,
145
- title: `Entry about developer coding programming ${i}`,
146
- conversation: `Developer coding programming content ${i}`,
147
- });
148
- }
149
- indexJournalEntries(testDir);
150
- const results = search(testDir, 'developer coding programming', { limit: 3 });
151
- assert.strictEqual(results.length <= 3, true);
152
- });
153
- it('scores more relevant results higher', () => {
154
- saveToJournal({
155
- projectPath: testDir,
156
- title: 'JWT Authentication',
157
- conversation: 'JWT token validation and refresh. JWT is great for auth.',
158
- });
159
- saveToJournal({
160
- projectPath: testDir,
161
- title: 'Random stuff',
162
- conversation: 'Some unrelated content with just jwt mentioned once.',
163
- });
164
- indexJournalEntries(testDir);
165
- const results = search(testDir, 'jwt authentication token');
166
- // First result should be more relevant
167
- assert.strictEqual(results.length >= 1, true);
168
- assert.strictEqual(results[0].source.includes('jwt') || results[0].content.includes('JWT'), true);
169
- });
170
- });
171
- describe('getSearchStats', () => {
172
- it('returns correct stats', () => {
173
- saveToJournal({
174
- projectPath: testDir,
175
- title: 'Entry 1',
176
- conversation: 'Content',
177
- });
178
- mkdirSync(join(testDir, 'src'));
179
- writeFileSync(join(testDir, 'src', 'app.ts'), 'code');
180
- indexJournalEntries(testDir);
181
- indexCodeFiles(testDir);
182
- const stats = getSearchStats(testDir);
183
- assert.strictEqual(stats.totalChunks, 2);
184
- assert.strictEqual(stats.byType['journal'], 1);
185
- assert.strictEqual(stats.byType['code'], 1);
186
- });
187
- it('tracks keywords count', () => {
188
- saveToJournal({
189
- projectPath: testDir,
190
- title: 'Detailed entry',
191
- conversation: 'This has many different keywords for testing purposes.',
192
- });
193
- indexJournalEntries(testDir);
194
- const stats = getSearchStats(testDir);
195
- assert.strictEqual(stats.totalKeywords > 0, true);
196
- });
197
- });
198
- describe('rebuildIndex', () => {
199
- it('clears and rebuilds index', () => {
200
- // Add some data
201
- saveToJournal({
202
- projectPath: testDir,
203
- title: 'Old entry',
204
- conversation: 'Content',
205
- });
206
- indexJournalEntries(testDir);
207
- indexError(testDir, 'Old error', 'file.ts');
208
- // Rebuild should clear errors (not in journal/code)
209
- const result = rebuildIndex(testDir);
210
- assert.strictEqual(result.journal, 1);
211
- const stats = getSearchStats(testDir);
212
- assert.strictEqual(stats.byType['error'], undefined);
213
- });
214
- it('returns counts', () => {
215
- saveToJournal({
216
- projectPath: testDir,
217
- title: 'Entry',
218
- conversation: 'Content',
219
- });
220
- mkdirSync(join(testDir, 'src'));
221
- writeFileSync(join(testDir, 'src', 'app.ts'), 'code');
222
- const result = rebuildIndex(testDir);
223
- assert.strictEqual(result.journal, 1);
224
- assert.strictEqual(result.code, 1);
225
- });
226
- });
227
- });
228
- //# sourceMappingURL=search.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../src/tests/search.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=security.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security.test.d.ts","sourceRoot":"","sources":["../../src/tests/security.test.ts"],"names":[],"mappings":""}
@@ -1,105 +0,0 @@
1
- import assert from 'node:assert';
2
- import { test, describe } from 'node:test';
3
- import { sanitizePath, isShellSafe, limitLength, validateEnum, LIMITS } from '../security.js';
4
- import { resolve } from 'path';
5
- describe('Security utilities', () => {
6
- describe('sanitizePath', () => {
7
- test('returns cwd when no path provided', () => {
8
- const result = sanitizePath(undefined);
9
- assert.strictEqual(result, process.cwd());
10
- });
11
- test('resolves relative paths within base', () => {
12
- const base = '/home/user/project';
13
- const result = sanitizePath('src/file.ts', base);
14
- assert.strictEqual(result, resolve(base, 'src/file.ts'));
15
- });
16
- test('blocks path traversal attempts', () => {
17
- const base = '/home/user/project';
18
- const result = sanitizePath('../../../etc/passwd', base);
19
- // Should return base when path escapes
20
- assert.strictEqual(result, base);
21
- });
22
- test('blocks double-dot traversal in middle of path', () => {
23
- const base = '/home/user/project';
24
- const result = sanitizePath('src/../../../etc/passwd', base);
25
- assert.strictEqual(result, base);
26
- });
27
- test('normalizes paths with dots', () => {
28
- const base = '/home/user/project';
29
- const result = sanitizePath('./src/./file.ts', base);
30
- assert.strictEqual(result, resolve(base, 'src/file.ts'));
31
- });
32
- });
33
- describe('isShellSafe', () => {
34
- test('allows safe paths', () => {
35
- assert.strictEqual(isShellSafe('/home/user/project'), true);
36
- assert.strictEqual(isShellSafe('/Users/dev/my-project'), true);
37
- assert.strictEqual(isShellSafe('src/file.ts'), true);
38
- });
39
- test('blocks paths with shell metacharacters', () => {
40
- assert.strictEqual(isShellSafe('/path; rm -rf /'), false);
41
- assert.strictEqual(isShellSafe('/path && malicious'), false);
42
- assert.strictEqual(isShellSafe('/path | grep'), false);
43
- assert.strictEqual(isShellSafe('/path `whoami`'), false);
44
- assert.strictEqual(isShellSafe('/path $(whoami)'), false);
45
- assert.strictEqual(isShellSafe("/path'; drop table"), false);
46
- assert.strictEqual(isShellSafe('/path"'), false);
47
- });
48
- });
49
- describe('limitLength', () => {
50
- test('returns string unchanged if under limit', () => {
51
- assert.strictEqual(limitLength('short', 100), 'short');
52
- });
53
- test('truncates long strings', () => {
54
- const long = 'a'.repeat(200);
55
- const result = limitLength(long, 50);
56
- assert.ok(result.length < 200);
57
- assert.ok(result.includes('[truncated]'));
58
- });
59
- test('handles exact limit', () => {
60
- const exact = 'a'.repeat(50);
61
- assert.strictEqual(limitLength(exact, 50), exact);
62
- });
63
- });
64
- describe('validateEnum', () => {
65
- const allowed = ['A', 'B', 'C'];
66
- test('returns value if valid', () => {
67
- assert.strictEqual(validateEnum('A', allowed), 'A');
68
- assert.strictEqual(validateEnum('B', allowed), 'B');
69
- });
70
- test('returns null for invalid values', () => {
71
- assert.strictEqual(validateEnum('D', allowed), null);
72
- assert.strictEqual(validateEnum('', allowed), null);
73
- assert.strictEqual(validateEnum('a', allowed), null); // case sensitive
74
- });
75
- });
76
- describe('LIMITS constants', () => {
77
- test('has reasonable limits', () => {
78
- assert.ok(LIMITS.CONVERSATION_MAX_LENGTH > 0);
79
- assert.ok(LIMITS.CONVERSATION_MAX_LENGTH <= 1000000); // 1MB max
80
- assert.ok(LIMITS.TITLE_MAX_LENGTH > 0);
81
- assert.ok(LIMITS.PATH_MAX_LENGTH > 0);
82
- });
83
- });
84
- });
85
- describe('Security integration', () => {
86
- test('journal tool rejects path traversal', async () => {
87
- // This test verifies the integration works
88
- // The actual protection happens in sanitizePath
89
- const maliciousPath = '../../../etc';
90
- const safePath = sanitizePath(maliciousPath);
91
- assert.ok(!safePath.includes('/etc'));
92
- assert.strictEqual(safePath, process.cwd());
93
- });
94
- test('phase tool validates step values', async () => {
95
- const { setPhaseManually } = await import('../tools/phase.js');
96
- // Valid step should work
97
- const validResult = setPhaseManually({ phase: 'BUILD', step: 'IMPLEMENT' });
98
- assert.strictEqual(validResult.success, true);
99
- // Invalid step should fail gracefully
100
- const invalidResult = setPhaseManually({ phase: 'BUILD', step: 'INVALID_STEP' });
101
- assert.strictEqual(invalidResult.success, false);
102
- assert.ok(invalidResult.error?.includes('Invalid step'));
103
- });
104
- });
105
- //# sourceMappingURL=security.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security.test.js","sourceRoot":"","sources":["../../src/tests/security.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=server.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../src/tests/server.test.ts"],"names":[],"mappings":""}