dino-spec 13.6.1 → 14.0.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 (203) hide show
  1. package/README.md +82 -5
  2. package/dist/commands/hud.d.ts +1 -8
  3. package/dist/commands/hud.d.ts.map +1 -1
  4. package/dist/commands/hud.js +4 -18
  5. package/dist/commands/hud.js.map +1 -1
  6. package/dist/core/config/feature-flags.d.ts +25 -1
  7. package/dist/core/config/feature-flags.d.ts.map +1 -1
  8. package/dist/core/config/feature-flags.js +7 -1
  9. package/dist/core/config/feature-flags.js.map +1 -1
  10. package/dist/core/context/__tests__/budget-thresholds.test.d.ts +5 -0
  11. package/dist/core/context/__tests__/budget-thresholds.test.d.ts.map +1 -0
  12. package/dist/core/context/__tests__/budget-thresholds.test.js +223 -0
  13. package/dist/core/context/__tests__/budget-thresholds.test.js.map +1 -0
  14. package/dist/core/context/__tests__/compaction-engine.test.d.ts +5 -0
  15. package/dist/core/context/__tests__/compaction-engine.test.d.ts.map +1 -0
  16. package/dist/core/context/__tests__/compaction-engine.test.js +474 -0
  17. package/dist/core/context/__tests__/compaction-engine.test.js.map +1 -0
  18. package/dist/core/context/__tests__/output-persistence.test.d.ts +5 -0
  19. package/dist/core/context/__tests__/output-persistence.test.d.ts.map +1 -0
  20. package/dist/core/context/__tests__/output-persistence.test.js +246 -0
  21. package/dist/core/context/__tests__/output-persistence.test.js.map +1 -0
  22. package/dist/core/context/auto-injection-engine.d.ts +10 -1
  23. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  24. package/dist/core/context/auto-injection-engine.js +45 -2
  25. package/dist/core/context/auto-injection-engine.js.map +1 -1
  26. package/dist/core/context/budget-thresholds.d.ts +167 -0
  27. package/dist/core/context/budget-thresholds.d.ts.map +1 -0
  28. package/dist/core/context/budget-thresholds.js +234 -0
  29. package/dist/core/context/budget-thresholds.js.map +1 -0
  30. package/dist/core/context/compaction-engine.d.ts +193 -0
  31. package/dist/core/context/compaction-engine.d.ts.map +1 -0
  32. package/dist/core/context/compaction-engine.js +376 -0
  33. package/dist/core/context/compaction-engine.js.map +1 -0
  34. package/dist/core/context/context-health.d.ts +27 -2
  35. package/dist/core/context/context-health.d.ts.map +1 -1
  36. package/dist/core/context/context-health.js +98 -12
  37. package/dist/core/context/context-health.js.map +1 -1
  38. package/dist/core/context/focus-resource-loader.d.ts +143 -0
  39. package/dist/core/context/focus-resource-loader.d.ts.map +1 -0
  40. package/dist/core/context/focus-resource-loader.js +305 -0
  41. package/dist/core/context/focus-resource-loader.js.map +1 -0
  42. package/dist/core/context/index.d.ts +10 -5
  43. package/dist/core/context/index.d.ts.map +1 -1
  44. package/dist/core/context/index.js +40 -5
  45. package/dist/core/context/index.js.map +1 -1
  46. package/dist/core/context/lazy-loader.d.ts +44 -1
  47. package/dist/core/context/lazy-loader.d.ts.map +1 -1
  48. package/dist/core/context/lazy-loader.js +59 -1
  49. package/dist/core/context/lazy-loader.js.map +1 -1
  50. package/dist/core/context/output-persistence.d.ts +142 -0
  51. package/dist/core/context/output-persistence.d.ts.map +1 -0
  52. package/dist/core/context/output-persistence.js +242 -0
  53. package/dist/core/context/output-persistence.js.map +1 -0
  54. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts +7 -0
  55. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts.map +1 -0
  56. package/dist/core/context-repl/__tests__/repl-environment.test.js +335 -0
  57. package/dist/core/context-repl/__tests__/repl-environment.test.js.map +1 -0
  58. package/dist/core/context-repl/context-window-monitor.d.ts +181 -0
  59. package/dist/core/context-repl/context-window-monitor.d.ts.map +1 -0
  60. package/dist/core/context-repl/context-window-monitor.js +309 -0
  61. package/dist/core/context-repl/context-window-monitor.js.map +1 -0
  62. package/dist/core/context-repl/index.d.ts +8 -3
  63. package/dist/core/context-repl/index.d.ts.map +1 -1
  64. package/dist/core/context-repl/index.js +11 -3
  65. package/dist/core/context-repl/index.js.map +1 -1
  66. package/dist/core/context-repl/repl-environment.d.ts +66 -0
  67. package/dist/core/context-repl/repl-environment.d.ts.map +1 -0
  68. package/dist/core/context-repl/repl-environment.js +795 -0
  69. package/dist/core/context-repl/repl-environment.js.map +1 -0
  70. package/dist/core/context-repl/types.d.ts +277 -1
  71. package/dist/core/context-repl/types.d.ts.map +1 -1
  72. package/dist/core/context-repl/types.js +52 -1
  73. package/dist/core/context-repl/types.js.map +1 -1
  74. package/dist/core/environment/__tests__/pre-verify.test.d.ts +5 -0
  75. package/dist/core/environment/__tests__/pre-verify.test.d.ts.map +1 -0
  76. package/dist/core/environment/__tests__/pre-verify.test.js +343 -0
  77. package/dist/core/environment/__tests__/pre-verify.test.js.map +1 -0
  78. package/dist/core/environment/index.d.ts +8 -0
  79. package/dist/core/environment/index.d.ts.map +1 -0
  80. package/dist/core/environment/index.js +7 -0
  81. package/dist/core/environment/index.js.map +1 -0
  82. package/dist/core/environment/pre-verify.d.ts +63 -0
  83. package/dist/core/environment/pre-verify.d.ts.map +1 -0
  84. package/dist/core/environment/pre-verify.js +221 -0
  85. package/dist/core/environment/pre-verify.js.map +1 -0
  86. package/dist/core/environment/types.d.ts +37 -0
  87. package/dist/core/environment/types.d.ts.map +1 -0
  88. package/dist/core/environment/types.js +5 -0
  89. package/dist/core/environment/types.js.map +1 -0
  90. package/dist/core/generator/claude-md.js +1 -1
  91. package/dist/core/intelligence/context-budget.d.ts +10 -5
  92. package/dist/core/intelligence/context-budget.d.ts.map +1 -1
  93. package/dist/core/intelligence/context-budget.js +12 -5
  94. package/dist/core/intelligence/context-budget.js.map +1 -1
  95. package/dist/core/provider/storage.d.ts.map +1 -1
  96. package/dist/core/provider/storage.js +1 -2
  97. package/dist/core/provider/storage.js.map +1 -1
  98. package/dist/hooks/post-edit.js +73 -0
  99. package/dist/hooks/post-edit.js.map +1 -1
  100. package/dist/hooks/session-start.js +115 -0
  101. package/dist/hooks/session-start.js.map +1 -1
  102. package/dist/hooks/types.js +1 -1
  103. package/dist/hooks/user-prompt-submit.js +100 -0
  104. package/dist/hooks/user-prompt-submit.js.map +1 -1
  105. package/dist/hud/config.d.ts +3 -28
  106. package/dist/hud/config.d.ts.map +1 -1
  107. package/dist/hud/config.js +8 -60
  108. package/dist/hud/config.js.map +1 -1
  109. package/dist/hud/index.d.ts.map +1 -1
  110. package/dist/hud/index.js +0 -1
  111. package/dist/hud/index.js.map +1 -1
  112. package/dist/hud/render/budget-bar.d.ts +0 -2
  113. package/dist/hud/render/budget-bar.d.ts.map +1 -1
  114. package/dist/hud/render/budget-bar.js +5 -8
  115. package/dist/hud/render/budget-bar.js.map +1 -1
  116. package/dist/hud/stdin.d.ts +0 -3
  117. package/dist/hud/stdin.d.ts.map +1 -1
  118. package/dist/hud/stdin.js +2 -29
  119. package/dist/hud/stdin.js.map +1 -1
  120. package/dist/hud/types.d.ts +0 -2
  121. package/dist/hud/types.d.ts.map +1 -1
  122. package/dist/mcp/__tests__/dynamic-updates.test.d.ts +5 -0
  123. package/dist/mcp/__tests__/dynamic-updates.test.d.ts.map +1 -0
  124. package/dist/mcp/__tests__/dynamic-updates.test.js +314 -0
  125. package/dist/mcp/__tests__/dynamic-updates.test.js.map +1 -0
  126. package/dist/mcp/dynamic-updates.d.ts +167 -0
  127. package/dist/mcp/dynamic-updates.d.ts.map +1 -0
  128. package/dist/mcp/dynamic-updates.js +313 -0
  129. package/dist/mcp/dynamic-updates.js.map +1 -0
  130. package/dist/mcp/focus-filter.d.ts +74 -0
  131. package/dist/mcp/focus-filter.d.ts.map +1 -0
  132. package/dist/mcp/focus-filter.js +229 -0
  133. package/dist/mcp/focus-filter.js.map +1 -0
  134. package/dist/mcp/index.d.ts +4 -2
  135. package/dist/mcp/index.d.ts.map +1 -1
  136. package/dist/mcp/index.js +5 -2
  137. package/dist/mcp/index.js.map +1 -1
  138. package/dist/mcp/registry.d.ts +4 -4
  139. package/dist/mcp/registry.d.ts.map +1 -1
  140. package/dist/mcp/registry.js +16 -16
  141. package/dist/mcp/registry.js.map +1 -1
  142. package/dist/mcp/server.d.ts +2 -1
  143. package/dist/mcp/server.d.ts.map +1 -1
  144. package/dist/mcp/server.js +12 -3
  145. package/dist/mcp/server.js.map +1 -1
  146. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  147. package/dist/mcp/tool-tiers.js +5 -0
  148. package/dist/mcp/tool-tiers.js.map +1 -1
  149. package/dist/mcp/tools/__tests__/environment.test.d.ts +5 -0
  150. package/dist/mcp/tools/__tests__/environment.test.d.ts.map +1 -0
  151. package/dist/mcp/tools/__tests__/environment.test.js +219 -0
  152. package/dist/mcp/tools/__tests__/environment.test.js.map +1 -0
  153. package/dist/mcp/tools/auto-inject.d.ts +36 -0
  154. package/dist/mcp/tools/auto-inject.d.ts.map +1 -0
  155. package/dist/mcp/tools/auto-inject.js +143 -0
  156. package/dist/mcp/tools/auto-inject.js.map +1 -0
  157. package/dist/mcp/tools/auto-unload.d.ts +29 -0
  158. package/dist/mcp/tools/auto-unload.d.ts.map +1 -0
  159. package/dist/mcp/tools/auto-unload.js +151 -0
  160. package/dist/mcp/tools/auto-unload.js.map +1 -0
  161. package/dist/mcp/tools/context-repl.d.ts +48 -0
  162. package/dist/mcp/tools/context-repl.d.ts.map +1 -0
  163. package/dist/mcp/tools/context-repl.js +290 -0
  164. package/dist/mcp/tools/context-repl.js.map +1 -0
  165. package/dist/mcp/tools/environment.d.ts +27 -0
  166. package/dist/mcp/tools/environment.d.ts.map +1 -0
  167. package/dist/mcp/tools/environment.js +97 -0
  168. package/dist/mcp/tools/environment.js.map +1 -0
  169. package/dist/mcp/tools/health.d.ts +29 -0
  170. package/dist/mcp/tools/health.d.ts.map +1 -0
  171. package/dist/mcp/tools/health.js +171 -0
  172. package/dist/mcp/tools/health.js.map +1 -0
  173. package/dist/mcp/tools/index.d.ts +9 -2
  174. package/dist/mcp/tools/index.d.ts.map +1 -1
  175. package/dist/mcp/tools/index.js +37 -2
  176. package/dist/mcp/tools/index.js.map +1 -1
  177. package/dist/mcp/tools/output-persistence.d.ts +44 -0
  178. package/dist/mcp/tools/output-persistence.d.ts.map +1 -0
  179. package/dist/mcp/tools/output-persistence.js +208 -0
  180. package/dist/mcp/tools/output-persistence.js.map +1 -0
  181. package/dist/mcp-server.d.ts +2 -1
  182. package/dist/mcp-server.d.ts.map +1 -1
  183. package/dist/mcp-server.js +36 -7
  184. package/dist/mcp-server.js.map +1 -1
  185. package/dist/rules/index.js +2 -2
  186. package/dist/utils/exec.js +2 -2
  187. package/dist/utils/exec.js.map +1 -1
  188. package/dist/utils/gitignore.d.ts.map +1 -1
  189. package/dist/utils/gitignore.js +5 -0
  190. package/dist/utils/gitignore.js.map +1 -1
  191. package/package.json +76 -77
  192. package/dist/hud/config-tui.d.ts +0 -25
  193. package/dist/hud/config-tui.d.ts.map +0 -1
  194. package/dist/hud/config-tui.js +0 -199
  195. package/dist/hud/config-tui.js.map +0 -1
  196. package/dist/hud/models.d.ts +0 -58
  197. package/dist/hud/models.d.ts.map +0 -1
  198. package/dist/hud/models.js +0 -124
  199. package/dist/hud/models.js.map +0 -1
  200. package/dist/hud/token-estimator.d.ts +0 -79
  201. package/dist/hud/token-estimator.d.ts.map +0 -1
  202. package/dist/hud/token-estimator.js +0 -126
  203. package/dist/hud/token-estimator.js.map +0 -1
