adhdev 0.1.53 → 0.2.0
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/cli-entrypoint.js +12020 -0
- package/dist/cli-entrypoint.js.map +1 -0
- package/dist/index.js +9789 -9864
- package/dist/index.js.map +1 -0
- package/package.json +19 -16
- package/providers/_builtin/CONTRIBUTING.md +141 -0
- package/providers/_builtin/README.md +51 -0
- package/providers/_builtin/acp/agentpool/provider.json +47 -0
- package/providers/_builtin/acp/amp/provider.json +45 -0
- package/providers/_builtin/acp/auggie/provider.json +50 -0
- package/providers/_builtin/acp/autodev/provider.json +47 -0
- package/providers/_builtin/acp/autohand/provider.json +45 -0
- package/providers/_builtin/acp/blackbox-ai/provider.json +47 -0
- package/providers/_builtin/acp/claude-agent/provider.json +50 -0
- package/providers/_builtin/acp/cline-acp/provider.json +47 -0
- package/providers/_builtin/acp/code-assistant/provider.json +47 -0
- package/providers/_builtin/acp/codebuddy/provider.json +47 -0
- package/providers/_builtin/acp/codex-cli/provider.json +50 -0
- package/providers/_builtin/acp/corust-agent/provider.json +45 -0
- package/providers/_builtin/acp/crow-cli/provider.json +47 -0
- package/providers/_builtin/acp/cursor-acp/provider.json +47 -0
- package/providers/_builtin/acp/deepagents/provider.json +45 -0
- package/providers/_builtin/acp/dimcode/provider.json +47 -0
- package/providers/_builtin/acp/docker-cagent/provider.json +50 -0
- package/providers/_builtin/acp/factory-droid/provider.json +53 -0
- package/providers/_builtin/acp/fast-agent/provider.json +45 -0
- package/providers/_builtin/acp/fount/provider.json +47 -0
- package/providers/_builtin/acp/gemini-cli/provider.json +107 -0
- package/providers/_builtin/acp/github-copilot/provider.json +47 -0
- package/providers/_builtin/acp/goose/provider.json +50 -0
- package/providers/_builtin/acp/junie/provider.json +45 -0
- package/providers/_builtin/acp/kilo/provider.json +45 -0
- package/providers/_builtin/acp/kimi-cli/provider.json +50 -0
- package/providers/_builtin/acp/kiro-cli/provider.json +47 -0
- package/providers/_builtin/acp/minion-code/provider.json +45 -0
- package/providers/_builtin/acp/mistral-vibe/provider.json +50 -0
- package/providers/_builtin/acp/nova/provider.json +47 -0
- package/providers/_builtin/acp/openclaw/provider.json +47 -0
- package/providers/_builtin/acp/opencode/provider.json +45 -0
- package/providers/_builtin/acp/openhands/provider.json +47 -0
- package/providers/_builtin/acp/pi-acp/provider.json +45 -0
- package/providers/_builtin/acp/qoder/provider.json +47 -0
- package/providers/_builtin/acp/qwen-code/provider.json +53 -0
- package/providers/_builtin/acp/stakpak/provider.json +47 -0
- package/providers/_builtin/acp/vtcode/provider.json +47 -0
- package/providers/_builtin/cli/claude-cli/provider.json +78 -0
- package/providers/_builtin/cli/codex-cli/provider.json +60 -0
- package/providers/_builtin/cli/gemini-cli/provider.json +64 -0
- package/providers/_builtin/extension/cline/provider.json +11 -0
- package/providers/_builtin/extension/cline/scripts/open_panel.js +1 -1
- package/providers/_builtin/extension/cline/{provider.js → scripts.js} +29 -55
- package/providers/_builtin/extension/roo-code/provider.json +11 -0
- package/providers/_builtin/extension/roo-code/{provider.js → scripts.js} +27 -97
- package/providers/_builtin/ide/antigravity/provider.json +32 -0
- package/providers/_builtin/ide/antigravity/scripts.js +73 -0
- package/providers/_builtin/ide/cursor/provider.json +35 -0
- package/providers/_builtin/ide/cursor/{provider.js → scripts.js} +31 -69
- package/providers/_builtin/ide/kiro/provider.json +36 -0
- package/providers/_builtin/ide/kiro/scripts/webview_send_message.js +72 -0
- package/providers/_builtin/ide/kiro/scripts.js +62 -0
- package/providers/_builtin/ide/pearai/provider.json +36 -0
- package/providers/_builtin/ide/pearai/scripts/list_sessions.js +38 -0
- package/providers/_builtin/ide/pearai/scripts/new_session.js +55 -0
- package/providers/_builtin/ide/pearai/scripts/webview_list_sessions.js +62 -0
- package/providers/_builtin/ide/pearai/scripts/webview_new_session.js +32 -4
- package/providers/_builtin/ide/pearai/scripts/webview_send_message.js +72 -0
- package/providers/_builtin/ide/pearai/scripts/webview_switch_session.js +34 -0
- package/providers/_builtin/ide/pearai/scripts.js +74 -0
- package/providers/_builtin/ide/trae/provider.json +35 -0
- package/providers/_builtin/ide/trae/scripts/send_message.js +53 -3
- package/providers/_builtin/ide/trae/scripts.js +57 -0
- package/providers/_builtin/ide/vscode/provider.json +33 -0
- package/providers/_builtin/ide/vscode-insiders/provider.json +31 -0
- package/providers/_builtin/ide/vscodium/provider.json +32 -0
- package/providers/_builtin/ide/windsurf/provider.json +22 -0
- package/providers/_builtin/ide/windsurf/scripts.js +57 -0
- package/providers/_builtin/validate.js +156 -0
- package/README.md +0 -43
- package/dist/dev-console-monaco.js +0 -176
- package/dist/dev-console.css +0 -326
- package/dist/dev-console.html +0 -148
- package/dist/dev-console.js +0 -1165
- package/dist/index.d.ts +0 -2
- package/dist/node_datachannel-LPY6EJH5.node +0 -0
- package/providers/_builtin/acp/codex-cli/provider.js +0 -54
- package/providers/_builtin/acp/goose/provider.js +0 -32
- package/providers/_builtin/acp/opencode/provider.js +0 -32
- package/providers/_builtin/cli/claude-cli/provider.js +0 -125
- package/providers/_builtin/cli/codex-cli/provider.js +0 -77
- package/providers/_builtin/cli/gemini-cli/provider.js +0 -121
- package/providers/_builtin/ide/antigravity/provider.js +0 -114
- package/providers/_builtin/ide/cursor/provider.js.backup +0 -116
- package/providers/_builtin/ide/cursor/provider.js.bak +0 -127
- package/providers/_builtin/ide/cursor/scripts_backup/focus_editor.js +0 -20
- package/providers/_builtin/ide/cursor/scripts_backup/list_chats.js +0 -111
- package/providers/_builtin/ide/cursor/scripts_backup/new_session.js +0 -62
- package/providers/_builtin/ide/cursor/scripts_backup/open_panel.js +0 -31
- package/providers/_builtin/ide/cursor/scripts_backup/read_chat.js +0 -433
- package/providers/_builtin/ide/cursor/scripts_backup/resolve_action.js +0 -90
- package/providers/_builtin/ide/cursor/scripts_backup/send_message.js +0 -86
- package/providers/_builtin/ide/cursor/scripts_backup/switch_session.js +0 -63
- package/providers/_builtin/ide/kiro/provider.js +0 -86
- package/providers/_builtin/ide/pearai/provider.js +0 -88
- package/providers/_builtin/ide/trae/provider.js +0 -83
- package/providers/_builtin/ide/vscode/provider.js +0 -36
- package/providers/_builtin/ide/vscode-insiders/provider.js +0 -27
- package/providers/_builtin/ide/vscodium/provider.js +0 -27
- package/providers/_builtin/ide/windsurf/provider.js +0 -76
- /package/providers/{_helpers → _builtin/_helpers}/index.js +0 -0
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor v1 — switch_session
|
|
3
|
-
*
|
|
4
|
-
* CURSOR.md 4-4: data-composer-id → DOM 텍스트 매칭 → scrollIntoView + 클릭
|
|
5
|
-
* 파라미터: ${ SESSION_ID }
|
|
6
|
-
* 최종 확인: 2026-03-06
|
|
7
|
-
*/
|
|
8
|
-
(async () => {
|
|
9
|
-
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
|
|
10
|
-
const id = ${ SESSION_ID };
|
|
11
|
-
|
|
12
|
-
// 1. Agents 패널 가시성 확인 → 토글 (CURSOR.md 4-4)
|
|
13
|
-
const ensureHistoryVisible = async () => {
|
|
14
|
-
const findAgentsToggle = () => {
|
|
15
|
-
const allHeaders = Array.from(document.querySelectorAll('.pane-header, .monaco-list-row, .tree-item, [role="button"]'));
|
|
16
|
-
return allHeaders.find(h => h.textContent && h.textContent.includes('Agents') && (h.querySelector('.codicon-chevron-right') || h.getAttribute('aria-expanded') === 'false' || h.classList.contains('collapsed')));
|
|
17
|
-
};
|
|
18
|
-
// CURSOR.md: 히스토리 항목 셀렉터
|
|
19
|
-
const hasItems = () => document.querySelectorAll('.agent-sidebar-cell, .composer-history-item, .chat-history-item, .composer-below-chat-history-item').length > 0;
|
|
20
|
-
if (hasItems()) return;
|
|
21
|
-
let agentToggle = findAgentsToggle();
|
|
22
|
-
if (!agentToggle) {
|
|
23
|
-
const sideBarIcon = Array.from(document.querySelectorAll('.action-item, .composite-bar-item, [role="button"]'))
|
|
24
|
-
.find(el => { const label = (el.getAttribute && el.getAttribute('aria-label')) || ''; return label.includes('Agents') || label.includes('Toggle Agents') || label.includes('Chat'); });
|
|
25
|
-
if (sideBarIcon) { sideBarIcon.click(); await sleep(500); agentToggle = findAgentsToggle(); }
|
|
26
|
-
}
|
|
27
|
-
if (agentToggle) { agentToggle.click(); await sleep(600); }
|
|
28
|
-
};
|
|
29
|
-
await ensureHistoryVisible();
|
|
30
|
-
|
|
31
|
-
// 2. 대상 찾기 (CURSOR.md: data-composer-id/data-id → 텍스트 매칭)
|
|
32
|
-
const findTarget = () => {
|
|
33
|
-
const byAttr = document.querySelectorAll('[data-composer-id], [data-id]');
|
|
34
|
-
for (var a = 0; a < byAttr.length; a++) {
|
|
35
|
-
var el = byAttr[a];
|
|
36
|
-
var dataId = el.getAttribute('data-composer-id') || el.getAttribute('data-id') || el.id;
|
|
37
|
-
if (dataId === id) return el;
|
|
38
|
-
}
|
|
39
|
-
const selectors = ['.agent-sidebar-cell', '.composer-below-chat-history-item', '.chat-history-item', '.composer-history-item', '.monaco-list-row'];
|
|
40
|
-
const allItems = document.querySelectorAll(selectors.join(', '));
|
|
41
|
-
for (var j = 0; j < allItems.length; j++) {
|
|
42
|
-
var item = allItems[j];
|
|
43
|
-
var dataId = item.getAttribute && (item.getAttribute('data-composer-id') || item.getAttribute('data-id') || item.id);
|
|
44
|
-
if (dataId === id) return item;
|
|
45
|
-
if (item.textContent && item.textContent.indexOf(id) >= 0) return item;
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// 3. 클릭 (CURSOR.md: scrollIntoView + MouseEvent)
|
|
51
|
-
var target = findTarget();
|
|
52
|
-
if (target) {
|
|
53
|
-
target.scrollIntoView({ block: 'center', behavior: 'auto' });
|
|
54
|
-
await sleep(150);
|
|
55
|
-
const rect = target.getBoundingClientRect();
|
|
56
|
-
const options = { bubbles: true, cancelable: true, view: window, clientX: rect.left + rect.width / 2, clientY: rect.top + rect.height / 2 };
|
|
57
|
-
target.dispatchEvent(new MouseEvent('mousedown', options));
|
|
58
|
-
target.dispatchEvent(new MouseEvent('mouseup', options));
|
|
59
|
-
target.dispatchEvent(new MouseEvent('click', options));
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
return false;
|
|
63
|
-
})()
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kiro (AWS) — IDE Provider
|
|
3
|
-
*
|
|
4
|
-
* Category: ide (VS Code fork, Code-OSS based)
|
|
5
|
-
* AWS의 AI-native spec-driven IDE
|
|
6
|
-
*
|
|
7
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
8
|
-
*/
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const SCRIPTS_DIR = path.join(__dirname, 'scripts');
|
|
13
|
-
|
|
14
|
-
function loadScript(name) {
|
|
15
|
-
try {
|
|
16
|
-
return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8');
|
|
17
|
-
} catch {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = {
|
|
23
|
-
type: 'kiro',
|
|
24
|
-
name: 'Kiro',
|
|
25
|
-
category: 'ide',
|
|
26
|
-
|
|
27
|
-
// ─── IDE 인프라 ───
|
|
28
|
-
displayName: 'Kiro',
|
|
29
|
-
icon: '🪁',
|
|
30
|
-
cli: 'kiro',
|
|
31
|
-
cdpPorts: [9351, 9352],
|
|
32
|
-
processNames: {
|
|
33
|
-
darwin: 'Kiro',
|
|
34
|
-
win32: ['Kiro.exe'],
|
|
35
|
-
linux: ['kiro'],
|
|
36
|
-
},
|
|
37
|
-
paths: {
|
|
38
|
-
darwin: ['/Applications/Kiro.app'],
|
|
39
|
-
win32: [
|
|
40
|
-
'C:\\Users\\*\\AppData\\Local\\Programs\\kiro\\Kiro.exe',
|
|
41
|
-
],
|
|
42
|
-
linux: ['/opt/kiro', '/usr/share/kiro'],
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
inputMethod: 'cdp-type-and-send',
|
|
46
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
47
|
-
|
|
48
|
-
// Kiro의 채팅 UI는 webview iframe 내부
|
|
49
|
-
webviewMatchText: 'kiro-chat',
|
|
50
|
-
|
|
51
|
-
scripts: {
|
|
52
|
-
webviewReadChat() { return loadScript('webview_read_chat.js'); },
|
|
53
|
-
sendMessage(text) {
|
|
54
|
-
const s = loadScript('send_message.js');
|
|
55
|
-
return s ? s.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text)) : null;
|
|
56
|
-
},
|
|
57
|
-
resolveAction(params) {
|
|
58
|
-
const action = typeof params === 'string' ? params : params?.action || 'approve';
|
|
59
|
-
const buttonText = params?.button || params?.buttonText
|
|
60
|
-
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
|
|
61
|
-
const s = loadScript('resolve_action.js');
|
|
62
|
-
return s ? s.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText)) : null;
|
|
63
|
-
},
|
|
64
|
-
openPanel() { return loadScript('open_panel.js'); },
|
|
65
|
-
focusEditor() { return loadScript('focus_editor.js'); },
|
|
66
|
-
// 세션 관리 (webview)
|
|
67
|
-
webviewListSessions() { return loadScript('webview_list_sessions.js'); },
|
|
68
|
-
webviewNewSession() { return loadScript('webview_new_session.js'); },
|
|
69
|
-
webviewSwitchSession(sessionId) {
|
|
70
|
-
const s = loadScript('webview_switch_session.js');
|
|
71
|
-
return s ? s.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId)) : null;
|
|
72
|
-
},
|
|
73
|
-
webviewListModels() { return loadScript('webview_list_models.js'); },
|
|
74
|
-
webviewSetModel(params) {
|
|
75
|
-
const model = typeof params === 'string' ? params : params?.model;
|
|
76
|
-
const s = loadScript('webview_set_model.js');
|
|
77
|
-
return s ? s.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model)) : null;
|
|
78
|
-
},
|
|
79
|
-
webviewListModes() { return loadScript('webview_list_modes.js'); },
|
|
80
|
-
webviewSetMode(params) {
|
|
81
|
-
const mode = typeof params === 'string' ? params : params?.mode;
|
|
82
|
-
const s = loadScript('webview_set_mode.js');
|
|
83
|
-
return s ? s.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode)) : null;
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PearAI — IDE Provider
|
|
3
|
-
*
|
|
4
|
-
* Category: ide (VS Code + Continue fork)
|
|
5
|
-
* AI-powered open-source code editor
|
|
6
|
-
*
|
|
7
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
8
|
-
*/
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const SCRIPTS_DIR = path.join(__dirname, 'scripts');
|
|
13
|
-
|
|
14
|
-
function loadScript(name) {
|
|
15
|
-
try {
|
|
16
|
-
return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8');
|
|
17
|
-
} catch {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = {
|
|
23
|
-
type: 'pearai',
|
|
24
|
-
name: 'PearAI',
|
|
25
|
-
category: 'ide',
|
|
26
|
-
|
|
27
|
-
// ─── IDE 인프라 ───
|
|
28
|
-
displayName: 'PearAI',
|
|
29
|
-
icon: '🍐',
|
|
30
|
-
cli: 'pearai',
|
|
31
|
-
cdpPorts: [9355, 9356],
|
|
32
|
-
processNames: {
|
|
33
|
-
darwin: 'PearAI',
|
|
34
|
-
win32: ['PearAI.exe'],
|
|
35
|
-
linux: ['pearai'],
|
|
36
|
-
},
|
|
37
|
-
paths: {
|
|
38
|
-
darwin: ['/Applications/PearAI.app'],
|
|
39
|
-
win32: [
|
|
40
|
-
'C:\\Users\\*\\AppData\\Local\\Programs\\pearai\\PearAI.exe',
|
|
41
|
-
],
|
|
42
|
-
linux: ['/opt/pearai', '/usr/share/pearai'],
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
inputMethod: 'cdp-type-and-send',
|
|
46
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
47
|
-
|
|
48
|
-
// PearAI의 Agent 채팅 UI는 webview iframe 내부 (Roo Code/Cline 기반)
|
|
49
|
-
webviewMatchText: 'chat-text-area',
|
|
50
|
-
|
|
51
|
-
scripts: {
|
|
52
|
-
webviewReadChat() { return loadScript('webview_read_chat.js'); },
|
|
53
|
-
sendMessage(text) {
|
|
54
|
-
const s = loadScript('send_message.js');
|
|
55
|
-
return s ? s.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text)) : null;
|
|
56
|
-
},
|
|
57
|
-
resolveAction(params) {
|
|
58
|
-
const action = typeof params === 'string' ? params : params?.action || 'approve';
|
|
59
|
-
const buttonText = params?.button || params?.buttonText
|
|
60
|
-
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
|
|
61
|
-
const s = loadScript('resolve_action.js');
|
|
62
|
-
return s ? s.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText)) : null;
|
|
63
|
-
},
|
|
64
|
-
webviewResolveAction(params) {
|
|
65
|
-
const action = typeof params === 'string' ? params : params?.action || 'approve';
|
|
66
|
-
const buttonText = params?.button || params?.buttonText
|
|
67
|
-
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
|
|
68
|
-
const s = loadScript('webview_resolve_action.js');
|
|
69
|
-
return s ? s.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText)) : null;
|
|
70
|
-
},
|
|
71
|
-
openPanel() { return loadScript('open_panel.js'); },
|
|
72
|
-
focusEditor() { return loadScript('focus_editor.js'); },
|
|
73
|
-
// 세션 관리 (webview)
|
|
74
|
-
webviewNewSession() { return loadScript('webview_new_session.js'); },
|
|
75
|
-
webviewListModels() { return loadScript('webview_list_models.js'); },
|
|
76
|
-
webviewSetModel(params) {
|
|
77
|
-
const model = typeof params === 'string' ? params : params?.model;
|
|
78
|
-
const s = loadScript('webview_set_model.js');
|
|
79
|
-
return s ? s.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model)) : null;
|
|
80
|
-
},
|
|
81
|
-
webviewListModes() { return loadScript('webview_list_modes.js'); },
|
|
82
|
-
webviewSetMode(params) {
|
|
83
|
-
const mode = typeof params === 'string' ? params : params?.mode;
|
|
84
|
-
const s = loadScript('webview_set_mode.js');
|
|
85
|
-
return s ? s.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode)) : null;
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
};
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Trae — IDE Provider
|
|
3
|
-
*
|
|
4
|
-
* Category: ide (VS Code fork by ByteDance)
|
|
5
|
-
* AI-powered code editor
|
|
6
|
-
*
|
|
7
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
8
|
-
*/
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const SCRIPTS_DIR = path.join(__dirname, 'scripts');
|
|
13
|
-
|
|
14
|
-
function loadScript(name) {
|
|
15
|
-
try {
|
|
16
|
-
return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8');
|
|
17
|
-
} catch {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = {
|
|
23
|
-
type: 'trae',
|
|
24
|
-
name: 'Trae',
|
|
25
|
-
category: 'ide',
|
|
26
|
-
|
|
27
|
-
// ─── IDE 인프라 ───
|
|
28
|
-
displayName: 'Trae',
|
|
29
|
-
icon: '🔮',
|
|
30
|
-
cli: 'trae',
|
|
31
|
-
cdpPorts: [9353, 9354],
|
|
32
|
-
processNames: {
|
|
33
|
-
darwin: 'Trae',
|
|
34
|
-
win32: ['Trae.exe'],
|
|
35
|
-
linux: ['trae'],
|
|
36
|
-
},
|
|
37
|
-
paths: {
|
|
38
|
-
darwin: ['/Applications/Trae.app'],
|
|
39
|
-
win32: [
|
|
40
|
-
'C:\\Users\\*\\AppData\\Local\\Programs\\trae\\Trae.exe',
|
|
41
|
-
],
|
|
42
|
-
linux: ['/opt/trae', '/usr/share/trae'],
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
inputMethod: 'cdp-type-and-send',
|
|
46
|
-
inputSelector: '.chat-input-v2-input-box-editable, [contenteditable="true"][role="textbox"]',
|
|
47
|
-
|
|
48
|
-
scripts: {
|
|
49
|
-
readChat() { return loadScript('read_chat.js'); },
|
|
50
|
-
sendMessage(text) {
|
|
51
|
-
const s = loadScript('send_message.js');
|
|
52
|
-
return s ? s.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text)) : null;
|
|
53
|
-
},
|
|
54
|
-
resolveAction(params) {
|
|
55
|
-
const action = typeof params === 'string' ? params : params?.action || 'approve';
|
|
56
|
-
const buttonText = params?.button || params?.buttonText
|
|
57
|
-
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
|
|
58
|
-
const s = loadScript('resolve_action.js');
|
|
59
|
-
return s ? s.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText)) : null;
|
|
60
|
-
},
|
|
61
|
-
openPanel() { return loadScript('open_panel.js'); },
|
|
62
|
-
focusEditor() { return loadScript('focus_editor.js'); },
|
|
63
|
-
// 세션 관리
|
|
64
|
-
newSession() { return loadScript('new_session.js'); },
|
|
65
|
-
listSessions() { return loadScript('list_chats.js'); },
|
|
66
|
-
switchSession(sessionId) {
|
|
67
|
-
const s = loadScript('switch_session.js');
|
|
68
|
-
return s ? s.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId)) : null;
|
|
69
|
-
},
|
|
70
|
-
listModels() { return loadScript('list_models.js'); },
|
|
71
|
-
setModel(params) {
|
|
72
|
-
const model = typeof params === 'string' ? params : params?.model;
|
|
73
|
-
const s = loadScript('set_model.js');
|
|
74
|
-
return s ? s.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model)) : null;
|
|
75
|
-
},
|
|
76
|
-
listModes() { return loadScript('list_modes.js'); },
|
|
77
|
-
setMode(params) {
|
|
78
|
-
const mode = typeof params === 'string' ? params : params?.mode;
|
|
79
|
-
const s = loadScript('set_mode.js');
|
|
80
|
-
return s ? s.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode)) : null;
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Visual Studio Code — IDE Provider
|
|
3
|
-
*
|
|
4
|
-
* Category: ide
|
|
5
|
-
* 인프라 정보만 제공 (CDP 스크립트는 cursor와 유사 — 향후 추가)
|
|
6
|
-
*
|
|
7
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
8
|
-
*/
|
|
9
|
-
module.exports = {
|
|
10
|
-
type: 'vscode',
|
|
11
|
-
name: 'Visual Studio Code',
|
|
12
|
-
category: 'ide',
|
|
13
|
-
|
|
14
|
-
// ─── IDE 인프라 ───
|
|
15
|
-
displayName: 'VS Code',
|
|
16
|
-
icon: '💙',
|
|
17
|
-
cli: 'code',
|
|
18
|
-
cdpPorts: [9339, 9340],
|
|
19
|
-
processNames: {
|
|
20
|
-
darwin: 'Visual Studio Code',
|
|
21
|
-
win32: ['Code.exe'],
|
|
22
|
-
},
|
|
23
|
-
paths: {
|
|
24
|
-
darwin: ['/Applications/Visual Studio Code.app'],
|
|
25
|
-
win32: [
|
|
26
|
-
'C:\\Program Files\\Microsoft VS Code\\Code.exe',
|
|
27
|
-
'C:\\Users\\*\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe',
|
|
28
|
-
],
|
|
29
|
-
linux: ['/usr/share/code', '/snap/code/current'],
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
inputMethod: 'cdp-type-and-send',
|
|
33
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
34
|
-
|
|
35
|
-
scripts: {},
|
|
36
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VS Code Insiders — IDE Provider
|
|
3
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
4
|
-
*/
|
|
5
|
-
module.exports = {
|
|
6
|
-
type: 'vscode-insiders',
|
|
7
|
-
name: 'Visual Studio Code - Insiders',
|
|
8
|
-
category: 'ide',
|
|
9
|
-
|
|
10
|
-
displayName: 'VS Code Insiders',
|
|
11
|
-
icon: '💚',
|
|
12
|
-
cli: 'code-insiders',
|
|
13
|
-
cdpPorts: [9341, 9342],
|
|
14
|
-
processNames: {
|
|
15
|
-
darwin: 'Visual Studio Code - Insiders',
|
|
16
|
-
win32: ['Code - Insiders.exe'],
|
|
17
|
-
},
|
|
18
|
-
paths: {
|
|
19
|
-
darwin: ['/Applications/Visual Studio Code - Insiders.app'],
|
|
20
|
-
win32: ['C:\\Program Files\\Microsoft VS Code Insiders\\Code - Insiders.exe'],
|
|
21
|
-
linux: ['/usr/share/code-insiders'],
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
inputMethod: 'cdp-type-and-send',
|
|
25
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
26
|
-
scripts: {},
|
|
27
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VSCodium — IDE Provider
|
|
3
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
4
|
-
*/
|
|
5
|
-
module.exports = {
|
|
6
|
-
type: 'vscodium',
|
|
7
|
-
name: 'VSCodium',
|
|
8
|
-
category: 'ide',
|
|
9
|
-
|
|
10
|
-
displayName: 'VSCodium',
|
|
11
|
-
icon: '💚',
|
|
12
|
-
cli: 'codium',
|
|
13
|
-
cdpPorts: [9343, 9344],
|
|
14
|
-
processNames: {
|
|
15
|
-
darwin: 'VSCodium',
|
|
16
|
-
win32: ['VSCodium.exe'],
|
|
17
|
-
},
|
|
18
|
-
paths: {
|
|
19
|
-
darwin: ['/Applications/VSCodium.app'],
|
|
20
|
-
win32: ['C:\\Program Files\\VSCodium\\VSCodium.exe'],
|
|
21
|
-
linux: ['/usr/share/codium', '/snap/codium/current'],
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
inputMethod: 'cdp-type-and-send',
|
|
25
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
26
|
-
scripts: {},
|
|
27
|
-
};
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Windsurf — IDE Provider
|
|
3
|
-
*
|
|
4
|
-
* Category: ide (workbench CDP session — iframe 없음)
|
|
5
|
-
* Cascade 에디터 기반
|
|
6
|
-
*
|
|
7
|
-
* @type {import('../../../src/providers/contracts').ProviderModule}
|
|
8
|
-
*/
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const SCRIPTS_DIR = path.join(__dirname, 'scripts');
|
|
13
|
-
|
|
14
|
-
function loadScript(name) {
|
|
15
|
-
try {
|
|
16
|
-
return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8');
|
|
17
|
-
} catch {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = {
|
|
23
|
-
type: 'windsurf',
|
|
24
|
-
name: 'Windsurf',
|
|
25
|
-
category: 'ide',
|
|
26
|
-
|
|
27
|
-
// ─── IDE 인프라 ───
|
|
28
|
-
displayName: 'Windsurf',
|
|
29
|
-
icon: '🏄',
|
|
30
|
-
cli: 'windsurf',
|
|
31
|
-
cdpPorts: [9337, 9338],
|
|
32
|
-
processNames: {
|
|
33
|
-
darwin: 'Windsurf',
|
|
34
|
-
},
|
|
35
|
-
paths: {
|
|
36
|
-
darwin: ['/Applications/Windsurf.app'],
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
inputMethod: 'cdp-type-and-send',
|
|
40
|
-
inputSelector: '[contenteditable="true"][role="textbox"]',
|
|
41
|
-
|
|
42
|
-
scripts: {
|
|
43
|
-
readChat() { return loadScript('read_chat.js'); },
|
|
44
|
-
sendMessage(text) {
|
|
45
|
-
const s = loadScript('send_message.js');
|
|
46
|
-
return s ? s.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text)) : null;
|
|
47
|
-
},
|
|
48
|
-
listSessions() { return loadScript('list_chats.js'); },
|
|
49
|
-
switchSession(sessionId) {
|
|
50
|
-
const s = loadScript('switch_session.js');
|
|
51
|
-
return s ? s.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId)) : null;
|
|
52
|
-
},
|
|
53
|
-
newSession() { return loadScript('new_session.js'); },
|
|
54
|
-
resolveAction(params) {
|
|
55
|
-
const action = typeof params === 'string' ? params : params?.action || 'approve';
|
|
56
|
-
const buttonText = params?.button || params?.buttonText
|
|
57
|
-
|| (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
|
|
58
|
-
const s = loadScript('resolve_action.js');
|
|
59
|
-
return s ? s.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText)) : null;
|
|
60
|
-
},
|
|
61
|
-
focusEditor() { return loadScript('focus_editor.js'); },
|
|
62
|
-
listModels() { return loadScript('list_models.js'); },
|
|
63
|
-
setModel(params) {
|
|
64
|
-
const model = typeof params === 'string' ? params : params?.model;
|
|
65
|
-
const s = loadScript('set_model.js');
|
|
66
|
-
return s ? s.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model)) : null;
|
|
67
|
-
},
|
|
68
|
-
listModes() { return loadScript('list_modes.js'); },
|
|
69
|
-
setMode(params) {
|
|
70
|
-
const mode = typeof params === 'string' ? params : params?.mode;
|
|
71
|
-
const s = loadScript('set_mode.js');
|
|
72
|
-
return s ? s.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode)) : null;
|
|
73
|
-
},
|
|
74
|
-
openPanel() { return loadScript('open_panel.js'); },
|
|
75
|
-
},
|
|
76
|
-
};
|
|
File without changes
|