@adhdev/daemon-core 0.6.53 → 0.6.55

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 (164) hide show
  1. package/dist/index.d.ts +76 -34
  2. package/dist/index.js +714 -271
  3. package/dist/index.js.map +1 -1
  4. package/package.json +1 -1
  5. package/providers/_builtin/_helpers/index.js +26 -26
  6. package/providers/_builtin/cli/aider-cli/provider.json +37 -0
  7. package/providers/_builtin/cli/aider-cli/scripts/1.0/detect_status.js +20 -0
  8. package/providers/_builtin/cli/aider-cli/scripts/1.0/parse_approval.js +10 -0
  9. package/providers/_builtin/cli/aider-cli/scripts/1.0/parse_output.js +49 -0
  10. package/providers/_builtin/cli/aider-cli/scripts/1.0/scripts.js +7 -0
  11. package/providers/_builtin/cli/claude-cli/provider.json +9 -2
  12. package/providers/_builtin/cli/claude-cli/scripts/1.0/detect_status.js +31 -0
  13. package/providers/_builtin/cli/claude-cli/scripts/1.0/parse_approval.js +38 -0
  14. package/providers/_builtin/cli/claude-cli/scripts/1.0/parse_output.js +164 -0
  15. package/providers/_builtin/cli/claude-cli/scripts/1.0/scripts.js +42 -0
  16. package/providers/_builtin/cli/codex-cli/provider.json +9 -2
  17. package/providers/_builtin/cli/codex-cli/scripts/1.0/detect_status.js +20 -0
  18. package/providers/_builtin/cli/codex-cli/scripts/1.0/parse_approval.js +15 -0
  19. package/providers/_builtin/cli/codex-cli/scripts/1.0/parse_output.js +68 -0
  20. package/providers/_builtin/cli/codex-cli/scripts/1.0/scripts.js +11 -0
  21. package/providers/_builtin/cli/cursor-cli/provider.json +37 -0
  22. package/providers/_builtin/cli/cursor-cli/scripts/1.0/detect_status.js +19 -0
  23. package/providers/_builtin/cli/cursor-cli/scripts/1.0/parse_approval.js +10 -0
  24. package/providers/_builtin/cli/cursor-cli/scripts/1.0/parse_output.js +48 -0
  25. package/providers/_builtin/cli/cursor-cli/scripts/1.0/scripts.js +7 -0
  26. package/providers/_builtin/cli/gemini-cli/provider.json +9 -2
  27. package/providers/_builtin/cli/gemini-cli/scripts/1.0/detect_status.js +26 -0
  28. package/providers/_builtin/cli/gemini-cli/scripts/1.0/parse_approval.js +22 -0
  29. package/providers/_builtin/cli/gemini-cli/scripts/1.0/parse_output.js +71 -0
  30. package/providers/_builtin/cli/gemini-cli/scripts/1.0/scripts.js +12 -0
  31. package/providers/_builtin/cli/github-copilot-cli/provider.json +37 -0
  32. package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/detect_status.js +19 -0
  33. package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/parse_approval.js +9 -0
  34. package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/parse_output.js +48 -0
  35. package/providers/_builtin/cli/github-copilot-cli/scripts/1.0/scripts.js +7 -0
  36. package/providers/_builtin/cli/goose-cli/provider.json +37 -0
  37. package/providers/_builtin/cli/goose-cli/scripts/1.0/detect_status.js +20 -0
  38. package/providers/_builtin/cli/goose-cli/scripts/1.0/parse_approval.js +10 -0
  39. package/providers/_builtin/cli/goose-cli/scripts/1.0/parse_output.js +48 -0
  40. package/providers/_builtin/cli/goose-cli/scripts/1.0/scripts.js +7 -0
  41. package/providers/_builtin/cli/opencode-cli/provider.json +37 -0
  42. package/providers/_builtin/cli/opencode-cli/scripts/1.0/detect_status.js +15 -0
  43. package/providers/_builtin/cli/opencode-cli/scripts/1.0/parse_approval.js +9 -0
  44. package/providers/_builtin/cli/opencode-cli/scripts/1.0/parse_output.js +48 -0
  45. package/providers/_builtin/cli/opencode-cli/scripts/1.0/scripts.js +7 -0
  46. package/providers/_builtin/extension/cline/scripts/1.0/focus_editor.js +5 -5
  47. package/providers/_builtin/extension/cline/scripts/1.0/list_chats.js +11 -11
  48. package/providers/_builtin/extension/cline/scripts/1.0/list_models.js +6 -6
  49. package/providers/_builtin/extension/cline/scripts/1.0/list_modes.js +5 -5
  50. package/providers/_builtin/extension/cline/scripts/1.0/new_session.js +12 -12
  51. package/providers/_builtin/extension/cline/scripts/1.0/open_panel.js +7 -7
  52. package/providers/_builtin/extension/cline/scripts/1.0/read_chat.js +29 -29
  53. package/providers/_builtin/extension/cline/scripts/1.0/resolve_action.js +19 -19
  54. package/providers/_builtin/extension/cline/scripts/1.0/send_message.js +15 -15
  55. package/providers/_builtin/extension/cline/scripts/1.0/set_mode.js +4 -4
  56. package/providers/_builtin/extension/cline/scripts/1.0/set_model.js +4 -4
  57. package/providers/_builtin/extension/cline/scripts/1.0/switch_session.js +21 -21
  58. package/providers/_builtin/extension/codex/scripts/1.0/explore_controls_webview.js +2 -2
  59. package/providers/_builtin/extension/codex/scripts/1.0/list_models.js +1 -1
  60. package/providers/_builtin/extension/codex/scripts/1.0/list_modes.js +1 -1
  61. package/providers/_builtin/extension/codex/scripts/1.0/new_session.js +2 -2
  62. package/providers/_builtin/extension/codex/scripts/1.0/read_chat.js +6 -6
  63. package/providers/_builtin/extension/codex/scripts/1.0/resolve_action.js +3 -3
  64. package/providers/_builtin/extension/codex/scripts/1.0/set_model.js +1 -1
  65. package/providers/_builtin/ide/antigravity/scripts/1.0/focus_editor.js +2 -2
  66. package/providers/_builtin/ide/antigravity/scripts/1.0/list_chats.js +19 -19
  67. package/providers/_builtin/ide/antigravity/scripts/1.0/list_models.js +1 -1
  68. package/providers/_builtin/ide/antigravity/scripts/1.0/list_modes.js +1 -1
  69. package/providers/_builtin/ide/antigravity/scripts/1.0/new_session.js +17 -17
  70. package/providers/_builtin/ide/antigravity/scripts/1.0/read_chat.js +41 -41
  71. package/providers/_builtin/ide/antigravity/scripts/1.0/resolve_action.js +6 -6
  72. package/providers/_builtin/ide/antigravity/scripts/1.0/send_message.js +13 -13
  73. package/providers/_builtin/ide/antigravity/scripts/1.0/set_model.js +1 -1
  74. package/providers/_builtin/ide/antigravity/scripts/1.0/switch_session.js +13 -13
  75. package/providers/_builtin/ide/cursor/scripts/1.0/dismiss_notification.js +3 -3
  76. package/providers/_builtin/ide/cursor/scripts/1.0/focus_editor.js +1 -1
  77. package/providers/_builtin/ide/cursor/scripts/1.0/list_models.js +12 -12
  78. package/providers/_builtin/ide/cursor/scripts/1.0/list_modes.js +5 -5
  79. package/providers/_builtin/ide/cursor/scripts/1.0/list_notifications.js +2 -2
  80. package/providers/_builtin/ide/cursor/scripts/1.0/list_sessions.js +5 -5
  81. package/providers/_builtin/ide/cursor/scripts/1.0/new_session.js +1 -1
  82. package/providers/_builtin/ide/cursor/scripts/1.0/open_panel.js +3 -3
  83. package/providers/_builtin/ide/cursor/scripts/1.0/read_chat.js +9 -9
  84. package/providers/_builtin/ide/cursor/scripts/1.0/resolve_action.js +4 -4
  85. package/providers/_builtin/ide/cursor/scripts/1.0/send_message.js +5 -5
  86. package/providers/_builtin/ide/cursor/scripts/1.0/set_mode.js +4 -4
  87. package/providers/_builtin/ide/cursor/scripts/1.0/set_model.js +12 -12
  88. package/providers/_builtin/ide/cursor/scripts/1.0/switch_session.js +2 -2
  89. package/providers/_builtin/ide/kiro/scripts/1.0/focus_editor.js +2 -2
  90. package/providers/_builtin/ide/kiro/scripts/1.0/open_panel.js +7 -7
  91. package/providers/_builtin/ide/kiro/scripts/1.0/resolve_action.js +3 -3
  92. package/providers/_builtin/ide/kiro/scripts/1.0/send_message.js +4 -4
  93. package/providers/_builtin/ide/kiro/scripts/1.0/webview_list_sessions.js +2 -2
  94. package/providers/_builtin/ide/kiro/scripts/1.0/webview_new_session.js +5 -5
  95. package/providers/_builtin/ide/kiro/scripts/1.0/webview_read_chat.js +13 -13
  96. package/providers/_builtin/ide/kiro/scripts/1.0/webview_resolve_action.js +1 -1
  97. package/providers/_builtin/ide/kiro/scripts/1.0/webview_send_message.js +8 -8
  98. package/providers/_builtin/ide/kiro/scripts/1.0/webview_set_mode.js +1 -1
  99. package/providers/_builtin/ide/kiro/scripts/1.0/webview_set_model.js +1 -1
  100. package/providers/_builtin/ide/kiro/scripts/1.0/webview_switch_session.js +3 -3
  101. package/providers/_builtin/ide/pearai/.tmp/after_rich.json +157 -0
  102. package/providers/_builtin/ide/pearai/.tmp/after_rich_raw.json +161 -0
  103. package/providers/_builtin/ide/pearai/.tmp/after_switch.json +592 -0
  104. package/providers/_builtin/ide/pearai/.tmp/after_switch_raw.json +596 -0
  105. package/providers/_builtin/ide/pearai/.tmp/home_dump_raw.json +176 -0
  106. package/providers/_builtin/ide/pearai/.tmp/items_raw.json +778 -0
  107. package/providers/_builtin/ide/pearai/.tmp/webview_dump.json +157 -0
  108. package/providers/_builtin/ide/pearai/.tmp/webview_dump_raw.json +161 -0
  109. package/providers/_builtin/ide/pearai/provider.json +1 -3
  110. package/providers/_builtin/ide/pearai/scripts/1.0/focus_editor.js +12 -16
  111. package/providers/_builtin/ide/pearai/scripts/1.0/list_models.js +45 -0
  112. package/providers/_builtin/ide/pearai/scripts/1.0/list_modes.js +44 -0
  113. package/providers/_builtin/ide/pearai/scripts/1.0/list_sessions.js +82 -27
  114. package/providers/_builtin/ide/pearai/scripts/1.0/new_session.js +26 -43
  115. package/providers/_builtin/ide/pearai/scripts/1.0/open_panel.js +10 -33
  116. package/providers/_builtin/ide/pearai/scripts/1.0/read_chat.js +169 -0
  117. package/providers/_builtin/ide/pearai/scripts/1.0/resolve_action.js +47 -41
  118. package/providers/_builtin/ide/pearai/scripts/1.0/scripts.js +36 -7
  119. package/providers/_builtin/ide/pearai/scripts/1.0/send_message.js +97 -22
  120. package/providers/_builtin/ide/pearai/scripts/1.0/set_mode.js +51 -0
  121. package/providers/_builtin/ide/pearai/scripts/1.0/set_model.js +54 -0
  122. package/providers/_builtin/ide/pearai/scripts/1.0/switch_session.js +81 -0
  123. package/providers/_builtin/ide/trae/scripts/1.0/focus_editor.js +2 -2
  124. package/providers/_builtin/ide/trae/scripts/1.0/list_chats.js +2 -2
  125. package/providers/_builtin/ide/trae/scripts/1.0/new_session.js +4 -4
  126. package/providers/_builtin/ide/trae/scripts/1.0/open_panel.js +6 -6
  127. package/providers/_builtin/ide/trae/scripts/1.0/read_chat.js +13 -13
  128. package/providers/_builtin/ide/trae/scripts/1.0/resolve_action.js +3 -3
  129. package/providers/_builtin/ide/trae/scripts/1.0/send_message.js +11 -11
  130. package/providers/_builtin/ide/trae/scripts/1.0/switch_session.js +2 -2
  131. package/providers/_builtin/ide/windsurf/scripts/1.0/focus_editor.js +6 -6
  132. package/providers/_builtin/ide/windsurf/scripts/1.0/list_chats.js +4 -4
  133. package/providers/_builtin/ide/windsurf/scripts/1.0/list_sessions.js +6 -6
  134. package/providers/_builtin/ide/windsurf/scripts/1.0/new_session.js +9 -9
  135. package/providers/_builtin/ide/windsurf/scripts/1.0/open_panel.js +6 -6
  136. package/providers/_builtin/ide/windsurf/scripts/1.0/resolve_action.js +8 -8
  137. package/providers/_builtin/ide/windsurf/scripts/1.0/switch_session.js +8 -8
  138. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/focus_editor.js +6 -6
  139. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/list_chats.js +12 -12
  140. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/new_session.js +15 -15
  141. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/open_panel.js +10 -10
  142. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/read_chat.js +33 -33
  143. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/resolve_action.js +6 -6
  144. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/send_message.js +16 -16
  145. package/providers/_builtin/ide/windsurf/scripts/1.0.bak/switch_session.js +7 -7
  146. package/providers/_builtin/registry.json +76 -3
  147. package/src/cli-adapters/provider-cli-adapter.ts +267 -251
  148. package/src/cli-adapters/terminal-screen.ts +268 -0
  149. package/src/commands/chat-commands.ts +41 -15
  150. package/src/commands/cli-manager.ts +4 -2
  151. package/src/daemon/dev-server.ts +245 -35
  152. package/src/providers/acp-provider-instance.ts +1 -1
  153. package/src/providers/cli-provider-instance.ts +21 -8
  154. package/src/providers/provider-loader.ts +3 -2
  155. package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_models.js +0 -43
  156. package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_modes.js +0 -35
  157. package/providers/_builtin/ide/pearai/scripts/1.0/webview_list_sessions.js +0 -62
  158. package/providers/_builtin/ide/pearai/scripts/1.0/webview_new_session.js +0 -49
  159. package/providers/_builtin/ide/pearai/scripts/1.0/webview_read_chat.js +0 -92
  160. package/providers/_builtin/ide/pearai/scripts/1.0/webview_resolve_action.js +0 -59
  161. package/providers/_builtin/ide/pearai/scripts/1.0/webview_send_message.js +0 -72
  162. package/providers/_builtin/ide/pearai/scripts/1.0/webview_set_mode.js +0 -36
  163. package/providers/_builtin/ide/pearai/scripts/1.0/webview_set_model.js +0 -36
  164. package/providers/_builtin/ide/pearai/scripts/1.0/webview_switch_session.js +0 -34
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Cursor — resolve_action
3
3
  *
