adhdev 0.1.54 → 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.
Files changed (122) hide show
  1. package/dist/cli-entrypoint.js +12020 -0
  2. package/dist/cli-entrypoint.js.map +1 -0
  3. package/dist/index.js +9721 -10847
  4. package/dist/index.js.map +1 -0
  5. package/package.json +19 -16
  6. package/providers/_builtin/acp/agentpool/provider.json +47 -0
  7. package/providers/_builtin/acp/amp/provider.json +45 -0
  8. package/providers/_builtin/acp/auggie/provider.json +50 -0
  9. package/providers/_builtin/acp/autodev/provider.json +47 -0
  10. package/providers/_builtin/acp/autohand/provider.json +45 -0
  11. package/providers/_builtin/acp/blackbox-ai/provider.json +47 -0
  12. package/providers/_builtin/acp/claude-agent/provider.json +50 -0
  13. package/providers/_builtin/acp/cline-acp/provider.json +47 -0
  14. package/providers/_builtin/acp/code-assistant/provider.json +47 -0
  15. package/providers/_builtin/acp/codebuddy/provider.json +47 -0
  16. package/providers/_builtin/acp/codex-cli/provider.json +50 -0
  17. package/providers/_builtin/acp/corust-agent/provider.json +45 -0
  18. package/providers/_builtin/acp/crow-cli/provider.json +47 -0
  19. package/providers/_builtin/acp/cursor-acp/provider.json +47 -0
  20. package/providers/_builtin/acp/deepagents/provider.json +45 -0
  21. package/providers/_builtin/acp/dimcode/provider.json +47 -0
  22. package/providers/_builtin/acp/docker-cagent/provider.json +50 -0
  23. package/providers/_builtin/acp/factory-droid/provider.json +53 -0
  24. package/providers/_builtin/acp/fast-agent/provider.json +45 -0
  25. package/providers/_builtin/acp/fount/provider.json +47 -0
  26. package/providers/_builtin/acp/gemini-cli/provider.json +107 -0
  27. package/providers/_builtin/acp/github-copilot/provider.json +47 -0
  28. package/providers/_builtin/acp/goose/provider.json +50 -0
  29. package/providers/_builtin/acp/junie/provider.json +45 -0
  30. package/providers/_builtin/acp/kilo/provider.json +45 -0
  31. package/providers/_builtin/acp/kimi-cli/provider.json +50 -0
  32. package/providers/_builtin/acp/kiro-cli/provider.json +47 -0
  33. package/providers/_builtin/acp/minion-code/provider.json +45 -0
  34. package/providers/_builtin/acp/mistral-vibe/provider.json +50 -0
  35. package/providers/_builtin/acp/nova/provider.json +47 -0
  36. package/providers/_builtin/acp/openclaw/provider.json +47 -0
  37. package/providers/_builtin/acp/opencode/provider.json +45 -0
  38. package/providers/_builtin/acp/openhands/provider.json +47 -0
  39. package/providers/_builtin/acp/pi-acp/provider.json +45 -0
  40. package/providers/_builtin/acp/qoder/provider.json +47 -0
  41. package/providers/_builtin/acp/qwen-code/provider.json +53 -0
  42. package/providers/_builtin/acp/stakpak/provider.json +47 -0
  43. package/providers/_builtin/acp/vtcode/provider.json +47 -0
  44. package/providers/_builtin/cli/claude-cli/provider.json +78 -0
  45. package/providers/_builtin/cli/codex-cli/provider.json +60 -0
  46. package/providers/_builtin/cli/gemini-cli/provider.json +64 -0
  47. package/providers/_builtin/extension/cline/provider.json +11 -0
  48. package/providers/_builtin/extension/cline/scripts/open_panel.js +1 -1
  49. package/providers/_builtin/extension/cline/{provider.js → scripts.js} +29 -55
  50. package/providers/_builtin/extension/roo-code/provider.json +11 -0
  51. package/providers/_builtin/extension/roo-code/{provider.js → scripts.js} +27 -97
  52. package/providers/_builtin/ide/antigravity/provider.json +32 -0
  53. package/providers/_builtin/ide/antigravity/scripts.js +73 -0
  54. package/providers/_builtin/ide/cursor/provider.json +35 -0
  55. package/providers/_builtin/ide/cursor/{provider.js → scripts.js} +31 -69
  56. package/providers/_builtin/ide/kiro/provider.json +36 -0
  57. package/providers/_builtin/ide/kiro/scripts.js +62 -0
  58. package/providers/_builtin/ide/pearai/provider.json +36 -0
  59. package/providers/_builtin/ide/pearai/scripts.js +74 -0
  60. package/providers/_builtin/ide/trae/provider.json +35 -0
  61. package/providers/_builtin/ide/trae/scripts.js +57 -0
  62. package/providers/_builtin/ide/vscode/provider.json +33 -0
  63. package/providers/_builtin/ide/vscode-insiders/provider.json +31 -0
  64. package/providers/_builtin/ide/vscodium/provider.json +32 -0
  65. package/providers/_builtin/ide/windsurf/provider.json +22 -0
  66. package/providers/_builtin/ide/windsurf/scripts.js +57 -0
  67. package/README.md +0 -43
  68. package/dist/dev-console-monaco.js +0 -176
  69. package/dist/dev-console.css +0 -326
  70. package/dist/dev-console.html +0 -148
  71. package/dist/dev-console.js +0 -1165
  72. package/dist/index.d.ts +0 -2
  73. package/providers/_builtin/acp/agentpool/provider.js +0 -59
  74. package/providers/_builtin/acp/amp/provider.js +0 -61
  75. package/providers/_builtin/acp/auggie/provider.js +0 -60
  76. package/providers/_builtin/acp/autodev/provider.js +0 -59
  77. package/providers/_builtin/acp/autohand/provider.js +0 -59
  78. package/providers/_builtin/acp/blackbox-ai/provider.js +0 -59
  79. package/providers/_builtin/acp/claude-agent/provider.js +0 -61
  80. package/providers/_builtin/acp/cline-acp/provider.js +0 -62
  81. package/providers/_builtin/acp/code-assistant/provider.js +0 -59
  82. package/providers/_builtin/acp/codebuddy/provider.js +0 -59
  83. package/providers/_builtin/acp/codex-cli/provider.js +0 -64
  84. package/providers/_builtin/acp/corust-agent/provider.js +0 -59
  85. package/providers/_builtin/acp/crow-cli/provider.js +0 -59
  86. package/providers/_builtin/acp/cursor-acp/provider.js +0 -59
  87. package/providers/_builtin/acp/deepagents/provider.js +0 -59
  88. package/providers/_builtin/acp/dimcode/provider.js +0 -58
  89. package/providers/_builtin/acp/docker-cagent/provider.js +0 -59
  90. package/providers/_builtin/acp/factory-droid/provider.js +0 -59
  91. package/providers/_builtin/acp/fast-agent/provider.js +0 -59
  92. package/providers/_builtin/acp/fount/provider.js +0 -59
  93. package/providers/_builtin/acp/gemini-cli/provider.js +0 -104
  94. package/providers/_builtin/acp/github-copilot/provider.js +0 -60
  95. package/providers/_builtin/acp/goose/provider.js +0 -64
  96. package/providers/_builtin/acp/junie/provider.js +0 -62
  97. package/providers/_builtin/acp/kilo/provider.js +0 -59
  98. package/providers/_builtin/acp/kimi-cli/provider.js +0 -63
  99. package/providers/_builtin/acp/kiro-cli/provider.js +0 -59
  100. package/providers/_builtin/acp/minion-code/provider.js +0 -59
  101. package/providers/_builtin/acp/mistral-vibe/provider.js +0 -63
  102. package/providers/_builtin/acp/nova/provider.js +0 -59
  103. package/providers/_builtin/acp/openclaw/provider.js +0 -59
  104. package/providers/_builtin/acp/opencode/provider.js +0 -60
  105. package/providers/_builtin/acp/openhands/provider.js +0 -59
  106. package/providers/_builtin/acp/pi-acp/provider.js +0 -59
  107. package/providers/_builtin/acp/qoder/provider.js +0 -58
  108. package/providers/_builtin/acp/qwen-code/provider.js +0 -61
  109. package/providers/_builtin/acp/stakpak/provider.js +0 -59
  110. package/providers/_builtin/acp/vtcode/provider.js +0 -59
  111. package/providers/_builtin/cli/claude-cli/provider.js +0 -128
  112. package/providers/_builtin/cli/codex-cli/provider.js +0 -80
  113. package/providers/_builtin/cli/gemini-cli/provider.js +0 -124
  114. package/providers/_builtin/ide/antigravity/provider.js +0 -114
  115. package/providers/_builtin/ide/kiro/provider.js +0 -90
  116. package/providers/_builtin/ide/pearai/provider.js +0 -100
  117. package/providers/_builtin/ide/trae/provider.js +0 -83
  118. package/providers/_builtin/ide/vscode/provider.js +0 -36
  119. package/providers/_builtin/ide/vscode-insiders/provider.js +0 -27
  120. package/providers/_builtin/ide/vscodium/provider.js +0 -27
  121. package/providers/_builtin/ide/windsurf/provider.js +0 -76
  122. package/providers/_helpers/index.js +0 -188
