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
@@ -1,59 +0,0 @@
1
- /**
2
- * pi ACP — ACP Provider
3
- *
4
- * ACP adapter for pi coding agent
5
- * https://github.com/svkozak/pi-acp
6
- *
7
- * Install: npm install -g pi-acp
8
- *
9
- * @type {import('../../../../src/providers/contracts').ProviderModule}
10
- */
11
- module.exports = {
12
- type: 'pi-acp',
13
- name: 'pi ACP',
14
- category: 'acp',
15
-
16
- displayName: 'pi ACP',
17
- icon: '🥧',
18
- install: 'npm install -g pi-acp',
19
-
20
- spawn: {
21
- command: 'pi-acp',
22
- args: [],
23
- shell: false,
24
- },
25
-
26
- auth: [
27
- {
28
- type: 'agent',
29
- id: 'pi',
30
- name: 'pi Auth',
31
- description: 'Configure provider through pi setup',
32
- },
33
- ],
34
-
35
- settings: {
36
- approvalAlert: {
37
- type: 'boolean',
38
- default: true,
39
- public: true,
40
- label: 'Approval Alerts',
41
- description: 'Show notification when agent requires approval',
42
- },
43
- longGeneratingAlert: {
44
- type: 'boolean',
45
- default: true,
46
- public: true,
47
- label: 'Long Generation Alert',
48
- description: 'Alert when generation takes too long',
49
- },
50
- longGeneratingThresholdSec: {
51
- type: 'number',
52
- default: 180,
53
- public: true,
54
- label: 'Long Generation Threshold (sec)',
55
- min: 30,
56
- max: 600,
57
- },
58
- },
59
- };
@@ -1,58 +0,0 @@
1
- /**
2
- * Qoder CLI — ACP Provider
3
- *
4
- * AI coding assistant with agentic capabilities
5
- *
6
- * Install: npm install -g @qoder-ai/qodercli
7
- *
8
- * @type {import('../../../../src/providers/contracts').ProviderModule}
9
- */
10
- module.exports = {
11
- type: 'qoder-acp',
12
- name: 'Qoder CLI (ACP)',
13
- category: 'acp',
14
-
15
- displayName: 'Qoder CLI',
16
- icon: '🔷',
17
- install: 'npm install -g @qoder-ai/qodercli',
18
-
19
- spawn: {
20
- command: 'qodercli',
21
- args: ['--acp'],
22
- shell: false,
23
- },
24
-
25
- auth: [
26
- {
27
- type: 'agent',
28
- id: 'qoder',
29
- name: 'Qoder Auth',
30
- description: 'Authenticate through Qoder setup',
31
- },
32
- ],
33
-
34
- settings: {
35
- approvalAlert: {
36
- type: 'boolean',
37
- default: true,
38
- public: true,
39
- label: 'Approval Alerts',
40
- description: 'Show notification when agent requires approval',
41
- },
42
- longGeneratingAlert: {
43
- type: 'boolean',
44
- default: true,
45
- public: true,
46
- label: 'Long Generation Alert',
47
- description: 'Alert when generation takes too long',
48
- },
49
- longGeneratingThresholdSec: {
50
- type: 'number',
51
- default: 180,
52
- public: true,
53
- label: 'Long Generation Threshold (sec)',
54
- min: 30,
55
- max: 600,
56
- },
57
- },
58
- };
@@ -1,61 +0,0 @@
1
- /**
2
- * Qwen Code — ACP Provider
3
- *
4
- * Alibaba's Qwen coding assistant
5
- * https://github.com/QwenLM/qwen-code
6
- *
7
- * Install: npm install -g @qwen-code/qwen-code
8
- * Auth: DASHSCOPE_API_KEY environment variable
9
- *
10
- * @type {import('../../../../src/providers/contracts').ProviderModule}
11
- */
12
- module.exports = {
13
- type: 'qwen-code-acp',
14
- name: 'Qwen Code (ACP)',
15
- category: 'acp',
16
-
17
- displayName: 'Qwen Code',
18
- icon: '🟦',
19
- install: 'npm install -g @qwen-code/qwen-code (requires DASHSCOPE_API_KEY)',
20
-
21
- spawn: {
22
- command: 'qwen-code',
23
- args: ['--acp', '--experimental-skills'],
24
- shell: false,
25
- },
26
-
27
- auth: [
28
- {
29
- type: 'env_var',
30
- id: 'dashscope',
31
- name: 'DashScope API Key',
32
- vars: [{ name: 'DASHSCOPE_API_KEY' }],
33
- link: 'https://dashscope.console.aliyun.com/apiKey',
34
- },
35
- ],
36
-
37
- settings: {
38
- approvalAlert: {
39
- type: 'boolean',
40
- default: true,
41
- public: true,
42
- label: 'Approval Alerts',
43
- description: 'Show notification when Qwen Code requires approval',
44
- },
45
- longGeneratingAlert: {
46
- type: 'boolean',
47
- default: true,
48
- public: true,
49
- label: 'Long Generation Alert',
50
- description: 'Alert when generation takes too long',
51
- },
52
- longGeneratingThresholdSec: {
53
- type: 'number',
54
- default: 180,
55
- public: true,
56
- label: 'Long Generation Threshold (sec)',
57
- min: 30,
58
- max: 600,
59
- },
60
- },
61
- };
@@ -1,59 +0,0 @@
1
- /**
2
- * Stakpak — ACP Provider
3
- *
4
- * Open-source DevOps agent in Rust with enterprise-grade security
5
- * https://github.com/stakpak/agent
6
- *
7
- * Install: Download from https://github.com/stakpak/agent/releases
8
- *
9
- * @type {import('../../../../src/providers/contracts').ProviderModule}
10
- */
11
- module.exports = {
12
- type: 'stakpak-acp',
13
- name: 'Stakpak (ACP)',
14
- category: 'acp',
15
-
16
- displayName: 'Stakpak',
17
- icon: '🛡️',
18
- install: 'Download from https://github.com/stakpak/agent/releases',
19
-
20
- spawn: {
21
- command: 'stakpak',
22
- args: ['acp'],
23
- shell: false,
24
- },
25
-
26
- auth: [
27
- {
28
- type: 'agent',
29
- id: 'stakpak',
30
- name: 'Stakpak Auth',
31
- description: 'Configure provider through Stakpak setup',
32
- },
33
- ],
34
-
35
- settings: {
36
- approvalAlert: {
37
- type: 'boolean',
38
- default: true,
39
- public: true,
40
- label: 'Approval Alerts',
41
- description: 'Show notification when agent requires approval',
42
- },
43
- longGeneratingAlert: {
44
- type: 'boolean',
45
- default: true,
46
- public: true,
47
- label: 'Long Generation Alert',
48
- description: 'Alert when generation takes too long',
49
- },
50
- longGeneratingThresholdSec: {
51
- type: 'number',
52
- default: 180,
53
- public: true,
54
- label: 'Long Generation Threshold (sec)',
55
- min: 30,
56
- max: 600,
57
- },
58
- },
59
- };
@@ -1,59 +0,0 @@
1
- /**
2
- * VT Code — ACP Provider
3
- *
4
- * Swift-based coding agent with Zed/ACP integration
5
- * https://github.com/vinhnx/vtcode
6
- *
7
- * Install: npm install -g vtcode
8
- *
9
- * @type {import('../../../../src/providers/contracts').ProviderModule}
10
- */
11
- module.exports = {
12
- type: 'vtcode-acp',
13
- name: 'VT Code (ACP)',
14
- category: 'acp',
15
-
16
- displayName: 'VT Code',
17
- icon: '🟣',
18
- install: 'npm install -g vtcode',
19
-
20
- spawn: {
21
- command: 'vtcode',
22
- args: ['acp'],
23
- shell: false,
24
- },
25
-
26
- auth: [
27
- {
28
- type: 'agent',
29
- id: 'vtcode',
30
- name: 'VT Code Auth',
31
- description: 'Configure provider through VT Code setup',
32
- },
33
- ],
34
-
35
- settings: {
36
- approvalAlert: {
37
- type: 'boolean',
38
- default: true,
39
- public: true,
40
- label: 'Approval Alerts',
41
- description: 'Show notification when agent requires approval',
42
- },
43
- longGeneratingAlert: {
44
- type: 'boolean',
45
- default: true,
46
- public: true,
47
- label: 'Long Generation Alert',
48
- description: 'Alert when generation takes too long',
49
- },
50
- longGeneratingThresholdSec: {
51
- type: 'number',
52
- default: 180,
53
- public: true,
54
- label: 'Long Generation Threshold (sec)',
55
- min: 30,
56
- max: 600,
57
- },
58
- },
59
- };
@@ -1,128 +0,0 @@
1
- /**
2
- * Claude Code — CLI Provider
3
- *
4
- * Category: cli (PTY 기반 — node-pty로 claude 프로세스 관리)
5
- *
6
- * Claude Code는 ⏺/⎿ 프리픽스로 응답 구조를 표시.
7
- * TerminalBuffer를 사용하여 스크린 콘텐츠를 읽음.
8
- *
9
- * @type {import('../../../../src/providers/contracts').ProviderModule}
10
- */
11
- module.exports = {
12
- type: 'claude-cli',
13
- name: 'Claude Code',
14
- category: 'cli',
15
- aliases: ['claude', 'claude-code'],
16
- icon: '🤖',
17
- displayName: 'Claude Code',
18
-
19
- // ─── Provider Settings (대시보드에서 제어 가능) ───
20
- settings: {
21
- mode: {
22
- type: 'select',
23
- default: 'terminal',
24
- public: true,
25
- label: '표시 모드',
26
- description: 'terminal: PTY 터미널 뷰, chat: 파싱된 대화 뷰',
27
- options: ['terminal', 'chat'],
28
- },
29
- notifications: {
30
- type: 'boolean',
31
- default: true,
32
- public: true,
33
- label: '알림',
34
- description: '상태 변경 시 알림을 표시합니다',
35
- },
36
- autoApprove: {
37
- type: 'boolean',
38
- default: false,
39
- public: true,
40
- label: '자동 승인',
41
- description: '도구 실행 승인을 자동으로 허용합니다',
42
- },
43
- },
44
-
45
- // ─── CLI 실행 설정 ───
46
- binary: 'claude',
47
- spawn: {
48
- command: 'claude',
49
- args: [],
50
- shell: false,
51
- env: {},
52
- },
53
-
54
- // ─── PTY 출력 패턴 매칭 ───
55
- patterns: {
56
- prompt: [
57
- /❯\s*$/m,
58
- /[a-zA-Z0-9._-]+\s*>\s*$/m,
59
- /claude\s*>\s*$/m,
60
- /➜\s+.*\s*$/m,
61
- /\s+✗\s*$/m,
62
- /\?\s*for\s*shortcuts/i,
63
- /effort/i,
64
- ],
65
- generating: [
66
- /esc\s+to\s+interrupt/i,
67
- /⎋\s*to\s+interrupt/i,
68
- /press\s+esc\s+to\s+interrupt/i,
69
- /accept\s+edits\s+on/i,
70
- /shift\+tab\s+to\s+cycle/i,
71
- ],
72
- approval: [
73
- /allow\s+once/i,
74
- /always\s+allow/i,
75
- /\(y\)es\s*\/\s*\(n\)o/i,
76
- /\[y\/n\/a\]/i,
77
- /do\s+you\s+want\s+to\s+(run|proceed|allow|execute|make|create|delete|write|edit)/i,
78
- /proceed\?/i,
79
- /esc\s+to\s+cancel/i,
80
- /tab\s+to\s+amend/i,
81
- /yes,\s+allow\s+all\s+edits/i,
82
- ],
83
- ready: [
84
- /❯\s*$/m,
85
- /\?\s*for\s*shortcuts/i,
86
- ],
87
- },
88
-
89
- /**
90
- * Claude Code TUI 아티팩트 제거
91
- * ⏺ 프리픽스 응답 본문 추출, TUI 크롬 제거
92
- */
93
- cleanOutput(raw, _lastUserInput) {
94
- const allSegments = [];
95
- for (const line of raw.split('\n')) {
96
- const segs = line.split('\r').map(s => s.trim()).filter(Boolean);
97
- allSegments.push(...segs);
98
- }
99
-
100
- const responseLines = [];
101
- let foundResponse = false;
102
- for (const seg of allSegments) {
103
- if (seg.startsWith('⏺')) {
104
- foundResponse = true;
105
- responseLines.push(seg.replace(/^⏺\s*/, ''));
106
- continue;
107
- }
108
- if (seg.startsWith('⎿')) {
109
- if (foundResponse) responseLines.push(seg.replace(/^⎿\s*/, ''));
110
- continue;
111
- }
112
- if (foundResponse) {
113
- const s = seg.trim();
114
- // TUI junk
115
- if (/^❯/.test(s)) continue;
116
- if (/^\?\s*for\s*shortcuts/.test(s)) continue;
117
- if (/^[╭╰│├╮╯─═]+$/.test(s)) continue;
118
- if (/^◐\s/.test(s) || /\/effort/.test(s)) continue;
119
- if (/esc\s*to\s*interrupt/i.test(s)) continue;
120
- if (/^0;/.test(s)) continue;
121
- if (/^[✻✶✳✢✽·◆◇◐◑◒◓⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]/.test(s) && s.length < 40) continue;
122
- responseLines.push(seg);
123
- }
124
- }
125
-
126
- return responseLines.join('\n').replace(/\n{3,}/g, '\n\n').trim();
127
- },
128
- };
@@ -1,80 +0,0 @@
1
- /**
2
- * Codex CLI — CLI Provider
3
- *
4
- * Category: cli (PTY 기반 — node-pty로 codex 프로세스 관리)
5
- *
6
- * OpenAI Codex CLI — 비교적 단순한 TUI.
7
- *
8
- * @type {import('../../../../src/providers/contracts').ProviderModule}
9
- */
10
- module.exports = {
11
- type: 'codex-cli',
12
- name: 'Codex CLI',
13
- category: 'cli',
14
- aliases: ['codex'],
15
- icon: '🧠',
16
- displayName: 'Codex CLI',
17
-
18
- settings: {
19
- mode: {
20
- type: 'select', default: 'terminal', public: true,
21
- label: '표시 모드', options: ['terminal', 'chat'],
22
- },
23
- notifications: {
24
- type: 'boolean', default: true, public: true,
25
- label: '알림',
26
- },
27
- },
28
-
29
- // ─── CLI 실행 설정 ───
30
- binary: 'codex',
31
- spawn: {
32
- command: 'codex',
33
- args: ['--full-auto'],
34
- shell: false,
35
- env: {},
36
- },
37
-
38
- // ─── PTY 출력 패턴 매칭 ───
39
- patterns: {
40
- prompt: [
41
- /[❯>]\s*$/,
42
- /codex\s*>\s*$/m,
43
- /\$\s*$/m,
44
- ],
45
- generating: [
46
- /generating/i,
47
- /thinking/i,
48
- /esc\s+to\s+(interrupt|cancel)/i,
49
- ],
50
- approval: [
51
- /\(y\)es\s*\/\s*\(n\)o/i,
52
- /\[y\/n\]/i,
53
- /do\s+you\s+want\s+to\s+(run|proceed|allow|execute)/i,
54
- /proceed\?/i,
55
- /approve/i,
56
- ],
57
- ready: [
58
- /[❯>]\s*$/,
59
- /codex\s*>\s*$/m,
60
- ],
61
- },
62
-
63
- /**
64
- * Codex CLI 출력 정리 — 프롬프트, 상태바 제거
65
- */
66
- cleanOutput(raw, _lastUserInput) {
67
- const lines = raw.split('\n');
68
- const cleaned = [];
69
- for (const line of lines) {
70
- const t = line.trim();
71
- if (!t) { cleaned.push(''); continue; }
72
- if (/^[❯>]\s*$/.test(t)) continue;
73
- if (/^codex\s*>/.test(t)) continue;
74
- if (/^\$\s*$/.test(t)) continue;
75
- if (/^[\u2500\u2501\u2550]{4,}/.test(t)) continue;
76
- cleaned.push(line);
77
- }
78
- return cleaned.join('\n').replace(/\n{3,}/g, '\n\n').trim();
79
- },
80
- };
@@ -1,124 +0,0 @@
1
- /**
2
- * Gemini CLI — CLI Provider
3
- *
4
- * Category: cli (PTY 기반 — node-pty로 gemini 프로세스 관리)
5
- *
6
- * Gemini CLI는 INK/React TUI를 사용하여 터미널에 렌더링.
7
- * 출력에 박스 문자, 구분선, 상태바 등 TUI 아티팩트가 포함됨.
8
- * cleanOutput()에서 이를 제거하여 순수 응답만 추출.
9
- *
10
- * @type {import('../../../../src/providers/contracts').ProviderModule}
11
- */
12
- module.exports = {
13
- type: 'gemini-cli',
14
- name: 'Gemini CLI',
15
- category: 'cli',
16
- aliases: ['gemini'],
17
- icon: '♊',
18
- displayName: 'Gemini CLI',
19
-
20
- settings: {
21
- mode: {
22
- type: 'select', default: 'terminal', public: true,
23
- label: '표시 모드', options: ['terminal', 'chat'],
24
- },
25
- notifications: {
26
- type: 'boolean', default: true, public: true,
27
- label: '알림',
28
- },
29
- },
30
-
31
- // ─── CLI 실행 설정 ───
32
- binary: 'gemini',
33
- spawn: {
34
- command: 'gemini',
35
- args: ['--yolo'],
36
- shell: true,
37
- env: {},
38
- },
39
-
40
- // ─── PTY 출력 패턴 매칭 ───
41
- patterns: {
42
- prompt: [
43
- /Type your message/,
44
- /[❯>]\s*$/,
45
- /\n\s*[❯>]\s*$/,
46
- ],
47
- generating: [
48
- /esc\s+to\s+interrupt/i,
49
- /⎋\s*to\s+interrupt/i,
50
- /press\s+esc\s+to\s+interrupt/i,
51
- /accept\s+edits\s+on/i,
52
- /shift\+tab\s+to\s+cycle/i,
53
- /ctrl\+c\s+to\s+(cancel|interrupt|stop)/i,
54
- ],
55
- approval: [
56
- /allow\s+once/i,
57
- /always\s+allow/i,
58
- /\(y\)es\s*\/\s*\(n\)o/i,
59
- /\[y\/n\/a\]/i,
60
- /do\s+you\s+want\s+to\s+(run|proceed|allow|execute)/i,
61
- /proceed\?/i,
62
- ],
63
- ready: [
64
- /[❯>]\s*$/,
65
- /Gemini \d/i,
66
- ],
67
- },
68
-
69
- /**
70
- * Gemini CLI TUI 아티팩트 제거 — AI 응답 본문만 추출
71
- * INK/React TUI의 박스 문자, 구분선, 상태바, 프롬프트 등을 제거
72
- */
73
- cleanOutput(raw, lastUserInput) {
74
- const lines = raw.split('\n');
75
- const cleaned = [];
76
-
77
- for (const line of lines) {
78
- const trimmed = line.trim();
79
- if (!trimmed) { cleaned.push(''); continue; }
80
-
81
- // 박스 문자 줄
82
- if (/^[\u256d\u256e\u2570\u256f\u2502\u251c\u2524\u252c\u2534\u253c\u2500\u2501\u2550\u2554\u2557\u255a\u255d\u2551]+$/.test(trimmed)) continue;
83
- if (/^[\u256d\u2570]\u2500\u2500/.test(trimmed) || /\u2500\u2500[\u256e\u256f]$/.test(trimmed)) continue;
84
- if (/^\u2502.*\u2502$/.test(trimmed)) continue;
85
-
86
- // 구분선
87
- if (/[\u2500\u2501\u2550\u2580\u2584]{4,}/.test(trimmed)) continue;
88
-
89
- // 상태바/메타
90
- if (/^YOLO\s+ctrl\+y/i.test(trimmed)) continue;
91
- if (/^\? for shortcuts/.test(trimmed)) continue;
92
- if (/^\/model\s/i.test(trimmed)) continue;
93
- if (/^~\s.*no sandbox/i.test(trimmed)) continue;
94
- if (/^Type your message/i.test(trimmed)) continue;
95
- if (/ctrl\+[a-z]/i.test(trimmed) && trimmed.length < 50) continue;
96
-
97
- // 단축키 도움말
98
- if (/Shortcuts?\s*\(for more/i.test(trimmed)) continue;
99
- if (/shell mode|cycle mode|paste images|select file or folder/i.test(trimmed)) continue;
100
-
101
- // 프롬프트 줄
102
- if (/^[❯>]\s*$/.test(trimmed)) continue;
103
- if (/^[*•]\s*$/.test(trimmed)) continue;
104
-
105
- // 사용자 입력 에코
106
- if (lastUserInput && /^[*•]\s/.test(trimmed)) {
107
- const bulletContent = trimmed.replace(/^[*•]\s*/, '').trim();
108
- if (bulletContent === lastUserInput.trim()) continue;
109
- }
110
-
111
- // 업데이트/인증 안내
112
- if (/Gemini CLI update available/i.test(trimmed)) continue;
113
- if (/brew upgrade gemini-cli/i.test(trimmed)) continue;
114
- if (/Waiting for auth/i.test(trimmed)) continue;
115
-
116
- // 스피너 문자만 있는 줄
117
- if (/^[\u280b\u2819\u2839\u2838\u283c\u2834\u2826\u2827\u2807\u280f\s]+$/.test(trimmed)) continue;
118
-
119
- cleaned.push(line);
120
- }
121
-
122
- return cleaned.join('\n').replace(/\n{3,}/g, '\n\n').trim();
123
- },
124
- };