@nanocollective/nanocoder 1.16.2 → 1.16.4

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 (150) hide show
  1. package/README.md +17 -1
  2. package/dist/commands/update.d.ts +6 -0
  3. package/dist/commands/update.d.ts.map +1 -1
  4. package/dist/commands/update.js +129 -3
  5. package/dist/commands/update.js.map +1 -1
  6. package/dist/components/assistant-message.d.ts +1 -4
  7. package/dist/components/assistant-message.d.ts.map +1 -1
  8. package/dist/components/assistant-message.js +1 -199
  9. package/dist/components/assistant-message.js.map +1 -1
  10. package/dist/components/status.d.ts +1 -6
  11. package/dist/components/status.d.ts.map +1 -1
  12. package/dist/components/status.js +3 -2
  13. package/dist/components/status.js.map +1 -1
  14. package/dist/components/user-input.d.ts.map +1 -1
  15. package/dist/components/user-input.js +61 -19
  16. package/dist/components/user-input.js.map +1 -1
  17. package/dist/components/warning-message.d.ts +7 -0
  18. package/dist/components/warning-message.d.ts.map +1 -0
  19. package/dist/components/warning-message.js +12 -0
  20. package/dist/components/warning-message.js.map +1 -0
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/index.js +19 -11
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/config/paths.d.ts +1 -0
  25. package/dist/config/paths.d.ts.map +1 -1
  26. package/dist/config/paths.js +48 -2
  27. package/dist/config/paths.js.map +1 -1
  28. package/dist/config/paths.spec.d.ts +2 -0
  29. package/dist/config/paths.spec.d.ts.map +1 -0
  30. package/dist/config/paths.spec.js +114 -0
  31. package/dist/config/paths.spec.js.map +1 -0
  32. package/dist/config/themes.d.ts.map +1 -1
  33. package/dist/config/themes.js +19 -0
  34. package/dist/config/themes.js.map +1 -1
  35. package/dist/hooks/useAppState.d.ts.map +1 -1
  36. package/dist/hooks/useAppState.js +8 -15
  37. package/dist/hooks/useAppState.js.map +1 -1
  38. package/dist/hooks/useInputState.d.ts.map +1 -1
  39. package/dist/hooks/useInputState.js +95 -8
  40. package/dist/hooks/useInputState.js.map +1 -1
  41. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  42. package/dist/hooks/useTerminalWidth.js +6 -0
  43. package/dist/hooks/useTerminalWidth.js.map +1 -1
  44. package/dist/markdown-parser/html-entities.d.ts +2 -0
  45. package/dist/markdown-parser/html-entities.d.ts.map +1 -0
  46. package/dist/markdown-parser/html-entities.js +41 -0
  47. package/dist/markdown-parser/html-entities.js.map +1 -0
  48. package/dist/markdown-parser/html-entities.spec.d.ts +2 -0
  49. package/dist/markdown-parser/html-entities.spec.d.ts.map +1 -0
  50. package/dist/markdown-parser/html-entities.spec.js +73 -0
  51. package/dist/markdown-parser/html-entities.spec.js.map +1 -0
  52. package/dist/markdown-parser/index.d.ts +6 -0
  53. package/dist/markdown-parser/index.d.ts.map +1 -0
  54. package/dist/markdown-parser/index.js +97 -0
  55. package/dist/markdown-parser/index.js.map +1 -0
  56. package/dist/markdown-parser/index.spec.d.ts +2 -0
  57. package/dist/markdown-parser/index.spec.d.ts.map +1 -0
  58. package/dist/markdown-parser/index.spec.js +245 -0
  59. package/dist/markdown-parser/index.spec.js.map +1 -0
  60. package/dist/markdown-parser/table-parser.d.ts +3 -0
  61. package/dist/markdown-parser/table-parser.d.ts.map +1 -0
  62. package/dist/markdown-parser/table-parser.js +92 -0
  63. package/dist/markdown-parser/table-parser.js.map +1 -0
  64. package/dist/markdown-parser/table-parser.spec.d.ts +2 -0
  65. package/dist/markdown-parser/table-parser.spec.d.ts.map +1 -0
  66. package/dist/markdown-parser/table-parser.spec.js +120 -0
  67. package/dist/markdown-parser/table-parser.spec.js.map +1 -0
  68. package/dist/markdown-parser/utils.d.ts +2 -0
  69. package/dist/markdown-parser/utils.d.ts.map +1 -0
  70. package/dist/markdown-parser/utils.js +14 -0
  71. package/dist/markdown-parser/utils.js.map +1 -0
  72. package/dist/markdown-parser/utils.spec.d.ts +2 -0
  73. package/dist/markdown-parser/utils.spec.d.ts.map +1 -0
  74. package/dist/markdown-parser/utils.spec.js +59 -0
  75. package/dist/markdown-parser/utils.spec.js.map +1 -0
  76. package/dist/tools/execute-bash.d.ts.map +1 -1
  77. package/dist/tools/execute-bash.js +5 -3
  78. package/dist/tools/execute-bash.js.map +1 -1
  79. package/dist/tools/find-files.d.ts +3 -0
  80. package/dist/tools/find-files.d.ts.map +1 -0
  81. package/dist/tools/find-files.js +186 -0
  82. package/dist/tools/find-files.js.map +1 -0
  83. package/dist/tools/index.js +4 -4
  84. package/dist/tools/index.js.map +1 -1
  85. package/dist/tools/read-file.d.ts.map +1 -1
  86. package/dist/tools/read-file.js +143 -9
  87. package/dist/tools/read-file.js.map +1 -1
  88. package/dist/tools/search-file-contents.d.ts +3 -0
  89. package/dist/tools/search-file-contents.d.ts.map +1 -0
  90. package/dist/tools/search-file-contents.js +164 -0
  91. package/dist/tools/search-file-contents.js.map +1 -0
  92. package/dist/types/markdown-parser.d.ts +11 -0
  93. package/dist/types/markdown-parser.d.ts.map +1 -0
  94. package/dist/types/markdown-parser.js +2 -0
  95. package/dist/types/markdown-parser.js.map +1 -0
  96. package/dist/types/ui.d.ts +1 -1
  97. package/dist/types/ui.d.ts.map +1 -1
  98. package/dist/types/utils.d.ts +2 -1
  99. package/dist/types/utils.d.ts.map +1 -1
  100. package/dist/usage/storage.d.ts +1 -1
  101. package/dist/usage/storage.d.ts.map +1 -1
  102. package/dist/usage/storage.js +55 -9
  103. package/dist/usage/storage.js.map +1 -1
  104. package/dist/usage/storage.spec.js +136 -2
  105. package/dist/usage/storage.spec.js.map +1 -1
  106. package/dist/utils/installation-detector.d.ts +16 -0
  107. package/dist/utils/installation-detector.d.ts.map +1 -0
  108. package/dist/utils/installation-detector.js +118 -0
  109. package/dist/utils/installation-detector.js.map +1 -0
  110. package/dist/utils/installation-detector.spec.d.ts +2 -0
  111. package/dist/utils/installation-detector.spec.d.ts.map +1 -0
  112. package/dist/utils/installation-detector.spec.js +141 -0
  113. package/dist/utils/installation-detector.spec.js.map +1 -0
  114. package/dist/utils/message-queue.d.ts +2 -0
  115. package/dist/utils/message-queue.d.ts.map +1 -1
  116. package/dist/utils/message-queue.js +11 -0
  117. package/dist/utils/message-queue.js.map +1 -1
  118. package/dist/utils/paste-detection.d.ts.map +1 -1
  119. package/dist/utils/paste-detection.js +8 -3
  120. package/dist/utils/paste-detection.js.map +1 -1
  121. package/dist/utils/paste-detection.spec.js +15 -8
  122. package/dist/utils/paste-detection.spec.js.map +1 -1
  123. package/dist/utils/paste-utils.d.ts.map +1 -1
  124. package/dist/utils/paste-utils.js +4 -2
  125. package/dist/utils/paste-utils.js.map +1 -1
  126. package/dist/utils/paste-utils.spec.js +19 -3
  127. package/dist/utils/paste-utils.spec.js.map +1 -1
  128. package/dist/utils/update-checker.d.ts.map +1 -1
  129. package/dist/utils/update-checker.js +31 -3
  130. package/dist/utils/update-checker.js.map +1 -1
  131. package/dist/utils/update-checker.spec.d.ts +2 -0
  132. package/dist/utils/update-checker.spec.d.ts.map +1 -0
  133. package/dist/utils/update-checker.spec.js +280 -0
  134. package/dist/utils/update-checker.spec.js.map +1 -0
  135. package/dist/wizard/steps/location-step.js +2 -2
  136. package/dist/wizard/steps/location-step.js.map +1 -1
  137. package/package.json +1 -1
  138. package/source/app/prompts/main-prompt.md +67 -23
  139. package/dist/components/update-message.d.ts +0 -7
  140. package/dist/components/update-message.d.ts.map +0 -1
  141. package/dist/components/update-message.js +0 -93
  142. package/dist/components/update-message.js.map +0 -1
  143. package/dist/tools/read-many-files.d.ts +0 -3
  144. package/dist/tools/read-many-files.d.ts.map +0 -1
  145. package/dist/tools/read-many-files.js +0 -169
  146. package/dist/tools/read-many-files.js.map +0 -1
  147. package/dist/tools/search-files.d.ts +0 -3
  148. package/dist/tools/search-files.d.ts.map +0 -1
  149. package/dist/tools/search-files.js +0 -251
  150. package/dist/tools/search-files.js.map +0 -1
