@qduc/term2 0.1.2 → 0.1.3
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/dist/agent.lite-mode.test.d.ts +2 -0
- package/dist/agent.lite-mode.test.d.ts.map +1 -0
- package/dist/agent.lite-mode.test.js +39 -0
- package/dist/agent.lite-mode.test.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +3 -1
- package/dist/app.js.map +1 -1
- package/dist/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/ApprovalPrompt.js +20 -0
- package/dist/components/ApprovalPrompt.js.map +1 -1
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +2 -7
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/TextInput.d.ts.map +1 -1
- package/dist/components/TextInput.js +2 -1
- package/dist/components/TextInput.js.map +1 -1
- package/dist/components/TextInput.test.js.map +1 -1
- package/dist/debug_ask_mentor.d.ts +2 -0
- package/dist/debug_ask_mentor.d.ts.map +1 -0
- package/dist/debug_ask_mentor.js +73 -0
- package/dist/debug_ask_mentor.js.map +1 -0
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +7 -3
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +3 -0
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-completion.test.js +6 -0
- package/dist/hooks/use-settings-completion.test.js.map +1 -1
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.js +35 -15
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/tool-invoke.test.js +1 -1
- package/dist/lib/tool-invoke.test.js.map +1 -1
- package/dist/modes/companion/command-index.d.ts +26 -0
- package/dist/modes/companion/command-index.d.ts.map +1 -0
- package/dist/modes/companion/command-index.js +50 -0
- package/dist/modes/companion/command-index.js.map +1 -0
- package/dist/modes/companion/command-index.test.d.ts +2 -0
- package/dist/modes/companion/command-index.test.d.ts.map +1 -0
- package/dist/modes/companion/command-index.test.js +86 -0
- package/dist/modes/companion/command-index.test.js.map +1 -0
- package/dist/modes/companion/companion-app.d.ts +12 -0
- package/dist/modes/companion/companion-app.d.ts.map +1 -0
- package/dist/modes/companion/companion-app.js +297 -0
- package/dist/modes/companion/companion-app.js.map +1 -0
- package/dist/modes/companion/companion-session.d.ts +63 -0
- package/dist/modes/companion/companion-session.d.ts.map +1 -0
- package/dist/modes/companion/companion-session.js +146 -0
- package/dist/modes/companion/companion-session.js.map +1 -0
- package/dist/modes/companion/companion-session.test.d.ts +2 -0
- package/dist/modes/companion/companion-session.test.d.ts.map +1 -0
- package/dist/modes/companion/companion-session.test.js +28 -0
- package/dist/modes/companion/companion-session.test.js.map +1 -0
- package/dist/modes/companion/components/status-bar.d.ts +13 -0
- package/dist/modes/companion/components/status-bar.d.ts.map +1 -0
- package/dist/modes/companion/components/status-bar.js +26 -0
- package/dist/modes/companion/components/status-bar.js.map +1 -0
- package/dist/modes/companion/context-buffer.d.ts +65 -0
- package/dist/modes/companion/context-buffer.d.ts.map +1 -0
- package/dist/modes/companion/context-buffer.js +156 -0
- package/dist/modes/companion/context-buffer.js.map +1 -0
- package/dist/modes/companion/context-buffer.test.d.ts +2 -0
- package/dist/modes/companion/context-buffer.test.d.ts.map +1 -0
- package/dist/modes/companion/context-buffer.test.js +154 -0
- package/dist/modes/companion/context-buffer.test.js.map +1 -0
- package/dist/modes/companion/event-detector.d.ts +46 -0
- package/dist/modes/companion/event-detector.d.ts.map +1 -0
- package/dist/modes/companion/event-detector.js +169 -0
- package/dist/modes/companion/event-detector.js.map +1 -0
- package/dist/modes/companion/event-detector.test.d.ts +2 -0
- package/dist/modes/companion/event-detector.test.d.ts.map +1 -0
- package/dist/modes/companion/event-detector.test.js +121 -0
- package/dist/modes/companion/event-detector.test.js.map +1 -0
- package/dist/modes/companion/index.d.ts +33 -0
- package/dist/modes/companion/index.d.ts.map +1 -0
- package/dist/modes/companion/index.js +21 -0
- package/dist/modes/companion/index.js.map +1 -0
- package/dist/modes/companion/input-key-mapper.d.ts +3 -0
- package/dist/modes/companion/input-key-mapper.d.ts.map +1 -0
- package/dist/modes/companion/input-key-mapper.js +31 -0
- package/dist/modes/companion/input-key-mapper.js.map +1 -0
- package/dist/modes/companion/input-key-mapper.test.d.ts +2 -0
- package/dist/modes/companion/input-key-mapper.test.d.ts.map +1 -0
- package/dist/modes/companion/input-key-mapper.test.js +26 -0
- package/dist/modes/companion/input-key-mapper.test.js.map +1 -0
- package/dist/modes/companion/input-parser.d.ts +53 -0
- package/dist/modes/companion/input-parser.d.ts.map +1 -0
- package/dist/modes/companion/input-parser.js +114 -0
- package/dist/modes/companion/input-parser.js.map +1 -0
- package/dist/modes/companion/input-parser.test.d.ts +2 -0
- package/dist/modes/companion/input-parser.test.d.ts.map +1 -0
- package/dist/modes/companion/input-parser.test.js +123 -0
- package/dist/modes/companion/input-parser.test.js.map +1 -0
- package/dist/modes/companion/mode-manager.d.ts +41 -0
- package/dist/modes/companion/mode-manager.d.ts.map +1 -0
- package/dist/modes/companion/mode-manager.js +56 -0
- package/dist/modes/companion/mode-manager.js.map +1 -0
- package/dist/modes/companion/mode-manager.test.d.ts +2 -0
- package/dist/modes/companion/mode-manager.test.d.ts.map +1 -0
- package/dist/modes/companion/mode-manager.test.js +65 -0
- package/dist/modes/companion/mode-manager.test.js.map +1 -0
- package/dist/modes/companion/output-classifier.d.ts +15 -0
- package/dist/modes/companion/output-classifier.d.ts.map +1 -0
- package/dist/modes/companion/output-classifier.js +77 -0
- package/dist/modes/companion/output-classifier.js.map +1 -0
- package/dist/modes/companion/output-classifier.test.d.ts +2 -0
- package/dist/modes/companion/output-classifier.test.d.ts.map +1 -0
- package/dist/modes/companion/output-classifier.test.js +133 -0
- package/dist/modes/companion/output-classifier.test.js.map +1 -0
- package/dist/modes/companion/pty-wrapper.d.ts +46 -0
- package/dist/modes/companion/pty-wrapper.d.ts.map +1 -0
- package/dist/modes/companion/pty-wrapper.js +143 -0
- package/dist/modes/companion/pty-wrapper.js.map +1 -0
- package/dist/modes/companion/safety-classifier.d.ts +31 -0
- package/dist/modes/companion/safety-classifier.d.ts.map +1 -0
- package/dist/modes/companion/safety-classifier.js +140 -0
- package/dist/modes/companion/safety-classifier.js.map +1 -0
- package/dist/modes/companion/safety-classifier.test.d.ts +2 -0
- package/dist/modes/companion/safety-classifier.test.d.ts.map +1 -0
- package/dist/modes/companion/safety-classifier.test.js +151 -0
- package/dist/modes/companion/safety-classifier.test.js.map +1 -0
- package/dist/modes/companion/summarizer.d.ts +24 -0
- package/dist/modes/companion/summarizer.d.ts.map +1 -0
- package/dist/modes/companion/summarizer.js +132 -0
- package/dist/modes/companion/summarizer.js.map +1 -0
- package/dist/modes/companion/terminal-history.d.ts +27 -0
- package/dist/modes/companion/terminal-history.d.ts.map +1 -0
- package/dist/modes/companion/terminal-history.js +142 -0
- package/dist/modes/companion/terminal-history.js.map +1 -0
- package/dist/prompts/simple-mentor.md +8 -0
- package/dist/providers/openai-compatible/model.d.ts.map +1 -1
- package/dist/providers/openai-compatible/model.js +13 -2
- package/dist/providers/openai-compatible/model.js.map +1 -1
- package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
- package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter/reasoning-content.test.js +2 -2
- package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter.test.js +30 -21
- package/dist/providers/openrouter.test.js.map +1 -1
- package/dist/services/check_mock.d.ts +2 -0
- package/dist/services/check_mock.d.ts.map +1 -0
- package/dist/services/check_mock.js +22 -0
- package/dist/services/check_mock.js.map +1 -0
- package/dist/services/conversation-service.test.d.ts +2 -0
- package/dist/services/conversation-service.test.d.ts.map +1 -0
- package/dist/services/conversation-service.test.js +149 -183
- package/dist/services/conversation-service.test.js.map +1 -0
- package/dist/services/conversation-store.test.js +12 -11
- package/dist/services/conversation-store.test.js.map +1 -1
- package/dist/services/settings-service.d.ts +5 -2
- package/dist/services/settings-service.d.ts.map +1 -1
- package/dist/services/settings-service.js +12 -0
- package/dist/services/settings-service.js.map +1 -1
- package/dist/tools/ask-mentor.d.ts +1 -1
- package/dist/tools/ask-mentor.d.ts.map +1 -1
- package/dist/tools/ask-mentor.js +1 -0
- package/dist/tools/ask-mentor.js.map +1 -1
- package/dist/tools/find-files.d.ts +2 -2
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +2 -0
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +1 -0
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +10 -9
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-file.test.js +24 -19
- package/dist/tools/read-file.test.js.map +1 -1
- package/dist/tools/search-replace.d.ts +1 -1
- package/dist/tools/search-replace.d.ts.map +1 -1
- package/dist/tools/search-replace.js +129 -1
- package/dist/tools/search-replace.js.map +1 -1
- package/dist/tools/search-replace.test.js +18 -0
- package/dist/tools/search-replace.test.js.map +1 -1
- package/dist/tools/search.d.ts +4 -4
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +4 -0
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.d.ts +2 -2
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +2 -0
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/types.d.ts +2 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/command-safety.d.ts.map +1 -1
- package/dist/utils/command-safety.devnull.test.d.ts +2 -0
- package/dist/utils/command-safety.devnull.test.d.ts.map +1 -0
- package/dist/utils/command-safety.devnull.test.js +13 -0
- package/dist/utils/command-safety.devnull.test.js.map +1 -0
- package/dist/utils/command-safety.js +10 -364
- package/dist/utils/command-safety.js.map +1 -1
- package/dist/utils/extract-command-messages.test.d.ts +2 -0
- package/dist/utils/extract-command-messages.test.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.test.js +58 -51
- package/dist/utils/extract-command-messages.test.js.map +1 -0
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +13 -4
- package/dist/utils/settings-command.js.map +1 -1
- package/package.json +2 -2
- package/dist/app.model-command-feedback.test.d.ts +0 -2
- package/dist/app.model-command-feedback.test.d.ts.map +0 -1
- package/dist/app.model-command-feedback.test.js +0 -19
- package/dist/app.model-command-feedback.test.js.map +0 -1
- package/dist/components/MentorMode.test.d.ts +0 -2
- package/dist/components/MentorMode.test.d.ts.map +0 -1
- package/dist/components/MentorMode.test.js.map +0 -1
- package/dist/debug-schema.d.ts +0 -2
- package/dist/debug-schema.d.ts.map +0 -1
- package/dist/debug-schema.js +0 -22
- package/dist/debug-schema.js.map +0 -1
- package/dist/hooks/use-model-selection.test.d.ts +0 -2
- package/dist/hooks/use-model-selection.test.d.ts.map +0 -1
- package/dist/hooks/use-model-selection.test.js +0 -28
- package/dist/hooks/use-model-selection.test.js.map +0 -1
- package/dist/hooks/use-path-completion.test.d.ts +0 -2
- package/dist/hooks/use-path-completion.test.d.ts.map +0 -1
- package/dist/hooks/use-path-completion.test.js +0 -29
- package/dist/hooks/use-path-completion.test.js.map +0 -1
- package/dist/prompts/default.md.bak +0 -77
- package/dist/providers/openrouter.history.test.d.ts +0 -2
- package/dist/providers/openrouter.history.test.d.ts.map +0 -1
- package/dist/providers/openrouter.history.test.js +0 -533
- package/dist/providers/openrouter.history.test.js.map +0 -1
- package/dist/test-search-tool.d.ts +0 -2
- package/dist/test-search-tool.d.ts.map +0 -1
- package/dist/test-search-tool.js +0 -36
- package/dist/test-search-tool.js.map +0 -1
- package/dist/utils/extract-command-messages.repro.test.d.ts +0 -2
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +0 -1
- package/dist/utils/extract-command-messages.repro.test.js +0 -31
- package/dist/utils/extract-command-messages.repro.test.js.map +0 -1
- /package/{README.md → readme.md} +0 -0
|
@@ -1,533 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import { OpenRouterModel, clearOpenRouterConversations } from './openrouter.js';
|
|
3
|
-
import { settingsService } from '../services/settings-service.js';
|
|
4
|
-
const originalFetch = globalThis.fetch;
|
|
5
|
-
const originalGet = settingsService.get;
|
|
6
|
-
const createJsonResponse = (body) => new Response(JSON.stringify(body), {
|
|
7
|
-
status: 200,
|
|
8
|
-
headers: { 'Content-Type': 'application/json' },
|
|
9
|
-
});
|
|
10
|
-
test.beforeEach(() => {
|
|
11
|
-
clearOpenRouterConversations();
|
|
12
|
-
settingsService.get = ((key) => {
|
|
13
|
-
if (key === 'agent.openrouter.apiKey') {
|
|
14
|
-
return 'mock-api-key';
|
|
15
|
-
}
|
|
16
|
-
return originalGet.call(settingsService, key);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
test.afterEach.always(() => {
|
|
20
|
-
clearOpenRouterConversations();
|
|
21
|
-
globalThis.fetch = originalFetch;
|
|
22
|
-
settingsService.get = originalGet;
|
|
23
|
-
});
|
|
24
|
-
test.serial('previousResponseId maintains conversation history across turns', async (t) => {
|
|
25
|
-
const requests = [];
|
|
26
|
-
const responses = [
|
|
27
|
-
// First turn response
|
|
28
|
-
createJsonResponse({
|
|
29
|
-
id: 'resp-1',
|
|
30
|
-
choices: [
|
|
31
|
-
{
|
|
32
|
-
message: {
|
|
33
|
-
content: 'Hi there! How can I help you?',
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
usage: { prompt_tokens: 10, completion_tokens: 8, total_tokens: 18 },
|
|
38
|
-
}),
|
|
39
|
-
// Second turn response
|
|
40
|
-
createJsonResponse({
|
|
41
|
-
id: 'resp-2',
|
|
42
|
-
choices: [
|
|
43
|
-
{
|
|
44
|
-
message: {
|
|
45
|
-
content: "I'm doing well, thanks!",
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
usage: { prompt_tokens: 25, completion_tokens: 6, total_tokens: 31 },
|
|
50
|
-
}),
|
|
51
|
-
// Third turn response
|
|
52
|
-
createJsonResponse({
|
|
53
|
-
id: 'resp-3',
|
|
54
|
-
choices: [
|
|
55
|
-
{
|
|
56
|
-
message: {
|
|
57
|
-
content: 'Glad to hear that!',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
usage: { prompt_tokens: 35, completion_tokens: 4, total_tokens: 39 },
|
|
62
|
-
}),
|
|
63
|
-
];
|
|
64
|
-
globalThis.fetch = async (_url, options) => {
|
|
65
|
-
const body = JSON.parse(options.body);
|
|
66
|
-
requests.push(body);
|
|
67
|
-
return responses[requests.length - 1];
|
|
68
|
-
};
|
|
69
|
-
const model = new OpenRouterModel('mock-model');
|
|
70
|
-
// First turn - provide explicit history in array form to bootstrap conversation
|
|
71
|
-
const firstResponse = await model.getResponse({
|
|
72
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
73
|
-
input: [
|
|
74
|
-
{ type: 'input_text', text: 'Hello' },
|
|
75
|
-
],
|
|
76
|
-
previousResponseId: 'conv-1', // Use a conversation ID to enable history storage
|
|
77
|
-
});
|
|
78
|
-
t.truthy(firstResponse);
|
|
79
|
-
t.is(firstResponse.responseId, 'resp-1');
|
|
80
|
-
t.is(requests.length, 1);
|
|
81
|
-
// Verify first turn request structure
|
|
82
|
-
const firstRequest = requests[0];
|
|
83
|
-
t.truthy(firstRequest);
|
|
84
|
-
t.deepEqual(firstRequest.messages, [
|
|
85
|
-
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
86
|
-
{ role: 'user', content: 'Hello' },
|
|
87
|
-
]);
|
|
88
|
-
// Second turn - use previousResponseId to retrieve stored conversation history
|
|
89
|
-
const secondResponse = await model.getResponse({
|
|
90
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
91
|
-
input: 'How are you?',
|
|
92
|
-
previousResponseId: firstResponse.responseId,
|
|
93
|
-
});
|
|
94
|
-
t.truthy(secondResponse);
|
|
95
|
-
t.is(secondResponse.responseId, 'resp-2');
|
|
96
|
-
t.is(requests.length, 2);
|
|
97
|
-
// Verify second turn request includes history from first turn
|
|
98
|
-
const secondRequest = requests[1];
|
|
99
|
-
t.truthy(secondRequest);
|
|
100
|
-
t.deepEqual(secondRequest.messages, [
|
|
101
|
-
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
102
|
-
// History from first turn (stored because we used previousResponseId in turn 1)
|
|
103
|
-
{ role: 'user', content: 'Hello' },
|
|
104
|
-
{ role: 'assistant', content: 'Hi there! How can I help you?' },
|
|
105
|
-
// Current turn
|
|
106
|
-
{ role: 'user', content: 'How are you?' },
|
|
107
|
-
]);
|
|
108
|
-
// Third turn - continue the conversation
|
|
109
|
-
const thirdResponse = await model.getResponse({
|
|
110
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
111
|
-
input: 'Great!',
|
|
112
|
-
previousResponseId: secondResponse.responseId,
|
|
113
|
-
});
|
|
114
|
-
t.truthy(thirdResponse);
|
|
115
|
-
t.is(thirdResponse.responseId, 'resp-3');
|
|
116
|
-
t.is(requests.length, 3);
|
|
117
|
-
// Verify third turn includes full conversation history
|
|
118
|
-
const thirdRequest = requests[2];
|
|
119
|
-
t.truthy(thirdRequest);
|
|
120
|
-
t.deepEqual(thirdRequest.messages, [
|
|
121
|
-
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
122
|
-
{ role: 'user', content: 'Hello' },
|
|
123
|
-
{ role: 'assistant', content: 'Hi there! How can I help you?' },
|
|
124
|
-
{ role: 'user', content: 'How are you?' },
|
|
125
|
-
{ role: 'assistant', content: "I'm doing well, thanks!" },
|
|
126
|
-
{ role: 'user', content: 'Great!' },
|
|
127
|
-
]);
|
|
128
|
-
});
|
|
129
|
-
test.serial('previousResponseId works with tool calls in history', async (t) => {
|
|
130
|
-
const requests = [];
|
|
131
|
-
const responses = [
|
|
132
|
-
// First turn with tool call
|
|
133
|
-
createJsonResponse({
|
|
134
|
-
id: 'resp-1',
|
|
135
|
-
choices: [
|
|
136
|
-
{
|
|
137
|
-
message: {
|
|
138
|
-
content: null,
|
|
139
|
-
tool_calls: [
|
|
140
|
-
{
|
|
141
|
-
id: 'call-123',
|
|
142
|
-
type: 'function',
|
|
143
|
-
function: {
|
|
144
|
-
name: 'get_weather',
|
|
145
|
-
arguments: '{"location":"San Francisco"}',
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
},
|
|
151
|
-
],
|
|
152
|
-
usage: { prompt_tokens: 15, completion_tokens: 10, total_tokens: 25 },
|
|
153
|
-
}),
|
|
154
|
-
// Second turn response
|
|
155
|
-
createJsonResponse({
|
|
156
|
-
id: 'resp-2',
|
|
157
|
-
choices: [
|
|
158
|
-
{
|
|
159
|
-
message: {
|
|
160
|
-
content: 'Based on the weather data, it looks sunny in San Francisco!',
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
],
|
|
164
|
-
usage: { prompt_tokens: 35, completion_tokens: 12, total_tokens: 47 },
|
|
165
|
-
}),
|
|
166
|
-
];
|
|
167
|
-
globalThis.fetch = async (_url, options) => {
|
|
168
|
-
const body = JSON.parse(options.body);
|
|
169
|
-
requests.push(body);
|
|
170
|
-
return responses[requests.length - 1];
|
|
171
|
-
};
|
|
172
|
-
const model = new OpenRouterModel('mock-model');
|
|
173
|
-
// First turn - model requests a tool call
|
|
174
|
-
// Use a conversation ID to enable history storage
|
|
175
|
-
const firstResponse = await model.getResponse({
|
|
176
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
177
|
-
input: "What's the weather like?",
|
|
178
|
-
previousResponseId: 'conv-1',
|
|
179
|
-
tools: [
|
|
180
|
-
{
|
|
181
|
-
type: 'function',
|
|
182
|
-
name: 'get_weather',
|
|
183
|
-
description: 'Get weather for a location',
|
|
184
|
-
parameters: {
|
|
185
|
-
type: 'object',
|
|
186
|
-
properties: {
|
|
187
|
-
location: { type: 'string' },
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
});
|
|
193
|
-
t.truthy(firstResponse);
|
|
194
|
-
t.is(firstResponse.responseId, 'resp-1');
|
|
195
|
-
t.is(requests.length, 1);
|
|
196
|
-
// Second turn - provide tool result and continue conversation
|
|
197
|
-
const secondResponse = await model.getResponse({
|
|
198
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
199
|
-
input: [
|
|
200
|
-
{
|
|
201
|
-
type: 'function_call',
|
|
202
|
-
id: 'call-123',
|
|
203
|
-
callId: 'call-123',
|
|
204
|
-
name: 'get_weather',
|
|
205
|
-
arguments: '{"location":"San Francisco"}',
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
type: 'function_call_result',
|
|
209
|
-
callId: 'call-123',
|
|
210
|
-
output: '{"temperature": 72, "condition": "sunny"}',
|
|
211
|
-
},
|
|
212
|
-
],
|
|
213
|
-
previousResponseId: firstResponse.responseId,
|
|
214
|
-
});
|
|
215
|
-
t.truthy(secondResponse);
|
|
216
|
-
t.is(secondResponse.responseId, 'resp-2');
|
|
217
|
-
t.is(requests.length, 2);
|
|
218
|
-
// Verify second turn request includes tool call history
|
|
219
|
-
const secondRequest = requests[1];
|
|
220
|
-
t.truthy(secondRequest);
|
|
221
|
-
t.deepEqual(secondRequest.messages, [
|
|
222
|
-
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
223
|
-
// History from first turn
|
|
224
|
-
{ role: 'user', content: "What's the weather like?" },
|
|
225
|
-
{
|
|
226
|
-
role: 'assistant',
|
|
227
|
-
content: null,
|
|
228
|
-
tool_calls: [
|
|
229
|
-
{
|
|
230
|
-
id: 'call-123',
|
|
231
|
-
type: 'function',
|
|
232
|
-
function: {
|
|
233
|
-
name: 'get_weather',
|
|
234
|
-
arguments: '{"location":"San Francisco"}',
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
],
|
|
238
|
-
},
|
|
239
|
-
// Current turn with tool result
|
|
240
|
-
{
|
|
241
|
-
role: 'assistant',
|
|
242
|
-
content: null,
|
|
243
|
-
tool_calls: [
|
|
244
|
-
{
|
|
245
|
-
id: 'call-123',
|
|
246
|
-
type: 'function',
|
|
247
|
-
function: {
|
|
248
|
-
name: 'get_weather',
|
|
249
|
-
arguments: '{"location":"San Francisco"}',
|
|
250
|
-
},
|
|
251
|
-
},
|
|
252
|
-
],
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
role: 'tool',
|
|
256
|
-
tool_call_id: 'call-123',
|
|
257
|
-
content: '{"temperature": 72, "condition": "sunny"}',
|
|
258
|
-
},
|
|
259
|
-
]);
|
|
260
|
-
});
|
|
261
|
-
test.serial('previousResponseId works with reasoning details in history', async (t) => {
|
|
262
|
-
const requests = [];
|
|
263
|
-
const responses = [
|
|
264
|
-
// First turn with reasoning
|
|
265
|
-
createJsonResponse({
|
|
266
|
-
id: 'resp-1',
|
|
267
|
-
choices: [
|
|
268
|
-
{
|
|
269
|
-
message: {
|
|
270
|
-
content: 'The answer is 42.',
|
|
271
|
-
reasoning_details: [
|
|
272
|
-
{ type: 'reasoning.text', text: 'Let me think about this...' },
|
|
273
|
-
],
|
|
274
|
-
},
|
|
275
|
-
},
|
|
276
|
-
],
|
|
277
|
-
usage: { prompt_tokens: 10, completion_tokens: 15, total_tokens: 25 },
|
|
278
|
-
}),
|
|
279
|
-
// Second turn response
|
|
280
|
-
createJsonResponse({
|
|
281
|
-
id: 'resp-2',
|
|
282
|
-
choices: [
|
|
283
|
-
{
|
|
284
|
-
message: {
|
|
285
|
-
content: 'Yes, 42 is the answer to life, the universe, and everything!',
|
|
286
|
-
},
|
|
287
|
-
},
|
|
288
|
-
],
|
|
289
|
-
usage: { prompt_tokens: 30, completion_tokens: 14, total_tokens: 44 },
|
|
290
|
-
}),
|
|
291
|
-
];
|
|
292
|
-
globalThis.fetch = async (_url, options) => {
|
|
293
|
-
const body = JSON.parse(options.body);
|
|
294
|
-
requests.push(body);
|
|
295
|
-
return responses[requests.length - 1];
|
|
296
|
-
};
|
|
297
|
-
const model = new OpenRouterModel('mock-model');
|
|
298
|
-
// First turn - model provides reasoning
|
|
299
|
-
// Use a conversation ID to enable history storage
|
|
300
|
-
const firstResponse = await model.getResponse({
|
|
301
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
302
|
-
input: 'What is the meaning of life?',
|
|
303
|
-
previousResponseId: 'conv-1',
|
|
304
|
-
modelSettings: { reasoningEffort: 'high' },
|
|
305
|
-
});
|
|
306
|
-
t.truthy(firstResponse);
|
|
307
|
-
t.is(firstResponse.responseId, 'resp-1');
|
|
308
|
-
t.is(requests.length, 1);
|
|
309
|
-
// Second turn - continue conversation
|
|
310
|
-
const secondResponse = await model.getResponse({
|
|
311
|
-
systemInstructions: 'You are a helpful assistant.',
|
|
312
|
-
input: 'Are you sure about that?',
|
|
313
|
-
previousResponseId: firstResponse.responseId,
|
|
314
|
-
});
|
|
315
|
-
t.truthy(secondResponse);
|
|
316
|
-
t.is(secondResponse.responseId, 'resp-2');
|
|
317
|
-
t.is(requests.length, 2);
|
|
318
|
-
// Verify second turn request includes reasoning from first turn
|
|
319
|
-
const secondRequest = requests[1];
|
|
320
|
-
t.truthy(secondRequest);
|
|
321
|
-
t.deepEqual(secondRequest.messages, [
|
|
322
|
-
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
323
|
-
// History from first turn
|
|
324
|
-
{ role: 'user', content: 'What is the meaning of life?' },
|
|
325
|
-
{
|
|
326
|
-
role: 'assistant',
|
|
327
|
-
content: 'The answer is 42.',
|
|
328
|
-
reasoning_details: [
|
|
329
|
-
{ type: 'reasoning.text', text: 'Let me think about this...' },
|
|
330
|
-
],
|
|
331
|
-
},
|
|
332
|
-
// Current turn
|
|
333
|
-
{ role: 'user', content: 'Are you sure about that?' },
|
|
334
|
-
]);
|
|
335
|
-
});
|
|
336
|
-
test.serial('multiple turns maintain complete conversation history', async (t) => {
|
|
337
|
-
const requests = [];
|
|
338
|
-
const responses = [
|
|
339
|
-
createJsonResponse({
|
|
340
|
-
id: 'resp-1',
|
|
341
|
-
choices: [{ message: { content: 'Response 1' } }],
|
|
342
|
-
usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
|
|
343
|
-
}),
|
|
344
|
-
createJsonResponse({
|
|
345
|
-
id: 'resp-2',
|
|
346
|
-
choices: [{ message: { content: 'Response 2' } }],
|
|
347
|
-
usage: { prompt_tokens: 10, completion_tokens: 2, total_tokens: 12 },
|
|
348
|
-
}),
|
|
349
|
-
createJsonResponse({
|
|
350
|
-
id: 'resp-3',
|
|
351
|
-
choices: [{ message: { content: 'Response 3' } }],
|
|
352
|
-
usage: { prompt_tokens: 15, completion_tokens: 2, total_tokens: 17 },
|
|
353
|
-
}),
|
|
354
|
-
];
|
|
355
|
-
globalThis.fetch = async (_url, options) => {
|
|
356
|
-
const body = JSON.parse(options.body);
|
|
357
|
-
requests.push(body);
|
|
358
|
-
return responses[requests.length - 1];
|
|
359
|
-
};
|
|
360
|
-
const model = new OpenRouterModel('mock-model');
|
|
361
|
-
// Turn 1 - start with a conversation ID
|
|
362
|
-
const resp1 = await model.getResponse({
|
|
363
|
-
systemInstructions: 'System',
|
|
364
|
-
input: 'Turn 1',
|
|
365
|
-
previousResponseId: 'conv-1',
|
|
366
|
-
});
|
|
367
|
-
t.is(resp1.responseId, 'resp-1');
|
|
368
|
-
// Turn 2
|
|
369
|
-
const resp2 = await model.getResponse({
|
|
370
|
-
systemInstructions: 'System',
|
|
371
|
-
input: 'Turn 2',
|
|
372
|
-
previousResponseId: resp1.responseId,
|
|
373
|
-
});
|
|
374
|
-
t.is(resp2.responseId, 'resp-2');
|
|
375
|
-
// Turn 3
|
|
376
|
-
const resp3 = await model.getResponse({
|
|
377
|
-
systemInstructions: 'System',
|
|
378
|
-
input: 'Turn 3',
|
|
379
|
-
previousResponseId: resp2.responseId,
|
|
380
|
-
});
|
|
381
|
-
t.is(resp3.responseId, 'resp-3');
|
|
382
|
-
// Verify turn 3 contains all history
|
|
383
|
-
const thirdRequest = requests[2];
|
|
384
|
-
t.deepEqual(thirdRequest.messages, [
|
|
385
|
-
{ role: 'system', content: 'System' },
|
|
386
|
-
{ role: 'user', content: 'Turn 1' },
|
|
387
|
-
{ role: 'assistant', content: 'Response 1' },
|
|
388
|
-
{ role: 'user', content: 'Turn 2' },
|
|
389
|
-
{ role: 'assistant', content: 'Response 2' },
|
|
390
|
-
{ role: 'user', content: 'Turn 3' },
|
|
391
|
-
]);
|
|
392
|
-
});
|
|
393
|
-
test.serial('without previousResponseId, no history is included', async (t) => {
|
|
394
|
-
const requests = [];
|
|
395
|
-
const responses = [
|
|
396
|
-
createJsonResponse({
|
|
397
|
-
id: 'resp-1',
|
|
398
|
-
choices: [{ message: { content: 'First response' } }],
|
|
399
|
-
usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
|
|
400
|
-
}),
|
|
401
|
-
createJsonResponse({
|
|
402
|
-
id: 'resp-2',
|
|
403
|
-
choices: [{ message: { content: 'Second response' } }],
|
|
404
|
-
usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
|
|
405
|
-
}),
|
|
406
|
-
];
|
|
407
|
-
globalThis.fetch = async (_url, options) => {
|
|
408
|
-
const body = JSON.parse(options.body);
|
|
409
|
-
requests.push(body);
|
|
410
|
-
return responses[requests.length - 1];
|
|
411
|
-
};
|
|
412
|
-
const model = new OpenRouterModel('mock-model');
|
|
413
|
-
// First turn
|
|
414
|
-
await model.getResponse({
|
|
415
|
-
systemInstructions: 'System',
|
|
416
|
-
input: 'First message',
|
|
417
|
-
});
|
|
418
|
-
// Second turn WITHOUT previousResponseId
|
|
419
|
-
await model.getResponse({
|
|
420
|
-
systemInstructions: 'System',
|
|
421
|
-
input: 'Second message',
|
|
422
|
-
});
|
|
423
|
-
// Verify second request has no history
|
|
424
|
-
const secondRequest = requests[1];
|
|
425
|
-
t.deepEqual(secondRequest.messages, [
|
|
426
|
-
{ role: 'system', content: 'System' },
|
|
427
|
-
{ role: 'user', content: 'Second message' },
|
|
428
|
-
]);
|
|
429
|
-
});
|
|
430
|
-
test.serial('clearOpenRouterConversations removes specific conversation', async (t) => {
|
|
431
|
-
const requests = [];
|
|
432
|
-
const responses = [
|
|
433
|
-
createJsonResponse({
|
|
434
|
-
id: 'resp-1',
|
|
435
|
-
choices: [{ message: { content: 'Response 1' } }],
|
|
436
|
-
usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
|
|
437
|
-
}),
|
|
438
|
-
createJsonResponse({
|
|
439
|
-
id: 'resp-2',
|
|
440
|
-
choices: [{ message: { content: 'Response 2' } }],
|
|
441
|
-
usage: { prompt_tokens: 5, completion_tokens: 2, total_tokens: 7 },
|
|
442
|
-
}),
|
|
443
|
-
];
|
|
444
|
-
globalThis.fetch = async (_url, options) => {
|
|
445
|
-
const body = JSON.parse(options.body);
|
|
446
|
-
requests.push(body);
|
|
447
|
-
return responses[requests.length - 1];
|
|
448
|
-
};
|
|
449
|
-
const model = new OpenRouterModel('mock-model');
|
|
450
|
-
// First turn
|
|
451
|
-
const resp1 = await model.getResponse({
|
|
452
|
-
systemInstructions: 'System',
|
|
453
|
-
input: 'First message',
|
|
454
|
-
});
|
|
455
|
-
// Clear the conversation
|
|
456
|
-
clearOpenRouterConversations(resp1.responseId);
|
|
457
|
-
// Second turn with previousResponseId should have no history (cleared)
|
|
458
|
-
await model.getResponse({
|
|
459
|
-
systemInstructions: 'System',
|
|
460
|
-
input: 'Second message',
|
|
461
|
-
previousResponseId: resp1.responseId,
|
|
462
|
-
});
|
|
463
|
-
// Verify second request has no history
|
|
464
|
-
const secondRequest = requests[1];
|
|
465
|
-
t.deepEqual(secondRequest.messages, [
|
|
466
|
-
{ role: 'system', content: 'System' },
|
|
467
|
-
{ role: 'user', content: 'Second message' },
|
|
468
|
-
]);
|
|
469
|
-
});
|
|
470
|
-
test.serial('previousResponseId works with streaming responses', async (t) => {
|
|
471
|
-
const requests = [];
|
|
472
|
-
const encoder = new TextEncoder();
|
|
473
|
-
const createStream = (responseId, content) => new ReadableStream({
|
|
474
|
-
start(controller) {
|
|
475
|
-
controller.enqueue(encoder.encode(`data: {"id":"${responseId}","choices":[{"delta":{"content":"${content}"}}]}\n`));
|
|
476
|
-
controller.enqueue(encoder.encode('data: [DONE]\n'));
|
|
477
|
-
controller.close();
|
|
478
|
-
},
|
|
479
|
-
});
|
|
480
|
-
const responses = [
|
|
481
|
-
new Response(createStream('resp-1', 'Streaming response 1'), {
|
|
482
|
-
status: 200,
|
|
483
|
-
headers: { 'Content-Type': 'text/event-stream' },
|
|
484
|
-
}),
|
|
485
|
-
new Response(createStream('resp-2', 'Streaming response 2'), {
|
|
486
|
-
status: 200,
|
|
487
|
-
headers: { 'Content-Type': 'text/event-stream' },
|
|
488
|
-
}),
|
|
489
|
-
];
|
|
490
|
-
globalThis.fetch = async (_url, options) => {
|
|
491
|
-
const body = JSON.parse(options.body);
|
|
492
|
-
requests.push(body);
|
|
493
|
-
return responses[requests.length - 1];
|
|
494
|
-
};
|
|
495
|
-
const model = new OpenRouterModel('mock-model');
|
|
496
|
-
// First turn with streaming - use a conversation ID to enable history storage
|
|
497
|
-
const events1 = [];
|
|
498
|
-
for await (const event of model.getStreamedResponse({
|
|
499
|
-
systemInstructions: 'System',
|
|
500
|
-
input: 'First message',
|
|
501
|
-
previousResponseId: 'conv-1', // Start with a conversation ID
|
|
502
|
-
})) {
|
|
503
|
-
events1.push(event);
|
|
504
|
-
}
|
|
505
|
-
t.true(events1.length > 0);
|
|
506
|
-
const responseDone1 = events1.find(e => e.type === 'response_done');
|
|
507
|
-
t.truthy(responseDone1);
|
|
508
|
-
// When previousResponseId is provided, it's used as the responseId in streaming
|
|
509
|
-
t.is(responseDone1.response.id, 'conv-1');
|
|
510
|
-
// Second turn with streaming - use previousResponseId from first turn
|
|
511
|
-
const events2 = [];
|
|
512
|
-
for await (const event of model.getStreamedResponse({
|
|
513
|
-
systemInstructions: 'System',
|
|
514
|
-
input: 'Second message',
|
|
515
|
-
previousResponseId: responseDone1.response.id,
|
|
516
|
-
})) {
|
|
517
|
-
events2.push(event);
|
|
518
|
-
}
|
|
519
|
-
t.true(events2.length > 0);
|
|
520
|
-
const responseDone2 = events2.find(e => e.type === 'response_done');
|
|
521
|
-
t.truthy(responseDone2);
|
|
522
|
-
// Same conversation ID is reused
|
|
523
|
-
t.is(responseDone2.response.id, 'conv-1');
|
|
524
|
-
// Verify second request includes history from first streaming turn
|
|
525
|
-
const secondRequest = requests[1];
|
|
526
|
-
t.deepEqual(secondRequest.messages, [
|
|
527
|
-
{ role: 'system', content: 'System' },
|
|
528
|
-
{ role: 'user', content: 'First message' },
|
|
529
|
-
{ role: 'assistant', content: 'Streaming response 1' },
|
|
530
|
-
{ role: 'user', content: 'Second message' },
|
|
531
|
-
]);
|
|
532
|
-
});
|
|
533
|
-
//# sourceMappingURL=openrouter.history.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.history.test.js","sourceRoot":"","sources":["../../source/providers/openrouter.history.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-search-tool.d.ts","sourceRoot":"","sources":["../source/test-search-tool.ts"],"names":[],"mappings":""}
|
package/dist/test-search-tool.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { searchToolDefinition } from './tools/search.js';
|
|
2
|
-
async function runTest() {
|
|
3
|
-
console.log('Testing search tool...');
|
|
4
|
-
try {
|
|
5
|
-
// Test 1: Search for a known string in the current directory
|
|
6
|
-
console.log('\nTest 1: Search for "searchToolDefinition" in source/tools/search.ts');
|
|
7
|
-
const result1 = await searchToolDefinition.execute({
|
|
8
|
-
pattern: 'searchToolDefinition',
|
|
9
|
-
path: 'source/tools/search.ts',
|
|
10
|
-
});
|
|
11
|
-
console.log('Result 1:', result1);
|
|
12
|
-
// Test 2: Search with file pattern
|
|
13
|
-
console.log('\nTest 2: Search for "import" in source/tools/*.ts');
|
|
14
|
-
const result2 = await searchToolDefinition.execute({
|
|
15
|
-
pattern: 'import',
|
|
16
|
-
path: 'source/tools',
|
|
17
|
-
file_pattern: '*.ts',
|
|
18
|
-
max_results: 5
|
|
19
|
-
});
|
|
20
|
-
console.log('Result 2:', result2);
|
|
21
|
-
// Test 3: Search with exclude pattern
|
|
22
|
-
console.log('\nTest 3: Search for "import" excluding search.ts');
|
|
23
|
-
const result3 = await searchToolDefinition.execute({
|
|
24
|
-
pattern: 'import',
|
|
25
|
-
path: 'source/tools',
|
|
26
|
-
exclude_pattern: 'search.ts',
|
|
27
|
-
max_results: 5
|
|
28
|
-
});
|
|
29
|
-
console.log('Result 3:', result3);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
console.error('Test failed:', error);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
runTest();
|
|
36
|
-
//# sourceMappingURL=test-search-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-search-tool.js","sourceRoot":"","sources":["../source/test-search-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAEvD,KAAK,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACJ,6DAA6D;QAC7D,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC;YAClD,OAAO,EAAE,sBAAsB;YAC/B,IAAI,EAAE,wBAAwB;SAC9B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAElC,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC;YAClD,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE,MAAM;YACpB,WAAW,EAAE,CAAC;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE5B,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC;YAC/C,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,cAAc;YACpB,eAAe,EAAE,WAAW;YAC5B,WAAW,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;AACF,CAAC;AAED,OAAO,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract-command-messages.repro.test.d.ts","sourceRoot":"","sources":["../../source/utils/extract-command-messages.repro.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import { extractCommandMessages } from './extract-command-messages.js';
|
|
3
|
-
test('extractCommandMessages handles tool_call_id', t => {
|
|
4
|
-
const historyItem = {
|
|
5
|
-
role: 'tool',
|
|
6
|
-
tool_call_id: 'call_123',
|
|
7
|
-
content: JSON.stringify({ output: [{ success: false, error: 'failed' }] }),
|
|
8
|
-
name: 'shell' // OpenAI messages don't always have name on tool output, but let's assume it might be there or inferred
|
|
9
|
-
};
|
|
10
|
-
// normalizeToolItem requires name.
|
|
11
|
-
// In OpenAI history, the tool name is associated with the tool_call, not the tool output.
|
|
12
|
-
// But extractCommandMessages seems to expect name on the item.
|
|
13
|
-
// Let's see what normalizeToolItem expects.
|
|
14
|
-
// const toolName = rawItem?.name ?? item.name;
|
|
15
|
-
// If the history item doesn't have name, it returns null.
|
|
16
|
-
// So result.history must contain items that have name.
|
|
17
|
-
const item = {
|
|
18
|
-
type: 'function_call_result', // or tool_call_output_item
|
|
19
|
-
name: 'shell',
|
|
20
|
-
tool_call_id: 'call_123',
|
|
21
|
-
output: JSON.stringify({ output: [{ success: false, error: 'failed' }] })
|
|
22
|
-
};
|
|
23
|
-
const messages = extractCommandMessages([item]);
|
|
24
|
-
t.is(messages.length, 1);
|
|
25
|
-
// The ID should be derived from tool_call_id if possible
|
|
26
|
-
// But currently it checks id, callId.
|
|
27
|
-
// If tool_call_id is present but ignored, it uses timestamp-index.
|
|
28
|
-
const id = messages[0].id;
|
|
29
|
-
t.true(id.includes('call_123'), `ID ${id} should include call_123`);
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=extract-command-messages.repro.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract-command-messages.repro.test.js","sourceRoot":"","sources":["../../source/utils/extract-command-messages.repro.test.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,sBAAsB,EAAC,MAAM,+BAA+B,CAAC;AAErE,IAAI,CAAC,6CAA6C,EAAE,CAAC,CAAC,EAAE;IACpD,MAAM,WAAW,GAAG;QAChB,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,UAAU;QACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,EAAC,CAAC;QACtE,IAAI,EAAE,OAAO,CAAC,wGAAwG;KACzH,CAAC;IAEF,mCAAmC;IACnC,0FAA0F;IAC1F,+DAA+D;IAE/D,4CAA4C;IAC5C,+CAA+C;IAE/C,0DAA0D;IAE1D,uDAAuD;IAEvD,MAAM,IAAI,GAAG;QACT,IAAI,EAAE,sBAAsB,EAAE,2BAA2B;QACzD,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,EAAC,CAAC;KACxE,CAAC;IAEF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzB,yDAAyD;IACzD,sCAAsC;IAEtC,mEAAmE;IACnE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
/package/{README.md → readme.md}
RENAMED
|
File without changes
|