@@ -0,0 +1,78 @@
1
+ {
2
+ "type": "claude-cli",
3
+ "name": "Claude Code",
4
+ "category": "cli",
5
+ "aliases": [
6
+ "claude",
7
+ "claude-code"
8
+ ],
9
+ "icon": "🤖",
10
+ "displayName": "Claude Code",
11
+ "settings": {
12
+ "mode": {
13
+ "type": "select",
14
+ "default": "terminal",
15
+ "public": true,
16
+ "label": "표시 모드",
17
+ "description": "terminal: PTY 터미널 뷰, chat: 파싱된 대화 뷰",
18
+ "options": [
19
+ "terminal",
20
+ "chat"
21
+ ]
22
+ },
23
+ "notifications": {
24
+ "type": "boolean",
25
+ "default": true,
26
+ "public": true,
27
+ "label": "알림",
28
+ "description": "상태 변경 시 알림을 표시합니다"
29
+ },
30
+ "autoApprove": {
31
+ "type": "boolean",
32
+ "default": false,
33
+ "public": true,
34
+ "label": "자동 승인",
35
+ "description": "도구 실행 승인을 자동으로 허용합니다"
36
+ }
37
+ },
38
+ "binary": "claude",
39
+ "spawn": {
40
+ "command": "claude",
41
+ "args": [],
42
+ "shell": false,
43
+ "env": {}
44
+ },
45
+ "patterns": {
46
+ "prompt": [
47
+ {},
48
+ {},
49
+ {},
50
+ {},
51
+ {},
52
+ {},
53
+ {}
54
+ ],
55
+ "generating": [
56
+ {},
57
+ {},
58
+ {},
59
+ {},
60
+ {}
61
+ ],
62
+ "approval": [
63
+ {},
64
+ {},
65
+ {},
66
+ {},
67
+ {},
68
+ {},
69
+ {},
70
+ {},
71
+ {}
72
+ ],
73
+ "ready": [
74
+ {},
75
+ {}
76
+ ]
77
+ }
78
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "type": "codex-cli",
3
+ "name": "Codex CLI",
4
+ "category": "cli",
5
+ "aliases": [
6
+ "codex"
7
+ ],
8
+ "icon": "🧠",
9
+ "displayName": "Codex CLI",
10
+ "settings": {
11
+ "mode": {
12
+ "type": "select",
13
+ "default": "terminal",
14
+ "public": true,
15
+ "label": "표시 모드",
16
+ "options": [
17
+ "terminal",
18
+ "chat"
19
+ ]
20
+ },
21
+ "notifications": {
22
+ "type": "boolean",
23
+ "default": true,
24
+ "public": true,
25
+ "label": "알림"
26
+ }
27
+ },
28
+ "binary": "codex",
29
+ "spawn": {
30
+ "command": "codex",
31
+ "args": [
32
+ "--full-auto"
33
+ ],
34
+ "shell": false,
35
+ "env": {}
36
+ },
37
+ "patterns": {
38
+ "prompt": [
39
+ {},
40
+ {},
41
+ {}
42
+ ],
43
+ "generating": [
44
+ {},
45
+ {},
46
+ {}
47
+ ],
48
+ "approval": [
49
+ {},
50
+ {},
51
+ {},
52
+ {},
53
+ {}
54
+ ],
55
+ "ready": [
56
+ {},
57
+ {}
58
+ ]
59
+ }
60
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "type": "gemini-cli",
3
+ "name": "Gemini CLI",
4
+ "category": "cli",
5
+ "aliases": [
6
+ "gemini"
7
+ ],
8
+ "icon": "♊",
9
+ "displayName": "Gemini CLI",
10
+ "settings": {
11
+ "mode": {
12
+ "type": "select",
13
+ "default": "terminal",
14
+ "public": true,
15
+ "label": "표시 모드",
16
+ "options": [
17
+ "terminal",
18
+ "chat"
19
+ ]
20
+ },
21
+ "notifications": {
22
+ "type": "boolean",
23
+ "default": true,
24
+ "public": true,
25
+ "label": "알림"
26
+ }
27
+ },
28
+ "binary": "gemini",
29
+ "spawn": {
30
+ "command": "gemini",
31
+ "args": [
32
+ "--yolo"
33
+ ],
34
+ "shell": true,
35
+ "env": {}
36
+ },
37
+ "patterns": {
38
+ "prompt": [
39
+ {},
40
+ {},
41
+ {}
42
+ ],
43
+ "generating": [
44
+ {},
45
+ {},
46
+ {},
47
+ {},
48
+ {},
49
+ {}
50
+ ],
51
+ "approval": [
52
+ {},
53
+ {},
54
+ {},
55
+ {},
56
+ {},
57
+ {}
58
+ ],
59
+ "ready": [
60
+ {},
61
+ {}
62
+ ]
63
+ }
64
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "type": "cline",
3
+ "name": "Cline",
4
+ "category": "extension",
5
+ "extensionId": "saoudrizwan.claude-dev",
6
+ "extensionIdPattern": "extensionId=saoudrizwan\\.claude-dev",
7
+ "extensionIdPattern_flags": "i",
8
+ "vscodeCommands": {
9
+ "focusPanel": "claude-dev.SidebarProvider.focus"
10
+ }
11
+ }
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * iframe 컨텍스트에서는 VS Code API 접근이 제한적이므로,
7
7
  * 패널이 숨겨져 있을 때는 'panel_hidden' 상태를 반환.