@@ -0,0 +1,335 @@
1
+ /**
2
+ * REPL Environment Tests - v13.6.0
3
+ *
4
+ * Tests for the RLM-style REPL environment.
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
7
+ import { REPLEnvironment, createREPLEnvironment, formatREPLResult, formatREPLState } from '../repl-environment.js';
8
+ import * as featureFlags from '../../config/feature-flags.js';
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ import { tmpdir } from 'os';
12
+ // Mock feature flags
13
+ vi.mock('../../config/feature-flags.js', () => ({
14
+ isFeatureEnabled: vi.fn(),
15
+ }));
16
+ describe('REPLEnvironment', () => {
17
+ let tempDir;
18
+ let repl;
19
+ beforeEach(async () => {
20
+ // Create temp directory
21
+ tempDir = path.join(tmpdir(), `repl-test-${Date.now()}`);
22
+ await fs.mkdir(tempDir, { recursive: true });
23
+ // Create .dino directory with session.md
24
+ const dinoDir = path.join(tempDir, '.dino');
25
+ await fs.mkdir(dinoDir, { recursive: true });
26
+ await fs.writeFile(path.join(dinoDir, 'session.md'), '# Session\n\n## Focus\n**src/core/** (high confidence, test)\n\n## Phase\n**implementation**');
27
+ await fs.writeFile(path.join(dinoDir, 'config.json'), JSON.stringify({ version: '13.6.0', features: { enableReplEnvironment: true } }));
28
+ // Enable REPL by default
29
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(true);
30
+ repl = new REPLEnvironment({ projectDir: tempDir, maxTokens: 2000 });
31
+ });
32
+ afterEach(async () => {
33
+ try {
34
+ await fs.rm(tempDir, { recursive: true, force: true });
35
+ }
36
+ catch {
37
+ // Ignore cleanup errors
38
+ }
39
+ vi.clearAllMocks();
40
+ });
41
+ describe('constructor', () => {
42
+ it('should create REPL with default options', () => {
43
+ const defaultRepl = new REPLEnvironment();
44
+ const state = defaultRepl.getState();
45
+ expect(state.variables.size).toBe(0);
46
+ expect(state.totalTokens).toBe(0);
47
+ expect(state.operationCount).toBe(0);
48
+ });
49
+ it('should create REPL with custom options', () => {
50
+ const customRepl = new REPLEnvironment({ projectDir: tempDir, maxTokens: 5000 });
51
+ const state = customRepl.getState();
52
+ expect(state.variables.size).toBe(0);
53
+ });
54
+ });
55
+ describe('createREPLEnvironment', () => {
56
+ it('should create REPL via factory function', () => {
57
+ const factoryRepl = createREPLEnvironment({ projectDir: tempDir });
58
+ expect(factoryRepl).toBeDefined();
59
+ expect(factoryRepl.getState).toBeDefined();
60
+ });
61
+ });
62
+ describe('getState', () => {
63
+ it('should return current state', () => {
64
+ const state = repl.getState();
65
+ expect(state).toHaveProperty('variables');
66
+ expect(state).toHaveProperty('totalTokens');
67
+ expect(state).toHaveProperty('startedAt');
68
+ expect(state).toHaveProperty('operationCount');
69
+ expect(state).toHaveProperty('history');
70
+ });
71
+ });
72
+ describe('clearState', () => {
73
+ it('should reset state to initial values', async () => {
74
+ // Perform some operations first
75
+ await repl.peek();
76
+ // Clear state
77
+ repl.clearState();
78
+ const state = repl.getState();
79
+ expect(state.variables.size).toBe(0);
80
+ expect(state.totalTokens).toBe(0);
81
+ // operationCount includes the clear operation history
82
+ expect(state.history.length).toBe(1);
83
+ expect(state.history[0].operation).toBe('clear');
84
+ });
85
+ });
86
+ describe('execute', () => {
87
+ it('should return error when REPL is disabled', async () => {
88
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(false);
89
+ const result = await repl.execute('get decisions');
90
+ expect(result.success).toBe(false);
91
+ expect(result.error).toContain('REPL environment is disabled');
92
+ });
93
+ it('should return error for invalid query', async () => {
94
+ const result = await repl.execute('this is not a valid query format!!!');
95
+ // Query parser may handle this gracefully or error
96
+ // Check that we get a result either way
97
+ expect(result).toHaveProperty('success');
98
+ expect(result).toHaveProperty('executionTimeMs');
99
+ });
100
+ it('should increment operation count', async () => {
101
+ const stateBefore = repl.getState();
102
+ await repl.execute('get decisions');
103
+ const stateAfter = repl.getState();
104
+ expect(stateAfter.operationCount).toBe(stateBefore.operationCount + 1);
105
+ });
106
+ it('should add to history', async () => {
107
+ await repl.execute('get decisions');
108
+ const state = repl.getState();
109
+ expect(state.history.length).toBeGreaterThan(0);
110
+ expect(state.history[state.history.length - 1].operation).toBe('execute');
111
+ });
112
+ });
113
+ describe('peek', () => {
114
+ it('should return error when REPL is disabled', async () => {
115
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(false);
116
+ const result = await repl.peek();
117
+ expect(result.success).toBe(false);
118
+ expect(result.error).toContain('REPL environment is disabled');
119
+ });
120
+ it('should return metadata without loading full content', async () => {
121
+ const result = await repl.peek();
122
+ expect(result.success).toBe(true);
123
+ expect(result.tokensUsed).toBe(0); // Peek is free
124
+ const metadata = result.data;
125
+ expect(metadata).toHaveProperty('totalFiles');
126
+ expect(metadata).toHaveProperty('totalTokens');
127
+ expect(metadata).toHaveProperty('categories');
128
+ expect(metadata).toHaveProperty('samples');
129
+ });
130
+ it('should support filtering by pattern', async () => {
131
+ // Create some test files
132
+ await fs.writeFile(path.join(tempDir, '.dino', 'test.json'), '{}');
133
+ await fs.writeFile(path.join(tempDir, '.dino', 'test.md'), '# Test');
134
+ const resultAll = await repl.peek();
135
+ const resultJson = await repl.peek('*.json');
136
+ expect(resultAll.success).toBe(true);
137
+ expect(resultJson.success).toBe(true);
138
+ const metaAll = resultAll.data;
139
+ const metaJson = resultJson.data;
140
+ // JSON filter should have equal or fewer files
141
+ expect(metaJson.totalFiles).toBeLessThanOrEqual(metaAll.totalFiles);
142
+ });
143
+ it('should add to history', async () => {
144
+ await repl.peek();
145
+ const state = repl.getState();
146
+ const lastEntry = state.history[state.history.length - 1];
147
+ expect(lastEntry.operation).toBe('peek');
148
+ expect(lastEntry.success).toBe(true);
149
+ });
150
+ });
151
+ describe('grep', () => {
152
+ beforeEach(async () => {
153
+ // Create test files with searchable content
154
+ await fs.writeFile(path.join(tempDir, '.dino', 'search-test.md'), '# Test File\n\nThis contains a searchable pattern.\nAnother line with pattern here.');
155
+ });
156
+ it('should return error when REPL is disabled', async () => {
157
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(false);
158
+ const result = await repl.grep('pattern');
159
+ expect(result.success).toBe(false);
160
+ expect(result.error).toContain('REPL environment is disabled');
161
+ });
162
+ it('should find matches in files', async () => {
163
+ const result = await repl.grep('pattern');
164
+ expect(result.success).toBe(true);
165
+ const grepResult = result.data;
166
+ expect(grepResult.pattern).toBe('pattern');
167
+ expect(grepResult.totalMatches).toBeGreaterThan(0);
168
+ expect(grepResult.filesWithMatches).toBeGreaterThan(0);
169
+ });
170
+ it('should support case insensitive search', async () => {
171
+ const resultSensitive = await repl.grep('Pattern', { ignoreCase: false });
172
+ const resultInsensitive = await repl.grep('Pattern', { ignoreCase: true });
173
+ expect(resultSensitive.success).toBe(true);
174
+ expect(resultInsensitive.success).toBe(true);
175
+ const sensitive = resultSensitive.data;
176
+ const insensitive = resultInsensitive.data;
177
+ // Case insensitive should find equal or more matches
178
+ expect(insensitive.totalMatches).toBeGreaterThanOrEqual(sensitive.totalMatches);
179
+ });
180
+ it('should respect maxMatches limit', async () => {
181
+ const result = await repl.grep('pattern', { maxMatches: 1 });
182
+ expect(result.success).toBe(true);
183
+ const grepResult = result.data;
184
+ expect(grepResult.matches.length).toBeLessThanOrEqual(1);
185
+ });
186
+ it('should support filesOnly option', async () => {
187
+ const result = await repl.grep('pattern', { filesOnly: true });
188
+ expect(result.success).toBe(true);
189
+ const grepResult = result.data;
190
+ expect(grepResult.matches).toEqual([]); // No detailed matches when filesOnly
191
+ expect(grepResult.filesWithMatches).toBeGreaterThan(0);
192
+ });
193
+ });
194
+ describe('partition', () => {
195
+ beforeEach(async () => {
196
+ // Create src directory with some files
197
+ const srcDir = path.join(tempDir, 'src');
198
+ await fs.mkdir(srcDir, { recursive: true });
199
+ await fs.writeFile(path.join(srcDir, 'index.ts'), 'export {};');
200
+ await fs.writeFile(path.join(srcDir, 'utils.ts'), 'export const x = 1;');
201
+ });
202
+ it('should return error when REPL is disabled', async () => {
203
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(false);
204
+ const result = await repl.partition('by-directory');
205
+ expect(result.success).toBe(false);
206
+ expect(result.error).toContain('REPL environment is disabled');
207
+ });
208
+ it('should return error for invalid strategy', async () => {
209
+ const result = await repl.partition('invalid-strategy');
210
+ expect(result.success).toBe(false);
211
+ expect(result.error).toContain('Invalid strategy');
212
+ });
213
+ it('should partition files by directory', async () => {
214
+ const result = await repl.partition('by-directory');
215
+ expect(result.success).toBe(true);
216
+ expect(result.data).toHaveProperty('partitions');
217
+ });
218
+ it('should support all valid strategies', async () => {
219
+ const strategies = ['by-directory', 'by-feature', 'by-dependency', 'by-time'];
220
+ for (const strategy of strategies) {
221
+ const result = await repl.partition(strategy);
222
+ expect(result).toHaveProperty('success');
223
+ }
224
+ });
225
+ });
226
+ describe('loadVariable', () => {
227
+ it('should return error when REPL is disabled', async () => {
228
+ vi.mocked(featureFlags.isFeatureEnabled).mockResolvedValue(false);
229
+ const result = await repl.loadVariable('memories.decisions');
230
+ expect(result.success).toBe(false);
231
+ expect(result.error).toContain('REPL environment is disabled');
232
+ });
233
+ it('should return error for invalid variable path', async () => {
234
+ const result = await repl.loadVariable('invalid.path');
235
+ expect(result.success).toBe(false);
236
+ expect(result.error).toContain('Invalid variable path');
237
+ });
238
+ it('should load valid variable', async () => {
239
+ // Create memories file
240
+ const memoriesDir = path.join(tempDir, '.dino', 'memories');
241
+ await fs.mkdir(memoriesDir, { recursive: true });
242
+ await fs.writeFile(path.join(memoriesDir, 'decisions.json'), JSON.stringify([{ id: 'D-001', topic: 'test', choice: 'option1' }]));
243
+ const result = await repl.loadVariable('memories.decisions');
244
+ // May or may not succeed depending on how loadContextVariable handles the path
245
+ expect(result).toHaveProperty('success');
246
+ expect(result).toHaveProperty('tokensUsed');
247
+ });
248
+ it('should support custom variable name', async () => {
249
+ const result = await repl.loadVariable('session.focus', 'myFocus');
250
+ expect(result).toHaveProperty('success');
251
+ if (result.success && result.data) {
252
+ expect(result.data.name).toBe('myFocus');
253
+ }
254
+ });
255
+ });
256
+ describe('unloadVariable', () => {
257
+ it('should return false for non-existent variable', () => {
258
+ const result = repl.unloadVariable('nonexistent');
259
+ expect(result).toBe(false);
260
+ });
261
+ });
262
+ describe('formatting', () => {
263
+ describe('formatREPLResult', () => {
264
+ it('should format successful result', () => {
265
+ const result = {
266
+ success: true,
267
+ data: { key: 'value' },
268
+ tokensUsed: 10,
269
+ executionTimeMs: 5,
270
+ };
271
+ const formatted = formatREPLResult(result);
272
+ expect(formatted).toContain('## REPL Result');
273
+ expect(formatted).toContain('**Success:** Yes');
274
+ expect(formatted).toContain('**Tokens Used:** ~10');
275
+ expect(formatted).toContain('key');
276
+ });
277
+ it('should format error result', () => {
278
+ const result = {
279
+ success: false,
280
+ data: null,
281
+ tokensUsed: 0,
282
+ executionTimeMs: 1,
283
+ error: 'Something went wrong',
284
+ };
285
+ const formatted = formatREPLResult(result);
286
+ expect(formatted).toContain('## REPL Error');
287
+ expect(formatted).toContain('Something went wrong');
288
+ });
289
+ it('should include warnings', () => {
290
+ const result = {
291
+ success: true,
292
+ data: [],
293
+ tokensUsed: 100,
294
+ executionTimeMs: 10,
295
+ warnings: ['Result truncated'],
296
+ };
297
+ const formatted = formatREPLResult(result);
298
+ expect(formatted).toContain('### Warnings');
299
+ expect(formatted).toContain('Result truncated');
300
+ });
301
+ });
302
+ describe('formatREPLState', () => {
303
+ it('should format state summary', () => {
304
+ const state = repl.getState();
305
+ const formatted = formatREPLState(state);
306
+ expect(formatted).toContain('## REPL State');
307
+ expect(formatted).toContain('**Variables Loaded:**');
308
+ expect(formatted).toContain('**Total Tokens:**');
309
+ });
310
+ });
311
+ });
312
+ describe('history tracking', () => {
313
+ it('should track all operations', async () => {
314
+ await repl.peek();
315
+ await repl.grep('test');
316
+ await repl.execute('get decisions');
317
+ const state = repl.getState();
318
+ expect(state.history.length).toBe(3);
319
+ });
320
+ it('should limit history to 100 entries', async () => {
321
+ // This would require many operations, skip for efficiency
322
+ // Just verify the logic exists in the code
323
+ const state = repl.getState();
324
+ expect(state.history.length).toBeLessThanOrEqual(100);
325
+ });
326
+ it('should track tokens before and after', async () => {
327
+ await repl.peek();
328
+ const state = repl.getState();
329
+ const lastEntry = state.history[state.history.length - 1];
330
+ expect(lastEntry).toHaveProperty('tokensBefore');
331
+ expect(lastEntry).toHaveProperty('tokensAfter');
332
+ });
333
+ });
334
+ });
335
+ //# sourceMappingURL=repl-environment.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-environment.test.js","sourceRoot":"","sources":["../../../../src/core/context-repl/__tests__/repl-environment.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Context Window Monitor - v13.6.0
3
+ *
4
+ * Tracks context window growth during REPL operations.
5
+ * Monitors growth rate and triggers notifications at thresholds.
6
+ *
7
+ * Features:
8
+ * - Growth tracking per operation (tokens before/after)
9
+ * - Growth rate calculation (tokens/minute)
10
+ * - Integration with health monitor
11
+ * - Threshold notifications (50%, 75%, 90%)
12
+ * - Growth history export for debugging
13
+ *
14
+ * Part of RLM-style Context REPL Environment.
15
+ */
16
+ import type { ContextHealthReport } from '../context/context-health.js';
17
+ import type { AccessPatternsState } from '../context/access-tracker.js';
18
+ import type { LazyContextState } from '../context/lazy-loader.js';
19
+ /**
20
+ * Growth thresholds for notifications
21
+ */
22
+ export declare const GROWTH_THRESHOLD_INFO = 50;
23
+ export declare const GROWTH_THRESHOLD_WARNING = 75;
24
+ export declare const GROWTH_THRESHOLD_CRITICAL = 90;
25
+ /**
26
+ * Record of a single growth measurement
27
+ */
28
+ export interface GrowthRecord {
29
+ /** Timestamp of the measurement */
30
+ timestamp: number;
31
+ /** Operation that caused growth */
32
+ operation: string;
33
+ /** Tokens before operation */
34
+ tokensBefore: number;
35
+ /** Tokens after operation */
36
+ tokensAfter: number;
37
+ /** Growth in tokens (delta) */
38
+ growthTokens: number;
39
+ /** Growth as percentage of before */
40
+ growthPercent: number;
41
+ }
42
+ /**
43
+ * Current window monitor state
44
+ */
45
+ export interface WindowMonitorState {
46
+ /** Growth history */
47
+ history: GrowthRecord[];
48
+ /** Current growth rate (tokens/minute) */
49
+ growthRate: number;
50
+ /** Current context usage in tokens */
51
+ currentUsage: number;
52
+ /** Peak usage during session */
53
+ peakUsage: number;
54
+ /** When monitoring started */
55
+ startedAt: number;
56
+ }
57
+ /**
58
+ * Notification level for growth events
59
+ */
60
+ export type NotificationLevel = 'info' | 'warning' | 'error';
61
+ /**
62
+ * Growth notification event
63
+ */
64
+ export interface GrowthNotification {
65
+ /** Notification severity */
66
+ level: NotificationLevel;
67
+ /** Growth percentage that triggered notification */
68
+ growthPercent: number;
69
+ /** Tokens before and after */
70
+ tokensBefore: number;
71
+ tokensAfter: number;
72
+ /** Human-readable message */
73
+ message: string;
74
+ /** Suggested action */
75
+ action?: string;
76
+ }
77
+ /**
78
+ * Options for window monitor
79
+ */
80
+ export interface WindowMonitorOptions {
81
+ /** Project directory for health check integration */
82
+ projectDir?: string;
83
+ /** Access patterns state (optional, for health integration) */
84
+ accessState?: AccessPatternsState;
85
+ /** Lazy context state (optional, for health integration) */
86
+ lazyState?: LazyContextState;
87
+ /** Current budget percentage (0-100, optional) */
88
+ budgetPercentage?: number;
89
+ /** Current focus area (optional, for health integration) */
90
+ focusArea?: string;
91
+ /** Enable auto-compact on critical threshold */
92
+ autoCompact?: boolean;
93
+ }
94
+ /**
95
+ * Context Window Monitor
96
+ *
97
+ * Tracks context window growth and provides notifications at key thresholds.
98
+ * Integrates with health monitor for comprehensive context tracking.
99
+ */
100
+ export declare class ContextWindowMonitor {
101
+ private state;
102
+ private options;
103
+ private notificationCallbacks;
104
+ constructor(options?: WindowMonitorOptions);
105
+ /**
106
+ * Record a growth measurement
107
+ *
108
+ * @param operation - Name of operation that caused growth
109
+ * @param tokensBefore - Token count before operation
110
+ * @param tokensAfter - Token count after operation
111
+ * @returns Growth notification if threshold crossed
112
+ */
113
+ recordGrowth(operation: string, tokensBefore: number, tokensAfter: number): GrowthNotification | null;
114
+ /**
115
+ * Calculate current growth rate (tokens/minute)
116
+ */
117
+ private calculateGrowthRate;
118
+ /**
119
+ * Check if growth crossed any thresholds
120
+ */
121
+ private checkThresholds;
122
+ /**
123
+ * Get integrated health report
124
+ *
125
+ * Combines window monitor metrics with health monitor data.
126
+ * Gracefully falls back to window-only metrics if health monitor unavailable.
127
+ *
128
+ * @returns Combined health report or null if health monitor unavailable
129
+ */
130
+ getHealthReport(): Promise<ContextHealthReport | null>;
131
+ /**
132
+ * Get current monitor state
133
+ */
134
+ getState(): WindowMonitorState;
135
+ /**
136
+ * Get growth history
137
+ */
138
+ getHistory(): GrowthRecord[];
139
+ /**
140
+ * Get current growth rate (tokens/minute)
141
+ */
142
+ getGrowthRate(): number;
143
+ /**
144
+ * Get current usage
145
+ */
146
+ getCurrentUsage(): number;
147
+ /**
148
+ * Get peak usage during session
149
+ */
150
+ getPeakUsage(): number;
151
+ /**
152
+ * Get session duration in minutes
153
+ */
154
+ getSessionDuration(): number;
155
+ /**
156
+ * Register a notification callback
157
+ *
158
+ * @param callback - Function to call when notifications are emitted
159
+ */
160
+ onNotification(callback: (notification: GrowthNotification) => void): void;
161
+ /**
162
+ * Emit a notification to all registered callbacks
163
+ */
164
+ private emitNotification;
165
+ /**
166
+ * Reset monitor state
167
+ */
168
+ reset(): void;
169
+ /**
170
+ * Export growth history for debugging
171
+ */
172
+ exportHistory(): string;
173
+ }
174
+ /**
175
+ * Create a context window monitor
176
+ *
177
+ * @param options - Monitor configuration options
178
+ * @returns New ContextWindowMonitor instance
179
+ */
180
+ export declare function createWindowMonitor(options?: WindowMonitorOptions): ContextWindowMonitor;
181
+ //# sourceMappingURL=context-window-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window-monitor.d.ts","sourceRoot":"","sources":["../../../src/core/context-repl/context-window-monitor.ts"],"names":[],"mappings":"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"}