@nanocollective/nanocoder 1.16.3 → 1.16.5

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 (126) hide show
  1. package/README.md +17 -1
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +4 -29
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/update.d.ts +6 -0
  6. package/dist/commands/update.d.ts.map +1 -1
  7. package/dist/commands/update.js +104 -10
  8. package/dist/commands/update.js.map +1 -1
  9. package/dist/components/status.d.ts +1 -6
  10. package/dist/components/status.d.ts.map +1 -1
  11. package/dist/components/status.js +3 -2
  12. package/dist/components/status.js.map +1 -1
  13. package/dist/components/tool-confirmation.d.ts.map +1 -1
  14. package/dist/components/tool-confirmation.js +5 -19
  15. package/dist/components/tool-confirmation.js.map +1 -1
  16. package/dist/components/user-input.d.ts.map +1 -1
  17. package/dist/components/user-input.js +61 -19
  18. package/dist/components/user-input.js.map +1 -1
  19. package/dist/components/warning-message.d.ts +7 -0
  20. package/dist/components/warning-message.d.ts.map +1 -0
  21. package/dist/components/warning-message.js +12 -0
  22. package/dist/components/warning-message.js.map +1 -0
  23. package/dist/config/index.js +6 -6
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts +1 -0
  26. package/dist/config/paths.d.ts.map +1 -1
  27. package/dist/config/paths.js +28 -3
  28. package/dist/config/paths.js.map +1 -1
  29. package/dist/config/paths.spec.d.ts +2 -0
  30. package/dist/config/paths.spec.d.ts.map +1 -0
  31. package/dist/config/paths.spec.js +114 -0
  32. package/dist/config/paths.spec.js.map +1 -0
  33. package/dist/config/themes.d.ts.map +1 -1
  34. package/dist/config/themes.js +19 -0
  35. package/dist/config/themes.js.map +1 -1
  36. package/dist/hooks/useChatHandler.d.ts.map +1 -1
  37. package/dist/hooks/useChatHandler.js +10 -71
  38. package/dist/hooks/useChatHandler.js.map +1 -1
  39. package/dist/hooks/useDirectoryTrust.d.ts.map +1 -1
  40. package/dist/hooks/useDirectoryTrust.js +4 -4
  41. package/dist/hooks/useDirectoryTrust.js.map +1 -1
  42. package/dist/hooks/useInputState.d.ts.map +1 -1
  43. package/dist/hooks/useInputState.js +95 -8
  44. package/dist/hooks/useInputState.js.map +1 -1
  45. package/dist/hooks/useToolHandler.d.ts +0 -1
  46. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  47. package/dist/hooks/useToolHandler.js +9 -75
  48. package/dist/hooks/useToolHandler.js.map +1 -1
  49. package/dist/message-handler.d.ts.map +1 -1
  50. package/dist/message-handler.js +6 -11
  51. package/dist/message-handler.js.map +1 -1
  52. package/dist/models/models-dev-client.spec.js +1 -0
  53. package/dist/models/models-dev-client.spec.js.map +1 -1
  54. package/dist/tools/execute-bash.d.ts.map +1 -1
  55. package/dist/tools/execute-bash.js +5 -3
  56. package/dist/tools/execute-bash.js.map +1 -1
  57. package/dist/types/ui.d.ts +1 -1
  58. package/dist/types/ui.d.ts.map +1 -1
  59. package/dist/types/utils.d.ts +2 -1
  60. package/dist/types/utils.d.ts.map +1 -1
  61. package/dist/usage/storage.d.ts +1 -1
  62. package/dist/usage/storage.d.ts.map +1 -1
  63. package/dist/usage/storage.js +55 -9
  64. package/dist/usage/storage.js.map +1 -1
  65. package/dist/usage/storage.spec.js +136 -2
  66. package/dist/usage/storage.spec.js.map +1 -1
  67. package/dist/utils/error-formatter.d.ts +22 -0
  68. package/dist/utils/error-formatter.d.ts.map +1 -0
  69. package/dist/utils/error-formatter.js +27 -0
  70. package/dist/utils/error-formatter.js.map +1 -0
  71. package/dist/utils/error-formatter.spec.d.ts +2 -0
  72. package/dist/utils/error-formatter.spec.d.ts.map +1 -0
  73. package/dist/utils/error-formatter.spec.js +147 -0
  74. package/dist/utils/error-formatter.spec.js.map +1 -0
  75. package/dist/utils/fuzzy-matching.spec.js +1 -0
  76. package/dist/utils/fuzzy-matching.spec.js.map +1 -1
  77. package/dist/utils/installation-detector.d.ts +16 -0
  78. package/dist/utils/installation-detector.d.ts.map +1 -0
  79. package/dist/utils/installation-detector.js +118 -0
  80. package/dist/utils/installation-detector.js.map +1 -0
  81. package/dist/utils/installation-detector.spec.d.ts +2 -0
  82. package/dist/utils/installation-detector.spec.d.ts.map +1 -0
  83. package/dist/utils/installation-detector.spec.js +141 -0
  84. package/dist/utils/installation-detector.spec.js.map +1 -0
  85. package/dist/utils/message-queue.d.ts +2 -0
  86. package/dist/utils/message-queue.d.ts.map +1 -1
  87. package/dist/utils/message-queue.js +11 -0
  88. package/dist/utils/message-queue.js.map +1 -1
  89. package/dist/utils/paste-detection.d.ts.map +1 -1
  90. package/dist/utils/paste-detection.js +8 -3
  91. package/dist/utils/paste-detection.js.map +1 -1
  92. package/dist/utils/paste-detection.spec.js +15 -8
  93. package/dist/utils/paste-detection.spec.js.map +1 -1
  94. package/dist/utils/paste-utils.d.ts.map +1 -1
  95. package/dist/utils/paste-utils.js +4 -2
  96. package/dist/utils/paste-utils.js.map +1 -1
  97. package/dist/utils/paste-utils.spec.js +19 -3
  98. package/dist/utils/paste-utils.spec.js.map +1 -1
  99. package/dist/utils/tool-args-parser.d.ts +37 -0
  100. package/dist/utils/tool-args-parser.d.ts.map +1 -0
  101. package/dist/utils/tool-args-parser.js +50 -0
  102. package/dist/utils/tool-args-parser.js.map +1 -0
  103. package/dist/utils/tool-args-parser.spec.d.ts +2 -0
  104. package/dist/utils/tool-args-parser.spec.d.ts.map +1 -0
  105. package/dist/utils/tool-args-parser.spec.js +111 -0
  106. package/dist/utils/tool-args-parser.spec.js.map +1 -0
  107. package/dist/utils/tool-cancellation.d.ts +21 -0
  108. package/dist/utils/tool-cancellation.d.ts.map +1 -0
  109. package/dist/utils/tool-cancellation.js +27 -0
  110. package/dist/utils/tool-cancellation.js.map +1 -0
  111. package/dist/utils/tool-cancellation.spec.d.ts +2 -0
  112. package/dist/utils/tool-cancellation.spec.d.ts.map +1 -0
  113. package/dist/utils/tool-cancellation.spec.js +186 -0
  114. package/dist/utils/tool-cancellation.spec.js.map +1 -0
  115. package/dist/utils/tool-result-display.d.ts +15 -0
  116. package/dist/utils/tool-result-display.d.ts.map +1 -0
  117. package/dist/utils/tool-result-display.js +51 -0
  118. package/dist/utils/tool-result-display.js.map +1 -0
  119. package/dist/utils/update-checker.d.ts.map +1 -1
  120. package/dist/utils/update-checker.js +31 -3
  121. package/dist/utils/update-checker.js.map +1 -1
  122. package/dist/utils/update-checker.spec.js +68 -18
  123. package/dist/utils/update-checker.spec.js.map +1 -1
  124. package/dist/wizard/steps/location-step.js +2 -2
  125. package/dist/wizard/steps/location-step.js.map +1 -1
  126. package/package.json +1 -1