8
- * → bridge extensionensureAgentPanelOpen() 또는
8
+ * → daemonAgentStreamManager 또는
9
9
  * agent_stream_focus 메시지를 통해 열어야 함.
10
10
  *
11
11
  * 반환: 'visible' | 'panel_hidden'
@@ -1,99 +1,73 @@
1
1
  /**
2
- * Cline Extension Provider
3
- *
4
- * Category: extension (webview CDP session)
5
- * Roo Code의 원본 fork — 구조 거의 동일 (Fiber 기반)
6
- *
7
- * 차이점:
8
- * - extensionId: 'saoudrizwan.claude-dev'
9
- * - resolve_action 사용 (Roo Code와 동일 패턴)
10
- *
11
- * @type {import('../../../src/providers/contracts').ProviderModule}
2
+ * CDP Scripts for Cline
12
3
  */
4
+
13
5
  const fs = require('fs');
14
6
  const path = require('path');
15
-
16
7
  const SCRIPTS_DIR = path.join(__dirname, 'scripts');
17
-
18
8
  function loadScript(name) {
19
- try {
20
- return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8');
21
- } catch {
22
- return null;
23
- }
9
+ try { return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8'); }
10
+ catch { return null; }
24
11
  }
25
12
 
26
- module.exports = {
27
- type: 'cline',
28
- name: 'Cline',
29
- category: 'extension',
30
13
 
31
- extensionId: 'saoudrizwan.claude-dev',
32
- extensionIdPattern: /extensionId=saoudrizwan\.claude-dev/i,
33
-
34
- vscodeCommands: {
35
- focusPanel: 'claude-dev.SidebarProvider.focus',
36
- },
37
-
38
- scripts: {
39
- readChat() {
14
+ module.exports.readChat = function readChat() {
40
15
  return loadScript('read_chat.js');
41
- },
16
+ };
42
17
 
43
- sendMessage(text) {
18
+ module.exports.sendMessage = function sendMessage(text) {
44
19
  const script = loadScript('send_message.js');
45
20
  if (!script) return null;
46
21
  return script.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text));
47
- },
22
+ };
48
23
 
49
- listSessions() {
24
+ module.exports.listSessions = function listSessions() {
50
25
  return loadScript('list_chats.js');
51
- },
26
+ };
52
27
 
53
- switchSession(sessionId) {
28
+ module.exports.switchSession = function switchSession(sessionId) {
54
29
  const script = loadScript('switch_session.js');
55
30
  if (!script) return null;
56
31
  return script.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId));
57
- },
32
+ };
58
33
 