4
- * 승인/거부 버튼 찾기 + 클릭:
5
- * button, [role="button"], .cursor-pointer 텍스트 매칭
6
- * Cursor 단축키 라벨을 붙임 (e.g. "Run⏎", "SkipEsc") → ⏎↵ 제거 비교
4
+ * approval/ button search + click:
5
+ * button, [role="button"], .cursor-pointer text matching
6
+ * Cursor (e.g. "Run⏎", "SkipEsc") → ⏎↵ remove then compare
7
7
  *
8
- * params.buttonText: string — 찾을 버튼 텍스트
8
+ * params.buttonText: string — to find button text
9
9
  * → { resolved: true/false, clicked?, available? }
10
10
  */
11
11
  (params) => {
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Cursor — send_message
3
3
  *
4
- * Cursor cdp-type-and-send 방식:
5
- * 1. 입력 필드 존재 확인
6
- * 2. needsTypeAndSend: true 반환 → daemon CDP로 타이핑 + Enter 처리
4
+ * Cursor uses cdp-type-and-send approach:
5
+ * 1. Verify input field exists
6
+ * 2. Returns needsTypeAndSend: true → daemon handles typing + Enter via CDP
7
7
  *
8
- * 입력 셀렉터: .aislash-editor-input[contenteditable="true"]
9
- * 파라미터: ${ MESSAGE } (사용되지 않음 — daemon 직접 타이핑)
8
+ * Input selector: .aislash-editor-input[contenteditable="true"]
9
+ * Parameter: ${ MESSAGE } (Not used — daemon handles typing directly)
10
10
  */
11
11
  (() => {
12
12
  try {
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Cursor — set_mode
3
3
  *
4
- * 모드 드롭다운에서 대상 모드 선택:
5
- * 1. 드롭다운 열기
6
- * 2. 매칭 아이템 클릭
4
+ * Select target mode from mode dropdown:
5
+ * 1. Open dropdown
6
+ * 2. Click matching item
7
7
  *
8
- * params.mode: string — 모드 이름
8
+ * params.mode: string — Mode name
9
9
  * → { success: true/false, mode? }
10
10
  */
11
11
  async (params) => {
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Cursor — set_model
3
3
  *
4
- * 모델 드롭다운에서 대상 모델 선택:
5
- * 1. 드롭다운 열기
6
- * 2. Auto 토글 끄기 (필요 )
7
- * 3. 검색 입력으로 필터
8
- * 4. 매칭 아이템 클릭
9
- * 5. 원래 Auto 상태 복원
4
+ * Select target model from model dropdown:
5
+ * 1. Open dropdown
6
+ * 2. Turn off Auto toggle (if needed)
7
+ * 3. Filter via search input
8
+ * 4. Click matching item
9
+ * 5. Restore original Auto state
10
10
  *
11
- * params.model: string — 모델 이름 (🧠 접미사 가능)
11
+ * params.model: string — Model name (🧠 may have suffix)
12
12
  * → { success: true/false, model? }
13
13
  */
14
14
  async (params) => {
@@ -24,11 +24,11 @@ async (params) => {
24
24
  const menu = document.querySelector('[data-testid="model-picker-menu"]');
25
25
  if (!menu) return JSON.stringify({ success: false, error: 'Model picker menu not found' });
26
26
 
27
- // 🧠 접미사 처리
27
+ // 🧠 Handle suffix
28
28
  const wantBrain = target.includes('🧠');
29
29
  const searchName = target.replace(/\s*🧠\s*$/, '').trim();
30
30
 
31
- // Auto 토글 끄기
31
+ // Auto toggle turn off
32
32
  const autoItem = menu.querySelector('.composer-unified-context-menu-item[data-is-selected="true"]');
33
33
  const autoToggle = autoItem ? [...autoItem.querySelectorAll('[class*="rounded-full"]')].find(el => el.offsetWidth === 24 && el.offsetHeight === 14) : null;
34
34
  let wasAutoOn = false;
@@ -41,7 +41,7 @@ async (params) => {
41
41
  }
42
42
  }
43
43
 
44
- // 검색 입력으로 필터링
44
+ // Filter via search input
45
45
  const refreshedMenu = document.querySelector('[data-testid="model-picker-menu"]');
46
46
  const searchInput = refreshedMenu?.querySelector('input[placeholder="Search models"]');
47
47
  if (searchInput) {
@@ -51,7 +51,7 @@ async (params) => {
51
51
  await new Promise(r => setTimeout(r, 300));
52
52
  }
53
53
 
54
- // 아이템에서 찾기
54
+ // from search
55
55
  const items = (refreshedMenu || menu).querySelectorAll('.composer-unified-context-menu-item');
56
56
  for (const item of items) {
57
57
  const nameEl = item.querySelector('.monaco-highlighted-label');
@@ -67,7 +67,7 @@ async (params) => {
67
67
  }
68
68
  }
69
69
 
70
- // Auto 복원 + 닫기
70
+ // Auto + close
71
71
  if (wasAutoOn) {
72
72
  const nm = document.querySelector('[data-testid="model-picker-menu"]');
73
73
  const nai = nm?.querySelector('.composer-unified-context-menu-item');
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Cursor — switch_session
3
3
  *
4
- * 사이드바 클릭으로 세션 전환:
5
- * 제목 매칭 (params.title) 또는 인덱스 (params.index)
4
+ * by clicking Switch session:
5
+ * title matching (params.title) or index (params.index)
6
6
  *
7
7
  * params.index: number, params.title: string|null
8
8
  * → { switched: true/false, title?, error? }
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Cursor v1 — focus_editor
3
3
  *
4
- * CURSOR.md 4-5: 셀렉터 우선순위
4
+ * CURSOR.md 4-5: Selector priority
5
5
  * [contenteditable="true"][role="textbox"]
6
6
  * → .chat-input textarea
7
7
  * → .composer-input
8
8
  * → textarea
9
9
  *
10
- * 최종 확인: 2026-03-06
10
+ * final Check: 2026-03-06
11
11
  */
12
12
  (() => {
13
13
  const editor = document.querySelector('[contenteditable="true"][role="textbox"]')
@@ -1,21 +1,21 @@
1
1
  /**
2
2
  * Kiro — open_panel
3
3
  *
4
- * Kiro AI 채팅 패널 열기.
5
- * Secondary Side Bar (#workbench.parts.auxiliarybar) 위치.
6
- * "Toggle Secondary Side Bar (⌥⌘B)" 또는 "Kiro" 버튼으로 열기.
4
+ * Kiro AI chat panel open.
5
+ * Secondary Side Bar (#workbench.parts.auxiliarybar)located at.
6
+ * "Toggle Secondary Side Bar (⌥⌘B)" or "Kiro" via button open.
7
7
  *
8
- * 반환: 'visible' | 'opened' | 'error: ...'
8
+ * Return: 'visible' | 'opened' | 'error: ...'
9
9
  */
10
10
  (() => {
11
11
  try {
12
- // 1. 이미 열려 있는지 확인
12
+ // 1. if already open Check
13
13
  const sidebar = document.getElementById('workbench.parts.auxiliarybar');
14
14
  if (sidebar && sidebar.offsetWidth > 0 && sidebar.offsetHeight > 0) {
15
15
  return 'visible';
16
16
  }
17
17
 
18
- // 2. Toggle 버튼 클릭 시도
18
+ // 2. Attempt to click toggle button
19
19
  const toggleBtns = Array.from(document.querySelectorAll('li.action-item a, button, [role="button"]'));
20
20
  for (const btn of toggleBtns) {
21
21
  const label = (btn.getAttribute('aria-label') || '').toLowerCase();
@@ -28,7 +28,7 @@
28
28
  }
29
29
  }
30
30
 
31
- // 3. Cmd+Shift+I 단축키 폴백 (Kiro 기본 단축키)
31
+ // 3. Cmd+Shift+I shortcut fallback (Kiro default shortcut)
32
32
  document.dispatchEvent(new KeyboardEvent('keydown', {
33
33
  key: 'b', code: 'KeyB', keyCode: 66,
34
34
  metaKey: true, altKey: true, ctrlKey: false,
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Kiro — resolve_action
3
3
  *
4
- * 승인/거부 버튼 찾기 + 좌표 반환.
5
- * Kiro의 approval 다이얼로그는 메인 DOM에 표시됨.
4
+ * Find approve/reject buttons + coordinates Return.
5
+ * Kiroapproval dialog is displayed in main DOM.
6
6
  *
7
- * 파라미터: ${ BUTTON_TEXT }
7
+ * Parameter: ${ BUTTON_TEXT }
8
8
  */
9
9
  (() => {
10
10
  const want = ${ BUTTON_TEXT };
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Kiro — send_message
3
3
  *
4
- * Kiro 채팅 입력은 webview iframe 안에 있어 메인 DOM에서 직접 접근 불가.
5
- * auxbar 하단의 입력 필드 좌표를 계산하여 clickCoords로 반환.
6
- * 데몬이 CDP Input API 해당 좌표에 클릭+타이핑+Enter 수행.
4
+ * Kiro chat input is inside webview iframe, so direct access from main DOM is not possible.
5
+ * auxbar at the bottom of Input field calculate coordinates and return as clickCoords.
6
+ * CDP Input API click++Enter row.
7
7
  *
8
- * 파라미터: ${ MESSAGE }
8
+ * Parameter: ${ MESSAGE }
9
9
  */
10
10
  (() => {
11
11
  try {
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Kiro — webview_list_sessions (webview iframe 내부에서 실행)
2
+ * Kiro — webview_list_sessions (webview iframe runs inside)
3
3
  *
4
- * Kiro 세션 목록을 반환.
4
+ * Kiro session list Return.
5
5
  * DOM: .kiro-tabs-item
6
6
  */
7
7
  (() => {
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Kiro — webview_new_session (webview iframe 내부에서 실행)
2
+ * Kiro — webview_new_session (webview iframe runs inside)
3
3
  *
4
- * "New Session" 버튼/탭 클릭.
5
- * Kiro 탭 바에 + 버튼 또는 "New Session" 액션이 있음.
4
+ * "New Session" button/ click.
5
+ * Kiro + button or "New Session" .
6
6
  */
7
7
  (() => {
8
8
  try {
9
- // kiro-icon-button (+ 버튼) 찾기
9
+ // kiro-icon-button (+ button) search
10
10
  const addBtns = document.querySelectorAll('.kiro-icon-button, button, [role="button"]');
11
11
  for (const btn of addBtns) {
12
12
  const ariaLabel = (btn.getAttribute('aria-label') || '').toLowerCase();
@@ -18,7 +18,7 @@
18
18
  }
19
19
  }
20
20
 
21
- // Checkpoint > New Session 영역 찾기
21
+ // Checkpoint > New Session area search
22
22
  const allText = document.querySelectorAll('*');
23
23
  for (const el of allText) {
24
24
  if (el.children.length === 0 && (el.textContent || '').trim() === 'New Session') {
@@ -1,16 +1,16 @@
1
1
  /**
2
- * Kiro — webview_read_chat (webview iframe 내부에서 실행)
2
+ * Kiro — webview_read_chat (webview iframe runs inside)
3
3
  *
4
- * Kiro 채팅 UI webview iframe 안에 위치하며,
5
- * 데몬의 evaluateInWebviewFrame 통해 실행됨.
4
+ * Kiro chat UI webview iframe located at,
5
+ * evaluateInWebviewFrame execute.
6
6
  *
7
- * DOM 구조:
7
+ * DOM structure:
8
8
  * .kiro-chat-timeline
9
- * .kiro-chat-message (유저/어시스턴트 메시지)
10
- * .kiro-chat-message-meta → .kiro-chat-message-role (발신자)
11
- * .kiro-chat-message-body → .kiro-chat-message-markdown (내용)
9
+ * .kiro-chat-message (user/assistant messages)
10
+ * .kiro-chat-message-meta → .kiro-chat-message-role (sender)
11
+ * .kiro-chat-message-body → .kiro-chat-message-markdown (content)
12
12
  *
13
- * 반환: ReadChatResult { id, status, messages, inputContent? }
13
+ * Return: ReadChatResult { id, status, messages, inputContent? }
14
14
  */
15
15
  (() => {
16
16
  try {
@@ -104,18 +104,18 @@
104
104
  }
105
105
  });
106
106
 
107
- // 상태 감지 activeModal 추출
107
+ // status detection activeModal extract
108
108
  let status = 'idle';
109
109
  let activeModal = undefined;
110
110
 
111
- // "Working" / "Cancel" 버튼 → generating
111
+ // "Working" / "Cancel" button → generating
112
112
  const snackbar = document.querySelector('.kiro-snackbar');
113
113
  if (snackbar && snackbar.offsetWidth > 0) {
114
114
  const barText = (snackbar.textContent || '').toLowerCase();
115
115
  if (barText.includes('working') || barText.includes('cancel')) {
116
116
  status = 'generating';
117
117
  } else if (barText.includes('waiting') || barText.includes('input')) {
118
- // 승인 대기 (waiting on your input)
118
+ // Waiting for approval (waiting on your input)
119
119
  const titleEl = snackbar.querySelector('.kiro-snackbar-title, .thinking-text');
120
120
  const actionsEl = snackbar.querySelectorAll('.kiro-snackbar-actions button');
121
121
  const buttons = Array.from(actionsEl).map(b => (b.textContent || '').trim());
@@ -139,11 +139,11 @@
139
139
  }
140
140
  }
141
141
 
142
- // 입력 필드 내용
142
+ // Input field content
143
143
  const input = document.querySelector('.tiptap.ProseMirror, [contenteditable="true"]');
144
144
  const inputContent = input ? input.textContent?.trim() : '';
145
145
 
146
- // 세션
146
+ // session
147
147
  const tab = document.querySelector('.kiro-tabs-item.active, .kiro-tabs-item[aria-selected="true"]');
148
148
  const title = tab?.textContent?.trim() || '';
149
149
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Kiro — webview_resolve_action
3
3
  * Kiro's approval dialog uses buttons in the kiro-snackbar.
4
- * 파라미터: ${ BUTTON_TEXT }
4
+ * Parameter: ${ BUTTON_TEXT }
5
5
  */
6
6
  (() => {
7
7
  try {
@@ -1,16 +1,16 @@
1
1
  /**
2
- * Kiro — webview_send_message (webview iframe 내부에서 실행)
2
+ * Kiro — webview_send_message (webview iframe runs inside)
3
3
  *
4
- * Kiro 채팅 입력은 webview iframe 안의 ProseMirror/tiptap 에디터.
5
- * execCommand('insertText') + Enter 이벤트로 메시지 전송.
4
+ * Kiro chat input webview iframe ProseMirror/tiptap editor.
5
+ * execCommand('insertText') + Enter via key event Send message.
6
6
  *
7
- * 파라미터: ${ MESSAGE }
7
+ * Parameter: ${ MESSAGE }
8
8
  */
9
9
  (async () => {
10
10
  try {
11
11
  const msg = ${ MESSAGE };
12
12
 
13
- // ─── 1. 입력 필드 찾기 ───
13
+ // ─── 1. Find input field ───
14
14
  const editor =
15
15
  document.querySelector('.tiptap.ProseMirror') ||
16
16
  document.querySelector('[contenteditable="true"]') ||
@@ -39,7 +39,7 @@
39
39
  editor.focus();
40
40
  await new Promise(r => setTimeout(r, 100));
41
41
 
42
- // 전체 선택 + 삭제 + 삽입
42
+ // all Select + delete + insert
43
43
  const sel = window.getSelection();
44
44
  const range = document.createRange();
45
45
  range.selectNodeContents(editor);
@@ -54,7 +54,7 @@
54
54
  editor.dispatchEvent(new Event('input', { bubbles: true }));
55
55
  await new Promise(r => setTimeout(r, 400));
56
56
 
57
- // ─── 3. 전송 버튼 클릭 (Enter 키가 안 먹힐 때 대비) ───
57
+ // ─── 3. button click (Enter ) ───
58
58
  const sendBtns = Array.from(document.querySelectorAll('button, div[role="button"], span[role="button"]'))
59
59
  .filter(b => {
60
60
  const aria = (b.getAttribute('aria-label') || '').toLowerCase();
@@ -76,7 +76,7 @@
76
76
  await new Promise(r => setTimeout(r, 100));
77
77
  }
78
78
 
79
- // ─── 4. Enter 전송 (Fallback) ───
79
+ // ─── 4. Enter key sending (Fallback) ───
80
80
  const enterOpts = {
81
81
  key: 'Enter', code: 'Enter',
82
82
  keyCode: 13, which: 13,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Kiro — webview_set_mode
3
3
  * Toggles the Autopilot switch based on requested mode.
4
- * 파라미터: ${ MODE }
4
+ * Parameter: ${ MODE }
5
5
  */
6
6
  (() => {
7
7
  try {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Kiro — webview_set_model
3
- * 파라미터: ${ MODEL }
3
+ * Parameter: ${ MODEL }
4
4
  */
5
5
  (async () => {
6
6
  try {
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Kiro — webview_switch_session (webview iframe 내부에서 실행)
2
+ * Kiro — webview_switch_session (webview iframe runs inside)
3
3
  *
4
- * 세션 클릭으로 전환.
5
- * 파라미터: ${ SESSION_ID } ( 인덱스)
4
+ * session by clicking .
5
+ * Parameter: ${ SESSION_ID } ( index)
6
6
  */
7
7
  (() => {
8
8
  try {
@@ -0,0 +1,157 @@
1
+ {
2
+ "title": "Roo Code",
3
+ "text": "PearAI Coding Agent\nPowered by Roo Code / Cline\nAutonomous coding agent that has access to your development environment (with your permission) for a feedback loop to add features, fix bugs, and more.\nMARCH 28, 5:43 PM\n테스트\n↑ 93.2k\n↓ 2.2k\nMARCH 28, 5:26 PM\nDo ALL of the following:\n1. Run `ls -la /tmp` in the terminal\n2. Write a file /tmp/adhdev_test.txt with content 'hello world'\n3. Show a markdown table with 3 rows: Name, Language, Stars for Python, JavaScript, Rust\n4. Write a python code block that prints fibonacci numbers\nThink step by step before each task.\n↑ 40.6k\n↓ 2.9k\nMARCH 28, 5:24 PM\nSay hello in one word\n↑ 0\n↓ 0\nAuto-approve:\nRead, Write, Execute, Browser, MCP, Mode, Subtasks, Retry\n(@ to add context, / to switch modes, hold shift to drag in files/images)\n💻 Code\ndefault\nSend",
4
+ "html": "\n <noscript>You need to enable JavaScript to run this app.</noscript>\n <div id=\"root\"><div style=\"position: fixed; inset: 0px; padding: 12px; display: flex; flex-direction: column; overflow: hidden;\"><div style=\"flex: 1 1 0px; min-height: 0px; overflow-y: auto; display: flex; flex-direction: column-reverse; padding-bottom: 10px;\"><div class=\"max-w-2xl mx-auto w-full h-[calc(100vh-270px)] text-center flex flex-col justify-center\"><div class=\"w-full text-center flex flex-col items-center justify-center relative gap-5\"><img src=\"data:image/svg+xml,%3csvg%20width='301'%20height='208'%20viewBox='0%200%20301%20208'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='5.19824'%20y='5.12256'%20width='290.603'%20height='38.5863'%20rx='14.4699'%20fill='%23FF34A1'%20fill-opacity='0.5'/%3e%3cpath%20d='M31.1083%2017.7987C30.2842%2016.9746%2028.9481%2016.9746%2028.1241%2017.7987L22.9853%2022.9375C22.6774%2023.2454%2022.4332%2023.6109%2022.2665%2024.0132L21.2443%2026.481C21.1043%2026.8189%2021.1817%2027.2079%2021.4403%2027.4665C21.6989%2027.7252%2022.0879%2027.8026%2022.4259%2027.6626L24.8939%2026.6404C25.2963%2026.4737%2025.6619%2026.2294%2025.9698%2025.9215L31.1083%2020.783C31.9324%2019.9589%2031.9324%2018.6228%2031.1083%2017.7987Z'%20fill='%23FF34A1'/%3e%3cpath%20d='M20.5725%2018.9894C19.74%2018.9894%2019.0652%2019.6642%2019.0652%2020.4967V28.3345C19.0652%2029.167%2019.74%2029.8418%2020.5725%2029.8418H28.4103C29.2428%2029.8418%2029.9176%2029.167%2029.9176%2028.3345V25.6214C29.9176%2025.122%2030.3225%2024.7171%2030.822%2024.7171C31.3215%2024.7171%2031.7263%2025.122%2031.7263%2025.6214V28.3345C31.7263%2030.1659%2030.2417%2031.6505%2028.4103%2031.6505H20.5725C18.7411%2031.6505%2017.2565%2030.1659%2017.2565%2028.3345V20.4967C17.2565%2018.6653%2018.7411%2017.1807%2020.5725%2017.1807H23.2856C23.7851%2017.1807%2024.19%2017.5856%2024.19%2018.085C24.19%2018.5845%2023.7851%2018.9894%2023.2856%2018.9894H20.5725Z'%20fill='%23FF34A1'/%3e%3crect%20x='43.7845'%20y='19.5923'%20width='125.406'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.5'/%3e%3crect%20x='5.19824'%20y='53.3555'%20width='290.603'%20height='77.1727'%20rx='14.4699'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3cpath%20d='M25.7492%2087.1705C25.7492%2086.671%2025.3443%2086.2661%2024.8448%2086.2661C24.3453%2086.2661%2023.9404%2086.671%2023.9404%2087.1705V91.3909H19.72C19.2206%2091.3909%2018.8157%2091.7958%2018.8157%2092.2952C18.8157%2092.7947%2019.2206%2093.1996%2019.72%2093.1996L23.9404%2093.1996V97.42C23.9404%2097.9194%2024.3453%2098.3243%2024.8448%2098.3243C25.3443%2098.3243%2025.7492%2097.9194%2025.7492%2097.42V93.1996L29.9695%2093.1996C30.469%2093.1996%2030.8739%2092.7947%2030.8739%2092.2952C30.8739%2091.7958%2030.469%2091.3909%2029.9695%2091.3909H25.7492V87.1705Z'%20fill='%23FF34A1'/%3e%3crect%20x='43.7845'%20y='65.4136'%20width='125.406'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='58.2544'%20y='79.8833'%20width='194.138'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='58.2544'%20y='94.3535'%20width='212.225'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='58.2544'%20y='108.823'%20width='118.171'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='5.19824'%20y='140.175'%20width='290.603'%20height='62.7028'%20rx='14.4699'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3cpath%20d='M19.72%20170.975C19.2206%20170.975%2018.8157%20171.38%2018.8157%20171.879C18.8157%20172.379%2019.2206%20172.784%2019.72%20172.784L29.9695%20172.784C30.469%20172.784%2030.8739%20172.379%2030.8739%20171.879C30.8739%20171.38%2030.469%20170.975%2029.9695%20170.975H19.72Z'%20fill='%23FF34A1'/%3e%3crect%20x='43.7845'%20y='152.233'%20width='94.0542'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='58.2544'%20y='166.703'%20width='27.7339'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3crect%20x='58.2544'%20y='181.173'%20width='50.6446'%20height='9.64659'%20rx='4.82329'%20fill='%23FF34A1'%20fill-opacity='0.05'/%3e%3c/svg%3e\" alt=\"...\"><div class=\"w-[300px] flex-col justify-start items-start gap-5 inline-flex\"><div class=\"flex flex-col text-left\"><div class=\"text-2xl\">PearAI Coding Agent</div><div class=\"h-[18px] opacity-50 text-xs leading-[18px]\">Powered by Roo Code / Cline</div></div></div><div class=\"w-[300px] text-left opacity-50 text-xs leading-[18px]\">Autonomous coding agent that has access to your development environment (with your permission) for a feedback loop to add features, fix bugs, and more.</div></div></div><div class=\"flex flex-col gap-3\"><div class=\"bg-vscode-editor-background rounded relative overflow-hidden cursor-pointer border border-vscode-toolbar-hoverBackground/30 hover:border-vscode-toolbar-hoverBackground/60\"><div class=\"flex flex-col gap-2 p-3 pt-1\"><div class=\"flex justify-between items-center\"><span class=\"text-xs font-medium text-vscode-descriptionForeground uppercase\">MARCH 28, 5:43 PM</span><button class=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 cursor-pointer active:opacity-80 hover:bg-accent hover:text-accent-foreground h-7 w-7 opacity-50 hover:opacity-100\" title=\"Copy Prompt\" data-testid=\"copy-prompt-button\"><span class=\"codicon scale-80 codicon-copy\"></span></button></div><div class=\"text-vscode-foreground overflow-hidden whitespace-pre-wrap\" style=\"display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: anywhere;\">테스트</div><div class=\"flex flex-row gap-2 text-xs text-vscode-descriptionForeground\"><span>↑ 93.2k</span><span>↓ 2.2k</span></div></div></div><div class=\"bg-vscode-editor-background rounded relative overflow-hidden cursor-pointer border border-vscode-toolbar-hoverBackground/30 hover:border-vscode-toolbar-hoverBackground/60\"><div class=\"flex flex-col gap-2 p-3 pt-1\"><div class=\"flex justify-between items-center\"><span class=\"text-xs font-medium text-vscode-descriptionForeground uppercase\">MARCH 28, 5:26 PM</span><button class=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 cursor-pointer active:opacity-80 hover:bg-accent hover:text-accent-foreground h-7 w-7 opacity-50 hover:opacity-100\" title=\"Copy Prompt\" data-testid=\"copy-prompt-button\"><span class=\"codicon scale-80 codicon-copy\"></span></button></div><div class=\"text-vscode-foreground overflow-hidden whitespace-pre-wrap\" style=\"display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: anywhere;\">Do ALL of the following:\n1. Run `ls -la /tmp` in the terminal\n2. Write a file /tmp/adhdev_test.txt with content 'hello world'\n3. Show a markdown table with 3 rows: Name, Language, Stars for Python, JavaScript, Rust\n4. Write a python code block that prints fibonacci numbers\nThink step by step before each task.</div><div class=\"flex flex-row gap-2 text-xs text-vscode-descriptionForeground\"><span>↑ 40.6k</span><span>↓ 2.9k</span></div></div></div><div class=\"bg-vscode-editor-background rounded relative overflow-hidden cursor-pointer border border-vscode-toolbar-hoverBackground/30 hover:border-vscode-toolbar-hoverBackground/60\"><div class=\"flex flex-col gap-2 p-3 pt-1\"><div class=\"flex justify-between items-center\"><span class=\"text-xs font-medium text-vscode-descriptionForeground uppercase\">MARCH 28, 5:24 PM</span><button class=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 cursor-pointer active:opacity-80 hover:bg-accent hover:text-accent-foreground h-7 w-7 opacity-50 hover:opacity-100\" title=\"Copy Prompt\" data-testid=\"copy-prompt-button\"><span class=\"codicon scale-80 codicon-copy\"></span></button></div><div class=\"text-vscode-foreground overflow-hidden whitespace-pre-wrap\" style=\"display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: anywhere;\">Say hello in one word</div><div class=\"flex flex-row gap-2 text-xs text-vscode-descriptionForeground\"><span>↑ 0</span><span>↓ 0</span></div></div></div></div></div><div class=\"mb-[-2px] flex-initial min-h-0\"><div style=\"padding: 6px 6px 10px; user-select: none; border-top: none; overflow-y: auto;\"><div style=\"display: flex; align-items: center; gap: 8px; cursor: pointer;\"><div><vscode-checkbox role=\"checkbox\" aria-checked=\"true\" aria-required=\"false\" aria-disabled=\"false\" tabindex=\"0\" aria-label=\"Checkbox\" current-value=\"on\" current-checked=\"true\" class=\"checked\"></vscode-checkbox></div><div style=\"display: flex; align-items: center; gap: 4px; flex: 1 1 0%; min-width: 0px;\"><span style=\"color: var(--vscode-foreground); flex-shrink: 0;\">Auto-approve:</span><span style=\"color: var(--vscode-descriptionForeground); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1 1 0%; min-width: 0px;\">Read, Write, Execute, Browser, MCP, Mode, Subtasks, Retry</span><span class=\"codicon codicon-chevron-right\" style=\"flex-shrink: 0; margin-left: -2px;\"></span></div></div></div></div><div class=\"relative flex flex-col gap-2 m-[10px_15px] p-2 outline-none border-none w-[calc(100%-30px)] rounded-xl ml-auto mr-auto box-border opacity-100\" style=\"background-color: var(--vscode-editor-background);\"><div class=\"relative\"><div class=\"chat-text-area relative flex flex-col outline-none\"><div class=\"relative flex-1 flex flex-col-reverse min-h-0 overflow-hidden rounded\"><div class=\"absolute inset-0 pointer-events-none whitespace-pre-wrap break-words text-transparent overflow-hidden py-2 px-[9px] z-[1000]\" style=\"color: transparent; font-family: var(--vscode-font-family); font-size: var(--vscode-editor-font-size); line-height: var(--vscode-editor-line-height);\"></div><textarea placeholder=\"Type your task here...\" class=\"w-full text-vscode-input-foreground cursor-text py-1.5 px-2 border-none outline-none focus:outline-none focus:ring-0 opacity-100 bg-transparent transition-background-color duration-150 ease-in-out will-change-background-color min-h-[90px] box-border rounded resize-none overflow-x-hidden overflow-y-auto pr-2 flex-none flex-grow z-[2] scrollbar-none\" style=\"font-family: var(--vscode-font-family); font-size: var(--vscode-editor-font-size); line-height: var(--vscode-editor-line-height); outline: none; height: 57px !important;\"></textarea><div class=\"absolute left-2 flex gap-2 text-xs text-vscode-input-foreground pointer-events-none z-25 bottom-1.5 pr-2 transition-opacity duration-200 ease-in-out opacity-70\">\n(@ to add context, / to switch modes, hold shift to drag in files/images)</div></div></div></div><div class=\"flex justify-between items-center mt-auto pt-0.5\"><div class=\"flex items-center gap-1 min-w-0\"><div class=\"shrink-0\"><button type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"false\" aria-controls=\"radix-:r0:\" data-state=\"closed\" title=\"Select mode for interaction\" data-testid=\"dropdown-trigger\" class=\"min-w-0 max-w-full inline-flex items-center gap-1.5 relative whitespace-nowrap px-1.5 py-1 text-xs bg-transparent border border-[rgba(255,255,255,0.08)] rounded-md text-vscode-foreground transition-all duration-150 focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder opacity-90 hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)] cursor-pointer w-full\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"pointer-events-none opacity-80 flex-shrink-0 size-3\"><path d=\"M4.18179 8.81819C4.00605 8.64245 4.00605 8.35753 4.18179 8.18179L7.18179 5.18179C7.26618 5.0974 7.38064 5.04999 7.49999 5.04999C7.61933 5.04999 7.73379 5.0974 7.81819 5.18179L10.8182 8.18179C10.9939 8.35753 10.9939 8.64245 10.8182 8.81819C10.6424 8.99392 10.3575 8.99392 10.1818 8.81819L7.49999 6.13638L4.81819 8.81819C4.64245 8.99392 4.35753 8.99392 4.18179 8.81819Z\" fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"></path></svg><span class=\"truncate\">💻 Code</span></button></div><div class=\"flex-1 min-w-0 overflow-hidden\"><button type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"false\" aria-controls=\"radix-:r1:\" data-state=\"closed\" title=\"Select API configuration\" data-testid=\"dropdown-trigger\" class=\"min-w-0 max-w-full inline-flex items-center gap-1.5 relative whitespace-nowrap px-1.5 py-1 text-xs bg-transparent border border-[rgba(255,255,255,0.08)] rounded-md text-vscode-foreground transition-all duration-150 focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder opacity-90 hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)] cursor-pointer w-full text-ellipsis overflow-hidden\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"pointer-events-none opacity-80 flex-shrink-0 size-3\"><path d=\"M4.18179 8.81819C4.00605 8.64245 4.00605 8.35753 4.18179 8.18179L7.18179 5.18179C7.26618 5.0974 7.38064 5.04999 7.49999 5.04999C7.61933 5.04999 7.73379 5.0974 7.81819 5.18179L10.8182 8.18179C10.9939 8.35753 10.9939 8.64245 10.8182 8.81819C10.6424 8.99392 10.3575 8.99392 10.1818 8.81819L7.49999 6.13638L4.81819 8.81819C4.64245 8.99392 4.35753 8.99392 4.18179 8.81819Z\" fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"></path></svg><span class=\"truncate\">default</span></button></div></div><div class=\"flex items-center gap-0.5 shrink-0\"><button aria-label=\"Add images to message\" title=\"Add images to message\" class=\"relative inline-flex items-center justify-center bg-transparent border-none p-1.5 rounded-md min-w-[28px] min-h-[28px] text-vscode-foreground opacity-85 transition-all duration-150 hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)] focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder active:bg-[rgba(255,255,255,0.1)]\" style=\"font-size: 16.5px;\"><span class=\"codicon codicon-device-camera\"></span></button><button class=\"inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 cursor-pointer active:opacity-80 border border-vscode-input-border shadow hover:bg-primary/90 gap-1 h-6 bg-[#E64C9E] text-white text-xs px-2 rounded-lg\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\" width=\"12px\" height=\"12px\"><path fill-rule=\"evenodd\" d=\"M13.25 2a.75.75 0 0 0-.75.75v6.5H4.56l.97-.97a.75.75 0 0 0-1.06-1.06L2.22 9.47a.75.75 0 0 0 0 1.06l2.25 2.25a.75.75 0 0 0 1.06-1.06l-.97-.97h8.69A.75.75 0 0 0 14 10V2.75a.75.75 0 0 0-.75-.75Z\" clip-rule=\"evenodd\"></path></svg>Send</button></div></div></div><div id=\"roo-portal\"></div></div></div>\n <script nonce=\"j5u673kij40bpVvUJgwCABMGTv1qebOB\" type=\"module\" src=\"https://file%2B.vscode-resource.vscode-cdn.net/Applications/PearAI.app/Contents/Resources/app/extensions/pearai.pearai-roo-cline-3.15.2/webview-ui/build/assets/index.js\"></script>\n \n \n <textarea tabindex=\"-1\" aria-hidden=\"true\" style=\"min-height: 0px !important; max-height: none !important; height: 0px !important; visibility: hidden !important; overflow: hidden !important; position: absolute !important; z-index: -1000 !important; top: 0px !important; right: 0px !important; display: block !important; border-width: 0px; box-sizing: border-box; font-family: -apple-system, &quot;system-ui&quot;, sans-serif; font-size: 12px; font-style: normal; font-weight: 400; letter-spacing: normal; line-height: 15px; padding: 6px 8px; tab-size: 4; text-indent: 0px; text-rendering: auto; text-transform: none; width: 329px; word-break: normal; word-spacing: 0px; scrollbar-gutter: auto;\"></textarea>",
5
+ "elements": [
6
+ {
7
+ "tag": "button",
8
+ "id": "",
9
+ "className": "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:poin",
10
+ "role": "",
11
+ "ariaLabel": "",
12
+ "title": "Copy Prompt",
13
+ "placeholder": "",
14
+ "dataTestId": "copy-prompt-button",
15
+ "text": "",
16
+ "x": 336,
17
+ "y": -223,
18
+ "w": 28,
19
+ "h": 28
20
+ },
21
+ {
22
+ "tag": "button",
23
+ "id": "",
24
+ "className": "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:poin",
25
+ "role": "",
26
+ "ariaLabel": "",
27
+ "title": "Copy Prompt",
28
+ "placeholder": "",
29
+ "dataTestId": "copy-prompt-button",
30
+ "text": "",
31
+ "x": 336,
32
+ "y": -118,
33
+ "w": 28,
34
+ "h": 28
35
+ },
36
+ {
37
+ "tag": "button",
38
+ "id": "",
39
+ "className": "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:poin",
40
+ "role": "",
41
+ "ariaLabel": "",
42
+ "title": "Copy Prompt",
43
+ "placeholder": "",
44
+ "dataTestId": "copy-prompt-button",
45
+ "text": "",
46
+ "x": 336,
47
+ "y": 3,
48
+ "w": 28,
49
+ "h": 28
50
+ },
51
+ {
52
+ "tag": "vscode-checkbox",
53
+ "id": "",
54
+ "className": "checked",
55
+ "role": "checkbox",
56
+ "ariaLabel": "Checkbox",
57
+ "title": "",
58
+ "placeholder": "",
59
+ "dataTestId": "",
60
+ "text": "",
61
+ "x": 18,
62
+ "y": 463,
63
+ "w": 18,
64
+ "h": 18
65
+ },
66
+ {
67
+ "tag": "textarea",
68
+ "id": "",
69
+ "className": "w-full text-vscode-input-foreground cursor-text py-1.5 px-2 border-none outline-none focus:outline-none focus:ring-0 opacity-100 bg-transparent transition-background-color duration-150 ease-in-out wil",
70
+ "role": "",
71
+ "ariaLabel": "",
72
+ "title": "",
73
+ "placeholder": "Type your task here...",
74
+ "dataTestId": "",
75
+ "text": "",
76
+ "x": 35,
77
+ "y": 511,
78
+ "w": 329,
79
+ "h": 90
80
+ },
81
+ {
82
+ "tag": "button",
83
+ "id": "",
84
+ "className": "min-w-0 max-w-full inline-flex items-center gap-1.5 relative whitespace-nowrap px-1.5 py-1 text-xs bg-transparent border border-[rgba(255,255,255,0.08)] rounded-md text-vscode-foreground transition-al",
85
+ "role": "",
86
+ "ariaLabel": "",
87
+ "title": "Select mode for interaction",
88
+ "placeholder": "",
89
+ "dataTestId": "dropdown-trigger",
90
+ "text": "💻 Code",
91
+ "x": 35,
92
+ "y": 613,
93
+ "w": 74,
94
+ "h": 25
95
+ },
96
+ {
97
+ "tag": "button",
98
+ "id": "",
99
+ "className": "min-w-0 max-w-full inline-flex items-center gap-1.5 relative whitespace-nowrap px-1.5 py-1 text-xs bg-transparent border border-[rgba(255,255,255,0.08)] rounded-md text-vscode-foreground transition-al",
100
+ "role": "",
101
+ "ariaLabel": "",
102
+ "title": "Select API configuration",
103
+ "placeholder": "",
104
+ "dataTestId": "dropdown-trigger",
105
+ "text": "default",
106
+ "x": 113,
107
+ "y": 613,
108
+ "w": 69,
109
+ "h": 25
110
+ },
111
+ {
112
+ "tag": "button",
113
+ "id": "",
114
+ "className": "relative inline-flex items-center justify-center bg-transparent border-none p-1.5 rounded-md min-w-[28px] min-h-[28px] text-vscode-foreground opacity-85 transition-all duration-150 hover:opacity-100 h",
115
+ "role": "",
116
+ "ariaLabel": "Add images to message",
117
+ "title": "Add images to message",
118
+ "placeholder": "",
119
+ "dataTestId": "",
120
+ "text": "",
121
+ "x": 269,
122
+ "y": 611,
123
+ "w": 28,
124
+ "h": 28
125
+ },
126
+ {
127
+ "tag": "button",
128
+ "id": "",
129
+ "className": "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:op",
130
+ "role": "",
131
+ "ariaLabel": "",
132
+ "title": "",
133
+ "placeholder": "",
134
+ "dataTestId": "",
135
+ "text": "Send",
136
+ "x": 299,
137
+ "y": 613,
138
+ "w": 65,
139
+ "h": 24
140
+ },
141
+ {
142
+ "tag": "textarea",
143
+ "id": "",
144
+ "className": "",
145
+ "role": "",
146
+ "ariaLabel": "",
147
+ "title": "",
148
+ "placeholder": "",
149
+ "dataTestId": "",
150
+ "text": "",
151
+ "x": 70,
152
+ "y": 0,
153
+ "w": 329,
154
+ "h": 12
155
+ }
156
+ ]
157
+ }