@@ -0,0 +1,21 @@
1
+ import type { ToolCall, ToolResult } from '../types/index.js';
2
+ /**
3
+ * Create cancellation results for tool calls
4
+ * Used when user cancels tool execution to maintain conversation state integrity
5
+ *
6
+ * This utility eliminates duplication of cancellation result creation logic
7
+ *
8
+ * @param toolCalls - Array of tool calls that were cancelled
9
+ * @returns Array of tool results indicating cancellation
10
+ *
11
+ * @example
12
+ * const cancellationResults = createCancellationResults(pendingToolCalls);
13
+ * const toolMessages = cancellationResults.map(result => ({
14
+ * role: 'tool' as const,
15
+ * content: result.content,
16
+ * tool_call_id: result.tool_call_id,
17
+ * name: result.name,
18
+ * }));
19
+ */
20
+ export declare function createCancellationResults(toolCalls: ToolCall[]): ToolResult[];
21
+ //# sourceMappingURL=tool-cancellation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-cancellation.d.ts","sourceRoot":"","sources":["../../source/utils/tool-cancellation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAExD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAO7E"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Create cancellation results for tool calls
3
+ * Used when user cancels tool execution to maintain conversation state integrity
4
+ *
5
+ * This utility eliminates duplication of cancellation result creation logic
6
+ *
7
+ * @param toolCalls - Array of tool calls that were cancelled
8
+ * @returns Array of tool results indicating cancellation
9
+ *
10
+ * @example
11
+ * const cancellationResults = createCancellationResults(pendingToolCalls);
12
+ * const toolMessages = cancellationResults.map(result => ({
13
+ * role: 'tool' as const,
14
+ * content: result.content,
15
+ * tool_call_id: result.tool_call_id,
16
+ * name: result.name,
17
+ * }));
18
+ */
19
+ export function createCancellationResults(toolCalls) {
20
+ return toolCalls.map(toolCall => ({
21
+ tool_call_id: toolCall.id,
22
+ role: 'tool',
23
+ name: toolCall.function.name,
24
+ content: 'Tool execution was cancelled by the user.',
25
+ }));
26
+ }
27
+ //# sourceMappingURL=tool-cancellation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-cancellation.js","sourceRoot":"","sources":["../../source/utils/tool-cancellation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAqB;IAC9D,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,YAAY,EAAE,QAAQ,CAAC,EAAE;QACzB,IAAI,EAAE,MAAe;QACrB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC5B,OAAO,EAAE,2CAA2C;KACpD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-cancellation.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-cancellation.spec.d.ts","sourceRoot":"","sources":["../../source/utils/tool-cancellation.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,186 @@
1
+ import test from 'ava';
2
+ import { createCancellationResults } from './tool-cancellation.js';
3
+ console.log(`\ntool-cancellation.spec.ts`);
4
+ // Helper to create mock tool calls
5
+ function createMockToolCall(id, name, args = {}) {
6
+ return {
7
+ id,
8
+ function: {
9
+ name,
10
+ arguments: args,
11
+ },
12
+ };
13
+ }
14
+ // Basic functionality tests
15
+ test('createCancellationResults - creates result for single tool call', t => {
16
+ const toolCalls = [createMockToolCall('call-1', 'ReadFile', { path: '/test' })];
17
+ const results = createCancellationResults(toolCalls);
18
+ t.is(results.length, 1);
19
+ t.is(results[0].tool_call_id, 'call-1');
20
+ t.is(results[0].role, 'tool');
21
+ t.is(results[0].name, 'ReadFile');
22
+ t.is(results[0].content, 'Tool execution was cancelled by the user.');
23
+ });
24
+ test('createCancellationResults - creates results for multiple tool calls', t => {
25
+ const toolCalls = [
26
+ createMockToolCall('call-1', 'ReadFile', { path: '/test1' }),
27
+ createMockToolCall('call-2', 'WriteFile', { path: '/test2' }),
28
+ createMockToolCall('call-3', 'ExecuteBash', { command: 'ls' }),
29
+ ];
30
+ const results = createCancellationResults(toolCalls);
31
+ t.is(results.length, 3);
32
+ t.is(results[0].tool_call_id, 'call-1');
33
+ t.is(results[1].tool_call_id, 'call-2');
34
+ t.is(results[2].tool_call_id, 'call-3');
35
+ });
36
+ test('createCancellationResults - handles empty array', t => {
37
+ const toolCalls = [];
38
+ const results = createCancellationResults(toolCalls);
39
+ t.is(results.length, 0);
40
+ t.deepEqual(results, []);
41
+ });
42
+ // Field mapping tests
43
+ test('createCancellationResults - correctly maps tool_call_id from id', t => {
44
+ const toolCalls = [createMockToolCall('unique-id-123', 'SomeTool')];
45
+ const results = createCancellationResults(toolCalls);
46
+ t.is(results[0].tool_call_id, 'unique-id-123');
47
+ });
48
+ test('createCancellationResults - correctly maps name from function.name', t => {
49
+ const toolCalls = [createMockToolCall('call-1', 'CustomToolName')];
50
+ const results = createCancellationResults(toolCalls);
51
+ t.is(results[0].name, 'CustomToolName');
52
+ });
53
+ test('createCancellationResults - sets role to "tool"', t => {
54
+ const toolCalls = [createMockToolCall('call-1', 'AnyTool')];
55
+ const results = createCancellationResults(toolCalls);
56
+ t.is(results[0].role, 'tool');
57
+ });
58
+ test('createCancellationResults - sets consistent cancellation message', t => {
59
+ const toolCalls = [
60
+ createMockToolCall('call-1', 'Tool1'),
61
+ createMockToolCall('call-2', 'Tool2'),
62
+ ];
63
+ const results = createCancellationResults(toolCalls);
64
+ // All results should have the same cancellation message
65
+ t.is(results[0].content, 'Tool execution was cancelled by the user.');
66
+ t.is(results[1].content, 'Tool execution was cancelled by the user.');
67
+ });
68
+ // Edge cases with tool names
69
+ test('createCancellationResults - handles tools with special characters in name', t => {
70
+ const toolCalls = [createMockToolCall('call-1', 'Tool_With_Underscores')];
71
+ const results = createCancellationResults(toolCalls);
72
+ t.is(results[0].name, 'Tool_With_Underscores');
73
+ });
74
+ test('createCancellationResults - handles tools with numbers in name', t => {
75
+ const toolCalls = [createMockToolCall('call-1', 'Tool123')];
76
+ const results = createCancellationResults(toolCalls);
77
+ t.is(results[0].name, 'Tool123');
78
+ });
79
+ test('createCancellationResults - handles tools with camelCase name', t => {
80
+ const toolCalls = [createMockToolCall('call-1', 'readFileContents')];
81
+ const results = createCancellationResults(toolCalls);
82
+ t.is(results[0].name, 'readFileContents');
83
+ });
84
+ // Edge cases with tool call IDs
85
+ test('createCancellationResults - handles very long tool call IDs', t => {
86
+ const longId = 'a'.repeat(1000);
87
+ const toolCalls = [createMockToolCall(longId, 'SomeTool')];
88
+ const results = createCancellationResults(toolCalls);
89
+ t.is(results[0].tool_call_id, longId);
90
+ });
91
+ test('createCancellationResults - handles UUID-style IDs', t => {
92
+ const uuid = '550e8400-e29b-41d4-a716-446655440000';
93
+ const toolCalls = [createMockToolCall(uuid, 'SomeTool')];
94
+ const results = createCancellationResults(toolCalls);
95
+ t.is(results[0].tool_call_id, uuid);
96
+ });
97
+ // Arguments handling (should be ignored in cancellation)
98
+ test('createCancellationResults - ignores tool arguments', t => {
99
+ const complexArgs = {
100
+ path: '/very/long/path',
101
+ options: { recursive: true, force: true },
102
+ metadata: { created: new Date(), author: 'test' },
103
+ };
104
+ const toolCalls = [createMockToolCall('call-1', 'ComplexTool', complexArgs)];
105
+ const results = createCancellationResults(toolCalls);
106
+ // Result should not include arguments
107
+ t.false('arguments' in results[0]);
108
+ // Only expected fields should be present
109
+ t.is(Object.keys(results[0]).length, 4); // tool_call_id, role, name, content
110
+ });
111
+ // Multiple tool calls with same name
112
+ test('createCancellationResults - handles multiple calls to same tool', t => {
113
+ const toolCalls = [
114
+ createMockToolCall('call-1', 'ReadFile', { path: '/file1' }),
115
+ createMockToolCall('call-2', 'ReadFile', { path: '/file2' }),
116
+ createMockToolCall('call-3', 'ReadFile', { path: '/file3' }),
117
+ ];
118
+ const results = createCancellationResults(toolCalls);
119
+ t.is(results.length, 3);
120
+ // All should have same name but different IDs
121
+ t.is(results[0].name, 'ReadFile');
122
+ t.is(results[1].name, 'ReadFile');
123
+ t.is(results[2].name, 'ReadFile');
124
+ t.is(results[0].tool_call_id, 'call-1');
125
+ t.is(results[1].tool_call_id, 'call-2');
126
+ t.is(results[2].tool_call_id, 'call-3');
127
+ });
128
+ // Result structure validation
129
+ test('createCancellationResults - result has correct structure', t => {
130
+ const toolCalls = [createMockToolCall('call-1', 'TestTool')];
131
+ const results = createCancellationResults(toolCalls);
132
+ const result = results[0];
133
+ t.true('tool_call_id' in result);
134
+ t.true('role' in result);
135
+ t.true('name' in result);
136
+ t.true('content' in result);
137
+ t.is(typeof result.tool_call_id, 'string');
138
+ t.is(typeof result.role, 'string');
139
+ t.is(typeof result.name, 'string');
140
+ t.is(typeof result.content, 'string');
141
+ });
142
+ // Array immutability test
143
+ test('createCancellationResults - does not modify input array', t => {
144
+ const toolCalls = [
145
+ createMockToolCall('call-1', 'Tool1'),
146
+ createMockToolCall('call-2', 'Tool2'),
147
+ ];
148
+ const originalLength = toolCalls.length;
149
+ const originalFirstId = toolCalls[0].id;
150
+ createCancellationResults(toolCalls);
151
+ t.is(toolCalls.length, originalLength);
152
+ t.is(toolCalls[0].id, originalFirstId);
153
+ });
154
+ // Real-world scenario test
155
+ test('createCancellationResults - realistic multi-tool cancellation', t => {
156
+ const toolCalls = [
157
+ createMockToolCall('tc-001', 'ReadFile', {
158
+ path: '/project/config.json',
159
+ }),
160
+ createMockToolCall('tc-002', 'FindFiles', {
161
+ pattern: '**/*.ts',
162
+ path: '/project',
163
+ }),
164
+ createMockToolCall('tc-003', 'ExecuteBash', {
165
+ command: 'npm test',
166
+ }),
167
+ createMockToolCall('tc-004', 'WriteFile', {
168
+ path: '/output.txt',
169
+ content: 'test',
170
+ }),
171
+ ];
172
+ const results = createCancellationResults(toolCalls);
173
+ t.is(results.length, 4);
174
+ // Verify all have correct structure and cancellation message
175
+ results.forEach((result, index) => {
176
+ t.is(result.tool_call_id, `tc-00${index + 1}`);
177
+ t.is(result.role, 'tool');
178
+ t.is(result.content, 'Tool execution was cancelled by the user.');
179
+ });
180
+ // Verify specific tool names are preserved
181
+ t.is(results[0].name, 'ReadFile');
182
+ t.is(results[1].name, 'FindFiles');
183
+ t.is(results[2].name, 'ExecuteBash');
184
+ t.is(results[3].name, 'WriteFile');
185
+ });
186
+ //# sourceMappingURL=tool-cancellation.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-cancellation.spec.js","sourceRoot":"","sources":["../../source/utils/tool-cancellation.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { ToolCall, ToolResult } from '../types/index.js';
3
+ import type { ToolManager } from '../tools/tool-manager.js';
4
+ /**
5
+ * Display tool result with proper formatting
6
+ * Extracted to eliminate duplication between useChatHandler and useToolHandler
7
+ *
8
+ * @param toolCall - The tool call that was executed
9
+ * @param result - The result from tool execution
10
+ * @param toolManager - The tool manager instance (for formatters)
11
+ * @param addToChatQueue - Function to add components to chat queue
12
+ * @param componentKeyCounter - Counter for generating unique React keys
13
+ */
14
+ export declare function displayToolResult(toolCall: ToolCall, result: ToolResult, toolManager: ToolManager | null, addToChatQueue: (component: React.ReactNode) => void, componentKeyCounter: number): Promise<void>;
15
+ //# sourceMappingURL=tool-result-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-display.d.ts","sourceRoot":"","sources":["../../source/utils/tool-result-display.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAKtD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,EACpD,mBAAmB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAqEf"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { parseToolArguments } from '../utils/tool-args-parser.js';
4
+ import ToolMessage from '../components/tool-message.js';
5
+ import ErrorMessage from '../components/error-message.js';
6
+ /**
7
+ * Display tool result with proper formatting
8
+ * Extracted to eliminate duplication between useChatHandler and useToolHandler
9
+ *
10
+ * @param toolCall - The tool call that was executed
11
+ * @param result - The result from tool execution
12
+ * @param toolManager - The tool manager instance (for formatters)
13
+ * @param addToChatQueue - Function to add components to chat queue
14
+ * @param componentKeyCounter - Counter for generating unique React keys
15
+ */
16
+ export async function displayToolResult(toolCall, result, toolManager, addToChatQueue, componentKeyCounter) {
17
+ // Check if this is an error result
18
+ const isError = result.content.startsWith('Error: ');
19
+ if (isError) {
20
+ // Display as error message
21
+ const errorMessage = result.content.replace(/^Error: /, '');
22
+ addToChatQueue(_jsx(ErrorMessage, { message: errorMessage, hideBox: true }, `tool-error-${result.tool_call_id}-${componentKeyCounter}-${Date.now()}`));
23
+ return;
24
+ }
25
+ if (toolManager) {
26
+ const formatter = toolManager.getToolFormatter(result.name);
27
+ if (formatter) {
28
+ try {
29
+ const parsedArgs = parseToolArguments(toolCall.function.arguments);
30
+ const formattedResult = await formatter(parsedArgs, result.content);
31
+ if (React.isValidElement(formattedResult)) {
32
+ addToChatQueue(React.cloneElement(formattedResult, {
33
+ key: `tool-result-${result.tool_call_id}-${componentKeyCounter}-${Date.now()}`,
34
+ }));
35
+ }
36
+ else {
37
+ addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: String(formattedResult), hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}-${Date.now()}`));
38
+ }
39
+ }
40
+ catch {
41
+ // If formatter fails, show raw result
42
+ addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: result.content, hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}`));
43
+ }
44
+ }
45
+ else {
46
+ // No formatter, show raw result
47
+ addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: result.content, hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}`));
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=tool-result-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-display.js","sourceRoot":"","sources":["../../source/utils/tool-result-display.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,QAAkB,EAClB,MAAkB,EAClB,WAA+B,EAC/B,cAAoD,EACpD,mBAA2B;IAE3B,mCAAmC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,OAAO,EAAE,CAAC;QACb,2BAA2B;QAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5D,cAAc,CACb,KAAC,YAAY,IAIZ,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,IAAI,IAJR,cACJ,MAAM,CAAC,YACR,IAAI,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAGtC,CACF,CAAC;QACF,OAAO;IACR,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnE,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEpE,IAAI,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC;oBAC3C,cAAc,CACb,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE;wBACnC,GAAG,EAAE,eACJ,MAAM,CAAC,YACR,IAAI,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;qBACvC,CAAC,CACF,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,cAAc,CACb,KAAC,WAAW,IAIX,KAAK,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EACzB,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,EAChC,OAAO,EAAE,IAAI,IALR,eACJ,MAAM,CAAC,YACR,IAAI,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAItC,CACF,CAAC;gBACH,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,sCAAsC;gBACtC,cAAc,CACb,KAAC,WAAW,IAEX,KAAK,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EACzB,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,OAAO,EAAE,IAAI,IAHR,eAAe,MAAM,CAAC,YAAY,IAAI,mBAAmB,EAAE,CAI/D,CACF,CAAC;YACH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,gCAAgC;YAChC,cAAc,CACb,KAAC,WAAW,IAEX,KAAK,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EACzB,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,OAAO,EAAE,IAAI,IAHR,eAAe,MAAM,CAAC,YAAY,IAAI,mBAAmB,EAAE,CAI/D,CACF,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,UAAU,EAAC,MAAM,eAAe,CAAC;AAgGnE;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAoC3D"}
1
+ {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,UAAU,EAAC,MAAM,eAAe,CAAC;AA8GnE;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CA8D3D"}
@@ -3,6 +3,16 @@ import { join, dirname } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  import { loadPreferences, savePreferences } from '../config/preferences.js';
5
5
  import { logError } from '../utils/message-queue.js';
6
+ import { detectInstallationMethod } from './installation-detector.js';
7
+ const UPDATE_COMMANDS = {
8
+ NPM: 'npm update -g @nanocollective/nanocoder',
9
+ // Check if package exists before upgrading to provide better error messages
10
+ HOMEBREW: '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)',
11
+ };
12
+ const UPDATE_MESSAGES = {
13
+ NIX: 'To update, re-run: nix run github:Nano-Collective/nanocoder (or update your flake).',
14
+ UNKNOWN: 'A new version is available. Please update using your package manager.',
15
+ };
6
16
  const __filename = fileURLToPath(import.meta.url);
7
17
  const __dirname = dirname(__filename);
8
18
  /**
@@ -90,13 +100,31 @@ export async function checkForUpdates() {
90
100
  };
91
101
  }
92
102
  const hasUpdate = isNewerVersion(currentVersion, latestVersion);
103
+ function getUpdateDetails(hasUpdate) {
104
+ if (!hasUpdate) {
105
+ return {};
106
+ }
107
+ const method = detectInstallationMethod();
108
+ // Use constants defined at top of file for maintainability
109
+ switch (method) {
110
+ case 'npm':
111
+ return { command: UPDATE_COMMANDS.NPM };
112
+ case 'homebrew':
113
+ return { command: UPDATE_COMMANDS.HOMEBREW };
114
+ case 'nix':
115
+ return { message: UPDATE_MESSAGES.NIX };
116
+ default:
117
+ // For 'unknown' fallback to a general message (do not attempt to run a command)
118
+ return { message: UPDATE_MESSAGES.UNKNOWN };
119
+ }
120
+ }
121
+ const updateDetails = getUpdateDetails(hasUpdate);
93
122
  return {
94
123
  hasUpdate,
95
124
  currentVersion,
96
125
  latestVersion,
97
- updateCommand: hasUpdate
98
- ? 'npm update -g @nanocollective/nanocoder'
99
- : undefined,
126
+ updateCommand: updateDetails.command,
127
+ updateMessage: updateDetails.message,
100
128
  };
101
129
  }
102
130
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,15 @@
1
1
  import test from 'ava';
2
+ import { readFileSync } from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
2
5
  import { checkForUpdates } from './update-checker.js';
3
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;
4
13
  // Mock fetch globally for testing
5
14
  const originalFetch = globalThis.fetch;
6
15
  // Helper to create mock fetch responses
@@ -20,79 +29,102 @@ function createMockFetch(status, data, shouldReject = false) {
20
29
  test.beforeEach(() => {
21
30
  // Reset fetch before each test
22
31
  globalThis.fetch = originalFetch;
32
+ // Default to npm install override
33
+ process.env.NANOCODER_INSTALL_METHOD = 'npm';
23
34
  });
24
35
  test.afterEach(() => {
25
- // Restore original fetch after each test
36
+ // Restore original fetch and env after each test
26
37
  globalThis.fetch = originalFetch;
38
+ delete process.env.NANOCODER_INSTALL_METHOD;
27
39
  });
28
40
  // Version Comparison Tests
29
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`;
30
45
  globalThis.fetch = createMockFetch(200, {
31
- version: '2.0.0',
46
+ version: newerMajorVersion,
32
47
  name: '@nanocollective/nanocoder',
33
48
  });