59
- newSession() {
34
+ module.exports.newSession = function newSession() {
60
35
  return loadScript('new_session.js');
61
- },
36
+ };
62
37
 
63
- resolveAction(action) {
38
+ module.exports.resolveAction = function resolveAction(action) {
64
39
  const script = loadScript('resolve_action.js');
65
40
  if (!script) return null;
66
41
  return script.replace(/\$\{\s*ACTION\s*\}/g, JSON.stringify(action));
67
- },
42
+ };
68
43
 
69
- focusEditor() {
44
+ module.exports.focusEditor = function focusEditor() {
70
45
  return loadScript('focus_editor.js');
71
- },
46
+ };
72
47
 
73
- openPanel() {
48
+ module.exports.openPanel = function openPanel() {
74
49
  return loadScript('open_panel.js');
75
- },
50
+ };
76
51
 
77
- listModels() {
52
+ module.exports.listModels = function listModels() {
78
53
  return loadScript('list_models.js');
79
- },
54
+ };
80
55
 
81
- setModel(params) {
56
+ module.exports.setModel = function setModel(params) {
82
57
  const model = params?.model || params;
83
58
  const script = loadScript('set_model.js');
84
59
  if (!script) return null;
85
60
  return script.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model));
86
- },
61
+ };
87
62
 
