@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.
- package/README.md +17 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -29
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +104 -10
- package/dist/commands/update.js.map +1 -1
- package/dist/components/status.d.ts +1 -6
- package/dist/components/status.d.ts.map +1 -1
- package/dist/components/status.js +3 -2
- package/dist/components/status.js.map +1 -1
- package/dist/components/tool-confirmation.d.ts.map +1 -1
- package/dist/components/tool-confirmation.js +5 -19
- package/dist/components/tool-confirmation.js.map +1 -1
- package/dist/components/user-input.d.ts.map +1 -1
- package/dist/components/user-input.js +61 -19
- package/dist/components/user-input.js.map +1 -1
- package/dist/components/warning-message.d.ts +7 -0
- package/dist/components/warning-message.d.ts.map +1 -0
- package/dist/components/warning-message.js +12 -0
- package/dist/components/warning-message.js.map +1 -0
- package/dist/config/index.js +6 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +1 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +28 -3
- package/dist/config/paths.js.map +1 -1
- package/dist/config/paths.spec.d.ts +2 -0
- package/dist/config/paths.spec.d.ts.map +1 -0
- package/dist/config/paths.spec.js +114 -0
- package/dist/config/paths.spec.js.map +1 -0
- package/dist/config/themes.d.ts.map +1 -1
- package/dist/config/themes.js +19 -0
- package/dist/config/themes.js.map +1 -1
- package/dist/hooks/useChatHandler.d.ts.map +1 -1
- package/dist/hooks/useChatHandler.js +10 -71
- package/dist/hooks/useChatHandler.js.map +1 -1
- package/dist/hooks/useDirectoryTrust.d.ts.map +1 -1
- package/dist/hooks/useDirectoryTrust.js +4 -4
- package/dist/hooks/useDirectoryTrust.js.map +1 -1
- package/dist/hooks/useInputState.d.ts.map +1 -1
- package/dist/hooks/useInputState.js +95 -8
- package/dist/hooks/useInputState.js.map +1 -1
- package/dist/hooks/useToolHandler.d.ts +0 -1
- package/dist/hooks/useToolHandler.d.ts.map +1 -1
- package/dist/hooks/useToolHandler.js +9 -75
- package/dist/hooks/useToolHandler.js.map +1 -1
- package/dist/message-handler.d.ts.map +1 -1
- package/dist/message-handler.js +6 -11
- package/dist/message-handler.js.map +1 -1
- package/dist/models/models-dev-client.spec.js +1 -0
- package/dist/models/models-dev-client.spec.js.map +1 -1
- package/dist/tools/execute-bash.d.ts.map +1 -1
- package/dist/tools/execute-bash.js +5 -3
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/types/ui.d.ts +1 -1
- package/dist/types/ui.d.ts.map +1 -1
- package/dist/types/utils.d.ts +2 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/usage/storage.d.ts +1 -1
- package/dist/usage/storage.d.ts.map +1 -1
- package/dist/usage/storage.js +55 -9
- package/dist/usage/storage.js.map +1 -1
- package/dist/usage/storage.spec.js +136 -2
- package/dist/usage/storage.spec.js.map +1 -1
- package/dist/utils/error-formatter.d.ts +22 -0
- package/dist/utils/error-formatter.d.ts.map +1 -0
- package/dist/utils/error-formatter.js +27 -0
- package/dist/utils/error-formatter.js.map +1 -0
- package/dist/utils/error-formatter.spec.d.ts +2 -0
- package/dist/utils/error-formatter.spec.d.ts.map +1 -0
- package/dist/utils/error-formatter.spec.js +147 -0
- package/dist/utils/error-formatter.spec.js.map +1 -0
- package/dist/utils/fuzzy-matching.spec.js +1 -0
- package/dist/utils/fuzzy-matching.spec.js.map +1 -1
- package/dist/utils/installation-detector.d.ts +16 -0
- package/dist/utils/installation-detector.d.ts.map +1 -0
- package/dist/utils/installation-detector.js +118 -0
- package/dist/utils/installation-detector.js.map +1 -0
- package/dist/utils/installation-detector.spec.d.ts +2 -0
- package/dist/utils/installation-detector.spec.d.ts.map +1 -0
- package/dist/utils/installation-detector.spec.js +141 -0
- package/dist/utils/installation-detector.spec.js.map +1 -0
- package/dist/utils/message-queue.d.ts +2 -0
- package/dist/utils/message-queue.d.ts.map +1 -1
- package/dist/utils/message-queue.js +11 -0
- package/dist/utils/message-queue.js.map +1 -1
- package/dist/utils/paste-detection.d.ts.map +1 -1
- package/dist/utils/paste-detection.js +8 -3
- package/dist/utils/paste-detection.js.map +1 -1
- package/dist/utils/paste-detection.spec.js +15 -8
- package/dist/utils/paste-detection.spec.js.map +1 -1
- package/dist/utils/paste-utils.d.ts.map +1 -1
- package/dist/utils/paste-utils.js +4 -2
- package/dist/utils/paste-utils.js.map +1 -1
- package/dist/utils/paste-utils.spec.js +19 -3
- package/dist/utils/paste-utils.spec.js.map +1 -1
- package/dist/utils/tool-args-parser.d.ts +37 -0
- package/dist/utils/tool-args-parser.d.ts.map +1 -0
- package/dist/utils/tool-args-parser.js +50 -0
- package/dist/utils/tool-args-parser.js.map +1 -0
- package/dist/utils/tool-args-parser.spec.d.ts +2 -0
- package/dist/utils/tool-args-parser.spec.d.ts.map +1 -0
- package/dist/utils/tool-args-parser.spec.js +111 -0
- package/dist/utils/tool-args-parser.spec.js.map +1 -0
- package/dist/utils/tool-cancellation.d.ts +21 -0
- package/dist/utils/tool-cancellation.d.ts.map +1 -0
- package/dist/utils/tool-cancellation.js +27 -0
- package/dist/utils/tool-cancellation.js.map +1 -0
- package/dist/utils/tool-cancellation.spec.d.ts +2 -0
- package/dist/utils/tool-cancellation.spec.d.ts.map +1 -0
- package/dist/utils/tool-cancellation.spec.js +186 -0
- package/dist/utils/tool-cancellation.spec.js.map +1 -0
- package/dist/utils/tool-result-display.d.ts +15 -0
- package/dist/utils/tool-result-display.d.ts.map +1 -0
- package/dist/utils/tool-result-display.js +51 -0
- package/dist/utils/tool-result-display.js.map +1 -0
- package/dist/utils/update-checker.d.ts.map +1 -1
- package/dist/utils/update-checker.js +31 -3
- package/dist/utils/update-checker.js.map +1 -1
- package/dist/utils/update-checker.spec.js +68 -18
- package/dist/utils/update-checker.spec.js.map +1 -1
- package/dist/wizard/steps/location-step.js +2 -2
- package/dist/wizard/steps/location-step.js.map +1 -1
- 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 @@
|
|
|
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;
|
|
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:
|
|
98
|
-
|
|
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":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,IAAI,CAAC;AAChC,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;
|
|
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:
|
|
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,
|
|
37
|
-
t.is(result.latestVersion,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
66
|
-
t.is(result.latestVersion,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
121
|
+
version: newerPreReleaseVersion,
|
|
90
122
|
name: '@nanocollective/nanocoder',
|
|
91
123
|
});
|
|
92
124
|
const result = await checkForUpdates();
|
|
93
|
-
// Pre-release info is stripped
|
|
125
|
+
// Pre-release info is stripped during comparison
|
|
94
126
|
t.true(result.hasUpdate);
|
|
95
|
-
t.is(result.latestVersion,
|
|
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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"}
|