34
49
  const result = await checkForUpdates();
35
50
  t.true(result.hasUpdate);
36
- t.is(result.currentVersion, '1.16.3');
37
- t.is(result.latestVersion, '2.0.0');
51
+ t.is(result.currentVersion, CURRENT_VERSION);
52
+ t.is(result.latestVersion, newerMajorVersion);
38
53
  t.truthy(result.updateCommand);
39
54
  });
40
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`;
41
59
  globalThis.fetch = createMockFetch(200, {
42
- version: '1.17.0',
60
+ version: newerMinorVersion,
43
61
  name: '@nanocollective/nanocoder',
44
62
  });
45
63
  const result = await checkForUpdates();
46
64
  t.true(result.hasUpdate);
47
- t.is(result.latestVersion, '1.17.0');
65
+ t.is(result.latestVersion, newerMinorVersion);
48
66
  });
49
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}`;
50
71
  globalThis.fetch = createMockFetch(200, {
51
- version: '1.16.4',
72
+ version: newerPatchVersion,
52
73
  name: '@nanocollective/nanocoder',
53
74
  });
54
75
  const result = await checkForUpdates();
55
76
  t.true(result.hasUpdate);
56
- t.is(result.latestVersion, '1.16.4');
77
+ t.is(result.latestVersion, newerPatchVersion);
57
78
  });