88
- listModes() {
63
+ module.exports.listModes = function listModes() {
89
64
  return loadScript('list_modes.js');
90
- },
65
+ };
91
66
 
92
- setMode(params) {
67
+ module.exports.setMode = function setMode(params) {
93
68
  const mode = params?.mode || params;
94
69
  const script = loadScript('set_mode.js');
95
70
  if (!script) return null;
96
71
  return script.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode));
97
- },
98
- },
99
- };
72
+ };
73
+
@@ -0,0 +1,11 @@
1
+ {
2
+ "type": "roo-code",
3
+ "name": "Roo Code",
4
+ "category": "extension",
5
+ "extensionId": "RooVeterinaryInc.roo-cline",
6
+ "extensionIdPattern": "extensionId=RooVeterinaryInc\\.roo-cline",
7
+ "extensionIdPattern_flags": "i",
8
+ "vscodeCommands": {
9
+ "focusPanel": "roo-cline.SidebarProvider.focus"
10
+ }
11
+ }
@@ -1,36 +1,8 @@
1
1
  /**
2
- * Roo Code Extension Provider (Reference Implementation)
3
- *
4
- * Category: extension (webview CDP session)
5
- * 구조: iframe → contentDocument, Fiber 기반 데이터 추출
6
- *
7
- * Output Contract: ReadChatResult, SendMessageResult, etc.
8
- * 각 scripts 함수는 CDP evaluate에 넣을 JS 코드 문자열을 반환.
9
- *
10
- * @type {import('../../../src/providers/contracts').ProviderModule}
2
+ * CDP Scripts for Roo Code
11
3
  */