@@ -0,0 +1,280 @@
1
+ import test from 'ava';
2
+ import { readFileSync } from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { checkForUpdates } from './update-checker.js';
6
+ console.log(`\nupdate-checker.spec.ts`);
7
+ // Get current version from package.json dynamically
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const packageJsonPath = join(__dirname, '../../package.json');
11
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
12
+ const CURRENT_VERSION = packageJson.version;
13
+ // Mock fetch globally for testing
14
+ const originalFetch = globalThis.fetch;
15
+ // Helper to create mock fetch responses
16
+ function createMockFetch(status, data, shouldReject = false) {
17
+ return (async () => {
18
+ if (shouldReject) {
19
+ throw new Error('Network error');
20
+ }
21
+ return {
22
+ ok: status >= 200 && status < 300,
23
+ status,
24
+ statusText: status === 200 ? 'OK' : 'Error',
25
+ json: async () => data,
26
+ };
27
+ });
28
+ }
29
+ test.beforeEach(() => {
30
+ // Reset fetch before each test
31
+ globalThis.fetch = originalFetch;
32
+ // Default to npm install override
33
+ process.env.NANOCODER_INSTALL_METHOD = 'npm';
34
+ });
35
+ test.afterEach(() => {
36
+ // Restore original fetch and env after each test
37
+ globalThis.fetch = originalFetch;
38
+ delete process.env.NANOCODER_INSTALL_METHOD;
39
+ });
40
+ // Version Comparison Tests
41
+ test('checkForUpdates: detects newer major version', async (t) => {
42
+ // Calculate a newer major version dynamically
43
+ const currentParts = CURRENT_VERSION.split('.');
44
+ const newerMajorVersion = `${parseInt(currentParts[0]) + 1}.0.0`;
45
+ globalThis.fetch = createMockFetch(200, {
46
+ version: newerMajorVersion,
47
+ name: '@nanocollective/nanocoder',
48
+ });
49
+ const result = await checkForUpdates();
50
+ t.true(result.hasUpdate);
51
+ t.is(result.currentVersion, CURRENT_VERSION);
52
+ t.is(result.latestVersion, newerMajorVersion);
53
+ t.truthy(result.updateCommand);
54
+ });
55
+ test('checkForUpdates: detects newer minor version', async (t) => {
56
+ // Calculate a newer minor version dynamically
57
+ const currentParts = CURRENT_VERSION.split('.');
58
+ const newerMinorVersion = `${currentParts[0]}.${parseInt(currentParts[1]) + 1}.0`;
59
+ globalThis.fetch = createMockFetch(200, {
60
+ version: newerMinorVersion,
61
+ name: '@nanocollective/nanocoder',
62
+ });
63
+ const result = await checkForUpdates();
64
+ t.true(result.hasUpdate);
65
+ t.is(result.latestVersion, newerMinorVersion);
66
+ });
67
+ test('checkForUpdates: detects newer patch version', async (t) => {
68
+ // Calculate a newer patch version dynamically
69
+ const currentParts = CURRENT_VERSION.split('.');
70
+ const newerPatchVersion = `${currentParts[0]}.${currentParts[1]}.${parseInt(currentParts[2]) + 1}`;
71
+ globalThis.fetch = createMockFetch(200, {
72
+ version: newerPatchVersion,
73
+ name: '@nanocollective/nanocoder',
74
+ });
75
+ const result = await checkForUpdates();
76
+ t.true(result.hasUpdate);
77
+ t.is(result.latestVersion, newerPatchVersion);
78
+ });
79
+ test('checkForUpdates: detects same version (no update)', async (t) => {
80
+ globalThis.fetch = createMockFetch(200, {
81
+ version: CURRENT_VERSION,
82
+ name: '@nanocollective/nanocoder',
83
+ });
84
+ const result = await checkForUpdates();
85
+ t.false(result.hasUpdate);
86
+ t.is(result.currentVersion, CURRENT_VERSION);
87
+ t.is(result.latestVersion, CURRENT_VERSION);
88
+ t.is(result.updateCommand, undefined);
89
+ });
90
+ test('checkForUpdates: detects older version (no update)', async (t) => {
91
+ // Calculate an older patch version dynamically
92
+ const currentParts = CURRENT_VERSION.split('.');
93
+ const patchNum = parseInt(currentParts[2]);
94
+ // Use 0 if current patch is already 0, otherwise decrement
95
+ const olderPatchVersion = `${currentParts[0]}.${currentParts[1]}.${Math.max(0, patchNum - 1)}`;
96
+ globalThis.fetch = createMockFetch(200, {
97
+ version: olderPatchVersion,
98
+ name: '@nanocollective/nanocoder',
99
+ });
100
+ const result = await checkForUpdates();
101
+ t.false(result.hasUpdate);
102
+ t.is(result.latestVersion, olderPatchVersion);
103
+ });
104
+ test('checkForUpdates: handles version with v prefix', async (t) => {
105
+ // Use a newer major version with v prefix
106
+ const currentParts = CURRENT_VERSION.split('.');
107
+ const newerMajorVersion = `v${parseInt(currentParts[0]) + 1}.0.0`;
108
+ globalThis.fetch = createMockFetch(200, {
109
+ version: newerMajorVersion,
110
+ name: '@nanocollective/nanocoder',
111
+ });
112
+ const result = await checkForUpdates();
113
+ t.true(result.hasUpdate);
114
+ t.is(result.latestVersion, newerMajorVersion);
115
+ });
116
+ test('checkForUpdates: handles pre-release versions', async (t) => {
117
+ // Use a newer major version with pre-release tag
118
+ const currentParts = CURRENT_VERSION.split('.');
119
+ const newerPreReleaseVersion = `${parseInt(currentParts[0]) + 1}.0.0-beta.1`;
120
+ globalThis.fetch = createMockFetch(200, {
121
+ version: newerPreReleaseVersion,
122
+ name: '@nanocollective/nanocoder',
123
+ });
124
+ const result = await checkForUpdates();
125
+ // Pre-release info is stripped during comparison
126
+ t.true(result.hasUpdate);
127
+ t.is(result.latestVersion, newerPreReleaseVersion);
128
+ });
129
+ // Network Error Handling Tests
130
+ test('checkForUpdates: handles network errors gracefully', async (t) => {
131
+ globalThis.fetch = createMockFetch(200, {}, true);
132
+ const result = await checkForUpdates();
133
+ t.false(result.hasUpdate);
134
+ t.truthy(result.currentVersion);
135
+ t.is(result.latestVersion, undefined);
136
+ });
137
+ test('checkForUpdates: handles HTTP 404 error', async (t) => {
138
+ globalThis.fetch = createMockFetch(404, {
139
+ error: 'Not found',
140
+ });
141
+ const result = await checkForUpdates();
142
+ t.false(result.hasUpdate);
143
+ t.truthy(result.currentVersion);
144
+ });
145
+ test('checkForUpdates: handles HTTP 500 error', async (t) => {
146
+ globalThis.fetch = createMockFetch(500, {
147
+ error: 'Internal server error',
148
+ });
149
+ const result = await checkForUpdates();
150
+ t.false(result.hasUpdate);
151
+ t.truthy(result.currentVersion);
152
+ });
153
+ test('checkForUpdates: handles timeout (via AbortSignal)', async (t) => {
154
+ // Simulate timeout by throwing AbortError
155
+ globalThis.fetch = (async () => {
156
+ const error = new Error('The operation was aborted');
157
+ error.name = 'AbortError';
158
+ throw error;
159
+ });
160
+ const result = await checkForUpdates();
161
+ // Should handle timeout gracefully
162
+ t.false(result.hasUpdate);
163
+ });
164
+ // Response Format Tests
165
+ test('checkForUpdates: returns correct update command', async (t) => {
166
+ globalThis.fetch = createMockFetch(200, {
167
+ version: '2.0.0',
168
+ name: '@nanocollective/nanocoder',
169
+ });
170
+ const result = await checkForUpdates();
171
+ t.is(result.updateCommand, 'npm update -g @nanocollective/nanocoder');
172
+ });
173
+ test('checkForUpdates: returns correct Homebrew command when installed via Homebrew', async (t) => {
174
+ globalThis.fetch = createMockFetch(200, {
175
+ version: '2.0.0',
176
+ name: '@nanocollective/nanocoder',
177
+ });
178
+ process.env.NANOCODER_INSTALL_METHOD = 'homebrew';
179
+ const result = await checkForUpdates();
180
+ t.is(result.updateCommand, 'brew list nanocoder >/dev/null 2>&1 && brew upgrade nanocoder || (echo "Error: nanocoder not found in Homebrew. Please install it first with: brew install nanocoder" && exit 1)');
181
+ });
182
+ test('checkForUpdates: returns message for Nix installations (no executable command)', async (t) => {
183
+ globalThis.fetch = createMockFetch(200, {
184
+ version: '2.0.0',
185
+ name: '@nanocollective/nanocoder',
186
+ });
187
+ process.env.NANOCODER_INSTALL_METHOD = 'nix';
188
+ const result = await checkForUpdates();
189
+ t.is(result.updateMessage, 'To update, re-run: nix run github:Nano-Collective/nanocoder (or update your flake).');
190
+ });
191
+ test('checkForUpdates: includes current version in response', async (t) => {
192
+ globalThis.fetch = createMockFetch(200, {
193
+ version: '2.0.0',
194
+ name: '@nanocollective/nanocoder',
195
+ });
196
+ const result = await checkForUpdates();
197
+ t.truthy(result.currentVersion);
198
+ t.regex(result.currentVersion, /^\d+\.\d+\.\d+/);
199
+ });
200
+ test('checkForUpdates: handles missing version field in response', async (t) => {
201
+ globalThis.fetch = createMockFetch(200, {
202
+ name: '@nanocollective/nanocoder',
203
+ // version field missing
204
+ });
205
+ const result = await checkForUpdates();
206
+ t.false(result.hasUpdate);
207
+ });
208
+ test('checkForUpdates: handles malformed JSON response', async (t) => {
209
+ globalThis.fetch = (async () => {
210
+ return {
211
+ ok: true,
212
+ status: 200,
213
+ statusText: 'OK',
214
+ json: async () => {
215
+ throw new Error('Invalid JSON');
216
+ },
217
+ };
218
+ });
219
+ const result = await checkForUpdates();
220
+ t.false(result.hasUpdate);
221
+ });
222
+ // Edge Cases
223
+ test('checkForUpdates: handles empty version string', async (t) => {
224
+ globalThis.fetch = createMockFetch(200, {
225
+ version: '',
226
+ name: '@nanocollective/nanocoder',
227
+ });
228
+ const result = await checkForUpdates();
229
+ t.false(result.hasUpdate);
230
+ });
231
+ test('checkForUpdates: handles version with extra segments', async (t) => {
232
+ globalThis.fetch = createMockFetch(200, {
233
+ version: '2.0.0.1',
234
+ name: '@nanocollective/nanocoder',
235
+ });
236
+ const result = await checkForUpdates();
237
+ // Should compare first 3 segments
238
+ t.true(result.hasUpdate);
239
+ });
240
+ test('checkForUpdates: handles invalid version format', async (t) => {
241
+ globalThis.fetch = createMockFetch(200, {
242
+ version: 'not-a-version',
243
+ name: '@nanocollective/nanocoder',
244
+ });
245
+ const result = await checkForUpdates();
246
+ // Should handle gracefully
247
+ t.false(result.hasUpdate);
248
+ });
249
+ // Integration Tests
250
+ test('checkForUpdates: complete workflow for update available', async (t) => {
251
+ globalThis.fetch = createMockFetch(200, {
252
+ version: '99.99.99',
253
+ name: '@nanocollective/nanocoder',
254
+ });
255
+ const result = await checkForUpdates();
256
+ t.true(result.hasUpdate);
257
+ t.truthy(result.currentVersion);
258
+ t.is(result.latestVersion, '99.99.99');
259
+ t.is(result.updateCommand, 'npm update -g @nanocollective/nanocoder');
260
+ });
261
+ test('checkForUpdates: complete workflow for no update', async (t) => {
262
+ globalThis.fetch = createMockFetch(200, {
263
+ version: '0.0.1',
264
+ name: '@nanocollective/nanocoder',
265
+ });
266
+ const result = await checkForUpdates();
267
+ t.false(result.hasUpdate);
268
+ t.truthy(result.currentVersion);
269
+ t.is(result.latestVersion, '0.0.1');
270
+ t.is(result.updateCommand, undefined);
271
+ });
272
+ test('checkForUpdates: complete workflow for network failure', async (t) => {
273
+ globalThis.fetch = createMockFetch(200, {}, true);
274
+ const result = await checkForUpdates();
275
+ t.false(result.hasUpdate);
276
+ t.truthy(result.currentVersion);
277
+ t.is(result.latestVersion, undefined);
278
+ t.is(result.updateCommand, undefined);
279
+ });
280
+ //# sourceMappingURL=update-checker.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.spec.js","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,12 @@ import SelectInput from 'ink-select-input';
5
5
  import { join } from 'node:path';