58
79
  test('checkForUpdates: detects same version (no update)', async (t) => {
59
80
  globalThis.fetch = createMockFetch(200, {
60
- version: '1.16.3',
81
+ version: CURRENT_VERSION,
61
82
  name: '@nanocollective/nanocoder',
62
83
  });
63
84
  const result = await checkForUpdates();
64
85
  t.false(result.hasUpdate);
65
- t.is(result.currentVersion, '1.16.3');
66
- t.is(result.latestVersion, '1.16.3');
86
+ t.is(result.currentVersion, CURRENT_VERSION);
87
+ t.is(result.latestVersion, CURRENT_VERSION);
67
88
  t.is(result.updateCommand, undefined);
68
89
  });
69
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)}`;
70
96
  globalThis.fetch = createMockFetch(200, {
71
- version: '1.16.2',
97
+ version: olderPatchVersion,
72
98
  name: '@nanocollective/nanocoder',
73
99
  });
74
100
  const result = await checkForUpdates();
75
101
  t.false(result.hasUpdate);
76
- t.is(result.latestVersion, '1.16.2');
102
+ t.is(result.latestVersion, olderPatchVersion);
77
103
  });
78
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`;
79
108
  globalThis.fetch = createMockFetch(200, {
80
- version: 'v2.0.0',
109
+ version: newerMajorVersion,
81
110
  name: '@nanocollective/nanocoder',
82
111
  });
