@qduc/term2 0.1.7 → 0.1.8
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/app.model-command-feedback.test.d.ts +2 -0
- package/dist/app.model-command-feedback.test.d.ts.map +1 -0
- package/dist/app.model-command-feedback.test.js +19 -0
- package/dist/app.model-command-feedback.test.js.map +1 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -1
- package/dist/components/BottomArea.d.ts +1 -8
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/InputBox.d.ts +6 -0
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +25 -3
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/InputBox.test.js +10 -1
- package/dist/components/InputBox.test.js.map +1 -1
- package/dist/components/MentorMode.test.d.ts +2 -0
- package/dist/components/MentorMode.test.d.ts.map +1 -0
- package/dist/components/MentorMode.test.js.map +1 -0
- package/dist/components/StatusBar.test.d.ts +2 -0
- package/dist/components/StatusBar.test.d.ts.map +1 -0
- package/dist/components/StatusBar.test.js +19 -0
- package/dist/components/StatusBar.test.js.map +1 -0
- package/dist/components/TextInput.d.ts.map +1 -1
- package/dist/components/TextInput.js +1 -2
- package/dist/components/TextInput.js.map +1 -1
- package/dist/components/TextInput.test.js.map +1 -1
- package/dist/contracts/conversation.d.ts +27 -0
- package/dist/contracts/conversation.d.ts.map +1 -0
- package/dist/contracts/conversation.js +2 -0
- package/dist/contracts/conversation.js.map +1 -0
- package/dist/debug-schema.d.ts +2 -0
- package/dist/debug-schema.d.ts.map +1 -0
- package/dist/debug-schema.js +22 -0
- package/dist/debug-schema.js.map +1 -0
- package/dist/hooks/use-conversation.d.ts +3 -14
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +15 -87
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-model-selection.test.d.ts +2 -0
- package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.test.js +28 -0
- package/dist/hooks/use-model-selection.test.js.map +1 -0
- package/dist/hooks/use-path-completion.test.d.ts +2 -0
- package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.test.js +29 -0
- package/dist/hooks/use-path-completion.test.js.map +1 -0
- package/dist/lib/mentor-client.d.ts +41 -0
- package/dist/lib/mentor-client.d.ts.map +1 -0
- package/dist/lib/mentor-client.js +146 -0
- package/dist/lib/mentor-client.js.map +1 -0
- package/dist/lib/mentor-client.test.d.ts +2 -0
- package/dist/lib/mentor-client.test.d.ts.map +1 -0
- package/dist/lib/mentor-client.test.js +440 -0
- package/dist/lib/mentor-client.test.js.map +1 -0
- package/dist/lib/retry-strategy.d.ts +43 -0
- package/dist/lib/retry-strategy.d.ts.map +1 -0
- package/dist/lib/retry-strategy.js +93 -0
- package/dist/lib/retry-strategy.js.map +1 -0
- package/dist/lib/retry-strategy.test.d.ts +2 -0
- package/dist/lib/retry-strategy.test.d.ts.map +1 -0
- package/dist/lib/retry-strategy.test.js +200 -0
- package/dist/lib/retry-strategy.test.js.map +1 -0
- package/dist/lib/tool-invoke.d.ts +13 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js +61 -3
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/lib/tool-invoke.test.js +139 -1
- package/dist/lib/tool-invoke.test.js.map +1 -1
- package/dist/prompts/default.md.bak +77 -0
- package/dist/prompts/simple-mentor.md +0 -8
- package/dist/prompts/simple.md +4 -0
- package/dist/providers/github-copilot/model-direct.d.ts +34 -0
- package/dist/providers/github-copilot/model-direct.d.ts.map +1 -0
- package/dist/providers/github-copilot/model-direct.js +443 -0
- package/dist/providers/github-copilot/model-direct.js.map +1 -0
- package/dist/providers/github-copilot/model.d.ts.map +1 -1
- package/dist/providers/github-copilot/model.js +108 -25
- package/dist/providers/github-copilot/model.js.map +1 -1
- package/dist/providers/github-copilot/provider.d.ts +5 -0
- package/dist/providers/github-copilot/provider.d.ts.map +1 -1
- package/dist/providers/github-copilot/provider.js +7 -2
- package/dist/providers/github-copilot/provider.js.map +1 -1
- package/dist/providers/openrouter/merge-messages.test.d.ts +2 -0
- package/dist/providers/openrouter/merge-messages.test.d.ts.map +1 -0
- package/dist/providers/openrouter/merge-messages.test.js +83 -0
- package/dist/providers/openrouter/merge-messages.test.js.map +1 -0
- package/dist/providers/openrouter.history.test.d.ts +2 -0
- package/dist/providers/openrouter.history.test.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.js +533 -0
- package/dist/providers/openrouter.history.test.js.map +1 -0
- package/dist/reproduce_issue.test.d.ts +2 -0
- package/dist/reproduce_issue.test.d.ts.map +1 -0
- package/dist/reproduce_issue.test.js +31 -0
- package/dist/reproduce_issue.test.js.map +1 -0
- package/dist/services/approval-presentation-policy.d.ts +17 -0
- package/dist/services/approval-presentation-policy.d.ts.map +1 -0
- package/dist/services/approval-presentation-policy.js +44 -0
- package/dist/services/approval-presentation-policy.js.map +1 -0
- package/dist/services/approval-presentation-policy.test.d.ts +2 -0
- package/dist/services/approval-presentation-policy.test.d.ts.map +1 -0
- package/dist/services/approval-presentation-policy.test.js +74 -0
- package/dist/services/approval-presentation-policy.test.js.map +1 -0
- package/dist/services/approval-state.d.ts +4 -4
- package/dist/services/approval-state.d.ts.map +1 -1
- package/dist/services/conversation-events.d.ts +12 -9
- package/dist/services/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation-result-builder.d.ts +41 -0
- package/dist/services/conversation-result-builder.d.ts.map +1 -0
- package/dist/services/conversation-result-builder.js +110 -0
- package/dist/services/conversation-result-builder.js.map +1 -0
- package/dist/services/conversation-result-builder.test.d.ts +2 -0
- package/dist/services/conversation-result-builder.test.d.ts.map +1 -0
- package/dist/services/conversation-result-builder.test.js +76 -0
- package/dist/services/conversation-result-builder.test.js.map +1 -0
- package/dist/services/conversation-service.d.ts +7 -5
- package/dist/services/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation-service.js +1 -1
- package/dist/services/conversation-service.js.map +1 -1
- package/dist/services/conversation-service.test.js +183 -149
- package/dist/services/conversation-session.d.ts +4 -24
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +172 -229
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/conversation-session.usage.test.d.ts +2 -0
- package/dist/services/conversation-session.usage.test.d.ts.map +1 -0
- package/dist/services/conversation-session.usage.test.js +59 -0
- package/dist/services/conversation-session.usage.test.js.map +1 -0
- package/dist/services/conversation-store.d.ts +6 -0
- package/dist/services/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation-store.js +13 -0
- package/dist/services/conversation-store.js.map +1 -1
- package/dist/services/stream-event-processor.d.ts +32 -0
- package/dist/services/stream-event-processor.d.ts.map +1 -0
- package/dist/services/stream-event-processor.js +344 -0
- package/dist/services/stream-event-processor.js.map +1 -0
- package/dist/services/stream-event-processor.test.d.ts +2 -0
- package/dist/services/stream-event-processor.test.d.ts.map +1 -0
- package/dist/services/stream-event-processor.test.js +117 -0
- package/dist/services/stream-event-processor.test.js.map +1 -0
- package/dist/test-search-tool.d.ts +2 -0
- package/dist/test-search-tool.d.ts.map +1 -0
- package/dist/test-search-tool.js +36 -0
- package/dist/test-search-tool.js.map +1 -0
- package/dist/tools/read-file.test.js +15 -0
- package/dist/tools/read-file.test.js.map +1 -1
- package/dist/tools/search-replace.d.ts.map +1 -1
- package/dist/tools/search-replace.js +157 -1
- package/dist/tools/search-replace.js.map +1 -1
- package/dist/tools/search-replace.test.js +177 -0
- package/dist/tools/search-replace.test.js.map +1 -1
- package/dist/tools/tool-capabilities.d.ts +6 -0
- package/dist/tools/tool-capabilities.d.ts.map +1 -0
- package/dist/tools/tool-capabilities.js +17 -0
- package/dist/tools/tool-capabilities.js.map +1 -0
- package/dist/tools/types.d.ts +4 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +4 -1
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/utils.test.d.ts +2 -0
- package/dist/tools/utils.test.d.ts.map +1 -0
- package/dist/tools/utils.test.js +26 -0
- package/dist/tools/utils.test.js.map +1 -0
- package/dist/types/messages.d.ts +29 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/utils/command-safety.d.ts.map +1 -1
- package/dist/utils/command-safety.js +364 -10
- package/dist/utils/command-safety.js.map +1 -1
- package/dist/utils/conversation-event-handler.d.ts +16 -10
- package/dist/utils/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation-event-handler.js +4 -0
- package/dist/utils/conversation-event-handler.js.map +1 -1
- package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.js +31 -0
- package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
- package/dist/utils/extract-command-messages.test.js +51 -58
- package/dist/utils/message-utils.d.ts +17 -0
- package/dist/utils/message-utils.d.ts.map +1 -0
- package/dist/utils/message-utils.js +52 -0
- package/dist/utils/message-utils.js.map +1 -0
- package/dist/utils/message-utils.test.d.ts +2 -0
- package/dist/utils/message-utils.test.d.ts.map +1 -0
- package/dist/utils/message-utils.test.js +48 -0
- package/dist/utils/message-utils.test.js.map +1 -0
- package/dist/utils/streaming-session-factory.d.ts +9 -9
- package/dist/utils/streaming-session-factory.d.ts.map +1 -1
- package/dist/utils/streaming-session-factory.js +7 -2
- package/dist/utils/streaming-session-factory.js.map +1 -1
- package/dist/utils/synchronized-output.d.ts +35 -0
- package/dist/utils/synchronized-output.d.ts.map +1 -0
- package/dist/utils/synchronized-output.js +66 -0
- package/dist/utils/synchronized-output.js.map +1 -0
- package/dist/utils/synchronized-output.test.d.ts +2 -0
- package/dist/utils/synchronized-output.test.d.ts.map +1 -0
- package/dist/utils/synchronized-output.test.js +70 -0
- package/dist/utils/synchronized-output.test.js.map +1 -0
- package/package.json +1 -1
- package/dist/agent.lite-mode.test.d.ts +0 -2
- package/dist/agent.lite-mode.test.d.ts.map +0 -1
- package/dist/agent.lite-mode.test.js +0 -39
- package/dist/agent.lite-mode.test.js.map +0 -1
- package/dist/debug_ask_mentor.d.ts +0 -2
- package/dist/debug_ask_mentor.d.ts.map +0 -1
- package/dist/debug_ask_mentor.js +0 -73
- package/dist/debug_ask_mentor.js.map +0 -1
- package/dist/modes/companion/command-index.d.ts +0 -26
- package/dist/modes/companion/command-index.d.ts.map +0 -1
- package/dist/modes/companion/command-index.js +0 -50
- package/dist/modes/companion/command-index.js.map +0 -1
- package/dist/modes/companion/command-index.test.d.ts +0 -2
- package/dist/modes/companion/command-index.test.d.ts.map +0 -1
- package/dist/modes/companion/command-index.test.js +0 -86
- package/dist/modes/companion/command-index.test.js.map +0 -1
- package/dist/modes/companion/companion-app.d.ts +0 -12
- package/dist/modes/companion/companion-app.d.ts.map +0 -1
- package/dist/modes/companion/companion-app.js +0 -297
- package/dist/modes/companion/companion-app.js.map +0 -1
- package/dist/modes/companion/companion-session.d.ts +0 -63
- package/dist/modes/companion/companion-session.d.ts.map +0 -1
- package/dist/modes/companion/companion-session.js +0 -146
- package/dist/modes/companion/companion-session.js.map +0 -1
- package/dist/modes/companion/companion-session.test.d.ts +0 -2
- package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
- package/dist/modes/companion/companion-session.test.js +0 -28
- package/dist/modes/companion/companion-session.test.js.map +0 -1
- package/dist/modes/companion/components/status-bar.d.ts +0 -13
- package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
- package/dist/modes/companion/components/status-bar.js +0 -26
- package/dist/modes/companion/components/status-bar.js.map +0 -1
- package/dist/modes/companion/context-buffer.d.ts +0 -65
- package/dist/modes/companion/context-buffer.d.ts.map +0 -1
- package/dist/modes/companion/context-buffer.js +0 -156
- package/dist/modes/companion/context-buffer.js.map +0 -1
- package/dist/modes/companion/context-buffer.test.d.ts +0 -2
- package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
- package/dist/modes/companion/context-buffer.test.js +0 -154
- package/dist/modes/companion/context-buffer.test.js.map +0 -1
- package/dist/modes/companion/event-detector.d.ts +0 -46
- package/dist/modes/companion/event-detector.d.ts.map +0 -1
- package/dist/modes/companion/event-detector.js +0 -169
- package/dist/modes/companion/event-detector.js.map +0 -1
- package/dist/modes/companion/event-detector.test.d.ts +0 -2
- package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
- package/dist/modes/companion/event-detector.test.js +0 -121
- package/dist/modes/companion/event-detector.test.js.map +0 -1
- package/dist/modes/companion/index.d.ts +0 -33
- package/dist/modes/companion/index.d.ts.map +0 -1
- package/dist/modes/companion/index.js +0 -21
- package/dist/modes/companion/index.js.map +0 -1
- package/dist/modes/companion/input-key-mapper.d.ts +0 -3
- package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
- package/dist/modes/companion/input-key-mapper.js +0 -31
- package/dist/modes/companion/input-key-mapper.js.map +0 -1
- package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
- package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
- package/dist/modes/companion/input-key-mapper.test.js +0 -26
- package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
- package/dist/modes/companion/input-parser.d.ts +0 -53
- package/dist/modes/companion/input-parser.d.ts.map +0 -1
- package/dist/modes/companion/input-parser.js +0 -114
- package/dist/modes/companion/input-parser.js.map +0 -1
- package/dist/modes/companion/input-parser.test.d.ts +0 -2
- package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
- package/dist/modes/companion/input-parser.test.js +0 -123
- package/dist/modes/companion/input-parser.test.js.map +0 -1
- package/dist/modes/companion/mode-manager.d.ts +0 -41
- package/dist/modes/companion/mode-manager.d.ts.map +0 -1
- package/dist/modes/companion/mode-manager.js +0 -56
- package/dist/modes/companion/mode-manager.js.map +0 -1
- package/dist/modes/companion/mode-manager.test.d.ts +0 -2
- package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
- package/dist/modes/companion/mode-manager.test.js +0 -65
- package/dist/modes/companion/mode-manager.test.js.map +0 -1
- package/dist/modes/companion/output-classifier.d.ts +0 -15
- package/dist/modes/companion/output-classifier.d.ts.map +0 -1
- package/dist/modes/companion/output-classifier.js +0 -77
- package/dist/modes/companion/output-classifier.js.map +0 -1
- package/dist/modes/companion/output-classifier.test.d.ts +0 -2
- package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
- package/dist/modes/companion/output-classifier.test.js +0 -133
- package/dist/modes/companion/output-classifier.test.js.map +0 -1
- package/dist/modes/companion/pty-wrapper.d.ts +0 -46
- package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
- package/dist/modes/companion/pty-wrapper.js +0 -143
- package/dist/modes/companion/pty-wrapper.js.map +0 -1
- package/dist/modes/companion/safety-classifier.d.ts +0 -31
- package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
- package/dist/modes/companion/safety-classifier.js +0 -140
- package/dist/modes/companion/safety-classifier.js.map +0 -1
- package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
- package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
- package/dist/modes/companion/safety-classifier.test.js +0 -151
- package/dist/modes/companion/safety-classifier.test.js.map +0 -1
- package/dist/modes/companion/summarizer.d.ts +0 -24
- package/dist/modes/companion/summarizer.d.ts.map +0 -1
- package/dist/modes/companion/summarizer.js +0 -132
- package/dist/modes/companion/summarizer.js.map +0 -1
- package/dist/modes/companion/terminal-history.d.ts +0 -27
- package/dist/modes/companion/terminal-history.d.ts.map +0 -1
- package/dist/modes/companion/terminal-history.js +0 -142
- package/dist/modes/companion/terminal-history.js.map +0 -1
- package/dist/providers/github-copilot/model.test.d.ts +0 -2
- package/dist/providers/github-copilot/model.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/model.test.js +0 -63
- package/dist/providers/github-copilot/model.test.js.map +0 -1
- package/dist/services/check_mock.d.ts +0 -2
- package/dist/services/check_mock.d.ts.map +0 -1
- package/dist/services/check_mock.js +0 -22
- package/dist/services/check_mock.js.map +0 -1
- package/dist/services/conversation-service.test.d.ts +0 -2
- package/dist/services/conversation-service.test.d.ts.map +0 -1
- package/dist/services/conversation-service.test.js.map +0 -1
- package/dist/utils/command-safety.devnull.test.d.ts +0 -2
- package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
- package/dist/utils/command-safety.devnull.test.js +0 -13
- package/dist/utils/command-safety.devnull.test.js.map +0 -1
- package/dist/utils/extract-command-messages.test.d.ts +0 -2
- package/dist/utils/extract-command-messages.test.d.ts.map +0 -1
- package/dist/utils/extract-command-messages.test.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { patchStdoutForSynchronizedOutput, isSynchronizedOutputSupported } from './synchronized-output.js';
|
|
3
|
+
import { Writable } from 'stream';
|
|
4
|
+
test('isSynchronizedOutputSupported returns true', (t) => {
|
|
5
|
+
t.true(isSynchronizedOutputSupported());
|
|
6
|
+
});
|
|
7
|
+
test('patchStdoutForSynchronizedOutput wraps string writes with sync markers', (t) => {
|
|
8
|
+
const chunks = [];
|
|
9
|
+
const fakeStream = new Writable({
|
|
10
|
+
write(chunk, _encoding, callback) {
|
|
11
|
+
chunks.push(chunk.toString());
|
|
12
|
+
callback();
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
// Add columns property to mimic a WriteStream
|
|
16
|
+
fakeStream.columns = 80;
|
|
17
|
+
patchStdoutForSynchronizedOutput(fakeStream);
|
|
18
|
+
fakeStream.write('hello');
|
|
19
|
+
t.is(chunks.length, 1);
|
|
20
|
+
t.is(chunks[0], '\x1b[?2026hhello\x1b[?2026l');
|
|
21
|
+
});
|
|
22
|
+
test('patchStdoutForSynchronizedOutput passes through non-string writes', (t) => {
|
|
23
|
+
const chunks = [];
|
|
24
|
+
const fakeStream = new Writable({
|
|
25
|
+
write(chunk, _encoding, callback) {
|
|
26
|
+
chunks.push(Buffer.from(chunk));
|
|
27
|
+
callback();
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
fakeStream.columns = 80;
|
|
31
|
+
patchStdoutForSynchronizedOutput(fakeStream);
|
|
32
|
+
const buf = Buffer.from([0x01, 0x02, 0x03]);
|
|
33
|
+
fakeStream.write(buf);
|
|
34
|
+
t.is(chunks.length, 1);
|
|
35
|
+
// Buffer writes should NOT be wrapped with sync markers
|
|
36
|
+
t.deepEqual(chunks[0], buf);
|
|
37
|
+
});
|
|
38
|
+
test('patchStdoutForSynchronizedOutput handles nested writes without double-wrapping', (t) => {
|
|
39
|
+
const chunks = [];
|
|
40
|
+
let writeImpl;
|
|
41
|
+
const fakeStream = {
|
|
42
|
+
columns: 80,
|
|
43
|
+
write(chunk, encoding, callback) {
|
|
44
|
+
return writeImpl(chunk, encoding, callback);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
writeImpl = (chunk, _encoding, _callback) => {
|
|
48
|
+
chunks.push(typeof chunk === 'string' ? chunk : chunk.toString());
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
patchStdoutForSynchronizedOutput(fakeStream);
|
|
52
|
+
// Save the patched write
|
|
53
|
+
const patchedWrite = fakeStream.write;
|
|
54
|
+
// Simulate a nested write (e.g., Ink calling clear then write in sequence)
|
|
55
|
+
writeImpl = (chunk, _encoding, _callback) => {
|
|
56
|
+
chunks.push(typeof chunk === 'string' ? chunk : chunk.toString());
|
|
57
|
+
// Simulate a nested write during the original write
|
|
58
|
+
if (chunks.length === 1) {
|
|
59
|
+
patchedWrite.call(fakeStream, 'nested');
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
};
|
|
63
|
+
fakeStream.write('outer');
|
|
64
|
+
// The outer write should be wrapped, and the nested write should also be
|
|
65
|
+
// handled (not double-wrapped since syncing flag is set)
|
|
66
|
+
t.true(chunks.some((c) => c.includes('\x1b[?2026h')));
|
|
67
|
+
// Nested call should NOT contain sync markers (double-wrapping prevented)
|
|
68
|
+
t.is(chunks[1], 'nested');
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=synchronized-output.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronized-output.test.js","sourceRoot":"","sources":["../../source/utils/synchronized-output.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.lite-mode.test.d.ts","sourceRoot":"","sources":["../source/agent.lite-mode.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import { getAgentDefinition } from './agent.js';
|
|
3
|
-
const mockSettings = (lite) => ({
|
|
4
|
-
get: (key) => {
|
|
5
|
-
if (key === 'app.liteMode')
|
|
6
|
-
return lite;
|
|
7
|
-
if (key === 'agent.model')
|
|
8
|
-
return 'gpt-4';
|
|
9
|
-
return undefined;
|
|
10
|
-
},
|
|
11
|
-
set: () => { },
|
|
12
|
-
on: () => { },
|
|
13
|
-
off: () => { },
|
|
14
|
-
getAll: () => ({}),
|
|
15
|
-
});
|
|
16
|
-
const mockLogging = {};
|
|
17
|
-
test('getAgentDefinition in lite mode should include web_search tool', t => {
|
|
18
|
-
const deps = {
|
|
19
|
-
settingsService: mockSettings(true),
|
|
20
|
-
loggingService: mockLogging,
|
|
21
|
-
};
|
|
22
|
-
const agent = getAgentDefinition(deps, 'gpt-4');
|
|
23
|
-
const toolNames = agent.tools.map(tool => tool.name);
|
|
24
|
-
t.true(toolNames.includes('shell'));
|
|
25
|
-
t.true(toolNames.includes('read_file'));
|
|
26
|
-
t.true(toolNames.includes('find_files'));
|
|
27
|
-
t.true(toolNames.includes('grep'));
|
|
28
|
-
t.true(toolNames.includes('web_search'), 'web_search should be included in lite mode');
|
|
29
|
-
});
|
|
30
|
-
test('getAgentDefinition in non-lite mode should include web_search tool', t => {
|
|
31
|
-
const deps = {
|
|
32
|
-
settingsService: mockSettings(false),
|
|
33
|
-
loggingService: mockLogging,
|
|
34
|
-
};
|
|
35
|
-
const agent = getAgentDefinition(deps, 'gpt-4');
|
|
36
|
-
const toolNames = agent.tools.map(tool => tool.name);
|
|
37
|
-
t.true(toolNames.includes('web_search'), 'web_search should be included in full mode');
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=agent.lite-mode.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.lite-mode.test.js","sourceRoot":"","sources":["../source/agent.lite-mode.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,YAAY,GAAG,CAAC,IAAa,EAAoB,EAAE,CAAC,CAAC;IACvD,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE;QACjB,IAAI,GAAG,KAAK,cAAc;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO,OAAO,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;IACb,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC;IACZ,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;IACb,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACW,CAAA,CAAC;AAElC,MAAM,WAAW,GAAG,EAAgC,CAAC;AAErD,IAAI,CAAC,gEAAgE,EAAE,CAAC,CAAC,EAAE;IACvE,MAAM,IAAI,GAAG;QACT,eAAe,EAAE,YAAY,CAAC,IAAI,CAAC;QACnC,cAAc,EAAE,WAAW;KAC9B,CAAC;IACF,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,4CAA4C,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,CAAC,CAAC,EAAE;IAC3E,MAAM,IAAI,GAAG;QACT,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC;QACpC,cAAc,EAAE,WAAW;KAC9B,CAAC;IACF,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,4CAA4C,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug_ask_mentor.d.ts","sourceRoot":"","sources":["../source/debug_ask_mentor.ts"],"names":[],"mappings":""}
|
package/dist/debug_ask_mentor.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { OpenAIAgentClient } from './lib/openai-agent-client.js';
|
|
2
|
-
import { registerProvider } from './providers/registry.js';
|
|
3
|
-
// Mock Logger
|
|
4
|
-
const mockLogger = {
|
|
5
|
-
debug: () => { },
|
|
6
|
-
info: () => { },
|
|
7
|
-
warn: () => { },
|
|
8
|
-
error: console.error,
|
|
9
|
-
setCorrelationId: () => { },
|
|
10
|
-
clearCorrelationId: () => { },
|
|
11
|
-
log: () => { },
|
|
12
|
-
};
|
|
13
|
-
// Mock Settings
|
|
14
|
-
const mockSettings = {
|
|
15
|
-
get: (key) => {
|
|
16
|
-
if (key === 'agent.provider')
|
|
17
|
-
return 'mock-provider';
|
|
18
|
-
if (key === 'agent.model')
|
|
19
|
-
return 'mock-model';
|
|
20
|
-
if (key === 'agent.mentorModel')
|
|
21
|
-
return 'mock-mentor';
|
|
22
|
-
return undefined;
|
|
23
|
-
},
|
|
24
|
-
set: () => { },
|
|
25
|
-
onChange: () => { },
|
|
26
|
-
};
|
|
27
|
-
// Mock Runner
|
|
28
|
-
class MockRunner {
|
|
29
|
-
async run(agent, input, options) {
|
|
30
|
-
console.log('MockRunner.run called');
|
|
31
|
-
// Return a result similar to what might be causing issues
|
|
32
|
-
// Missing finalOutput, but maybe has messages or text
|
|
33
|
-
return {
|
|
34
|
-
status: 'completed',
|
|
35
|
-
messages: [{ role: 'assistant', content: 'This is the answer' }],
|
|
36
|
-
// finalOutput is missing!
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Register Mock Provider
|
|
41
|
-
registerProvider({
|
|
42
|
-
id: 'mock-provider',
|
|
43
|
-
label: 'Mock Provider',
|
|
44
|
-
createRunner: () => new MockRunner(),
|
|
45
|
-
fetchModels: async () => [{ id: 'mock-model' }, { id: 'mock-mentor' }],
|
|
46
|
-
});
|
|
47
|
-
async function main() {
|
|
48
|
-
console.log('Starting debug script...');
|
|
49
|
-
try {
|
|
50
|
-
const client = new OpenAIAgentClient({
|
|
51
|
-
deps: {
|
|
52
|
-
logger: mockLogger,
|
|
53
|
-
settings: mockSettings,
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
console.log('Client initialized. Calling chat...');
|
|
57
|
-
const response = await client.chat('Hello');
|
|
58
|
-
console.log('Chat response:', response);
|
|
59
|
-
if (response === 'This is the answer') {
|
|
60
|
-
console.log('SUCCESS: Got expected response from messages fallback.');
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
console.error('FAILURE: Response did not match expected.');
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch (e) {
|
|
68
|
-
console.log('Caught UNEXPECTED error:', e.message);
|
|
69
|
-
process.exit(1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
main().catch(console.error);
|
|
73
|
-
//# sourceMappingURL=debug_ask_mentor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug_ask_mentor.js","sourceRoot":"","sources":["../source/debug_ask_mentor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,cAAc;AACd,MAAM,UAAU,GAAoB;IAChC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC5B,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;CACT,CAAC;AAET,gBAAgB;AAChB,MAAM,YAAY,GAAqB;IACnC,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE;QACjB,IAAI,GAAG,KAAK,gBAAgB;YAAE,OAAO,eAAe,CAAC;QACrD,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO,YAAY,CAAC;QAC/C,IAAI,GAAG,KAAK,mBAAmB;YAAE,OAAO,aAAa,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;IACb,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACd,CAAC;AAET,cAAc;AACd,MAAM,UAAU;IACZ,KAAK,CAAC,GAAG,CAAC,KAAU,EAAE,KAAU,EAAE,OAAY;QAC1C,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,0DAA0D;QAC1D,sDAAsD;QACtD,OAAO;YACH,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;YAChE,0BAA0B;SAC7B,CAAC;IACN,CAAC;CACJ;AAED,yBAAyB;AACzB,gBAAgB,CAAC;IACb,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,eAAe;IACtB,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,EAAS;IAC3C,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;CACzE,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;YACjC,IAAI,EAAE;gBACF,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,YAAY;aACzB;SACJ,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command index utilities for companion mode.
|
|
3
|
-
* Generates lightweight command summaries for AI context.
|
|
4
|
-
*/
|
|
5
|
-
import type { CommandIndexEntry } from './context-buffer.js';
|
|
6
|
-
/**
|
|
7
|
-
* Format command index entries for inclusion in AI system prompt.
|
|
8
|
-
* Produces a compact, readable representation that uses minimal tokens.
|
|
9
|
-
*
|
|
10
|
-
* Example output:
|
|
11
|
-
* [0] npm test ✗ exit:1 5s ago (542 lines)
|
|
12
|
-
* [1] git diff ✓ exit:0 30s ago (23 lines)
|
|
13
|
-
* [2] npm install ✓ exit:0 2m ago (891 lines)
|
|
14
|
-
*/
|
|
15
|
-
export declare function formatCommandIndex(entries: CommandIndexEntry[]): string;
|
|
16
|
-
/**
|
|
17
|
-
* Generate system prompt section for command index.
|
|
18
|
-
* This is always included in companion mode AI context.
|
|
19
|
-
*/
|
|
20
|
-
export declare function generateCommandIndexPrompt(entries: CommandIndexEntry[]): string;
|
|
21
|
-
/**
|
|
22
|
-
* Estimate token count for command index.
|
|
23
|
-
* Rough approximation: ~4 characters per token.
|
|
24
|
-
*/
|
|
25
|
-
export declare function estimateTokens(entries: CommandIndexEntry[]): number;
|
|
26
|
-
//# sourceMappingURL=command-index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-index.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/command-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAYvE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,iBAAiB,EAAE,GAC7B,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAGnE"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command index utilities for companion mode.
|
|
3
|
-
* Generates lightweight command summaries for AI context.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Format command index entries for inclusion in AI system prompt.
|
|
7
|
-
* Produces a compact, readable representation that uses minimal tokens.
|
|
8
|
-
*
|
|
9
|
-
* Example output:
|
|
10
|
-
* [0] npm test ✗ exit:1 5s ago (542 lines)
|
|
11
|
-
* [1] git diff ✓ exit:0 30s ago (23 lines)
|
|
12
|
-
* [2] npm install ✓ exit:0 2m ago (891 lines)
|
|
13
|
-
*/
|
|
14
|
-
export function formatCommandIndex(entries) {
|
|
15
|
-
if (entries.length === 0) {
|
|
16
|
-
return 'No recent commands.';
|
|
17
|
-
}
|
|
18
|
-
return entries
|
|
19
|
-
.map(entry => {
|
|
20
|
-
const status = entry.exitCode === 0 ? '✓' : '✗';
|
|
21
|
-
const cmd = entry.command.padEnd(25).slice(0, 25);
|
|
22
|
-
return `[${entry.index}] ${cmd} ${status} exit:${entry.exitCode} ${entry.relativeTime} (${entry.outputLines} lines)`;
|
|
23
|
-
})
|
|
24
|
-
.join('\n');
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Generate system prompt section for command index.
|
|
28
|
-
* This is always included in companion mode AI context.
|
|
29
|
-
*/
|
|
30
|
-
export function generateCommandIndexPrompt(entries) {
|
|
31
|
-
const indexSection = formatCommandIndex(entries);
|
|
32
|
-
return `
|
|
33
|
-
## Terminal Context
|
|
34
|
-
|
|
35
|
-
You are observing the user's terminal session. Here are the recent commands:
|
|
36
|
-
|
|
37
|
-
${indexSection}
|
|
38
|
-
|
|
39
|
-
Use the terminal_history tool to fetch detailed output when needed.
|
|
40
|
-
`;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Estimate token count for command index.
|
|
44
|
-
* Rough approximation: ~4 characters per token.
|
|
45
|
-
*/
|
|
46
|
-
export function estimateTokens(entries) {
|
|
47
|
-
const formatted = formatCommandIndex(entries);
|
|
48
|
-
return Math.ceil(formatted.length / 4);
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=command-index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-index.js","sourceRoot":"","sources":["../../../source/modes/companion/command-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,OAAO,OAAO;SACT,GAAG,CAAC,KAAK,CAAC,EAAE;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,MAAM,SAAS,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,YAAY,MAAM,KAAK,CAAC,WAAW,SAAS,CAAC;IAC3H,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACtC,OAA4B;IAE5B,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO;;;;;EAKT,YAAY;;;CAGb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAA4B;IACvD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-index.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/command-index.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import { formatCommandIndex, generateCommandIndexPrompt, estimateTokens, } from './command-index.js';
|
|
3
|
-
// Helper to create a test index entry
|
|
4
|
-
function createIndexEntry(index, command, exitCode = 0, relativeTime = '5s ago', outputLines = 10, hasErrors = false) {
|
|
5
|
-
return {
|
|
6
|
-
index,
|
|
7
|
-
command,
|
|
8
|
-
exitCode,
|
|
9
|
-
relativeTime,
|
|
10
|
-
outputLines,
|
|
11
|
-
hasErrors,
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
test('formatCommandIndex returns message for empty array', t => {
|
|
15
|
-
const result = formatCommandIndex([]);
|
|
16
|
-
t.is(result, 'No recent commands.');
|
|
17
|
-
});
|
|
18
|
-
test('formatCommandIndex formats single entry', t => {
|
|
19
|
-
const entries = [createIndexEntry(0, 'npm test', 0, '5s ago', 100)];
|
|
20
|
-
const result = formatCommandIndex(entries);
|
|
21
|
-
t.true(result.includes('[0]'));
|
|
22
|
-
t.true(result.includes('npm test'));
|
|
23
|
-
t.true(result.includes('✓'));
|
|
24
|
-
t.true(result.includes('exit:0'));
|
|
25
|
-
t.true(result.includes('5s ago'));
|
|
26
|
-
t.true(result.includes('100 lines'));
|
|
27
|
-
});
|
|
28
|
-
test('formatCommandIndex shows ✗ for non-zero exit code', t => {
|
|
29
|
-
const entries = [createIndexEntry(0, 'npm test', 1, '5s ago', 100)];
|
|
30
|
-
const result = formatCommandIndex(entries);
|
|
31
|
-
t.true(result.includes('✗'));
|
|
32
|
-
});
|
|
33
|
-
test('formatCommandIndex formats multiple entries', t => {
|
|
34
|
-
const entries = [
|
|
35
|
-
createIndexEntry(0, 'npm test', 1, '5s ago', 100),
|
|
36
|
-
createIndexEntry(1, 'git status', 0, '30s ago', 10),
|
|
37
|
-
createIndexEntry(2, 'npm install', 0, '2m ago', 500),
|
|
38
|
-
];
|
|
39
|
-
const result = formatCommandIndex(entries);
|
|
40
|
-
const lines = result.split('\n');
|
|
41
|
-
t.is(lines.length, 3);
|
|
42
|
-
t.true(lines[0].includes('[0]'));
|
|
43
|
-
t.true(lines[1].includes('[1]'));
|
|
44
|
-
t.true(lines[2].includes('[2]'));
|
|
45
|
-
});
|
|
46
|
-
test('formatCommandIndex truncates long commands', t => {
|
|
47
|
-
const longCommand = 'npm run very-long-script-name-that-exceeds-width';
|
|
48
|
-
const entries = [createIndexEntry(0, longCommand)];
|
|
49
|
-
const result = formatCommandIndex(entries);
|
|
50
|
-
// Should be truncated to 25 chars
|
|
51
|
-
t.true(result.length < longCommand.length + 100);
|
|
52
|
-
});
|
|
53
|
-
test('generateCommandIndexPrompt includes context header', t => {
|
|
54
|
-
const entries = [createIndexEntry(0, 'npm test')];
|
|
55
|
-
const result = generateCommandIndexPrompt(entries);
|
|
56
|
-
t.true(result.includes('Terminal Context'));
|
|
57
|
-
t.true(result.includes('recent commands'));
|
|
58
|
-
});
|
|
59
|
-
test('generateCommandIndexPrompt includes formatted index', t => {
|
|
60
|
-
const entries = [createIndexEntry(0, 'npm test', 0, '5s ago', 100)];
|
|
61
|
-
const result = generateCommandIndexPrompt(entries);
|
|
62
|
-
t.true(result.includes('npm test'));
|
|
63
|
-
t.true(result.includes('[0]'));
|
|
64
|
-
});
|
|
65
|
-
test('generateCommandIndexPrompt includes tool usage hint', t => {
|
|
66
|
-
const entries = [createIndexEntry(0, 'npm test')];
|
|
67
|
-
const result = generateCommandIndexPrompt(entries);
|
|
68
|
-
t.true(result.includes('terminal_history'));
|
|
69
|
-
});
|
|
70
|
-
test('estimateTokens returns reasonable estimate', t => {
|
|
71
|
-
const entries = [
|
|
72
|
-
createIndexEntry(0, 'npm test', 0, '5s ago', 100),
|
|
73
|
-
createIndexEntry(1, 'git status', 0, '30s ago', 10),
|
|
74
|
-
];
|
|
75
|
-
const tokens = estimateTokens(entries);
|
|
76
|
-
// ~4 chars per token, each entry is ~60 chars
|
|
77
|
-
t.true(tokens > 20);
|
|
78
|
-
t.true(tokens < 100);
|
|
79
|
-
});
|
|
80
|
-
test('estimateTokens returns 0 for empty index', t => {
|
|
81
|
-
const entries = [];
|
|
82
|
-
const tokens = estimateTokens(entries);
|
|
83
|
-
// "No recent commands." is ~20 chars, ~5 tokens
|
|
84
|
-
t.true(tokens < 10);
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=command-index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-index.test.js","sourceRoot":"","sources":["../../../source/modes/companion/command-index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { ISettingsService, ILoggingService } from '../../services/service-interfaces.js';
|
|
3
|
-
export interface CompanionAppProps {
|
|
4
|
-
settingsService: ISettingsService;
|
|
5
|
-
loggingService: ILoggingService;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Main companion mode application.
|
|
9
|
-
* Wraps user's shell in a PTY and provides AI assistance.
|
|
10
|
-
*/
|
|
11
|
-
export declare const CompanionApp: React.FC<CompanionAppProps>;
|
|
12
|
-
//# sourceMappingURL=companion-app.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"companion-app.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/companion-app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAW9D,OAAO,KAAK,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAqC5F,MAAM,WAAW,iBAAiB;IAC9B,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;CACnC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyTpD,CAAC"}
|