6
6
  import { existsSync } from 'node:fs';
7
7
  import { colors } from '../../config/index.js';
8
- import { getAppDataPath } from '../../config/paths.js';
8
+ import { getConfigPath } from '../../config/paths.js';
9
9
  import { useResponsiveTerminal } from '../../hooks/useTerminalWidth.js';
10
10
  export function LocationStep({ onComplete, onBack, projectDir, }) {
11
11
  const { isNarrow, truncatePath } = useResponsiveTerminal();
12
12
  const projectPath = join(projectDir, 'agents.config.json');
13
- const globalPath = join(getAppDataPath(), 'agents.config.json');
13
+ const globalPath = join(getConfigPath(), 'agents.config.json');
14
14
  const projectExists = existsSync(projectPath);
15
15
  const globalExists = existsSync(globalPath);
16
16
  const [mode, setMode] = useState(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"location-step.js","sourceRoot":"","sources":["../../../source/wizard/steps/location-step.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location-step.js","sourceRoot":"","sources":["../../../source/wizard/steps/location-step.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nanocollective/nanocoder",
3
3
  "main": "dist/cli.js",
4
- "version": "1.16.2",
4
+ "version": "1.16.4",
5
5
  "description": "A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter",
6
6
  "keywords": [
7
7
  "cli",
@@ -128,9 +128,9 @@ You have access to powerful tools for understanding codebases and gathering cont
128
128
 
129
129
  ## Code Exploration Strategy
130
130
 
131
- - **search_files**: Perform regex searches across files to find patterns, implementations, or areas needing refactoring
132
- - **read_file**: Examine the full contents of specific files with line numbers for precise editing
133
- - **read_many_files**: Read multiple files at once for efficiency
131
+ - **read_file**: Read files with progressive disclosure (metadata first for files >300 lines, then content with line ranges)
132
+ - **search_file_contents**: Search for text or code inside files to find patterns, implementations, or areas needing refactoring
133
+ - **find_files**: Find files by path pattern or name using glob patterns
134
134
  - **execute_bash**: Run bash commands that can help you find and search for information in the codebase
135
135
 
136
136
  ## Efficient Context Gathering
@@ -138,11 +138,13 @@ You have access to powerful tools for understanding codebases and gathering cont
138
138
  Use these tools in combination for comprehensive analysis:
139
139
 
140
140
  1. Analyze file structure to understand project organization
141
- 2. Use search_files to find specific patterns or implementations
142
- 3. Use read_file or read_many_files to examine contents with line numbers
143
- 4. Make informed changes based on comprehensive understanding
141
+ 2. Use find_files to locate relevant files by pattern (e.g., all TypeScript files, all components)
142
+ 3. Use search_file_contents to find specific code patterns or text across the codebase
143
+ 4. Use read_file to check files (automatically returns metadata for large files)
144
+ 5. Use read_file with line ranges to examine specific code sections
145
+ 6. Make informed changes based on comprehensive understanding
144
146
 
145
- **Example workflow**: When asked to make edits or improvements, you might use search_files to find relevant code patterns, read_file to examine contents with line numbers, analyze and suggest improvements, then use the appropriate editing tool (insert_lines, replace_lines, or delete_lines) with the line numbers from read_file. If refactoring affects other parts of the codebase, use search_files to ensure all necessary updates are made.
147
+ **Example workflow**: When asked to make edits or improvements, you might use find_files to locate relevant files, use search_file_contents to find where specific code is used, use read_file to check the target file (gets metadata if large), read_file with line ranges to examine contents, analyze and suggest improvements, then use the appropriate editing tool (insert_lines, replace_lines, or delete_lines) with the line numbers from read_file. If refactoring affects other parts of the codebase, use search_file_contents to ensure all necessary updates are made.
146
148
 
147
149
  ====
148
150
 
@@ -152,7 +154,22 @@ You have access to different tools for working with files. Understanding their r
152
154
 
153
155
  ## read_file
154
156
 
155
- **Purpose**: Read the contents of a file at the specified path with line numbers.
157
+ **Purpose**: Read file contents with line numbers. Uses PROGRESSIVE DISCLOSURE to prevent context overload.
158
+
159
+ **Parameters**:
160
+
161
+ - `path` (required): The file path to read
162
+ - `start_line` (optional): Line number to start reading from (1-indexed)
163
+ - `end_line` (optional): Line number to stop reading at (inclusive)
164
+
165
+ **How It Works (Progressive Disclosure)**:
166
+
167
+ 1. **First call without line ranges**: Returns metadata only (file size, lines, tokens, type)
168
+
169
+ - Files ≤300 lines: Returns full content immediately
170
+ - Files >300 lines: Returns metadata + instructions to call again with line ranges
171
+
172
+ 2. **Second call with line ranges**: Returns actual file content for the specified range
156
173
 
157
174
  **When to Use**:
158
175
 
@@ -167,15 +184,34 @@ You have access to different tools for working with files. Understanding their r
167
184
  - Returns content with line numbers in format ` 1: line content` for precise editing
168
185
  - If the user provides file contents in their message, you don't need to read again
169
186
 
170
- ## read_many_files
187
+ **Example Workflows**:
171
188
 
172
- **Purpose**: Read multiple files at once efficiently.
189
+ **Small files (<300 lines)**:
173
190
 
174
- **When to Use**:
191
+ - `read_file({path: "config.json"})` → Returns full content immediately
192
+
193
+ **Medium files (300-500 lines)**:
175
194
 
176
- - When you need to examine several related files
177
- - To understand context across multiple files before making changes
178
- - More efficient than multiple read_file calls
195
+ - `read_file({path: "components.tsx"})` Returns metadata
196
+ - Read progressively in chunks:
197
+ - `read_file({path: "components.tsx", start_line: 1, end_line: 250})`
198
+ - `read_file({path: "components.tsx", start_line: 251, end_line: 411})`
199
+
200
+ **Large files (>500 lines) - Two approaches**:
201
+
202
+ **Approach 1: Targeted read** (when you know what you need)
203
+
204
+ 1. `read_file({path: "src/app.tsx"})` → Returns: "1543 lines, ~12k tokens"
205
+ 2. `search_file_contents({query: "handleSubmit"})` → Returns: "Found at app.tsx:458"
206
+ 3. `read_file({path: "src/app.tsx", start_line: 450, end_line: 550})` → Returns content
207
+
208
+ **Approach 2: Progressive read** (when you need to understand the whole file)
209
+
210
+ 1. `read_file({path: "README.md"})` → Returns metadata with suggested chunks
211
+ 2. Read each chunk sequentially (the metadata response provides exact line ranges)
212
+ 3. Process all chunks to understand complete file
213
+
214
+ **IMPORTANT**: When summarizing or analyzing entire files, use progressive reading. Don't skip to the end - read all chunks sequentially.
179
215
 
180
216
  ## create_file
181
217
 
@@ -364,7 +400,7 @@ Coding is one of the most important use cases for you as Nanocoder. Follow these
364
400
 
365
401
  - When modifying code with upstream and downstream dependencies, update them
366
402
  - If you don't know if code has dependencies, use tools to figure it out
367
- - Use search_files to find all references to modified code
403
+ - Use search_file_contents to find all references to modified code
368
404
  - Ensure changes are compatible with the existing codebase
369
405
 
370
406
  ## Code Style and Patterns
@@ -410,10 +446,10 @@ Follow this systematic approach for all tasks:
410
446
  ## 2. Gather Context
411
447
 
412
448
  - Use file structure information if available
413
- - Explore relevant directories with list_files
414
- - Search for patterns with search_files
449
+ - Find relevant files with find_files using glob patterns
450
+ - Search for code patterns with search_file_contents
415
451
  - Read relevant files to understand current state
416
- - Use list_code_definition_names for code overview
452
+ - Use code search tools to understand how code is used across the project
417
453
 
418
454
  ## 3. Execute Step-by-Step
419
455
 
@@ -542,8 +578,7 @@ Here's a comprehensive overview of all available tools and when to use them:
542
578
 
543
579
  ## File Reading
544
580
 
545
- - **read_file**: Read a single file with line numbers for precise editing
546
- - **read_many_files**: Read multiple files at once for efficiency
581
+ - **read_file**: Read files with progressive disclosure. Files >300 lines return metadata first, then call again with start_line/end_line to read content
547
582
 
548
583
  ## File Creation
549
584
 
@@ -557,9 +592,18 @@ Here's a comprehensive overview of all available tools and when to use them:
557
592
 
558
593
  ## File & Code Search
559
594
 
560
- - **search_files**: Search file contents by query OR find files by glob pattern
561
- - Content search: `{query: "searchTerm"}` - finds text in files with context
562
- - File search: `{pattern: "**/*.ts"}` - finds files matching glob pattern
595
+ - **search_file_contents**: Search for text or code INSIDE file contents
596
+
597
+ - Use this to find where specific code, functions, variables, or text appears in the codebase
598
+ - Example: `{query: "handleSubmit"}` - finds files containing "handleSubmit" and shows file:line matches with content
599
+ - Returns file paths with line numbers and matching content
600
+ - Case-insensitive by default, can be made case-sensitive with `caseSensitive: true`
601
+
602
+ - **find_files**: Find files and directories by path pattern or name
603
+ - Use glob patterns to find files and directories by their path or name (not content)
604
+ - Examples: `{pattern: "*.tsx"}` finds all .tsx files, `{pattern: "src/**/*.ts"}` finds all .ts files in src/, `{pattern: "components/**"}` finds all files and directories in components/
605
+ - Returns list of matching file and directory paths
606
+ - Supports brace expansion: `{pattern: "*.{ts,tsx}"}`
563
607
 
564
608
  ## Terminal
565
609
 
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- export default function UpdateMessage(): React.FunctionComponentElement<{
3
- message: string;
4
- hideTitle?: boolean;
5
- hideBox?: boolean;
6
- }> | null;
7
- //# sourceMappingURL=update-message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-message.d.ts","sourceRoot":"","sources":["../../source/components/update-message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAejD,MAAM,CAAC,OAAO,UAAU,aAAa;;;;UAsFpC"}
@@ -1,93 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { toolRegistry } from '../tools/index.js';
3
- import InfoMessage from '../components/info-message.js';
4
- import SuccessMessage from '../components/success-message.js';
5
- import ErrorMessage from '../components/error-message.js';
6
- import { checkForUpdates } from '../utils/update-checker.js';
7
- var Status;
8
- (function (Status) {
9
- Status["Checking"] = "checking";
10
- Status["Updating"] = "updating";
11
- Status["NoUpdate"] = "no-update";
12
- Status["Success"] = "success";
13
- Status["Error"] = "error";
14
- })(Status || (Status = {}));
15
- export default function UpdateMessage() {
16
- const [status, setStatus] = useState(Status.Checking);
17
- const [error, setError] = useState(null);
18
- useEffect(() => {
19
- let isMounted = true;
20
- const check = async () => {
21
- try {
22
- const updateInfo = await checkForUpdates();
23
- if (isMounted) {
24
- if (updateInfo.hasUpdate) {
25
- setStatus(Status.Updating);
26
- void update();
27
- }
28
- else {
29
- setStatus(Status.NoUpdate);
30
- }
31
- }
32
- }
33
- catch (e) {
34
- if (isMounted) {
35
- setStatus(Status.Error);
36
- setError(e);
37
- }
38
- }
39
- };
40
- const update = async () => {
41
- try {
42
- await toolRegistry.execute_bash({
43
- command: 'npm update -g @nanocollective/nanocoder',
44
- });
45
- if (isMounted) {
46
- setStatus(Status.Success);
47
- }
48
- }
49
- catch (e) {
50
- if (isMounted) {
51
- setStatus(Status.Error);
52
- setError(e);
53
- }
54
- }
55
- };
56
- void check();
57
- return () => {
58
- isMounted = false;
59
- };
60
- }, []);
61
- if (status === Status.Checking) {
62
- return React.createElement(InfoMessage, {
63
- message: 'Checking for available updates...',
64
- hideBox: true,
65
- });
66
- }
67
- if (status === Status.Updating) {
68
- return React.createElement(InfoMessage, {
69
- message: 'Downloading and installing the latest Nanocoder update...',
70
- hideBox: true,
71
- });
72
- }
73
- if (status === Status.NoUpdate) {
74
- return React.createElement(SuccessMessage, {
75
- message: 'Nanocoder is already up to date.',
76
- hideBox: true,
77
- });
78
- }
79
- if (status === Status.Success) {
80
- return React.createElement(SuccessMessage, {
81
- message: 'Nanocoder has been updated to the latest version. Please restart your session to apply the update.',
82
- hideBox: true,
83
- });
84
- }
85
- if (status === Status.Error) {
86
- return React.createElement(ErrorMessage, {
87
- message: `Failed to update Nanocoder: ${error?.message}`,
88
- hideBox: true,
89
- });
90
- }
91
- return null;
92
- }
93
- //# sourceMappingURL=update-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-message.js","sourceRoot":"","sources":["../../source/components/update-message.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ToolDefinition } from '../types/index.js';
2
- export declare const readManyFilesTool: ToolDefinition;
3
- //# sourceMappingURL=read-many-files.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-many-files.d.ts","sourceRoot":"","sources":["../../source/tools/read-many-files.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AA2OlD,eAAO,MAAM,iBAAiB,EAAE,cAM/B,CAAC"}