@qduc/term2 0.1.1 → 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.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +9 -5
- package/dist/agent.js.map +1 -1
- 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 +26 -6
- package/dist/components/ApprovalPrompt.js.map +1 -1
- package/dist/components/BottomArea.js +1 -1
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/ChatMessage.js +1 -1
- package/dist/components/ChatMessage.js.map +1 -1
- package/dist/components/CommandMessage.js +7 -7
- package/dist/components/CommandMessage.js.map +1 -1
- package/dist/components/ErrorBoundary.js +2 -2
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/components/Input/PopupManager.d.ts +10 -0
- package/dist/components/Input/PopupManager.d.ts.map +1 -1
- package/dist/components/Input/PopupManager.js +4 -2
- package/dist/components/Input/PopupManager.js.map +1 -1
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +102 -18
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/LiveResponse.d.ts +1 -1
- package/dist/components/LiveResponse.js +1 -1
- package/dist/components/MarkdownRenderer.js +13 -14
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/ModelSelectionMenu.js +11 -11
- package/dist/components/ModelSelectionMenu.js.map +1 -1
- package/dist/components/PathSelectionMenu.js +3 -3
- package/dist/components/PathSelectionMenu.js.map +1 -1
- package/dist/components/SettingsSelectionMenu.d.ts +1 -0
- package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/SettingsSelectionMenu.js +127 -14
- package/dist/components/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/SettingsSelectionMenu.test.d.ts +2 -0
- package/dist/components/SettingsSelectionMenu.test.d.ts.map +1 -0
- package/dist/components/SettingsSelectionMenu.test.js +40 -0
- package/dist/components/SettingsSelectionMenu.test.js.map +1 -0
- package/dist/components/SettingsValueSelectionMenu.d.ts +12 -0
- package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -0
- package/dist/components/SettingsValueSelectionMenu.js +63 -0
- package/dist/components/SettingsValueSelectionMenu.js.map +1 -0
- package/dist/components/SettingsValueSelectionMenu.test.d.ts +2 -0
- package/dist/components/SettingsValueSelectionMenu.test.d.ts.map +1 -0
- package/dist/components/SettingsValueSelectionMenu.test.js +38 -0
- package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -0
- package/dist/components/SlashCommandMenu.js +2 -2
- package/dist/components/SlashCommandMenu.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/context/InputContext.d.ts +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.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 +1 -1
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +70 -10
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-completion.test.js +17 -10
- package/dist/hooks/use-settings-completion.test.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts +23 -0
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -0
- package/dist/hooks/use-settings-value-completion.js +214 -0
- package/dist/hooks/use-settings-value-completion.js.map +1 -0
- package/dist/hooks/use-settings-value-completion.test.d.ts +2 -0
- package/dist/hooks/use-settings-value-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-settings-value-completion.test.js +65 -0
- package/dist/hooks/use-settings-value-completion.test.js.map +1 -0
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.flex-tier.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.flex-tier.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.flex-tier.test.js +70 -0
- package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -0
- package/dist/lib/openai-agent-client.js +71 -36
- 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 +8 -2
- package/dist/services/settings-service.d.ts.map +1 -1
- package/dist/services/settings-service.js +24 -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.js +2 -2
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/find-files.test.js +15 -0
- package/dist/tools/find-files.test.js.map +1 -1
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/grep.js +1 -1
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/read-file.d.ts +2 -2
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +14 -11
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-file.test.js +37 -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.js +2 -2
- 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 +18 -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
|
@@ -0,0 +1,63 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { OpenAIAgentClient } from '../../lib/openai-agent-client.js';
|
|
2
|
+
import { generateCommandIndexPrompt } from './command-index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Lightweight session for companion mode queries.
|
|
5
|
+
*
|
|
6
|
+
* Unlike chat mode's ConversationSession:
|
|
7
|
+
* - No persistent conversation history (each query is standalone)
|
|
8
|
+
* - No previousResponseId chaining
|
|
9
|
+
* - Simpler approval flow (Auto mode only)
|
|
10
|
+
*/
|
|
11
|
+
export class CompanionSession {
|
|
12
|
+
#agentClient = null;
|
|
13
|
+
#contextBuffer;
|
|
14
|
+
#summarizer;
|
|
15
|
+
#settings;
|
|
16
|
+
#logger;
|
|
17
|
+
#currentMode = 'watch';
|
|
18
|
+
constructor(deps) {
|
|
19
|
+
this.#contextBuffer = deps.contextBuffer;
|
|
20
|
+
this.#summarizer = deps.summarizer;
|
|
21
|
+
this.#settings = deps.settings;
|
|
22
|
+
this.#logger = deps.logger;
|
|
23
|
+
this.#agentClient = deps.agentClient ?? null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the summarizer instance (for terminal_history tool integration).
|
|
27
|
+
*/
|
|
28
|
+
get summarizer() {
|
|
29
|
+
return this.#summarizer;
|
|
30
|
+
}
|
|
31
|
+
get mode() {
|
|
32
|
+
return this.#currentMode;
|
|
33
|
+
}
|
|
34
|
+
setMode(mode) {
|
|
35
|
+
this.#currentMode = mode;
|
|
36
|
+
this.#logger.info(`Companion mode changed to: ${mode}`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Handle a ?? query in Watch mode.
|
|
40
|
+
* Creates ephemeral session, streams response, then disposes.
|
|
41
|
+
*/
|
|
42
|
+
async *handleWatchQuery(query) {
|
|
43
|
+
try {
|
|
44
|
+
const client = this.#getOrCreateClient();
|
|
45
|
+
const commandIndex = this.#contextBuffer.getIndex();
|
|
46
|
+
const contextPrompt = generateCommandIndexPrompt(commandIndex);
|
|
47
|
+
// Build the full query with context
|
|
48
|
+
const fullQuery = query
|
|
49
|
+
? `${contextPrompt}\n\nUser question: ${query}`
|
|
50
|
+
: `${contextPrompt}\n\nThe user typed ?? for help. Analyze the recent commands and provide helpful suggestions.`;
|
|
51
|
+
this.#logger.info('Handling watch query', {
|
|
52
|
+
query: query.slice(0, 100),
|
|
53
|
+
commandCount: commandIndex.length,
|
|
54
|
+
});
|
|
55
|
+
const response = await client.chat(fullQuery, {
|
|
56
|
+
model: this.#settings.get('agent.model'),
|
|
57
|
+
reasoningEffort: this.#settings.get('agent.reasoningEffort'),
|
|
58
|
+
instructions: 'You are a helpful terminal assistant. Answer directly without calling tools.',
|
|
59
|
+
});
|
|
60
|
+
if (response) {
|
|
61
|
+
yield { type: 'text', content: response };
|
|
62
|
+
}
|
|
63
|
+
yield { type: 'complete' };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
67
|
+
this.#logger.error('Watch query failed', { error: message });
|
|
68
|
+
yield { type: 'error', content: message };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Handle !auto task in Auto mode.
|
|
73
|
+
* Full agent loop with tool execution.
|
|
74
|
+
*/
|
|
75
|
+
async *handleAutoTask(task) {
|
|
76
|
+
this.setMode('auto');
|
|
77
|
+
try {
|
|
78
|
+
const client = this.#getOrCreateClient();
|
|
79
|
+
const commandIndex = this.#contextBuffer.getIndex();
|
|
80
|
+
const contextPrompt = generateCommandIndexPrompt(commandIndex);
|
|
81
|
+
const fullTask = `${contextPrompt}\n\nUser task: ${task}\n\nYou are in Auto mode. Execute commands to complete this task. Use the shell tool to run commands.`;
|
|
82
|
+
this.#logger.info('Handling auto task', {
|
|
83
|
+
task: task.slice(0, 100),
|
|
84
|
+
commandCount: commandIndex.length,
|
|
85
|
+
});
|
|
86
|
+
// Stream response using existing API
|
|
87
|
+
const stream = await client.startStream(fullTask);
|
|
88
|
+
for await (const event of stream) {
|
|
89
|
+
if (event?.type === 'text_delta' || event?.data?.type === 'output_text') {
|
|
90
|
+
const delta = event?.data?.delta ?? event?.delta ?? '';
|
|
91
|
+
if (delta) {
|
|
92
|
+
yield { type: 'text', content: delta };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Check for tool calls
|
|
96
|
+
if (event?.type === 'tool_call' || event?.item?.type === 'function_call') {
|
|
97
|
+
const toolName = event?.name ?? event?.item?.name ?? event?.item?.rawItem?.name;
|
|
98
|
+
const toolArgs = event?.arguments ?? event?.item?.arguments ?? event?.item?.rawItem?.arguments;
|
|
99
|
+
if (toolName) {
|
|
100
|
+
yield {
|
|
101
|
+
type: 'tool_call',
|
|
102
|
+
tool: toolName,
|
|
103
|
+
args: toolArgs,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
yield { type: 'complete' };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
112
|
+
this.#logger.error('Auto task failed', { error: message });
|
|
113
|
+
yield { type: 'error', content: message };
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
this.setMode('watch');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Abort the current operation.
|
|
121
|
+
*/
|
|
122
|
+
abort() {
|
|
123
|
+
if (this.#agentClient) {
|
|
124
|
+
this.#agentClient.abort();
|
|
125
|
+
}
|
|
126
|
+
this.setMode('watch');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get or create the agent client.
|
|
130
|
+
*/
|
|
131
|
+
#getOrCreateClient() {
|
|
132
|
+
if (!this.#agentClient) {
|
|
133
|
+
this.#agentClient = new OpenAIAgentClient({
|
|
134
|
+
model: this.#settings.get('agent.model'),
|
|
135
|
+
reasoningEffort: this.#settings.get('agent.reasoningEffort'),
|
|
136
|
+
maxTurns: 10, // Lower than chat mode - companion queries should be quick
|
|
137
|
+
deps: {
|
|
138
|
+
settings: this.#settings,
|
|
139
|
+
logger: this.#logger,
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return this.#agentClient;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=companion-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-session.js","sourceRoot":"","sources":["../../../source/modes/companion/companion-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-session.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/companion-session.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { CompanionSession } from './companion-session.js';
|
|
3
|
+
test('handleWatchQuery uses chat and yields text', async (t) => {
|
|
4
|
+
const events = [];
|
|
5
|
+
const fakeClient = {
|
|
6
|
+
chat: async (message) => {
|
|
7
|
+
t.true(message.includes('User question: why did this fail'));
|
|
8
|
+
return 'Try rerunning with verbose logging.';
|
|
9
|
+
},
|
|
10
|
+
startStream: async () => {
|
|
11
|
+
throw new Error('startStream should not be called for watch queries');
|
|
12
|
+
},
|
|
13
|
+
abort: () => undefined,
|
|
14
|
+
};
|
|
15
|
+
const session = new CompanionSession({
|
|
16
|
+
contextBuffer: { getIndex: () => [] },
|
|
17
|
+
summarizer: {},
|
|
18
|
+
settings: { get: () => 'gpt-5' },
|
|
19
|
+
logger: { info: () => undefined, error: () => undefined },
|
|
20
|
+
agentClient: fakeClient,
|
|
21
|
+
});
|
|
22
|
+
for await (const event of session.handleWatchQuery('why did this fail')) {
|
|
23
|
+
events.push(event);
|
|
24
|
+
}
|
|
25
|
+
t.true(events.some(event => event.type === 'text' && event.content === 'Try rerunning with verbose logging.'));
|
|
26
|
+
t.is(events[events.length - 1]?.type, 'complete');
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=companion-session.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-session.test.js","sourceRoot":"","sources":["../../../source/modes/companion/companion-session.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAExD,IAAI,CAAC,4CAA4C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACzD,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC7D,OAAO,qCAAqC,CAAC;QACjD,CAAC;QACD,WAAW,EAAE,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;QACjC,aAAa,EAAE,EAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAQ;QAC1C,UAAU,EAAE,EAAS;QACrB,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAQ;QACrC,MAAM,EAAE,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,EAAQ;QAC9D,WAAW,EAAE,UAAiB;KACjC,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,CAAC,CAAC,IAAI,CACF,MAAM,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,qCAAqC,CAC5F,CACJ,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CompanionMode } from '../mode-manager.js';
|
|
3
|
+
export interface StatusBarProps {
|
|
4
|
+
mode: CompanionMode;
|
|
5
|
+
hint?: string;
|
|
6
|
+
isProcessing?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Status bar component for companion mode.
|
|
10
|
+
* Shows current mode, help hints, and processing status.
|
|
11
|
+
*/
|
|
12
|
+
export declare const StatusBar: React.FC<StatusBarProps>;
|
|
13
|
+
//# sourceMappingURL=status-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../../../source/modes/companion/components/status-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAuC9C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Status bar component for companion mode.
|
|
5
|
+
* Shows current mode, help hints, and processing status.
|
|
6
|
+
*/
|
|
7
|
+
export const StatusBar = ({ mode, hint, isProcessing = false, }) => {
|
|
8
|
+
const modeIcon = mode === 'watch' ? '👁' : '🤖';
|
|
9
|
+
const modeLabel = mode === 'watch' ? 'Watch' : 'Auto';
|
|
10
|
+
return (React.createElement(Box, { flexDirection: "row", justifyContent: "space-between", paddingX: 1, borderStyle: "single", borderColor: "gray" },
|
|
11
|
+
React.createElement(Box, null,
|
|
12
|
+
React.createElement(Text, { color: "cyan" },
|
|
13
|
+
"[",
|
|
14
|
+
modeLabel,
|
|
15
|
+
"] ",
|
|
16
|
+
modeIcon),
|
|
17
|
+
isProcessing && (React.createElement(Text, { color: "yellow" }, " \u23F3 Processing..."))),
|
|
18
|
+
React.createElement(Box, null,
|
|
19
|
+
React.createElement(Text, { color: "gray" }, "?? for help"),
|
|
20
|
+
mode === 'watch' && (React.createElement(Text, { color: "gray" }, " \u2502 !auto to delegate"))),
|
|
21
|
+
hint && (React.createElement(Box, null,
|
|
22
|
+
React.createElement(Text, { color: "yellow" },
|
|
23
|
+
"\uD83D\uDCA1 ",
|
|
24
|
+
hint)))));
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=status-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-bar.js","sourceRoot":"","sources":["../../../../source/modes/companion/components/status-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAS9B;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAChD,IAAI,EACJ,IAAI,EACJ,YAAY,GAAG,KAAK,GACvB,EAAE,EAAE;IACD,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEtD,OAAO,CACH,oBAAC,GAAG,IACA,aAAa,EAAC,KAAK,EACnB,cAAc,EAAC,eAAe,EAC9B,QAAQ,EAAE,CAAC,EACX,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM;QAElB,oBAAC,GAAG;YACA,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBACZ,SAAS;;gBAAI,QAAQ,CACpB;YACN,YAAY,IAAI,CACb,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,4BAAwB,CAC/C,CACC;QAEN,oBAAC,GAAG;YACA,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAmB;YACpC,IAAI,KAAK,OAAO,IAAI,CACjB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gCAA4B,CACjD,CACC;QAEL,IAAI,IAAI,CACL,oBAAC,GAAG;YACA,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ;;gBAAK,IAAI,CAAQ,CACnC,CACT,CACC,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context buffer for companion mode.
|
|
3
|
+
* Stores recent commands and their outputs in a rolling window.
|
|
4
|
+
*/
|
|
5
|
+
export interface CommandEntry {
|
|
6
|
+
command: string;
|
|
7
|
+
output: string;
|
|
8
|
+
exitCode: number;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
outputLines: number;
|
|
11
|
+
}
|
|
12
|
+
export interface CommandIndexEntry {
|
|
13
|
+
index: number;
|
|
14
|
+
command: string;
|
|
15
|
+
exitCode: number;
|
|
16
|
+
relativeTime: string;
|
|
17
|
+
outputLines: number;
|
|
18
|
+
hasErrors: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ContextBufferOptions {
|
|
21
|
+
maxSize: number;
|
|
22
|
+
maxCommands: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Rolling buffer that stores command history with outputs.
|
|
26
|
+
* Generates lightweight command index for AI context.
|
|
27
|
+
*/
|
|
28
|
+
export declare class ContextBuffer {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(options: ContextBufferOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Add a command entry to the buffer.
|
|
33
|
+
*/
|
|
34
|
+
addEntry(entry: CommandEntry): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get entry by index (0 = most recent).
|
|
37
|
+
*/
|
|
38
|
+
getEntry(index: number): CommandEntry | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Get the last N entries (most recent first).
|
|
41
|
+
*/
|
|
42
|
+
getLastN(n: number): CommandEntry[];
|
|
43
|
+
/**
|
|
44
|
+
* Search entries by command or output text.
|
|
45
|
+
*/
|
|
46
|
+
search(pattern: string, limit?: number): CommandEntry[];
|
|
47
|
+
/**
|
|
48
|
+
* Get lightweight command index for AI context.
|
|
49
|
+
* This is always included in the AI's context window.
|
|
50
|
+
*/
|
|
51
|
+
getIndex(): CommandIndexEntry[];
|
|
52
|
+
/**
|
|
53
|
+
* Get the total number of entries.
|
|
54
|
+
*/
|
|
55
|
+
get length(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Get the current buffer size in bytes.
|
|
58
|
+
*/
|
|
59
|
+
get size(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Clear all entries.
|
|
62
|
+
*/
|
|
63
|
+
clear(): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=context-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-buffer.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/context-buffer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,aAAa;;gBAMV,OAAO,EAAE,oBAAoB;IAKzC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IA2BnC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAInC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE;IAWlD;;;OAGG;IACH,QAAQ,IAAI,iBAAiB,EAAE;IAY/B;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAoEhB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context buffer for companion mode.
|
|
3
|
+
* Stores recent commands and their outputs in a rolling window.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Rolling buffer that stores command history with outputs.
|
|
7
|
+
* Generates lightweight command index for AI context.
|
|
8
|
+
*/
|
|
9
|
+
export class ContextBuffer {
|
|
10
|
+
#entries = [];
|
|
11
|
+
#maxSize;
|
|
12
|
+
#maxCommands;
|
|
13
|
+
#currentSize = 0;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.#maxSize = options.maxSize;
|
|
16
|
+
this.#maxCommands = options.maxCommands;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Add a command entry to the buffer.
|
|
20
|
+
*/
|
|
21
|
+
addEntry(entry) {
|
|
22
|
+
const entrySize = this.#calculateEntrySize(entry);
|
|
23
|
+
// Evict oldest entries if buffer would exceed max size
|
|
24
|
+
while (this.#entries.length > 0 &&
|
|
25
|
+
this.#currentSize + entrySize > this.#maxSize) {
|
|
26
|
+
const removed = this.#entries.pop();
|
|
27
|
+
if (removed) {
|
|
28
|
+
this.#currentSize -= this.#calculateEntrySize(removed);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Evict if we'd exceed max commands
|
|
32
|
+
while (this.#entries.length >= this.#maxCommands) {
|
|
33
|
+
const removed = this.#entries.pop();
|
|
34
|
+
if (removed) {
|
|
35
|
+
this.#currentSize -= this.#calculateEntrySize(removed);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Add new entry at the beginning (most recent first)
|
|
39
|
+
this.#entries.unshift(entry);
|
|
40
|
+
this.#currentSize += entrySize;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get entry by index (0 = most recent).
|
|
44
|
+
*/
|
|
45
|
+
getEntry(index) {
|
|
46
|
+
return this.#entries[index];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the last N entries (most recent first).
|
|
50
|
+
*/
|
|
51
|
+
getLastN(n) {
|
|
52
|
+
return this.#entries.slice(0, Math.min(n, this.#entries.length));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Search entries by command or output text.
|
|
56
|
+
*/
|
|
57
|
+
search(pattern, limit = 5) {
|
|
58
|
+
const lowerPattern = pattern.toLowerCase();
|
|
59
|
+
return this.#entries
|
|
60
|
+
.filter(entry => entry.command.toLowerCase().includes(lowerPattern) ||
|
|
61
|
+
entry.output.toLowerCase().includes(lowerPattern))
|
|
62
|
+
.slice(0, limit);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get lightweight command index for AI context.
|
|
66
|
+
* This is always included in the AI's context window.
|
|
67
|
+
*/
|
|
68
|
+
getIndex() {
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
return this.#entries.map((entry, index) => ({
|
|
71
|
+
index,
|
|
72
|
+
command: entry.command,
|
|
73
|
+
exitCode: entry.exitCode,
|
|
74
|
+
relativeTime: this.#formatRelativeTime(now - entry.timestamp),
|
|
75
|
+
outputLines: entry.outputLines,
|
|
76
|
+
hasErrors: this.#detectErrors(entry),
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the total number of entries.
|
|
81
|
+
*/
|
|
82
|
+
get length() {
|
|
83
|
+
return this.#entries.length;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the current buffer size in bytes.
|
|
87
|
+
*/
|
|
88
|
+
get size() {
|
|
89
|
+
return this.#currentSize;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clear all entries.
|
|
93
|
+
*/
|
|
94
|
+
clear() {
|
|
95
|
+
this.#entries = [];
|
|
96
|
+
this.#currentSize = 0;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Calculate the approximate size of an entry in bytes.
|
|
100
|
+
*
|
|
101
|
+
* Size calculation methodology:
|
|
102
|
+
* - Command string length in bytes
|
|
103
|
+
* - Output string length in bytes
|
|
104
|
+
* - Fixed metadata overhead (100 bytes) accounts for:
|
|
105
|
+
* - exitCode: number (~8 bytes in V8)
|
|
106
|
+
* - timestamp: number (~8 bytes in V8)
|
|
107
|
+
* - outputLines: number (~8 bytes in V8)
|
|
108
|
+
* - Object overhead and references (~76 bytes estimated)
|
|
109
|
+
*
|
|
110
|
+
* This is intentionally conservative to ensure we don't exceed memory limits.
|
|
111
|
+
*/
|
|
112
|
+
#calculateEntrySize(entry) {
|
|
113
|
+
const METADATA_OVERHEAD_BYTES = 100;
|
|
114
|
+
return ((entry.command?.length || 0) +
|
|
115
|
+
(entry.output?.length || 0) +
|
|
116
|
+
METADATA_OVERHEAD_BYTES);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format timestamp as relative time string.
|
|
120
|
+
*/
|
|
121
|
+
#formatRelativeTime(ms) {
|
|
122
|
+
const seconds = Math.floor(ms / 1000);
|
|
123
|
+
if (seconds < 60) {
|
|
124
|
+
return `${seconds}s ago`;
|
|
125
|
+
}
|
|
126
|
+
const minutes = Math.floor(seconds / 60);
|
|
127
|
+
if (minutes < 60) {
|
|
128
|
+
return `${minutes}m ago`;
|
|
129
|
+
}
|
|
130
|
+
const hours = Math.floor(minutes / 60);
|
|
131
|
+
return `${hours}h ago`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Detect if an entry likely contains errors.
|
|
135
|
+
*/
|
|
136
|
+
#detectErrors(entry) {
|
|
137
|
+
if (entry.exitCode !== 0) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
const output = entry.output.toLowerCase();
|
|
141
|
+
const errorPatterns = [
|
|
142
|
+
'error',
|
|
143
|
+
'fail',
|
|
144
|
+
'exception',
|
|
145
|
+
'fatal',
|
|
146
|
+
'critical',
|
|
147
|
+
'cannot',
|
|
148
|
+
"can't",
|
|
149
|
+
'denied',
|
|
150
|
+
'not found',
|
|
151
|
+
'no such file',
|
|
152
|
+
];
|
|
153
|
+
return errorPatterns.some(pattern => output.includes(pattern));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=context-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-buffer.js","sourceRoot":"","sources":["../../../source/modes/companion/context-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-buffer.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/context-buffer.test.ts"],"names":[],"mappings":""}
|