12
- module.exports = {
13
- // ─── 메타데이터 ───
14
- type: 'roo-code',
15
- name: 'Roo Code',
16
- category: 'extension',
17
-
18
- // ─── Extension 식별 ───
19
- extensionId: 'RooVeterinaryInc.roo-cline',
20
- extensionIdPattern: /extensionId=RooVeterinaryInc\.roo-cline/i,
21
-
22
- // ─── VS Code Commands ───
23
- vscodeCommands: {
24
- focusPanel: 'roo-cline.SidebarProvider.focus',
25
- },
26
-
27
- // ─── CDP 스크립트 ───
28
- scripts: {
29
- /**
30
- * readChat → ReadChatResult
31
- * Fiber 기반 역할 판별 + DOM fallback
32
- */
33
- readChat() {
4
+
5
+ module.exports.readChat = function readChat() {
34
6
  return `(() => {
35
7
  try {
36
8
  const inner = document.querySelector('iframe');
@@ -203,13 +175,9 @@ module.exports = {
203
175
  return JSON.stringify({ error: e.message || String(e) });
204
176
  }
205
177
  })()`;
206
- },
178
+ };
207
179
 
208
- /**
209
- * sendMessage(text) → 'sent' | 'error: ...'
210
- * Fiber onSend 직접 호출 방식
211
- */
212
- sendMessage(text) {
180
+ module.exports.sendMessage = function sendMessage(text) {
213
181
  const escaped = JSON.stringify(text);
214
182
  return `(async () => {
215
183
  try {
@@ -262,13 +230,9 @@ module.exports = {
262
230
  return JSON.stringify({ sent: true });
263
231
  } catch (e) { return JSON.stringify({ sent: false, error: e.message }); }
264
232
  })()`;
265
- },
233
+ };
266
234
 
267
- /**
268
- * listSessions → SessionInfo[]
269
- * Fiber taskHistory 기반
270
- */
271
- listSessions() {
235
+ module.exports.listSessions = function listSessions() {
272
236
  return `(() => {
273
237
  try {
274
238
  const inner = document.querySelector('iframe');
@@ -347,13 +311,9 @@ module.exports = {
347
311
  return JSON.stringify({ sessions: [], error: e.message });
348
312
  }
349
313
  })()`;
350
- },
314
+ };
351
315
 
352
- /**
353
- * switchSession(sessionId) → SwitchSessionResult
354
- * postMessage → showTaskWithId
355
- */
356
- switchSession(sessionId) {
316
+ module.exports.switchSession = function switchSession(sessionId) {
357
317
  const escaped = JSON.stringify(sessionId);
358
318
  return `(async () => {
359
319
  try {
@@ -422,12 +382,9 @@ module.exports = {
422
382
  return JSON.stringify({ switched: true });
423
383
  } catch (e) { return JSON.stringify({ switched: false, error: e.message }); }
424
384
  })()`;
425
- },
385
+ };
426
386
 
427
- /**
428
- * newSession → string
429
- */
430
- newSession() {
387
+ module.exports.newSession = function newSession() {
431
388
  return `(() => {
432
389
  try {
433
390
  const inner = document.querySelector('iframe');
@@ -470,13 +427,9 @@ module.exports = {
470
427
  return 'no button found';
471
428
  } catch (e) { return 'error: ' + e.message; }
472
429
  })()`;
473
- },
430
+ };
474
431
 
475
- /**
476
- * resolveAction(action) → boolean
477
- * action: 'approve' | 'reject'
478
- */
479
- resolveAction(action) {
432
+ module.exports.resolveAction = function resolveAction(action) {
480
433
  const escaped = JSON.stringify(action);
481
434
  return `(() => {
482
435
  try {
@@ -536,12 +489,9 @@ module.exports = {
536
489
  return false;
537
490
  } catch { return false; }
538
491
  })()`;
539
- },
492
+ };
540
493
 
541
- /**
542
- * focusEditor → string
543
- */
544
- focusEditor() {
494
+ module.exports.focusEditor = function focusEditor() {
545
495
  return `(() => {
546
496
  try {
547
497
  const inner = document.querySelector('iframe');
@@ -557,12 +507,9 @@ module.exports = {
557
507
  return 'no textarea found';
558
508
  } catch (e) { return 'error: ' + e.message; }
559
509
  })()`;
560
- },
510
+ };
561
511
 
562
- /**
563
- * openPanel → 'visible' | 'panel_hidden'
564
- */
565
- openPanel() {
512
+ module.exports.openPanel = function openPanel() {
566
513
  return `(() => {
567
514
  try {
568
515
  const inner = document.querySelector('iframe');
@@ -573,13 +520,9 @@ module.exports = {
573
520
  return 'panel_hidden';
574
521
  } catch (e) { return 'error: ' + e.message; }
575
522
  })()`;
576
- },
523
+ };
577
524
 
578
- /**
579
- * listModels → { models: string[], current: string }
580
- * dropdown-trigger 클릭 → 옵션 읽기 → Escape로 닫기
581
- */
582
- listModels() {
525
+ module.exports.listModels = function listModels() {
583
526
  return `(async () => {
584
527
  try {
585
528
  const inner = document.querySelector('iframe');
@@ -610,13 +553,9 @@ module.exports = {
610
553
  return JSON.stringify({ models: [...new Set(models)], current });
611
554
  } catch (e) { return JSON.stringify({ models: [], current: '', error: e.message }); }
612
555
  })()`;
613
- },
556
+ };
614
557
 
615
- /**
616
- * setModel(params) → { success: boolean }
617
- * params.model: 선택할 모델 이름
618
- */
619
- setModel(params) {
558
+ module.exports.setModel = function setModel(params) {
620
559
  const model = params?.model || params;
621
560
  const escaped = JSON.stringify(model);
622
561
  return `(async () => {
@@ -649,13 +588,9 @@ module.exports = {
649
588
  return JSON.stringify({ success: false, error: 'model not found: ' + target });
650
589
  } catch (e) { return JSON.stringify({ success: false, error: e.message }); }
651
590
  })()`;
652
- },
591
+ };
653
592
 
654
- /**
655
- * listModes → { modes: string[], current: string }
656
- * mode-selector-trigger 클릭 → 옵션 읽기
657
- */
658
- listModes() {
593
+ module.exports.listModes = function listModes() {
659
594
  return `(async () => {
660
595
  try {
661
596
  const inner = document.querySelector('iframe');
@@ -685,13 +620,9 @@ module.exports = {
685
620
  return JSON.stringify({ modes: [...new Set(modes)], current });
686
621
  } catch (e) { return JSON.stringify({ modes: [], current: '', error: e.message }); }
687
622
  })()`;
688
- },
623
+ };
689
624
 
690
- /**
691
- * setMode(params) → { success: boolean }
692
- * params.mode: 선택할 모드 이름
693
- */
694
- setMode(params) {
625
+ module.exports.setMode = function setMode(params) {
695
626
  const mode = params?.mode || params;
696
627
  const escaped = JSON.stringify(mode);
697
628
  return `(async () => {
@@ -724,6 +655,5 @@ module.exports = {
724
655
  return JSON.stringify({ success: false, error: 'mode not found: ' + target });
725
656
  } catch (e) { return JSON.stringify({ success: false, error: e.message }); }
726
657
  })()`;
727
- },
728
- },
729
- };
658
+ };
659
+
@@ -0,0 +1,32 @@
1
+ {
2
+ "type": "antigravity",
3
+ "name": "Antigravity",
4
+ "category": "ide",
5
+ "displayName": "Antigravity",
6
+ "icon": "🚀",
7
+ "cli": "antigravity",
8
+ "cdpPorts": [
9
+ 9335,
10
+ 9336
11
+ ],
12
+ "processNames": {
13
+ "darwin": "Antigravity",
14
+ "win32": [
15
+ "Antigravity.exe"
16
+ ]
17
+ },
18
+ "paths": {
19
+ "darwin": [
20
+ "/Applications/Antigravity.app"
21
+ ],
22
+ "win32": [
23
+ "C:\\Users\\*\\AppData\\Local\\Programs\\antigravity\\Antigravity.exe"
24
+ ],
25
+ "linux": [
26
+ "/opt/Antigravity",
27
+ "/usr/share/antigravity"
28
+ ]
29
+ },
30
+ "inputMethod": "cdp-type-and-send",
31
+ "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]"
32
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * CDP Scripts for Antigravity
3
+ */
4
+
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const SCRIPTS_DIR = path.join(__dirname, 'scripts');
8
+ function loadScript(name) {
9
+ try { return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8'); }
10
+ catch { return null; }
11
+ }
12
+
13
+
14
+ module.exports.readChat = function readChat() {
15
+ return loadScript('read_chat.js');
16
+ };
17
+
18
+ module.exports.sendMessage = function sendMessage(text) {
19
+ const script = loadScript('send_message.js');
20
+ if (!script) return null;
21
+ // ${ MESSAGE } 템플릿 변수 치환
22
+ return script.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text));
23
+ };
24
+
25
+ module.exports.listSessions = function listSessions() {
26
+ return loadScript('list_chats.js');
27
+ };
28
+
29
+ module.exports.switchSession = function switchSession(sessionId) {
30
+ const script = loadScript('switch_session.js');
31
+ if (!script) return null;
32
+ return script.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId));
33
+ };
34
+
35
+ module.exports.newSession = function newSession() {
36
+ return loadScript('new_session.js');
37
+ };
38
+
39
+ module.exports.resolveAction = function resolveAction(params) {
40
+ const action = typeof params === 'string' ? params : params?.action || 'approve';
41
+ const buttonText = params?.button || params?.buttonText
42
+ || (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
43
+ const script = loadScript('resolve_action.js');
44
+ if (!script) return null;
45
+ return script.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText));
46
+ };
47
+
48
+ module.exports.focusEditor = function focusEditor() {
49
+ return loadScript('focus_editor.js');
50
+ };
51
+
52
+ module.exports.listModels = function listModels() {
53
+ return loadScript('list_models.js');
54
+ };
55
+
56
+ module.exports.setModel = function setModel(params) {
57
+ const model = typeof params === 'string' ? params : params?.model;
58
+ const script = loadScript('set_model.js');
59
+ if (!script) return null;
60
+ return script.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model));
61
+ };
62
+
63
+ module.exports.listModes = function listModes() {
64
+ return loadScript('list_modes.js');
65
+ };
66
+
67
+ module.exports.setMode = function setMode(params) {
68
+ const mode = typeof params === 'string' ? params : params?.mode;
69
+ const script = loadScript('set_mode.js');
70
+ if (!script) return null;
71
+ return script.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode));
72
+ };
73
+