@qduc/term2 0.3.0 → 0.3.1
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/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +32 -11
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-model-selection.test.js +107 -10
- package/dist/hooks/use-model-selection.test.js.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
- package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.js +70 -0
- package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js +195 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-openai-compatible.provider.js +2 -1
- package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.js +22 -0
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js +70 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
- package/dist/providers/openrouter.provider.js +4 -3
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/scripts/eval-auto-approval/dataset.d.ts +1 -1
- package/dist/services/stream-event-parsing.js +1 -1
- package/dist/services/stream-event-parsing.js.map +1 -1
- package/dist/services/stream-event-parsing.test.js +13 -0
- package/dist/services/stream-event-parsing.test.js.map +1 -1
- package/package.json +2 -1
- package/readme.md +29 -24
- 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/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
- package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
- package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
- package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
- package/dist/components/TextInput.d.ts +0 -42
- package/dist/components/TextInput.d.ts.map +0 -1
- package/dist/components/TextInput.js +0 -398
- package/dist/components/TextInput.js.map +0 -1
- package/dist/components/TextInput.test.d.ts +0 -2
- package/dist/components/TextInput.test.d.ts.map +0 -1
- package/dist/components/TextInput.test.js +0 -75
- package/dist/components/TextInput.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/lib/shell.d.ts +0 -7
- package/dist/lib/shell.d.ts.map +0 -1
- package/dist/lib/shell.js +0 -56
- package/dist/lib/shell.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/prompts/simple-mentor.md +0 -215
- package/dist/providers/github-copilot/converters.d.ts +0 -45
- package/dist/providers/github-copilot/converters.d.ts.map +0 -1
- package/dist/providers/github-copilot/converters.js +0 -118
- package/dist/providers/github-copilot/converters.js.map +0 -1
- package/dist/providers/github-copilot/converters.test.d.ts +0 -2
- package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/converters.test.js +0 -162
- package/dist/providers/github-copilot/converters.test.js.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
- package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
- package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
- package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
- package/dist/providers/github-copilot/index.d.ts +0 -4
- package/dist/providers/github-copilot/index.d.ts.map +0 -1
- package/dist/providers/github-copilot/index.js +0 -4
- package/dist/providers/github-copilot/index.js.map +0 -1
- package/dist/providers/github-copilot/model.d.ts +0 -24
- package/dist/providers/github-copilot/model.d.ts.map +0 -1
- package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
- package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/model.delta.test.js +0 -15
- package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
- package/dist/providers/github-copilot/model.js +0 -498
- package/dist/providers/github-copilot/model.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/providers/github-copilot/provider.d.ts +0 -15
- package/dist/providers/github-copilot/provider.d.ts.map +0 -1
- package/dist/providers/github-copilot/provider.js +0 -25
- package/dist/providers/github-copilot/provider.js.map +0 -1
- package/dist/providers/github-copilot/provider.test.d.ts +0 -2
- package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/provider.test.js +0 -52
- package/dist/providers/github-copilot/provider.test.js.map +0 -1
- package/dist/providers/github-copilot/utils.d.ts +0 -20
- package/dist/providers/github-copilot/utils.d.ts.map +0 -1
- package/dist/providers/github-copilot/utils.js +0 -142
- package/dist/providers/github-copilot/utils.js.map +0 -1
- package/dist/providers/github-copilot/utils.test.d.ts +0 -2
- package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/utils.test.js +0 -21
- package/dist/providers/github-copilot/utils.test.js.map +0 -1
- package/dist/safety-checker.js +0 -57
- 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 +0 -156
- package/dist/services/conversation-service.test.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -10
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -55
- package/dist/tools/bash.js.map +0 -1
- package/dist/utils/command-safety.d.ts +0 -21
- package/dist/utils/command-safety.d.ts.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/command-safety.js +0 -348
- package/dist/utils/command-safety.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 +0 -64
- package/dist/utils/extract-command-messages.test.js.map +0 -1
- package/dist/utils/provider-traffic-extractor.repro.test.d.ts +0 -2
- package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +0 -1
- package/dist/utils/provider-traffic-extractor.repro.test.js.map +0 -1
package/dist/lib/shell.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { exec } from 'node:child_process';
|
|
2
|
-
import { promisify } from 'node:util';
|
|
3
|
-
import process from 'node:process';
|
|
4
|
-
const execAsync = promisify(exec);
|
|
5
|
-
export class LocalShell {
|
|
6
|
-
cwd;
|
|
7
|
-
constructor(cwd = process.cwd()) {
|
|
8
|
-
this.cwd = cwd;
|
|
9
|
-
}
|
|
10
|
-
async run(action) {
|
|
11
|
-
const output = [];
|
|
12
|
-
for (const command of action.commands) {
|
|
13
|
-
let stdout = '';
|
|
14
|
-
let stderr = '';
|
|
15
|
-
let exitCode = 0;
|
|
16
|
-
let outcome = {
|
|
17
|
-
type: 'exit',
|
|
18
|
-
exitCode: 0,
|
|
19
|
-
};
|
|
20
|
-
try {
|
|
21
|
-
const { stdout: localStdout, stderr: localStderr } = await execAsync(command, {
|
|
22
|
-
cwd: this.cwd,
|
|
23
|
-
timeout: action.timeoutMs,
|
|
24
|
-
maxBuffer: action.maxOutputLength,
|
|
25
|
-
});
|
|
26
|
-
stdout = localStdout;
|
|
27
|
-
stderr = localStderr;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
exitCode = typeof error?.code === 'number' ? error.code : null;
|
|
31
|
-
stdout = error?.stdout ?? '';
|
|
32
|
-
stderr = error?.stderr ?? '';
|
|
33
|
-
outcome =
|
|
34
|
-
error?.killed || error?.signal === 'SIGTERM'
|
|
35
|
-
? { type: 'timeout' }
|
|
36
|
-
: { type: 'exit', exitCode };
|
|
37
|
-
}
|
|
38
|
-
output.push({
|
|
39
|
-
command,
|
|
40
|
-
stdout,
|
|
41
|
-
stderr,
|
|
42
|
-
outcome,
|
|
43
|
-
});
|
|
44
|
-
if (outcome.type === 'timeout') {
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
output,
|
|
50
|
-
providerData: {
|
|
51
|
-
working_directory: this.cwd,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=shell.js.map
|
package/dist/lib/shell.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../source/lib/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,OAAO,MAAM,cAAc,CAAC;AAQnC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,UAAU;IACU;IAA7B,YAA6B,MAAc,OAAO,CAAC,GAAG,EAAE;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAI,CAAC;IAE7D,KAAK,CAAC,GAAG,CAAC,MAAmB;QACzB,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,QAAQ,GAAkB,CAAC,CAAC;YAChC,IAAI,OAAO,GAAiC;gBACxC,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC;aACd,CAAC;YACF,IAAI,CAAC;gBACD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAChE,OAAO,EACP;oBACI,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,OAAO,EAAE,MAAM,CAAC,SAAS;oBACzB,SAAS,EAAE,MAAM,CAAC,eAAe;iBACpC,CACJ,CAAC;gBACF,MAAM,GAAG,WAAW,CAAC;gBACrB,MAAM,GAAG,WAAW,CAAC;YACzB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/D,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC7B,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC7B,OAAO;oBACH,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS;wBACxC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;wBACrB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,OAAO;aACV,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM;YACV,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM;YACN,YAAY,EAAE;gBACV,iBAAiB,EAAE,IAAI,CAAC,GAAG;aAC9B;SACJ,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -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"}
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useState, useCallback } from 'react';
|
|
2
|
-
import { Box, Text, useInput, useApp } from 'ink';
|
|
3
|
-
import { PTYWrapper } from './pty-wrapper.js';
|
|
4
|
-
import { ContextBuffer } from './context-buffer.js';
|
|
5
|
-
import { ModeManager } from './mode-manager.js';
|
|
6
|
-
import { EventDetector } from './event-detector.js';
|
|
7
|
-
import { Summarizer } from './summarizer.js';
|
|
8
|
-
import { StatusBar } from './components/status-bar.js';
|
|
9
|
-
import { CompanionSession } from './companion-session.js';
|
|
10
|
-
import { parseCompanionInput, CommandOutputBuffer } from './input-parser.js';
|
|
11
|
-
import { getPtyInputSequence } from './input-key-mapper.js';
|
|
12
|
-
/** Height reserved at bottom of terminal for status bar and AI response */
|
|
13
|
-
const STATUS_BAR_RESERVED_ROWS = 4;
|
|
14
|
-
/**
|
|
15
|
-
* Infer exit code from command output patterns.
|
|
16
|
-
* Since PTY doesn't provide per-command exit codes, we use heuristics.
|
|
17
|
-
*/
|
|
18
|
-
function inferExitCodeFromOutput(output) {
|
|
19
|
-
const lowerOutput = output.toLowerCase();
|
|
20
|
-
// Common error patterns that indicate failure
|
|
21
|
-
const errorPatterns = [
|
|
22
|
-
/\berror\b/i,
|
|
23
|
-
/\bfail(ed|ure)?\b/i,
|
|
24
|
-
/\bfatal\b/i,
|
|
25
|
-
/\bexception\b/i,
|
|
26
|
-
/\bcommand not found\b/i,
|
|
27
|
-
/\bno such file\b/i,
|
|
28
|
-
/\bpermission denied\b/i,
|
|
29
|
-
/\bdoes not exist\b/i,
|
|
30
|
-
/\bcannot\b/i,
|
|
31
|
-
/\bexit status [1-9]/i,
|
|
32
|
-
/\bexit code [1-9]/i,
|
|
33
|
-
/\breturned [1-9]/i,
|
|
34
|
-
];
|
|
35
|
-
for (const pattern of errorPatterns) {
|
|
36
|
-
if (pattern.test(lowerOutput)) {
|
|
37
|
-
return 1;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return 0; // Assume success if no error patterns found
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Main companion mode application.
|
|
44
|
-
* Wraps user's shell in a PTY and provides AI assistance.
|
|
45
|
-
*/
|
|
46
|
-
export const CompanionApp = ({ settingsService, loggingService, }) => {
|
|
47
|
-
const { exit } = useApp();
|
|
48
|
-
// Core services
|
|
49
|
-
const [ptyWrapper] = useState(() => new PTYWrapper({ logger: loggingService }));
|
|
50
|
-
const [contextBuffer] = useState(() => new ContextBuffer({
|
|
51
|
-
maxSize: settingsService.get('companion.maxContextBufferSize') || 1048576,
|
|
52
|
-
maxCommands: settingsService.get('companion.maxCommandIndexSize') || 10,
|
|
53
|
-
}));
|
|
54
|
-
const [modeManager] = useState(() => new ModeManager());
|
|
55
|
-
const [eventDetector] = useState(() => new EventDetector({
|
|
56
|
-
errorCascadeThreshold: settingsService.get('companion.errorCascadeThreshold') || 3,
|
|
57
|
-
retryLoopThreshold: settingsService.get('companion.retryLoopThreshold') || 2,
|
|
58
|
-
pauseHintDelayMs: settingsService.get('companion.pauseHintDelayMs') || 30000,
|
|
59
|
-
}));
|
|
60
|
-
const [summarizer] = useState(() => new Summarizer({
|
|
61
|
-
settings: settingsService,
|
|
62
|
-
logger: loggingService,
|
|
63
|
-
}));
|
|
64
|
-
const [companionSession] = useState(() => new CompanionSession({
|
|
65
|
-
contextBuffer,
|
|
66
|
-
summarizer,
|
|
67
|
-
settings: settingsService,
|
|
68
|
-
logger: loggingService,
|
|
69
|
-
}));
|
|
70
|
-
const [commandOutputBuffer] = useState(() => new CommandOutputBuffer());
|
|
71
|
-
// UI state
|
|
72
|
-
const [currentMode, setCurrentMode] = useState(modeManager.mode);
|
|
73
|
-
const [hint, setHint] = useState();
|
|
74
|
-
const [isProcessing, setIsProcessing] = useState(false);
|
|
75
|
-
const [error, setError] = useState();
|
|
76
|
-
const [aiResponse, setAiResponse] = useState('');
|
|
77
|
-
// Input buffer for detecting ?? and !auto
|
|
78
|
-
const [inputLine, setInputLine] = useState('');
|
|
79
|
-
// Handle ?? query
|
|
80
|
-
const handleQuery = useCallback(async (query) => {
|
|
81
|
-
setIsProcessing(true);
|
|
82
|
-
setAiResponse('');
|
|
83
|
-
setHint(undefined);
|
|
84
|
-
try {
|
|
85
|
-
for await (const event of companionSession.handleWatchQuery(query)) {
|
|
86
|
-
if (event.type === 'text' && event.content) {
|
|
87
|
-
setAiResponse(prev => prev + event.content);
|
|
88
|
-
}
|
|
89
|
-
else if (event.type === 'error') {
|
|
90
|
-
loggingService.error('Query failed', { error: event.content });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
setIsProcessing(false);
|
|
96
|
-
}
|
|
97
|
-
}, [companionSession, loggingService]);
|
|
98
|
-
// Handle !auto task
|
|
99
|
-
const handleAutoTask = useCallback(async (task) => {
|
|
100
|
-
setIsProcessing(true);
|
|
101
|
-
setAiResponse('');
|
|
102
|
-
setHint(undefined);
|
|
103
|
-
modeManager.enterAutoMode();
|
|
104
|
-
try {
|
|
105
|
-
for await (const event of companionSession.handleAutoTask(task)) {
|
|
106
|
-
if (event.type === 'text' && event.content) {
|
|
107
|
-
setAiResponse(prev => prev + event.content);
|
|
108
|
-
}
|
|
109
|
-
else if (event.type === 'tool_call' && event.tool) {
|
|
110
|
-
loggingService.info('Tool call', { tool: event.tool, args: event.args });
|
|
111
|
-
}
|
|
112
|
-
else if (event.type === 'error') {
|
|
113
|
-
loggingService.error('Auto task failed', { error: event.content });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
finally {
|
|
118
|
-
setIsProcessing(false);
|
|
119
|
-
modeManager.enterWatchMode();
|
|
120
|
-
}
|
|
121
|
-
}, [companionSession, modeManager, loggingService]);
|
|
122
|
-
// Setup PTY and event handlers
|
|
123
|
-
useEffect(() => {
|
|
124
|
-
// Mode change handler
|
|
125
|
-
modeManager.on('modeChange', (mode) => {
|
|
126
|
-
setCurrentMode(mode);
|
|
127
|
-
loggingService.info('Mode changed', { mode });
|
|
128
|
-
});
|
|
129
|
-
// Event detector hint handler
|
|
130
|
-
eventDetector.on('hint', (event) => {
|
|
131
|
-
if (settingsService.get('companion.showHints') !== false) {
|
|
132
|
-
setHint(event.message);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
// PTY output handler
|
|
136
|
-
ptyWrapper.on('output', (data) => {
|
|
137
|
-
// Pass through to stdout
|
|
138
|
-
process.stdout.write(data);
|
|
139
|
-
// Process output for command boundary detection
|
|
140
|
-
const completed = commandOutputBuffer.processData(data);
|
|
141
|
-
if (completed) {
|
|
142
|
-
// Infer exit code from output patterns when not available directly
|
|
143
|
-
// This is a heuristic since PTY doesn't provide per-command exit codes
|
|
144
|
-
const inferredExitCode = inferExitCodeFromOutput(completed.output);
|
|
145
|
-
const entry = {
|
|
146
|
-
command: completed.command,
|
|
147
|
-
output: completed.output,
|
|
148
|
-
exitCode: inferredExitCode,
|
|
149
|
-
timestamp: Date.now(),
|
|
150
|
-
outputLines: completed.output.split('\n').length,
|
|
151
|
-
};
|
|
152
|
-
contextBuffer.addEntry(entry);
|
|
153
|
-
// Check for patterns
|
|
154
|
-
const event = eventDetector.processCommand(entry);
|
|
155
|
-
if (event && settingsService.get('companion.showHints') !== false) {
|
|
156
|
-
setHint(event.message);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Mark activity
|
|
160
|
-
eventDetector.markActivity();
|
|
161
|
-
});
|
|
162
|
-
// PTY exit handler
|
|
163
|
-
ptyWrapper.on('exit', (exitCode) => {
|
|
164
|
-
loggingService.info('PTY exited', { exitCode });
|
|
165
|
-
exit();
|
|
166
|
-
});
|
|
167
|
-
// PTY error handler
|
|
168
|
-
ptyWrapper.on('error', (err) => {
|
|
169
|
-
loggingService.error('PTY error', { error: err.message });
|
|
170
|
-
setError(err.message);
|
|
171
|
-
});
|
|
172
|
-
// Start PTY
|
|
173
|
-
ptyWrapper.start();
|
|
174
|
-
process.stdout.write('\x1b[?25h');
|
|
175
|
-
// Setup terminal resize handling
|
|
176
|
-
const handleResize = () => {
|
|
177
|
-
if (process.stdout.columns && process.stdout.rows) {
|
|
178
|
-
// Reserve bottom rows for status bar and AI response
|
|
179
|
-
ptyWrapper.resize(process.stdout.columns, process.stdout.rows - STATUS_BAR_RESERVED_ROWS);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
process.stdout.on('resize', handleResize);
|
|
183
|
-
handleResize();
|
|
184
|
-
return () => {
|
|
185
|
-
process.stdout.off('resize', handleResize);
|
|
186
|
-
ptyWrapper.stop();
|
|
187
|
-
process.stdout.write('\x1b[?25h');
|
|
188
|
-
};
|
|
189
|
-
}, [
|
|
190
|
-
ptyWrapper,
|
|
191
|
-
contextBuffer,
|
|
192
|
-
commandOutputBuffer,
|
|
193
|
-
modeManager,
|
|
194
|
-
eventDetector,
|
|
195
|
-
settingsService,
|
|
196
|
-
loggingService,
|
|
197
|
-
exit,
|
|
198
|
-
]);
|
|
199
|
-
// Handle keyboard input
|
|
200
|
-
useInput((input, key) => {
|
|
201
|
-
// Ctrl+C to exit or abort
|
|
202
|
-
if (key.ctrl && input === 'c') {
|
|
203
|
-
if (isProcessing) {
|
|
204
|
-
companionSession.abort();
|
|
205
|
-
setIsProcessing(false);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
ptyWrapper.stop();
|
|
209
|
-
exit();
|
|
210
|
-
}
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
// Clear hint on any input
|
|
214
|
-
if (hint) {
|
|
215
|
-
setHint(undefined);
|
|
216
|
-
}
|
|
217
|
-
const isSpecialCommandInput = inputLine.startsWith('??') || inputLine.startsWith('!auto');
|
|
218
|
-
const ptySequence = getPtyInputSequence(input, key);
|
|
219
|
-
if (key.upArrow || key.downArrow || key.leftArrow || key.rightArrow) {
|
|
220
|
-
if (!isSpecialCommandInput && ptySequence) {
|
|
221
|
-
ptyWrapper.write(ptySequence);
|
|
222
|
-
}
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
// Build up input line to detect ?? and !auto commands
|
|
226
|
-
let newInputLine = inputLine;
|
|
227
|
-
if (input === '\r' || input === '\n') {
|
|
228
|
-
const parsed = parseCompanionInput(inputLine);
|
|
229
|
-
if (parsed.type === 'query') {
|
|
230
|
-
// ?? query detected - handle with AI instead of passing to shell
|
|
231
|
-
handleQuery(parsed.content);
|
|
232
|
-
setInputLine('');
|
|
233
|
-
// Write newline to keep terminal output clean
|
|
234
|
-
process.stdout.write('\n');
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
if (parsed.type === 'auto') {
|
|
238
|
-
// !auto command detected - handle with AI instead of passing to shell
|
|
239
|
-
handleAutoTask(parsed.content);
|
|
240
|
-
setInputLine('');
|
|
241
|
-
// Write newline to keep terminal output clean
|
|
242
|
-
process.stdout.write('\n');
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
// Normal command - pass Enter to PTY and track for context
|
|
246
|
-
ptyWrapper.write(input);
|
|
247
|
-
if (inputLine.trim()) {
|
|
248
|
-
commandOutputBuffer.startCommand(inputLine.trim());
|
|
249
|
-
}
|
|
250
|
-
setInputLine('');
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (key.backspace || key.delete) {
|
|
254
|
-
newInputLine = inputLine.slice(0, -1);
|
|
255
|
-
setInputLine(newInputLine);
|
|
256
|
-
if (isSpecialCommandInput) {
|
|
257
|
-
process.stdout.write('\b \b');
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
if (ptySequence) {
|
|
261
|
-
ptyWrapper.write(ptySequence);
|
|
262
|
-
}
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
// Accumulate input
|
|
266
|
-
newInputLine = inputLine + input;
|
|
267
|
-
setInputLine(newInputLine);
|
|
268
|
-
// Check if we're building a ?? or !auto command
|
|
269
|
-
// If so, echo locally but don't send to PTY yet
|
|
270
|
-
if (newInputLine.startsWith('??') || newInputLine.startsWith('!auto')) {
|
|
271
|
-
// Echo the character locally (since we're not sending to PTY)
|
|
272
|
-
process.stdout.write(input);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
// Normal input - pass through to PTY
|
|
276
|
-
ptyWrapper.write(input);
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
if (error) {
|
|
280
|
-
return (React.createElement(Box, { flexDirection: "column" },
|
|
281
|
-
React.createElement(Text, { color: "red" },
|
|
282
|
-
"Error: ",
|
|
283
|
-
error),
|
|
284
|
-
React.createElement(Text, { color: "gray" }, "Press Ctrl+C to exit")));
|
|
285
|
-
}
|
|
286
|
-
// The main rendering is handled by PTY direct output to stdout
|
|
287
|
-
// We only render the status bar and AI response via Ink
|
|
288
|
-
const defaultRows = 24; // Standard terminal height fallback
|
|
289
|
-
const marginTop = process.stdout.rows
|
|
290
|
-
? process.stdout.rows - STATUS_BAR_RESERVED_ROWS
|
|
291
|
-
: defaultRows - STATUS_BAR_RESERVED_ROWS;
|
|
292
|
-
return (React.createElement(Box, { flexDirection: "column", position: "absolute", marginTop: marginTop },
|
|
293
|
-
aiResponse && (React.createElement(Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1, marginBottom: 1 },
|
|
294
|
-
React.createElement(Text, { color: "cyan" }, aiResponse))),
|
|
295
|
-
React.createElement(StatusBar, { mode: currentMode, hint: hint, isProcessing: isProcessing })));
|
|
296
|
-
};
|
|
297
|
-
//# sourceMappingURL=companion-app.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"companion-app.js","sourceRoot":"","sources":["../../../source/modes/companion/companion-app.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { ContextBuffer } from './context-buffer.js';
|
|
2
|
-
import type { Summarizer } from './summarizer.js';
|
|
3
|
-
import type { ISettingsService, ILoggingService } from '../../services/service-interfaces.js';
|
|
4
|
-
import type { CompanionMode } from './mode-manager.js';
|
|
5
|
-
export interface CompanionAgentClient {
|
|
6
|
-
chat: (message: string, options?: {
|
|
7
|
-
model?: string;
|
|
8
|
-
reasoningEffort?: string;
|
|
9
|
-
instructions?: string;
|
|
10
|
-
}) => Promise<string>;
|
|
11
|
-
startStream: (userInput: string | any[], options?: {
|
|
12
|
-
previousResponseId?: string | null;
|
|
13
|
-
}) => Promise<any>;
|
|
14
|
-
abort: () => void;
|
|
15
|
-
}
|
|
16
|
-
export interface CompanionSessionDeps {
|
|
17
|
-
contextBuffer: ContextBuffer;
|
|
18
|
-
summarizer: Summarizer;
|
|
19
|
-
settings: ISettingsService;
|
|
20
|
-
logger: ILoggingService;
|
|
21
|
-
agentClient?: CompanionAgentClient;
|
|
22
|
-
}
|
|
23
|
-
export interface CompanionEvent {
|
|
24
|
-
type: 'text' | 'tool_call' | 'complete' | 'error' | 'approval_required' | 'blocked';
|
|
25
|
-
content?: string;
|
|
26
|
-
tool?: string;
|
|
27
|
-
args?: unknown;
|
|
28
|
-
safety?: 'green' | 'yellow' | 'red';
|
|
29
|
-
reason?: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Lightweight session for companion mode queries.
|
|
33
|
-
*
|
|
34
|
-
* Unlike chat mode's ConversationSession:
|
|
35
|
-
* - No persistent conversation history (each query is standalone)
|
|
36
|
-
* - No previousResponseId chaining
|
|
37
|
-
* - Simpler approval flow (Auto mode only)
|
|
38
|
-
*/
|
|
39
|
-
export declare class CompanionSession {
|
|
40
|
-
#private;
|
|
41
|
-
constructor(deps: CompanionSessionDeps);
|
|
42
|
-
/**
|
|
43
|
-
* Get the summarizer instance (for terminal_history tool integration).
|
|
44
|
-
*/
|
|
45
|
-
get summarizer(): Summarizer;
|
|
46
|
-
get mode(): CompanionMode;
|
|
47
|
-
setMode(mode: CompanionMode): void;
|
|
48
|
-
/**
|
|
49
|
-
* Handle a ?? query in Watch mode.
|
|
50
|
-
* Creates ephemeral session, streams response, then disposes.
|
|
51
|
-
*/
|
|
52
|
-
handleWatchQuery(query: string): AsyncGenerator<CompanionEvent>;
|
|
53
|
-
/**
|
|
54
|
-
* Handle !auto task in Auto mode.
|
|
55
|
-
* Full agent loop with tool execution.
|
|
56
|
-
*/
|
|
57
|
-
handleAutoTask(task: string): AsyncGenerator<CompanionEvent>;
|
|
58
|
-
/**
|
|
59
|
-
* Abort the current operation.
|
|
60
|
-
*/
|
|
61
|
-
abort(): void;
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=companion-session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"companion-session.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/companion-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAE5F,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,KACA,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,WAAW,EAAE,CACT,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,EACzB,OAAO,CAAC,EAAE;QAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,KAC7C,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAgB;;gBAQb,IAAI,EAAE,oBAAoB;IAQtC;;OAEG;IACH,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,IAAI,IAAI,aAAa,CAExB;IAED,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKlC;;;OAGG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC;IAmCtE;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC;IAqDnE;;OAEG;IACH,KAAK,IAAI,IAAI;CAwBhB"}
|