@adhdev/daemon-core 0.6.53 → 0.6.56
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/index.d.ts +84 -34
- package/dist/index.js +631 -305
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/providers/_builtin/_helpers/index.js +26 -26
- package/providers/_builtin/cli/aider-cli/provider.json +37 -0
- package/providers/_builtin/cli/aider-cli/scripts/1.0/detect_status.js +20 -0
- package/providers/_builtin/cli/aider-cli/scripts/1.0/parse_approval.js +10 -0
- package/providers/_builtin/cli/aider-cli/scripts/1.0/parse_output.js +49 -0
- package/providers/_builtin/cli/aider-cli/scripts/1.0/scripts.js +7 -0
- package/providers/_builtin/cli/claude-cli/provider.json +9 -2
- package/providers/_builtin/cli/claude-cli/scripts/1.0/detect_status.js +31 -0
- package/providers/_builtin/cli/claude-cli/scripts/1.0/parse_approval.js +38 -0
- package/providers/_builtin/cli/claude-cli/scripts/1.0/parse_output.js +164 -0
- package/providers/_builtin/cli/claude-cli/scripts/1.0/scripts.js +42 -0
- package/providers/_builtin/cli/codex-cli/provider.json +9 -2
- package/providers/_builtin/cli/codex-cli/scripts/1.0/detect_status.js +20 -0
- package/providers/_builtin/cli/codex-cli/scripts/1.0/parse_approval.js +15 -0
- package/providers/_builtin/cli/codex-cli/scripts/1.0/parse_output.js +68 -0
- package/providers/_builtin/cli/codex-cli/scripts/1.0/scripts.js +11 -0
- package/providers/_builtin/cli/cursor-cli/provider.json +37 -0
- package/providers/_builtin/cli/cursor-cli/scripts/1.0/detect_status.js +19 -0
- package/providers/_builtin/cli/cursor-cli/scripts/1.0/parse_approval.js +10 -0
- package/providers/_builtin/cli/cursor-cli/scripts/1.0/parse_output.js +48 -0
- package/providers/_builtin/cli/cursor-cli/scripts/1.0/scripts.js +7 -0
- package/providers/_builtin/cli/gemini-cli/provider.json +9 -2
- package/providers/_builtin/cli/gemini-cli/scripts/1.0/detect_status.js +26 -0
- package/providers/_builtin/cli/gemini-cli/scripts/1.0/parse_approval.js +22 -0
- package/providers/_builtin/cli/gemini-cli/scripts/1.0/parse_output.js +71 -0
- package/providers/_builtin/cli/gemini-cli/scripts/1.0/scripts.js +12 -0
- package/providers/_builtin/cli/github-copilot-cli/provider.json +37 -0
- package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/detect_status.js +19 -0
- package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/parse_approval.js +9 -0
- package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/parse_output.js +48 -0
- package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/scripts.js +7 -0
- package/providers/_builtin/cli/goose-cli/provider.json +37 -0
- package/providers/_builtin/cli/goose-cli/scripts/1.0/detect_status.js +20 -0
- package/providers/_builtin/cli/goose-cli/scripts/1.0/parse_approval.js +10 -0
- package/providers/_builtin/cli/goose-cli/scripts/1.0/parse_output.js +48 -0
- package/providers/_builtin/cli/goose-cli/scripts/1.0/scripts.js +7 -0
- package/providers/_builtin/cli/opencode-cli/provider.json +37 -0
- package/providers/_builtin/cli/opencode-cli/scripts/1.0/detect_status.js +15 -0
- package/providers/_builtin/cli/opencode-cli/scripts/1.0/parse_approval.js +9 -0
- package/providers/_builtin/cli/opencode-cli/scripts/1.0/parse_output.js +48 -0
- package/providers/_builtin/cli/opencode-cli/scripts/1.0/scripts.js +7 -0
- package/providers/_builtin/extension/cline/scripts/1.0/focus_editor.js +5 -5
- package/providers/_builtin/extension/cline/scripts/1.0/list_chats.js +11 -11
- package/providers/_builtin/extension/cline/scripts/1.0/list_models.js +6 -6
- package/providers/_builtin/extension/cline/scripts/1.0/list_modes.js +5 -5
- package/providers/_builtin/extension/cline/scripts/1.0/new_session.js +12 -12
- package/providers/_builtin/extension/cline/scripts/1.0/open_panel.js +7 -7
- package/providers/_builtin/extension/cline/scripts/1.0/read_chat.js +29 -29
- package/providers/_builtin/extension/cline/scripts/1.0/resolve_action.js +19 -19
- package/providers/_builtin/extension/cline/scripts/1.0/send_message.js +15 -15
- package/providers/_builtin/extension/cline/scripts/1.0/set_mode.js +4 -4
- package/providers/_builtin/extension/cline/scripts/1.0/set_model.js +4 -4
- package/providers/_builtin/extension/cline/scripts/1.0/switch_session.js +21 -21
- package/providers/_builtin/extension/codex/scripts/1.0/explore_controls_webview.js +2 -2
- package/providers/_builtin/extension/codex/scripts/1.0/list_models.js +1 -1
- package/providers/_builtin/extension/codex/scripts/1.0/list_modes.js +1 -1
- package/providers/_builtin/extension/codex/scripts/1.0/new_session.js +2 -2
- package/providers/_builtin/extension/codex/scripts/1.0/read_chat.js +6 -6
- package/providers/_builtin/extension/codex/scripts/1.0/resolve_action.js +3 -3
- package/providers/_builtin/extension/codex/scripts/1.0/set_model.js +1 -1
- package/providers/_builtin/ide/antigravity/scripts/1.0/focus_editor.js +2 -2
- package/providers/_builtin/ide/antigravity/scripts/1.0/list_chats.js +19 -19
- package/providers/_builtin/ide/antigravity/scripts/1.0/list_models.js +1 -1
- package/providers/_builtin/ide/antigravity/scripts/1.0/list_modes.js +1 -1
- package/providers/_builtin/ide/antigravity/scripts/1.0/new_session.js +17 -17
- package/providers/_builtin/ide/antigravity/scripts/1.0/read_chat.js +41 -41
- package/providers/_builtin/ide/antigravity/scripts/1.0/resolve_action.js +6 -6
- package/providers/_builtin/ide/antigravity/scripts/1.0/send_message.js +13 -13
- package/providers/_builtin/ide/antigravity/scripts/1.0/set_model.js +1 -1
- package/providers/_builtin/ide/antigravity/scripts/1.0/switch_session.js +13 -13
- package/providers/_builtin/ide/cursor/scripts/1.0/dismiss_notification.js +3 -3
- package/providers/_builtin/ide/cursor/scripts/1.0/focus_editor.js +1 -1
- package/providers/_builtin/ide/cursor/scripts/1.0/list_models.js +12 -12
- package/providers/_builtin/ide/cursor/scripts/1.0/list_modes.js +5 -5
- package/providers/_builtin/ide/cursor/scripts/1.0/list_notifications.js +2 -2
- package/providers/_builtin/ide/cursor/scripts/1.0/list_sessions.js +5 -5
- package/providers/_builtin/ide/cursor/scripts/1.0/new_session.js +1 -1
- package/providers/_builtin/ide/cursor/scripts/1.0/open_panel.js +3 -3
- package/providers/_builtin/ide/cursor/scripts/1.0/read_chat.js +9 -9
- package/providers/_builtin/ide/cursor/scripts/1.0/resolve_action.js +4 -4
- package/providers/_builtin/ide/cursor/scripts/1.0/send_message.js +5 -5
- package/providers/_builtin/ide/cursor/scripts/1.0/set_mode.js +4 -4
- package/providers/_builtin/ide/cursor/scripts/1.0/set_model.js +12 -12
- package/providers/_builtin/ide/cursor/scripts/1.0/switch_session.js +2 -2
- package/providers/_builtin/ide/kiro/scripts/1.0/focus_editor.js +2 -2
- package/providers/_builtin/ide/kiro/scripts/1.0/open_panel.js +7 -7
- package/providers/_builtin/ide/kiro/scripts/1.0/resolve_action.js +3 -3
- package/providers/_builtin/ide/kiro/scripts/1.0/send_message.js +4 -4
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_list_sessions.js +2 -2
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_new_session.js +5 -5
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_read_chat.js +13 -13
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_resolve_action.js +1 -1
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_send_message.js +8 -8
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_set_mode.js +1 -1
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_set_model.js +1 -1
- package/providers/_builtin/ide/kiro/scripts/1.0/webview_switch_session.js +3 -3
- package/providers/_builtin/ide/pearai/.tmp/after_rich.json +157 -0
- package/providers/_builtin/ide/pearai/.tmp/after_rich_raw.json +161 -0
- package/providers/_builtin/ide/pearai/.tmp/after_switch.json +592 -0
- package/providers/_builtin/ide/pearai/.tmp/after_switch_raw.json +596 -0
- package/providers/_builtin/ide/pearai/.tmp/home_dump_raw.json +176 -0
- package/providers/_builtin/ide/pearai/.tmp/items_raw.json +778 -0
- package/providers/_builtin/ide/pearai/.tmp/webview_dump.json +157 -0
- package/providers/_builtin/ide/pearai/.tmp/webview_dump_raw.json +161 -0
- package/providers/_builtin/ide/pearai/provider.json +1 -3
- package/providers/_builtin/ide/pearai/scripts/1.0/focus_editor.js +12 -16
- package/providers/_builtin/ide/pearai/scripts/1.0/list_models.js +45 -0
- package/providers/_builtin/ide/pearai/scripts/1.0/list_modes.js +44 -0
- package/providers/_builtin/ide/pearai/scripts/1.0/list_sessions.js +82 -27
- package/providers/_builtin/ide/pearai/scripts/1.0/new_session.js +26 -43
- package/providers/_builtin/ide/pearai/scripts/1.0/open_panel.js +10 -33
- package/providers/_builtin/ide/pearai/scripts/1.0/read_chat.js +169 -0
- package/providers/_builtin/ide/pearai/scripts/1.0/resolve_action.js +47 -41
- package/providers/_builtin/ide/pearai/scripts/1.0/scripts.js +36 -7
- package/providers/_builtin/ide/pearai/scripts/1.0/send_message.js +97 -22
- package/providers/_builtin/ide/pearai/scripts/1.0/set_mode.js +51 -0
- package/providers/_builtin/ide/pearai/scripts/1.0/set_model.js +54 -0
- package/providers/_builtin/ide/pearai/scripts/1.0/switch_session.js +81 -0
- package/providers/_builtin/ide/trae/scripts/1.0/focus_editor.js +2 -2
- package/providers/_builtin/ide/trae/scripts/1.0/list_chats.js +2 -2
- package/providers/_builtin/ide/trae/scripts/1.0/new_session.js +4 -4
- package/providers/_builtin/ide/trae/scripts/1.0/open_panel.js +6 -6
- package/providers/_builtin/ide/trae/scripts/1.0/read_chat.js +13 -13
- package/providers/_builtin/ide/trae/scripts/1.0/resolve_action.js +3 -3
- package/providers/_builtin/ide/trae/scripts/1.0/send_message.js +11 -11
- package/providers/_builtin/ide/trae/scripts/1.0/switch_session.js +2 -2
- package/providers/_builtin/ide/windsurf/scripts/1.0/focus_editor.js +6 -6
- package/providers/_builtin/ide/windsurf/scripts/1.0/list_chats.js +4 -4
- package/providers/_builtin/ide/windsurf/scripts/1.0/list_sessions.js +6 -6
- package/providers/_builtin/ide/windsurf/scripts/1.0/new_session.js +9 -9
- package/providers/_builtin/ide/windsurf/scripts/1.0/open_panel.js +6 -6
- package/providers/_builtin/ide/windsurf/scripts/1.0/resolve_action.js +8 -8
- package/providers/_builtin/ide/windsurf/scripts/1.0/switch_session.js +8 -8
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/focus_editor.js +6 -6
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/list_chats.js +12 -12
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/new_session.js +15 -15
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/open_panel.js +10 -10
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/read_chat.js +33 -33
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/resolve_action.js +6 -6
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/send_message.js +16 -16
- package/providers/_builtin/ide/windsurf/scripts/1.0.bak/switch_session.js +7 -7
- package/providers/_builtin/registry.json +76 -3
- package/src/cli-adapters/provider-cli-adapter.ts +312 -258
- package/src/cli-adapters/terminal-screen.ts +95 -0
- package/src/commands/chat-commands.ts +41 -15
- package/src/commands/cli-manager.ts +4 -2
- package/src/daemon/dev-server.ts +306 -62
- package/src/providers/acp-provider-instance.ts +1 -1
- package/src/providers/cli-provider-instance.ts +23 -9
- package/src/providers/provider-loader.ts +3 -2
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_models.js +0 -43
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_modes.js +0 -35
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_sessions.js +0 -62
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_new_session.js +0 -49
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_read_chat.js +0 -92
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_resolve_action.js +0 -59
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_send_message.js +0 -72
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_set_mode.js +0 -36
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_set_model.js +0 -36
- package/providers/_builtin/ide/pearai/scripts/1.0/webview_switch_session.js +0 -34
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY screen snapshot backed by xterm's parser.
|
|
3
|
+
*
|
|
4
|
+
* Claude Code and similar CLIs use a real terminal UI. A handwritten ANSI
|
|
5
|
+
* parser quickly drifts from reality, so we reuse xterm's terminal model and
|
|
6
|
+
* expose only the current visible viewport as plain text for provider scripts.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
type XtermBufferLine = {
|
|
10
|
+
translateToString(trimRight?: boolean): string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type XtermBuffer = {
|
|
14
|
+
length: number;
|
|
15
|
+
viewportY: number;
|
|
16
|
+
getLine(index: number): XtermBufferLine | undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type XtermTerminal = {
|
|
20
|
+
buffer: { active: XtermBuffer };
|
|
21
|
+
write(data: string, callback?: () => void): void;
|
|
22
|
+
resize(cols: number, rows: number): void;
|
|
23
|
+
dispose(): void;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
let TerminalCtor: (new (options: { cols: number; rows: number; scrollback: number }) => XtermTerminal) | null = null;
|
|
27
|
+
|
|
28
|
+
function loadTerminalCtor(): new (options: { cols: number; rows: number; scrollback: number }) => XtermTerminal {
|
|
29
|
+
if (!TerminalCtor) {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
31
|
+
const mod = require('@xterm/xterm');
|
|
32
|
+
TerminalCtor = mod.Terminal || mod.default?.Terminal || mod.default;
|
|
33
|
+
if (!TerminalCtor) {
|
|
34
|
+
throw new Error('@xterm/xterm Terminal export not found');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return TerminalCtor;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class TerminalScreen {
|
|
41
|
+
private rows: number;
|
|
42
|
+
private cols: number;
|
|
43
|
+
private terminal: XtermTerminal;
|
|
44
|
+
|
|
45
|
+
constructor(rows = 40, cols = 120) {
|
|
46
|
+
this.rows = Math.max(1, rows | 0);
|
|
47
|
+
this.cols = Math.max(1, cols | 0);
|
|
48
|
+
this.terminal = this.createTerminal();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
reset(rows = this.rows, cols = this.cols): void {
|
|
52
|
+
this.rows = Math.max(1, rows | 0);
|
|
53
|
+
this.cols = Math.max(1, cols | 0);
|
|
54
|
+
this.terminal.dispose();
|
|
55
|
+
this.terminal = this.createTerminal();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
resize(rows: number, cols: number): void {
|
|
59
|
+
this.rows = Math.max(1, rows | 0);
|
|
60
|
+
this.cols = Math.max(1, cols | 0);
|
|
61
|
+
this.terminal.resize(this.cols, this.rows);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
write(data: string): void {
|
|
65
|
+
if (!data) return;
|
|
66
|
+
this.terminal.write(data);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
getText(): string {
|
|
70
|
+
const buffer = this.terminal.buffer.active;
|
|
71
|
+
const start = Math.max(0, buffer.viewportY || 0);
|
|
72
|
+
const end = Math.max(start, Math.min(buffer.length || 0, start + this.rows));
|
|
73
|
+
const lines: string[] = [];
|
|
74
|
+
|
|
75
|
+
for (let i = start; i < end; i++) {
|
|
76
|
+
const line = buffer.getLine(i);
|
|
77
|
+
lines.push(line ? line.translateToString(true) : '');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let first = 0;
|
|
81
|
+
let last = lines.length;
|
|
82
|
+
while (first < last && !lines[first]?.trim()) first++;
|
|
83
|
+
while (last > first && !lines[last - 1]?.trim()) last--;
|
|
84
|
+
return lines.slice(first, last).join('\n');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private createTerminal(): XtermTerminal {
|
|
88
|
+
const Terminal = loadTerminalCtor();
|
|
89
|
+
return new Terminal({
|
|
90
|
+
cols: this.cols,
|
|
91
|
+
rows: this.rows,
|
|
92
|
+
scrollback: 2000,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -7,6 +7,10 @@ import type { CommandResult, CommandHelpers } from './handler.js';
|
|
|
7
7
|
import { readChatHistory } from '../config/chat-history.js';
|
|
8
8
|
import { LOG } from '../logging/logger.js';
|
|
9
9
|
|
|
10
|
+
function getTargetedCliAdapter(h: CommandHelpers, args: any, providerType?: string) {
|
|
11
|
+
return h.getCliAdapter(args?._targetInstance || h.currentIdeType || providerType);
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
export async function handleChatHistory(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
11
15
|
const { agentType, offset, limit, instanceId } = args;
|
|
12
16
|
try {
|
|
@@ -20,13 +24,13 @@ export async function handleChatHistory(h: CommandHelpers, args: any): Promise<C
|
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
export async function handleReadChat(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
23
|
-
const provider = h.getProvider();
|
|
27
|
+
const provider = h.getProvider(args?.agentType);
|
|
24
28
|
|
|
25
29
|
const _log = (msg: string) => LOG.debug('Command', `[read_chat] ${msg}`);
|
|
26
30
|
|
|
27
31
|
// CLI / ACP category: read from adapter
|
|
28
32
|
if (provider?.category === 'cli' || provider?.category === 'acp') {
|
|
29
|
-
const adapter = h
|
|
33
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
30
34
|
if (adapter) {
|
|
31
35
|
_log(`${provider.category} adapter: ${(adapter as any).cliType}`);
|
|
32
36
|
const status = (adapter as any).getStatus?.();
|
|
@@ -140,7 +144,7 @@ export async function handleSendChat(h: CommandHelpers, args: any): Promise<Comm
|
|
|
140
144
|
const text = args?.text || args?.message;
|
|
141
145
|
if (!text) return { success: false, error: 'text required' };
|
|
142
146
|
const _log = (msg: string) => LOG.debug('Command', `[send_chat] ${msg}`);
|
|
143
|
-
const provider = h.getProvider();
|
|
147
|
+
const provider = h.getProvider(args?.agentType);
|
|
144
148
|
|
|
145
149
|
const _logSendSuccess = (method: string, targetAgent?: string) => {
|
|
146
150
|
h.historyWriter.appendNewMessages(
|
|
@@ -154,7 +158,7 @@ export async function handleSendChat(h: CommandHelpers, args: any): Promise<Comm
|
|
|
154
158
|
|
|
155
159
|
// CLI / ACP category: transmit via adapter
|
|
156
160
|
if (provider?.category === 'cli' || provider?.category === 'acp') {
|
|
157
|
-
const adapter = h
|
|
161
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
158
162
|
if (adapter) {
|
|
159
163
|
_log(`${provider.category} adapter: ${(adapter as any).cliType}`);
|
|
160
164
|
try {
|
|
@@ -305,7 +309,7 @@ export async function handleSendChat(h: CommandHelpers, args: any): Promise<Comm
|
|
|
305
309
|
}
|
|
306
310
|
|
|
307
311
|
export async function handleListChats(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
308
|
-
const provider = h.getProvider();
|
|
312
|
+
const provider = h.getProvider(args?.agentType);
|
|
309
313
|
|
|
310
314
|
// Extension: via AgentStreamManager
|
|
311
315
|
if (provider?.category === 'extension' && h.agentStream && h.getCdp()) {
|
|
@@ -355,7 +359,17 @@ export async function handleListChats(h: CommandHelpers, args: any): Promise<Com
|
|
|
355
359
|
}
|
|
356
360
|
|
|
357
361
|
export async function handleNewChat(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
358
|
-
const provider = h.getProvider();
|
|
362
|
+
const provider = h.getProvider(args?.agentType);
|
|
363
|
+
|
|
364
|
+
if (provider?.category === 'cli') {
|
|
365
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
366
|
+
if (!adapter) return { success: false, error: 'CLI adapter not running' };
|
|
367
|
+
if (typeof (adapter as any).clearHistory === 'function') {
|
|
368
|
+
(adapter as any).clearHistory();
|
|
369
|
+
return { success: true, cleared: true };
|
|
370
|
+
}
|
|
371
|
+
return { success: false, error: 'new_chat not supported by this CLI provider' };
|
|
372
|
+
}
|
|
359
373
|
|
|
360
374
|
if (provider?.category === 'extension' && h.agentStream && h.getCdp()) {
|
|
361
375
|
const ok = await h.agentStream.newAgentSession(h.getCdp()!, provider.type, h.currentIdeType);
|
|
@@ -386,7 +400,7 @@ export async function handleNewChat(h: CommandHelpers, args: any): Promise<Comma
|
|
|
386
400
|
}
|
|
387
401
|
|
|
388
402
|
export async function handleSwitchChat(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
389
|
-
const provider = h.getProvider();
|
|
403
|
+
const provider = h.getProvider(args?.agentType);
|
|
390
404
|
const ideType = h.currentIdeType;
|
|
391
405
|
const sessionId = args?.sessionId || args?.id || args?.chatId;
|
|
392
406
|
if (!sessionId) return { success: false, error: 'sessionId required' };
|
|
@@ -473,12 +487,12 @@ export async function handleSwitchChat(h: CommandHelpers, args: any): Promise<Co
|
|
|
473
487
|
}
|
|
474
488
|
|
|
475
489
|
export async function handleSetMode(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
476
|
-
const provider = h.getProvider();
|
|
490
|
+
const provider = h.getProvider(args?.agentType);
|
|
477
491
|
const mode = args?.mode || 'agent';
|
|
478
492
|
|
|
479
493
|
// ACP provider
|
|
480
494
|
if (provider?.category === 'acp') {
|
|
481
|
-
const adapter = h
|
|
495
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
482
496
|
if (adapter) {
|
|
483
497
|
const acpInstance = (adapter as any)._acpInstance;
|
|
484
498
|
if (acpInstance && typeof acpInstance.onEvent === 'function') {
|
|
@@ -526,14 +540,14 @@ export async function handleSetMode(h: CommandHelpers, args: any): Promise<Comma
|
|
|
526
540
|
}
|
|
527
541
|
|
|
528
542
|
export async function handleChangeModel(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
529
|
-
const provider = h.getProvider();
|
|
543
|
+
const provider = h.getProvider(args?.agentType);
|
|
530
544
|
const model = args?.model;
|
|
531
545
|
|
|
532
546
|
LOG.info('Command', `[change_model] model=${model} provider=${provider?.type} category=${provider?.category} ideType=${h.currentIdeType} providerType=${h.currentProviderType}`);
|
|
533
547
|
|
|
534
548
|
// ACP provider
|
|
535
549
|
if (provider?.category === 'acp') {
|
|
536
|
-
const adapter = h
|
|
550
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
537
551
|
LOG.info('Command', `[change_model] ACP adapter found: ${!!adapter}, type=${(adapter as any)?.cliType}, hasAcpInstance=${!!(adapter as any)?._acpInstance}`);
|
|
538
552
|
if (adapter) {
|
|
539
553
|
const acpInstance = (adapter as any)._acpInstance;
|
|
@@ -587,11 +601,11 @@ export async function handleSetThoughtLevel(h: CommandHelpers, args: any): Promi
|
|
|
587
601
|
const value = args?.value;
|
|
588
602
|
if (!configId || !value) return { success: false, error: 'configId and value required' };
|
|
589
603
|
|
|
590
|
-
const provider = h.getProvider();
|
|
604
|
+
const provider = h.getProvider(args?.agentType);
|
|
591
605
|
if (!provider || provider.category !== 'acp') {
|
|
592
606
|
return { success: false, error: 'set_thought_level only for ACP providers' };
|
|
593
607
|
}
|
|
594
|
-
const adapter = h
|
|
608
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
595
609
|
const acpInstance = adapter?._acpInstance;
|
|
596
610
|
if (!acpInstance) return { success: false, error: 'ACP instance not found' };
|
|
597
611
|
|
|
@@ -605,7 +619,7 @@ export async function handleSetThoughtLevel(h: CommandHelpers, args: any): Promi
|
|
|
605
619
|
}
|
|
606
620
|
|
|
607
621
|
export async function handleResolveAction(h: CommandHelpers, args: any): Promise<CommandResult> {
|
|
608
|
-
const provider = h.getProvider();
|
|
622
|
+
const provider = h.getProvider(args?.agentType);
|
|
609
623
|
const action = args?.action || 'approve';
|
|
610
624
|
const button = args?.button || args?.buttonText
|
|
611
625
|
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : 'Accept');
|
|
@@ -614,8 +628,20 @@ export async function handleResolveAction(h: CommandHelpers, args: any): Promise
|
|
|
614
628
|
|
|
615
629
|
// 0. CLI / ACP category: navigate approval dialog via PTY arrow keys + Enter
|
|
616
630
|
if (provider?.category === 'cli') {
|
|
617
|
-
const adapter = h
|
|
631
|
+
const adapter = getTargetedCliAdapter(h, args, provider.type);
|
|
618
632
|
if (!adapter) return { success: false, error: 'CLI adapter not running' };
|
|
633
|
+
|
|
634
|
+
// Handle data-driven resolve actions (like from the dashboard 'Fix' button)
|
|
635
|
+
if (args?.data && typeof (adapter as any).resolveAction === 'function') {
|
|
636
|
+
try {
|
|
637
|
+
await (adapter as any).resolveAction(args.data);
|
|
638
|
+
LOG.info('Command', `[resolveAction] CLI PTY → resolveAction triggered with data payload`);
|
|
639
|
+
return { success: true, method: 'cli-resolve-action' };
|
|
640
|
+
} catch (e: any) {
|
|
641
|
+
return { success: false, error: `CLI resolveAction failed: ${e.message}` };
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
619
645
|
const status = (adapter as any).getStatus?.();
|
|
620
646
|
if (status?.status !== 'waiting_approval') {
|
|
621
647
|
return { success: false, error: 'Not in approval state' };
|
|
@@ -83,7 +83,8 @@ export class DaemonCliManager {
|
|
|
83
83
|
const provider = this.providerLoader.getMeta(normalizedType);
|
|
84
84
|
if (provider && provider.category === 'cli' && provider.patterns && provider.spawn) {
|
|
85
85
|
console.log(chalk.cyan(` 📦 Using provider: ${provider.name} (${provider.type})`));
|
|
86
|
-
|
|
86
|
+
const resolvedProvider = this.providerLoader.resolve(normalizedType) || provider;
|
|
87
|
+
return new ProviderCliAdapter(resolvedProvider as any, workingDir, cliArgs);
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
throw new Error(`No CLI provider found for '${cliType}'. Create a provider.js in providers/cli/${cliType}/`);
|
|
@@ -182,7 +183,8 @@ export class DaemonCliManager {
|
|
|
182
183
|
// If InstanceManager exists, manage as CliProviderInstance unified
|
|
183
184
|
const instanceManager = this.deps.getInstanceManager();
|
|
184
185
|
if (provider && instanceManager) {
|
|
185
|
-
const
|
|
186
|
+
const resolvedProvider = this.providerLoader.resolve(cliType, { version: cliInfo.version }) || provider;
|
|
187
|
+
const cliInstance = new CliProviderInstance(resolvedProvider, resolvedDir, cliArgs, key);
|
|
186
188
|
try {
|
|
187
189
|
await instanceManager.addInstance(key, cliInstance, {
|
|
188
190
|
serverConn: this.deps.getServerConn(),
|