83
112
  const result = await checkForUpdates();
84
113
  t.true(result.hasUpdate);
85
- t.is(result.latestVersion, 'v2.0.0');
114
+ t.is(result.latestVersion, newerMajorVersion);
86
115
  });
87
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`;
88
120
  globalThis.fetch = createMockFetch(200, {
89
- version: '2.0.0-beta.1',
121
+ version: newerPreReleaseVersion,
90
122
  name: '@nanocollective/nanocoder',
91
123
  });
92
124
  const result = await checkForUpdates();
93
- // Pre-release info is stripped, so 2.0.0 > 1.16.3
125
+ // Pre-release info is stripped during comparison
94
126
  t.true(result.hasUpdate);
95
- t.is(result.latestVersion, '2.0.0-beta.1');
127
+ t.is(result.latestVersion, newerPreReleaseVersion);
96
128
  });
97
129
  // Network Error Handling Tests
98
130
  test('checkForUpdates: handles network errors gracefully', async (t) => {
@@ -138,6 +170,24 @@ test('checkForUpdates: returns correct update command', async (t) => {
138
170
  const result = await checkForUpdates();
139
171
  t.is(result.updateCommand, 'npm update -g @nanocollective/nanocoder');
140
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
+ });
141
191
  test('checkForUpdates: includes current version in response', async (t) => {
142
192
  globalThis.fetch = createMockFetch(200, {
143
193
  version: '2.0.0',
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.spec.js","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-checker.spec.js","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":"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"}