cli-jaw 2.1.1 → 2.1.2

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 (355) hide show
  1. package/README.ja.md +8 -6
  2. package/README.ko.md +8 -6
  3. package/README.md +12 -6
  4. package/README.zh-CN.md +8 -6
  5. package/dist/bin/cli-jaw.js +5 -1
  6. package/dist/bin/cli-jaw.js.map +1 -1
  7. package/dist/bin/commands/browser.js +1 -1
  8. package/dist/bin/commands/browser.js.map +1 -1
  9. package/dist/bin/commands/chat.js +98 -58
  10. package/dist/bin/commands/chat.js.map +1 -1
  11. package/dist/bin/commands/dispatch.js +130 -5
  12. package/dist/bin/commands/dispatch.js.map +1 -1
  13. package/dist/bin/commands/goal.js +18 -6
  14. package/dist/bin/commands/goal.js.map +1 -1
  15. package/dist/bin/commands/orchestrate.js.map +1 -1
  16. package/dist/bin/commands/tui/fullscreen-mode.js +237 -0
  17. package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -0
  18. package/dist/bin/commands/tui/input-handler.js +139 -52
  19. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  20. package/dist/bin/commands/tui/overlays.js +177 -70
  21. package/dist/bin/commands/tui/overlays.js.map +1 -1
  22. package/dist/bin/commands/tui/renderer.js +70 -20
  23. package/dist/bin/commands/tui/renderer.js.map +1 -1
  24. package/dist/bin/commands/tui/simple-mode.js +1 -1
  25. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  26. package/dist/bin/commands/tui/tui-io.js +8 -0
  27. package/dist/bin/commands/tui/tui-io.js.map +1 -0
  28. package/dist/bin/commands/tui/types.js +9 -0
  29. package/dist/bin/commands/tui/types.js.map +1 -1
  30. package/dist/bin/commands/tui/ws-handler.js +115 -23
  31. package/dist/bin/commands/tui/ws-handler.js.map +1 -1
  32. package/dist/bin/commands/worker.js +159 -0
  33. package/dist/bin/commands/worker.js.map +1 -0
  34. package/dist/bin/postinstall.js +0 -76
  35. package/dist/bin/postinstall.js.map +1 -1
  36. package/dist/lib/mcp/format-converters.js +21 -2
  37. package/dist/lib/mcp/format-converters.js.map +1 -1
  38. package/dist/lib/mcp/mcp-registry.js +75 -0
  39. package/dist/lib/mcp/mcp-registry.js.map +1 -0
  40. package/dist/lib/stt.js +1 -1
  41. package/dist/lib/stt.js.map +1 -1
  42. package/dist/scripts/fresh-install-smoke.js +1 -1
  43. package/dist/scripts/fresh-install-smoke.js.map +1 -1
  44. package/dist/server.js +27 -6
  45. package/dist/server.js.map +1 -1
  46. package/dist/src/agent/args.js +33 -1
  47. package/dist/src/agent/args.js.map +1 -1
  48. package/dist/src/agent/claude-e-runtime.js +1 -1
  49. package/dist/src/agent/claude-e-runtime.js.map +1 -1
  50. package/dist/src/agent/codex-app-client.js +1 -1
  51. package/dist/src/agent/error-classifier.js +6 -1
  52. package/dist/src/agent/error-classifier.js.map +1 -1
  53. package/dist/src/agent/events/claude.js +1 -0
  54. package/dist/src/agent/events/claude.js.map +1 -1
  55. package/dist/src/agent/events/codex.js +0 -44
  56. package/dist/src/agent/events/codex.js.map +1 -1
  57. package/dist/src/agent/events/helpers.js +52 -5
  58. package/dist/src/agent/events/helpers.js.map +1 -1
  59. package/dist/src/agent/events/opencode.js +6 -2
  60. package/dist/src/agent/events/opencode.js.map +1 -1
  61. package/dist/src/agent/events/summary.js +3 -2
  62. package/dist/src/agent/events/summary.js.map +1 -1
  63. package/dist/src/agent/events/tool-labels.js +8 -5
  64. package/dist/src/agent/events/tool-labels.js.map +1 -1
  65. package/dist/src/agent/kiro-auth.js +213 -0
  66. package/dist/src/agent/kiro-auth.js.map +1 -0
  67. package/dist/src/agent/kiro-models.js +79 -0
  68. package/dist/src/agent/kiro-models.js.map +1 -0
  69. package/dist/src/agent/kiro-runtime.js +306 -0
  70. package/dist/src/agent/kiro-runtime.js.map +1 -0
  71. package/dist/src/agent/lifecycle-handler.js +190 -12
  72. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  73. package/dist/src/agent/memory-flush-controller.js +1 -3
  74. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  75. package/dist/src/agent/resume-classifier.js +18 -1
  76. package/dist/src/agent/resume-classifier.js.map +1 -1
  77. package/dist/src/agent/session-persistence.js +1 -1
  78. package/dist/src/agent/session-persistence.js.map +1 -1
  79. package/dist/src/agent/smoke-detector.js +3 -0
  80. package/dist/src/agent/smoke-detector.js.map +1 -1
  81. package/dist/src/agent/spawn/queue.js +10 -4
  82. package/dist/src/agent/spawn/queue.js.map +1 -1
  83. package/dist/src/agent/spawn/resume.js +6 -1
  84. package/dist/src/agent/spawn/resume.js.map +1 -1
  85. package/dist/src/agent/spawn-env.js +1 -1
  86. package/dist/src/agent/spawn-env.js.map +1 -1
  87. package/dist/src/agent/spawn.js +188 -28
  88. package/dist/src/agent/spawn.js.map +1 -1
  89. package/dist/src/browser/web-ai/grok-live.js +2 -0
  90. package/dist/src/browser/web-ai/grok-live.js.map +1 -1
  91. package/dist/src/cli/claude-models.js +2 -2
  92. package/dist/src/cli/claude-models.js.map +1 -1
  93. package/dist/src/cli/commands.js +3 -2
  94. package/dist/src/cli/commands.js.map +1 -1
  95. package/dist/src/cli/handlers-runtime.js +2 -0
  96. package/dist/src/cli/handlers-runtime.js.map +1 -1
  97. package/dist/src/cli/handlers-workflows.js +9 -4
  98. package/dist/src/cli/handlers-workflows.js.map +1 -1
  99. package/dist/src/cli/handlers.js +47 -7
  100. package/dist/src/cli/handlers.js.map +1 -1
  101. package/dist/src/cli/readiness.js +17 -1
  102. package/dist/src/cli/readiness.js.map +1 -1
  103. package/dist/src/cli/registry-live.js +17 -0
  104. package/dist/src/cli/registry-live.js.map +1 -0
  105. package/dist/src/cli/registry.js +44 -3
  106. package/dist/src/cli/registry.js.map +1 -1
  107. package/dist/src/cli/tui/composer.js +135 -5
  108. package/dist/src/cli/tui/composer.js.map +1 -1
  109. package/dist/src/cli/tui/diffview.js +41 -0
  110. package/dist/src/cli/tui/diffview.js.map +1 -0
  111. package/dist/src/cli/tui/editor.js +45 -0
  112. package/dist/src/cli/tui/editor.js.map +1 -0
  113. package/dist/src/cli/tui/file-mention.js +78 -0
  114. package/dist/src/cli/tui/file-mention.js.map +1 -0
  115. package/dist/src/cli/tui/highlight.js +82 -0
  116. package/dist/src/cli/tui/highlight.js.map +1 -0
  117. package/dist/src/cli/tui/keymap.js +21 -0
  118. package/dist/src/cli/tui/keymap.js.map +1 -1
  119. package/dist/src/cli/tui/markdown.js +124 -0
  120. package/dist/src/cli/tui/markdown.js.map +1 -0
  121. package/dist/src/cli/tui/mode.js +26 -0
  122. package/dist/src/cli/tui/mode.js.map +1 -0
  123. package/dist/src/cli/tui/overlay.js +121 -98
  124. package/dist/src/cli/tui/overlay.js.map +1 -1
  125. package/dist/src/cli/tui/render/frame.js +72 -0
  126. package/dist/src/cli/tui/render/frame.js.map +1 -0
  127. package/dist/src/cli/tui/render/layout.js +22 -0
  128. package/dist/src/cli/tui/render/layout.js.map +1 -0
  129. package/dist/src/cli/tui/render/mouse.js +25 -0
  130. package/dist/src/cli/tui/render/mouse.js.map +1 -0
  131. package/dist/src/cli/tui/render/scheduler.js +37 -0
  132. package/dist/src/cli/tui/render/scheduler.js.map +1 -0
  133. package/dist/src/cli/tui/render/viewport.js +82 -0
  134. package/dist/src/cli/tui/render/viewport.js.map +1 -0
  135. package/dist/src/cli/tui/renderers.js +37 -0
  136. package/dist/src/cli/tui/renderers.js.map +1 -1
  137. package/dist/src/cli/tui/stream.js +48 -0
  138. package/dist/src/cli/tui/stream.js.map +1 -0
  139. package/dist/src/cli/tui/text-buffer.js +143 -0
  140. package/dist/src/cli/tui/text-buffer.js.map +1 -0
  141. package/dist/src/cli/tui/theme.js +128 -0
  142. package/dist/src/cli/tui/theme.js.map +1 -0
  143. package/dist/src/cli/tui/transcript.js +4 -0
  144. package/dist/src/cli/tui/transcript.js.map +1 -1
  145. package/dist/src/command-contract/help-renderer.js +1 -1
  146. package/dist/src/command-contract/help-renderer.js.map +1 -1
  147. package/dist/src/core/cli-detection.js +14 -0
  148. package/dist/src/core/cli-detection.js.map +1 -1
  149. package/dist/src/core/config.js +5 -0
  150. package/dist/src/core/config.js.map +1 -1
  151. package/dist/src/core/db.js +7 -0
  152. package/dist/src/core/db.js.map +1 -1
  153. package/dist/src/core/employees.js +2 -2
  154. package/dist/src/core/employees.js.map +1 -1
  155. package/dist/src/discord/bot.js.map +1 -1
  156. package/dist/src/discord/discord-file.js +1 -1
  157. package/dist/src/discord/discord-file.js.map +1 -1
  158. package/dist/src/discord/send-only-client.js +1 -3
  159. package/dist/src/discord/send-only-client.js.map +1 -1
  160. package/dist/src/goal/heartbeat.js +30 -7
  161. package/dist/src/goal/heartbeat.js.map +1 -1
  162. package/dist/src/goal/store.js +6 -2
  163. package/dist/src/goal/store.js.map +1 -1
  164. package/dist/src/ide/diff.js +37 -0
  165. package/dist/src/ide/diff.js.map +1 -1
  166. package/dist/src/manager/launchd-service.js +1 -1
  167. package/dist/src/manager/launchd-service.js.map +1 -1
  168. package/dist/src/manager/lifecycle-helpers.js +14 -0
  169. package/dist/src/manager/lifecycle-helpers.js.map +1 -1
  170. package/dist/src/manager/lifecycle.js +49 -4
  171. package/dist/src/manager/lifecycle.js.map +1 -1
  172. package/dist/src/manager/notes/routes.js +0 -31
  173. package/dist/src/manager/notes/routes.js.map +1 -1
  174. package/dist/src/manager/notes/ws.js.map +1 -1
  175. package/dist/src/manager/registry.js.map +1 -1
  176. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  177. package/dist/src/manager/scan.js +36 -1
  178. package/dist/src/manager/scan.js.map +1 -1
  179. package/dist/src/manager/server.js +21 -2
  180. package/dist/src/manager/server.js.map +1 -1
  181. package/dist/src/manager/systemd-service.js +1 -1
  182. package/dist/src/manager/systemd-service.js.map +1 -1
  183. package/dist/src/memory/keyword-expand.js +0 -187
  184. package/dist/src/memory/keyword-expand.js.map +1 -1
  185. package/dist/src/memory/runtime.js +2 -2
  186. package/dist/src/memory/runtime.js.map +1 -1
  187. package/dist/src/memory/shared.js.map +1 -1
  188. package/dist/src/orchestrator/collect.js +3 -2
  189. package/dist/src/orchestrator/collect.js.map +1 -1
  190. package/dist/src/orchestrator/distribute.js +7 -1
  191. package/dist/src/orchestrator/distribute.js.map +1 -1
  192. package/dist/src/orchestrator/friction.js +59 -0
  193. package/dist/src/orchestrator/friction.js.map +1 -0
  194. package/dist/src/orchestrator/pipeline.js +88 -45
  195. package/dist/src/orchestrator/pipeline.js.map +1 -1
  196. package/dist/src/orchestrator/sanitize.js +19 -0
  197. package/dist/src/orchestrator/sanitize.js.map +1 -0
  198. package/dist/src/orchestrator/seed.js +50 -0
  199. package/dist/src/orchestrator/seed.js.map +1 -0
  200. package/dist/src/orchestrator/state-machine.js +206 -74
  201. package/dist/src/orchestrator/state-machine.js.map +1 -1
  202. package/dist/src/orchestrator/worker-monitor.js +1 -1
  203. package/dist/src/orchestrator/worker-monitor.js.map +1 -1
  204. package/dist/src/orchestrator/worker-progress.js +29 -0
  205. package/dist/src/orchestrator/worker-progress.js.map +1 -0
  206. package/dist/src/orchestrator/worker-registry.js +63 -2
  207. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  208. package/dist/src/prompt/builder.js +19 -29
  209. package/dist/src/prompt/builder.js.map +1 -1
  210. package/dist/src/prompt/templates/a1-system.md +40 -5
  211. package/dist/src/prompt/templates/control-system.md +2 -2
  212. package/dist/src/prompt/templates/employee.md +4 -1
  213. package/dist/src/prompt/templates/orchestration.md +23 -8
  214. package/dist/src/routes/employees.js +4 -4
  215. package/dist/src/routes/employees.js.map +1 -1
  216. package/dist/src/routes/goal.js +11 -3
  217. package/dist/src/routes/goal.js.map +1 -1
  218. package/dist/src/routes/heartbeat.js +1 -1
  219. package/dist/src/routes/heartbeat.js.map +1 -1
  220. package/dist/src/routes/i18n.js +1 -1
  221. package/dist/src/routes/i18n.js.map +1 -1
  222. package/dist/src/routes/jaw-memory.js +1 -1
  223. package/dist/src/routes/jaw-memory.js.map +1 -1
  224. package/dist/src/routes/memory.js.map +1 -1
  225. package/dist/src/routes/messaging.js.map +1 -1
  226. package/dist/src/routes/orchestrate.js +265 -116
  227. package/dist/src/routes/orchestrate.js.map +1 -1
  228. package/dist/src/routes/quota-agy-reverse.js +0 -5
  229. package/dist/src/routes/quota-agy-reverse.js.map +1 -1
  230. package/dist/src/routes/quota-kiro-reverse.js +187 -0
  231. package/dist/src/routes/quota-kiro-reverse.js.map +1 -0
  232. package/dist/src/routes/settings.js +31 -2
  233. package/dist/src/routes/settings.js.map +1 -1
  234. package/dist/src/routes/skills.js.map +1 -1
  235. package/dist/src/security/security-audit-log.js.map +1 -1
  236. package/dist/src/shared/shell-command-display.js +51 -0
  237. package/dist/src/shared/shell-command-display.js.map +1 -0
  238. package/dist/src/telegram/bot.js.map +1 -1
  239. package/dist/src/trace/store.js +32 -0
  240. package/dist/src/trace/store.js.map +1 -1
  241. package/dist/src/types/cli-engine.js +1 -0
  242. package/dist/src/types/cli-engine.js.map +1 -1
  243. package/dist/src/workflows/employee-boundary.js +7 -7
  244. package/dist/src/workflows/employee-boundary.js.map +1 -1
  245. package/dist/src/workflows/handoff.js +16 -16
  246. package/dist/src/workflows/handoff.js.map +1 -1
  247. package/dist/src/workflows/scope-sandbox.js +46 -0
  248. package/dist/src/workflows/scope-sandbox.js.map +1 -0
  249. package/package.json +1 -1
  250. package/public/assets/providers/kiro-color.svg +15 -0
  251. package/public/assets/providers/kiro.svg +14 -0
  252. package/public/css/modals.css +79 -0
  253. package/public/css/sidebar.css +85 -0
  254. package/public/css/variables.css +2 -2
  255. package/public/dist/assets/{Agent-CIUGaUVn.js → Agent-DkH7eoHd.js} +1 -1
  256. package/public/dist/assets/{DocPanel-C1pGgE-S.js → DocPanel-BU16GUlB.js} +1 -1
  257. package/public/dist/assets/DocPanel-gU-WkgyA.css +1 -0
  258. package/public/dist/assets/Employees-F0ssNuO-.js +1 -0
  259. package/public/dist/assets/Heartbeat-C3JS6gkF.js +1 -0
  260. package/public/dist/assets/Mcp-_Yq4N3Sk.js +4 -0
  261. package/public/dist/assets/{Memory-BgN8djV4.js → Memory-C-EQubN2.js} +1 -1
  262. package/public/dist/assets/{ModelProvider-DHQ1Zvw0.js → ModelProvider-BD2KrypI.js} +1 -1
  263. package/public/dist/assets/agent-meta-B1098B_a.js +1 -0
  264. package/public/dist/assets/app-ByHYOMZE.js +48 -0
  265. package/public/dist/assets/app-CYdhP6Vh.css +1 -0
  266. package/public/dist/assets/constants-s2UJodER.js +1 -0
  267. package/public/dist/assets/{employees-DiNLzEXS.js → employees-_A-p_bZg.js} +7 -7
  268. package/public/dist/assets/idb-cache-0LNMskFB.js +1 -0
  269. package/public/dist/assets/idb-cache-5H89a4l8.js +1 -0
  270. package/public/dist/assets/{manager-DyrwJLZr.css → manager-B2qEQRxN.css} +1 -1
  271. package/public/dist/assets/manager-CR9BA-wO.js +12 -0
  272. package/public/dist/assets/memory-D1RKYvyu.js +1 -0
  273. package/public/dist/assets/{memory-B_nn0A4v.js → memory-D9AUn8fG.js} +9 -9
  274. package/public/dist/assets/{provider-icons-XEfJPGTe.js → provider-icons-CVVK5xUP.js} +35 -6
  275. package/public/dist/assets/{render-CgDEBoCX.js → render-DFBujF8n.js} +4 -4
  276. package/public/dist/assets/settings-B4ZkeaU-.js +1 -0
  277. package/public/dist/assets/settings-D9jTceN0.js +151 -0
  278. package/public/dist/assets/sidebar-DPPRNiTc.js +48 -0
  279. package/public/dist/assets/skills-8nHJkv-r.js +1 -0
  280. package/public/dist/assets/{skills-COa4iSwL.js → skills-BDVLIrVT.js} +6 -6
  281. package/public/dist/assets/{slash-commands-C_ePvrPi.js → slash-commands-C5da3q1p.js} +1 -1
  282. package/public/dist/assets/slash-commands-RJWO8wJZ.js +1 -0
  283. package/public/dist/assets/{trace-drawer-CY4z_Ie8.js → trace-drawer-5kqBzFMk.js} +1 -1
  284. package/public/dist/assets/ui-Crnp79bG.js +142 -0
  285. package/public/dist/assets/ui-HtSKByR3.js +1 -0
  286. package/public/dist/index.html +113 -86
  287. package/public/dist/manager/index.html +2 -2
  288. package/public/index.html +111 -84
  289. package/public/js/constants.ts +30 -7
  290. package/public/js/features/chat-search.ts +5 -1
  291. package/public/js/features/employees.ts +7 -2
  292. package/public/js/features/idb-cache.ts +4 -0
  293. package/public/js/features/message-history.ts +55 -7
  294. package/public/js/features/pending-queue.ts +8 -2
  295. package/public/js/features/process-block.ts +32 -17
  296. package/public/js/features/process-log-adapter.ts +11 -2
  297. package/public/js/features/settings-cli-status-render.ts +163 -0
  298. package/public/js/features/settings-cli-status.ts +130 -185
  299. package/public/js/features/settings-core.ts +5 -1
  300. package/public/js/features/settings-mcp.ts +513 -7
  301. package/public/js/features/settings.ts +1 -1
  302. package/public/js/features/tool-ui.ts +18 -4
  303. package/public/js/features/transport-status-row.ts +3 -0
  304. package/public/js/main.ts +3 -0
  305. package/public/js/preview-parent-origin.ts +14 -0
  306. package/public/js/provider-icons.ts +6 -1
  307. package/public/js/render/file-links.ts +10 -2
  308. package/public/js/ui.ts +5 -2
  309. package/public/js/virtual-scroll.ts +19 -0
  310. package/public/js/ws.ts +133 -8
  311. package/public/locales/en.json +8 -2
  312. package/public/locales/ja.json +8 -2
  313. package/public/locales/ko.json +8 -2
  314. package/public/locales/zh.json +8 -2
  315. package/public/manager/src/App.tsx +13 -70
  316. package/public/manager/src/InstancePreview.tsx +36 -11
  317. package/public/manager/src/SidebarRailRouter.tsx +1 -1
  318. package/public/manager/src/doc-panel/DocPanel.tsx +14 -1
  319. package/public/manager/src/doc-panel/doc-panel.css +16 -0
  320. package/public/manager/src/hooks/useInstanceMessageEvents.ts +4 -15
  321. package/public/manager/src/manager-components.css +1 -1
  322. package/public/manager/src/manager-polish.css +1 -1
  323. package/public/manager/src/manager-shortcut-runner.ts +107 -0
  324. package/public/manager/src/manager-shortcuts.ts +15 -0
  325. package/public/manager/src/panels/desktop-bridge.ts +2 -0
  326. package/public/manager/src/settings/SettingsSidebar.tsx +1 -1
  327. package/public/manager/src/settings/components/sidebar-filter.ts +2 -0
  328. package/public/manager/src/settings/pages/Mcp.tsx +311 -43
  329. package/public/manager/src/settings/pages/components/McpServerCard.tsx +89 -55
  330. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +29 -6
  331. package/public/manager/src/settings/pages/components/employees-helpers.ts +1 -0
  332. package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +1 -0
  333. package/public/manager/src/settings/pages/mcp-helpers.ts +54 -12
  334. package/public/manager/src/settings/types.ts +1 -0
  335. package/public/manager/src/types.ts +2 -1
  336. package/scripts/fresh-install-smoke.ts +1 -1
  337. package/public/dist/assets/DocPanel-CL1scIfq.css +0 -1
  338. package/public/dist/assets/Employees-BL9MAzzx.js +0 -1
  339. package/public/dist/assets/Heartbeat-D64JCg4t.js +0 -1
  340. package/public/dist/assets/Mcp-wYwJA_61.js +0 -3
  341. package/public/dist/assets/agent-meta-BhEbjy4P.js +0 -1
  342. package/public/dist/assets/app-2Rz848bQ.js +0 -48
  343. package/public/dist/assets/app-BW-Xz2p6.css +0 -1
  344. package/public/dist/assets/constants-ahKI_aEG.js +0 -1
  345. package/public/dist/assets/idb-cache-BnZfG5FD.js +0 -1
  346. package/public/dist/assets/idb-cache-CZ3JdK8r.js +0 -1
  347. package/public/dist/assets/manager-CfyZloIP.js +0 -12
  348. package/public/dist/assets/memory-CCjNFWmO.js +0 -1
  349. package/public/dist/assets/settings-CY_6tGuS.js +0 -1
  350. package/public/dist/assets/settings-DWW4GzNc.js +0 -66
  351. package/public/dist/assets/sidebar-DQKE5IA1.js +0 -23
  352. package/public/dist/assets/skills-DYTlqoke.js +0 -1
  353. package/public/dist/assets/slash-commands-D7CU5oso.js +0 -1
  354. package/public/dist/assets/ui-Car1OUvV.js +0 -1
  355. package/public/dist/assets/ui-DK_9ndj0.js +0 -140
@@ -31,9 +31,9 @@
31
31
  href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
32
32
  rel="stylesheet">
33
33
  <!-- Vite handles module bundling in dev (HMR) and production (build) -->
34
- <script type="module" crossorigin src="/dist/assets/app-2Rz848bQ.js"></script>
34
+ <script type="module" crossorigin src="/dist/assets/app-ByHYOMZE.js"></script>
35
35
  <link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-Bjnw0wQ6.css">
36
- <link rel="stylesheet" crossorigin href="/dist/assets/app-BW-Xz2p6.css">
36
+ <link rel="stylesheet" crossorigin href="/dist/assets/app-CYdhP6Vh.css">
37
37
  </head>
38
38
 
39
39
  <body>
@@ -73,13 +73,15 @@
73
73
 
74
74
  <!-- CLI Status (moved from Settings tab) -->
75
75
  <div>
76
- <div class="section-title cli-status-header" id="cliStatusHeader" data-i18n="sidebar.cliStatus">CLI 상태</div>
77
- <div id="cliStatusList" class="mt-1" style="display:none">
78
- <div class="text-status">Expand to load CLI status</div>
76
+ <div class="cli-status-toolbar">
77
+ <div class="section-title cli-status-header" id="cliStatusHeader" data-i18n="sidebar.cliStatus">CLI 상태</div>
78
+ <div id="cliStatusRefreshState" class="cli-refresh-state" role="status" aria-live="polite" aria-atomic="true"></div>
79
79
  </div>
80
- <div class="flex gap-2 mt-2 items-center">
81
- <button class="btn-clear btn-refresh"
82
- data-action="refreshCli">
80
+ <div class="cli-status-controls flex gap-2 mt-2 items-center">
81
+ <button id="cliStatusRefreshBtn" class="btn-clear btn-refresh"
82
+ data-action="refreshCli"
83
+ aria-controls="cliStatusList"
84
+ aria-describedby="cliStatusRefreshState">
83
85
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
84
86
  stroke-linecap="round" stroke-linejoin="round">
85
87
  <path d="M21 2v6h-6" />
@@ -87,7 +89,7 @@
87
89
  <path d="M3 22v-6h6" />
88
90
  <path d="M21 12a9 9 0 0 1-15 6.7L3 16" />
89
91
  </svg>
90
- Refresh</button>
92
+ <span class="cli-refresh-label">Refresh</span></button>
91
93
  <select id="cliStatusInterval"
92
94
  class="select-sm select-status-interval">
93
95
  <option value="600" data-i18n="time.10m">10분</option>
@@ -95,6 +97,9 @@
95
97
  <option value="0" selected data-i18n="time.manual">수동</option>
96
98
  </select>
97
99
  </div>
100
+ <div id="cliStatusList" class="mt-1" style="display:none">
101
+ <div class="text-status">Expand to load CLI status</div>
102
+ </div>
98
103
  </div>
99
104
 
100
105
  <div class="sidebar-bottom">
@@ -201,6 +206,7 @@
201
206
  <span class="pabc-heartbeat-status" id="pabcHeartbeatStatus" hidden></span>
202
207
  </div>
203
208
  <div class="interview-panel" id="interviewPanel" hidden></div>
209
+ <div class="budget-panel" id="budgetPanel" hidden style="padding:8px 12px;border-top:1px solid var(--border-color)"></div>
204
210
  <div class="goal-cockpit" id="goalCockpit" hidden></div>
205
211
  <div class="chat-messages" id="chatMessages"></div>
206
212
  <div class="empty-state" id="emptyState">
@@ -274,6 +280,7 @@
274
280
  <option value="codex">Codex</option>
275
281
  <option value="codex-app">Codex App</option>
276
282
  <option value="cursor">Cursor</option>
283
+ <option value="kiro-code">Kiro</option>
277
284
  <option value="gemini">Gemini</option>
278
285
  <option value="grok">Grok</option>
279
286
  <option value="opencode">OpenCode</option>
@@ -347,6 +354,7 @@
347
354
  <option value="codex">Codex</option>
348
355
  <option value="codex-app">Codex App</option>
349
356
  <option value="cursor">Cursor</option>
357
+ <option value="kiro-code">Kiro</option>
350
358
  <option value="gemini">Gemini</option>
351
359
  <option value="grok">Grok</option>
352
360
  <option value="opencode">OpenCode</option>
@@ -430,7 +438,7 @@
430
438
  </div>
431
439
  </div>
432
440
 
433
- <div id="channelTransportStatus" class="settings-group channel-transport-status" aria-live="polite"></div>
441
+ <div id="channelTransportStatus" class="settings-group channel-transport-status" aria-live="polite" style="display:none"></div>
434
442
 
435
443
  <!-- Telegram Bot -->
436
444
  <div id="channelTelegramSettings" class="settings-group">
@@ -520,6 +528,85 @@
520
528
  </div>
521
529
  </div>
522
530
 
531
+ <!-- MCP Servers -->
532
+ <div class="settings-group">
533
+ <h4 class="section-title-row">
534
+ <span><span data-icon="link"></span> MCP Servers</span>
535
+ <button class="help-trigger" type="button" data-help-topic="mcp"
536
+ data-i18n-aria="help.mcp.aria" aria-label="MCP 도움말">?</button>
537
+ </h4>
538
+ <div id="mcpServerList" class="text-status py-1">
539
+ Loading...
540
+ </div>
541
+ <button class="btn-clear btn-action-block"
542
+ data-action="openMcpModal"><span data-icon="plus"></span> Add, Set MCP</button>
543
+ <button class="btn-clear btn-action-block"
544
+ data-action="syncMcp"><span data-icon="refresh"></span> Sync to all CLIs</button>
545
+ <button class="btn-clear btn-action-block"
546
+ data-action="installMcp"><span data-icon="compacting"></span> <span id="installBundleLabel">Install bundle (0)</span></button>
547
+ <div id="mcpSyncResult" class="text-xs text-dim py-1" style="display:none"></div>
548
+ </div>
549
+
550
+ <!-- MCP Modal: dynamically created by settings-mcp.ts -->
551
+
552
+ <!-- STT Settings -->
553
+ <div class="settings-group">
554
+ <h4 class="section-title-row">
555
+ <span><span data-icon="mic"></span> <span data-i18n="stt.title">음성 인식 (STT)</span></span>
556
+ <button class="help-trigger" type="button" data-help-topic="stt"
557
+ data-i18n-aria="help.stt.aria" aria-label="STT 도움말">?</button>
558
+ </h4>
559
+ <div class="settings-row">
560
+ <label data-i18n="stt.engine">엔진</label>
561
+ <select id="sttEngine">
562
+ <option value="auto">Auto (Gemini → Whisper)</option>
563
+ <option value="gemini">Gemini only</option>
564
+ <option value="openai">OpenAI Compatible</option>
565
+ <option value="vertex">Vertex AI</option>
566
+ <option value="whisper">Whisper only (local)</option>
567
+ </select>
568
+ </div>
569
+ <div class="settings-row sub-row stt-gemini">
570
+ <label data-i18n="stt.geminiKey">Gemini API Key</label>
571
+ <input type="password" id="sttGeminiKey" placeholder="AIza..." class="input-sm">
572
+ </div>
573
+ <div class="settings-row sub-row stt-gemini">
574
+ <label data-i18n="stt.geminiModel">Gemini 모델</label>
575
+ <select id="sttGeminiModel">
576
+ <option value="gemini-3.1-flash-lite-preview">gemini-3.1-flash-lite-preview (fastest)</option>
577
+ <option value="gemini-2.5-flash-lite">gemini-2.5-flash-lite (fast)</option>
578
+ <option value="gemini-2.5-flash">gemini-2.5-flash (balanced)</option>
579
+ <option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
580
+ <option value="__custom__">직접 입력...</option>
581
+ </select>
582
+ <input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
583
+ class="mt-1" style="display:none" />
584
+ </div>
585
+ <div class="settings-row sub-row stt-openai" style="display:none">
586
+ <label data-i18n="stt.openaiBaseUrl">Base URL</label>
587
+ <input type="text" id="sttOpenaiBaseUrl" placeholder="https://api.groq.com/openai" class="input-sm">
588
+ </div>
589
+ <div class="settings-row sub-row stt-openai" style="display:none">
590
+ <label data-i18n="stt.openaiKey">API Key</label>
591
+ <input type="password" id="sttOpenaiKey" placeholder="sk-..." class="input-sm">
592
+ </div>
593
+ <div class="settings-row sub-row stt-openai" style="display:none">
594
+ <label data-i18n="stt.openaiModel">Model</label>
595
+ <input type="text" id="sttOpenaiModel" placeholder="whisper-large-v3" class="input-sm">
596
+ </div>
597
+ <div class="settings-row sub-row stt-vertex" style="display:none">
598
+ <label data-i18n="stt.vertexConfig">Vertex AI Config (JSON)</label>
599
+ <textarea id="sttVertexJson" rows="4"
600
+ placeholder='{"project_id":"...","location":"us-central1","credentials":{...}}' class="input-sm mono"></textarea>
601
+ </div>
602
+ <div class="settings-row sub-row stt-whisper">
603
+ <label data-i18n="stt.whisperModel">Whisper 모델</label>
604
+ <input type="text" id="sttWhisperModel" placeholder="mlx-community/..." class="input-sm">
605
+ </div>
606
+ <small class="text-shortcut-hint" data-i18n="stt.shortcutHint">
607
+ Ctrl+Shift+Space (⌘+Shift+Space on Mac) · Alt/Option+M</small>
608
+ </div>
609
+
523
610
  <!-- Per-CLI Models -->
524
611
  <div class="settings-group">
525
612
  <h4><span data-provider="ai-e"></span> AI-E</h4>
@@ -678,6 +765,22 @@
678
765
  </div>
679
766
  </div>
680
767
 
768
+ <div class="settings-group">
769
+ <h4><span data-provider="kiro-code"></span> Kiro</h4>
770
+ <div class="settings-row">
771
+ <label>Model</label>
772
+ <select id="modelKiroCode"></select>
773
+ <input type="text" id="customModelKiroCode" class="custom-model-input"
774
+ data-i18n-placeholder="model.placeholder" placeholder="model ID 입력" style="display:none">
775
+ </div>
776
+ <div class="settings-row sub-row">
777
+ <label>Effort</label>
778
+ <select id="effortKiroCode">
779
+ <option value="" selected>— none</option>
780
+ </select>
781
+ </div>
782
+ </div>
783
+
681
784
  <div class="settings-group">
682
785
  <h4><span data-provider="gemini"></span> Gemini</h4>
683
786
  <div class="settings-row">
@@ -752,82 +855,6 @@
752
855
  <div id="fallbackOrderList"></div>
753
856
  </div>
754
857
 
755
- <!-- MCP Servers -->
756
- <div class="settings-group">
757
- <h4 class="section-title-row">
758
- <span><span data-icon="link"></span> MCP Servers</span>
759
- <button class="help-trigger" type="button" data-help-topic="mcp"
760
- data-i18n-aria="help.mcp.aria" aria-label="MCP 도움말">?</button>
761
- </h4>
762
- <div id="mcpServerList" class="text-status py-1">
763
- Loading...
764
- </div>
765
- <button class="btn-clear btn-action-block"
766
- data-action="syncMcp"><span data-icon="refresh"></span> Sync to all CLIs</button>
767
- <button class="btn-clear btn-action-block"
768
- data-action="installMcp"><span data-icon="compacting"></span> Install Globally (npm i -g)</button>
769
- <div id="mcpSyncResult" class="text-xs text-dim py-1" style="display:none"></div>
770
- </div>
771
-
772
- <!-- STT Settings -->
773
- <div class="settings-group">
774
- <h4 class="section-title-row">
775
- <span><span data-icon="mic"></span> <span data-i18n="stt.title">음성 인식 (STT)</span></span>
776
- <button class="help-trigger" type="button" data-help-topic="stt"
777
- data-i18n-aria="help.stt.aria" aria-label="STT 도움말">?</button>
778
- </h4>
779
- <div class="settings-row">
780
- <label data-i18n="stt.engine">엔진</label>
781
- <select id="sttEngine">
782
- <option value="auto">Auto (Gemini → Whisper)</option>
783
- <option value="gemini">Gemini only</option>
784
- <option value="openai">OpenAI Compatible</option>
785
- <option value="vertex">Vertex AI</option>
786
- <option value="whisper">Whisper only (local)</option>
787
- </select>
788
- </div>
789
- <div class="settings-row sub-row stt-gemini">
790
- <label data-i18n="stt.geminiKey">Gemini API Key</label>
791
- <input type="password" id="sttGeminiKey" placeholder="AIza..." class="input-sm">
792
- </div>
793
- <div class="settings-row sub-row stt-gemini">
794
- <label data-i18n="stt.geminiModel">Gemini 모델</label>
795
- <select id="sttGeminiModel">
796
- <option value="gemini-3.1-flash-lite-preview">gemini-3.1-flash-lite-preview (fastest)</option>
797
- <option value="gemini-2.5-flash-lite">gemini-2.5-flash-lite (fast)</option>
798
- <option value="gemini-2.5-flash">gemini-2.5-flash (balanced)</option>
799
- <option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
800
- <option value="__custom__">직접 입력...</option>
801
- </select>
802
- <input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
803
- class="mt-1" style="display:none" />
804
- </div>
805
- <!-- OpenAI Compatible -->
806
- <div class="settings-row sub-row stt-openai" style="display:none">
807
- <label data-i18n="stt.openaiBaseUrl">Base URL</label>
808
- <input type="text" id="sttOpenaiBaseUrl" placeholder="https://api.groq.com/openai" class="input-sm">
809
- </div>
810
- <div class="settings-row sub-row stt-openai" style="display:none">
811
- <label data-i18n="stt.openaiKey">API Key</label>
812
- <input type="password" id="sttOpenaiKey" placeholder="sk-..." class="input-sm">
813
- </div>
814
- <div class="settings-row sub-row stt-openai" style="display:none">
815
- <label data-i18n="stt.openaiModel">Model</label>
816
- <input type="text" id="sttOpenaiModel" placeholder="whisper-large-v3" class="input-sm">
817
- </div>
818
- <!-- Vertex AI -->
819
- <div class="settings-row sub-row stt-vertex" style="display:none">
820
- <label data-i18n="stt.vertexConfig">Vertex AI Config (JSON)</label>
821
- <textarea id="sttVertexJson" rows="4"
822
- placeholder='{"project_id":"...","location":"us-central1","credentials":{...}}' class="input-sm mono"></textarea>
823
- </div>
824
- <div class="settings-row sub-row stt-whisper">
825
- <label data-i18n="stt.whisperModel">Whisper 모델</label>
826
- <input type="text" id="sttWhisperModel" placeholder="mlx-community/..." class="input-sm">
827
- </div>
828
- <small class="text-shortcut-hint" data-i18n="stt.shortcutHint">
829
- Ctrl+Shift+Space (⌘+Shift+Space on Mac) · Alt/Option+M</small>
830
- </div>
831
858
 
832
859
 
833
860
  </div>
@@ -6,9 +6,9 @@
6
6
  <link rel="icon" type="image/png" href="/dist/assets/icon-192-CwXPIYF5.png">
7
7
  <title>Jaw Manager</title>
8
8
  <script src="/manager/theme-boot.js"></script>
9
- <script type="module" crossorigin src="/dist/assets/manager-CfyZloIP.js"></script>
9
+ <script type="module" crossorigin src="/dist/assets/manager-CR9BA-wO.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-Bjnw0wQ6.css">
11
- <link rel="stylesheet" crossorigin href="/dist/assets/manager-DyrwJLZr.css">
11
+ <link rel="stylesheet" crossorigin href="/dist/assets/manager-B2qEQRxN.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="manager-root"></div>
package/public/index.html CHANGED
@@ -82,13 +82,15 @@
82
82
 
83
83
  <!-- CLI Status (moved from Settings tab) -->
84
84
  <div>
85
- <div class="section-title cli-status-header" id="cliStatusHeader" data-i18n="sidebar.cliStatus">CLI 상태</div>
86
- <div id="cliStatusList" class="mt-1" style="display:none">
87
- <div class="text-status">Expand to load CLI status</div>
85
+ <div class="cli-status-toolbar">
86
+ <div class="section-title cli-status-header" id="cliStatusHeader" data-i18n="sidebar.cliStatus">CLI 상태</div>
87
+ <div id="cliStatusRefreshState" class="cli-refresh-state" role="status" aria-live="polite" aria-atomic="true"></div>
88
88
  </div>
89
- <div class="flex gap-2 mt-2 items-center">
90
- <button class="btn-clear btn-refresh"
91
- data-action="refreshCli">
89
+ <div class="cli-status-controls flex gap-2 mt-2 items-center">
90
+ <button id="cliStatusRefreshBtn" class="btn-clear btn-refresh"
91
+ data-action="refreshCli"
92
+ aria-controls="cliStatusList"
93
+ aria-describedby="cliStatusRefreshState">
92
94
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
93
95
  stroke-linecap="round" stroke-linejoin="round">
94
96
  <path d="M21 2v6h-6" />
@@ -96,7 +98,7 @@
96
98
  <path d="M3 22v-6h6" />
97
99
  <path d="M21 12a9 9 0 0 1-15 6.7L3 16" />
98
100
  </svg>
99
- Refresh</button>
101
+ <span class="cli-refresh-label">Refresh</span></button>
100
102
  <select id="cliStatusInterval"
101
103
  class="select-sm select-status-interval">
102
104
  <option value="600" data-i18n="time.10m">10분</option>
@@ -104,6 +106,9 @@
104
106
  <option value="0" selected data-i18n="time.manual">수동</option>
105
107
  </select>
106
108
  </div>
109
+ <div id="cliStatusList" class="mt-1" style="display:none">
110
+ <div class="text-status">Expand to load CLI status</div>
111
+ </div>
107
112
  </div>
108
113
 
109
114
  <div class="sidebar-bottom">
@@ -210,6 +215,7 @@
210
215
  <span class="pabc-heartbeat-status" id="pabcHeartbeatStatus" hidden></span>
211
216
  </div>
212
217
  <div class="interview-panel" id="interviewPanel" hidden></div>
218
+ <div class="budget-panel" id="budgetPanel" hidden style="padding:8px 12px;border-top:1px solid var(--border-color)"></div>
213
219
  <div class="goal-cockpit" id="goalCockpit" hidden></div>
214
220
  <div class="chat-messages" id="chatMessages"></div>
215
221
  <div class="empty-state" id="emptyState">
@@ -283,6 +289,7 @@
283
289
  <option value="codex">Codex</option>
284
290
  <option value="codex-app">Codex App</option>
285
291
  <option value="cursor">Cursor</option>
292
+ <option value="kiro-code">Kiro</option>
286
293
  <option value="gemini">Gemini</option>
287
294
  <option value="grok">Grok</option>
288
295
  <option value="opencode">OpenCode</option>
@@ -356,6 +363,7 @@
356
363
  <option value="codex">Codex</option>
357
364
  <option value="codex-app">Codex App</option>
358
365
  <option value="cursor">Cursor</option>
366
+ <option value="kiro-code">Kiro</option>
359
367
  <option value="gemini">Gemini</option>
360
368
  <option value="grok">Grok</option>
361
369
  <option value="opencode">OpenCode</option>
@@ -439,7 +447,7 @@
439
447
  </div>
440
448
  </div>
441
449
 
442
- <div id="channelTransportStatus" class="settings-group channel-transport-status" aria-live="polite"></div>
450
+ <div id="channelTransportStatus" class="settings-group channel-transport-status" aria-live="polite" style="display:none"></div>
443
451
 
444
452
  <!-- Telegram Bot -->
445
453
  <div id="channelTelegramSettings" class="settings-group">
@@ -529,6 +537,85 @@
529
537
  </div>
530
538
  </div>
531
539
 
540
+ <!-- MCP Servers -->
541
+ <div class="settings-group">
542
+ <h4 class="section-title-row">
543
+ <span><span data-icon="link"></span> MCP Servers</span>
544
+ <button class="help-trigger" type="button" data-help-topic="mcp"
545
+ data-i18n-aria="help.mcp.aria" aria-label="MCP 도움말">?</button>
546
+ </h4>
547
+ <div id="mcpServerList" class="text-status py-1">
548
+ Loading...
549
+ </div>
550
+ <button class="btn-clear btn-action-block"
551
+ data-action="openMcpModal"><span data-icon="plus"></span> Add, Set MCP</button>
552
+ <button class="btn-clear btn-action-block"
553
+ data-action="syncMcp"><span data-icon="refresh"></span> Sync to all CLIs</button>
554
+ <button class="btn-clear btn-action-block"
555
+ data-action="installMcp"><span data-icon="compacting"></span> <span id="installBundleLabel">Install bundle (0)</span></button>
556
+ <div id="mcpSyncResult" class="text-xs text-dim py-1" style="display:none"></div>
557
+ </div>
558
+
559
+ <!-- MCP Modal: dynamically created by settings-mcp.ts -->
560
+
561
+ <!-- STT Settings -->
562
+ <div class="settings-group">
563
+ <h4 class="section-title-row">
564
+ <span><span data-icon="mic"></span> <span data-i18n="stt.title">음성 인식 (STT)</span></span>
565
+ <button class="help-trigger" type="button" data-help-topic="stt"
566
+ data-i18n-aria="help.stt.aria" aria-label="STT 도움말">?</button>
567
+ </h4>
568
+ <div class="settings-row">
569
+ <label data-i18n="stt.engine">엔진</label>
570
+ <select id="sttEngine">
571
+ <option value="auto">Auto (Gemini → Whisper)</option>
572
+ <option value="gemini">Gemini only</option>
573
+ <option value="openai">OpenAI Compatible</option>
574
+ <option value="vertex">Vertex AI</option>
575
+ <option value="whisper">Whisper only (local)</option>
576
+ </select>
577
+ </div>
578
+ <div class="settings-row sub-row stt-gemini">
579
+ <label data-i18n="stt.geminiKey">Gemini API Key</label>
580
+ <input type="password" id="sttGeminiKey" placeholder="AIza..." class="input-sm">
581
+ </div>
582
+ <div class="settings-row sub-row stt-gemini">
583
+ <label data-i18n="stt.geminiModel">Gemini 모델</label>
584
+ <select id="sttGeminiModel">
585
+ <option value="gemini-3.1-flash-lite-preview">gemini-3.1-flash-lite-preview (fastest)</option>
586
+ <option value="gemini-2.5-flash-lite">gemini-2.5-flash-lite (fast)</option>
587
+ <option value="gemini-2.5-flash">gemini-2.5-flash (balanced)</option>
588
+ <option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
589
+ <option value="__custom__">직접 입력...</option>
590
+ </select>
591
+ <input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
592
+ class="mt-1" style="display:none" />
593
+ </div>
594
+ <div class="settings-row sub-row stt-openai" style="display:none">
595
+ <label data-i18n="stt.openaiBaseUrl">Base URL</label>
596
+ <input type="text" id="sttOpenaiBaseUrl" placeholder="https://api.groq.com/openai" class="input-sm">
597
+ </div>
598
+ <div class="settings-row sub-row stt-openai" style="display:none">
599
+ <label data-i18n="stt.openaiKey">API Key</label>
600
+ <input type="password" id="sttOpenaiKey" placeholder="sk-..." class="input-sm">
601
+ </div>
602
+ <div class="settings-row sub-row stt-openai" style="display:none">
603
+ <label data-i18n="stt.openaiModel">Model</label>
604
+ <input type="text" id="sttOpenaiModel" placeholder="whisper-large-v3" class="input-sm">
605
+ </div>
606
+ <div class="settings-row sub-row stt-vertex" style="display:none">
607
+ <label data-i18n="stt.vertexConfig">Vertex AI Config (JSON)</label>
608
+ <textarea id="sttVertexJson" rows="4"
609
+ placeholder='{"project_id":"...","location":"us-central1","credentials":{...}}' class="input-sm mono"></textarea>
610
+ </div>
611
+ <div class="settings-row sub-row stt-whisper">
612
+ <label data-i18n="stt.whisperModel">Whisper 모델</label>
613
+ <input type="text" id="sttWhisperModel" placeholder="mlx-community/..." class="input-sm">
614
+ </div>
615
+ <small class="text-shortcut-hint" data-i18n="stt.shortcutHint">
616
+ Ctrl+Shift+Space (⌘+Shift+Space on Mac) · Alt/Option+M</small>
617
+ </div>
618
+
532
619
  <!-- Per-CLI Models -->
533
620
  <div class="settings-group">
534
621
  <h4><span data-provider="ai-e"></span> AI-E</h4>
@@ -687,6 +774,22 @@
687
774
  </div>
688
775
  </div>
689
776
 
777
+ <div class="settings-group">
778
+ <h4><span data-provider="kiro-code"></span> Kiro</h4>
779
+ <div class="settings-row">
780
+ <label>Model</label>
781
+ <select id="modelKiroCode"></select>
782
+ <input type="text" id="customModelKiroCode" class="custom-model-input"
783
+ data-i18n-placeholder="model.placeholder" placeholder="model ID 입력" style="display:none">
784
+ </div>
785
+ <div class="settings-row sub-row">
786
+ <label>Effort</label>
787
+ <select id="effortKiroCode">
788
+ <option value="" selected>— none</option>
789
+ </select>
790
+ </div>
791
+ </div>
792
+
690
793
  <div class="settings-group">
691
794
  <h4><span data-provider="gemini"></span> Gemini</h4>
692
795
  <div class="settings-row">
@@ -761,82 +864,6 @@
761
864
  <div id="fallbackOrderList"></div>
762
865
  </div>
763
866
 
764
- <!-- MCP Servers -->
765
- <div class="settings-group">
766
- <h4 class="section-title-row">
767
- <span><span data-icon="link"></span> MCP Servers</span>
768
- <button class="help-trigger" type="button" data-help-topic="mcp"
769
- data-i18n-aria="help.mcp.aria" aria-label="MCP 도움말">?</button>
770
- </h4>
771
- <div id="mcpServerList" class="text-status py-1">
772
- Loading...
773
- </div>
774
- <button class="btn-clear btn-action-block"
775
- data-action="syncMcp"><span data-icon="refresh"></span> Sync to all CLIs</button>
776
- <button class="btn-clear btn-action-block"
777
- data-action="installMcp"><span data-icon="compacting"></span> Install Globally (npm i -g)</button>
778
- <div id="mcpSyncResult" class="text-xs text-dim py-1" style="display:none"></div>
779
- </div>
780
-
781
- <!-- STT Settings -->
782
- <div class="settings-group">
783
- <h4 class="section-title-row">
784
- <span><span data-icon="mic"></span> <span data-i18n="stt.title">음성 인식 (STT)</span></span>
785
- <button class="help-trigger" type="button" data-help-topic="stt"
786
- data-i18n-aria="help.stt.aria" aria-label="STT 도움말">?</button>
787
- </h4>
788
- <div class="settings-row">
789
- <label data-i18n="stt.engine">엔진</label>
790
- <select id="sttEngine">
791
- <option value="auto">Auto (Gemini → Whisper)</option>
792
- <option value="gemini">Gemini only</option>
793
- <option value="openai">OpenAI Compatible</option>
794
- <option value="vertex">Vertex AI</option>
795
- <option value="whisper">Whisper only (local)</option>
796
- </select>
797
- </div>
798
- <div class="settings-row sub-row stt-gemini">
799
- <label data-i18n="stt.geminiKey">Gemini API Key</label>
800
- <input type="password" id="sttGeminiKey" placeholder="AIza..." class="input-sm">
801
- </div>
802
- <div class="settings-row sub-row stt-gemini">
803
- <label data-i18n="stt.geminiModel">Gemini 모델</label>
804
- <select id="sttGeminiModel">
805
- <option value="gemini-3.1-flash-lite-preview">gemini-3.1-flash-lite-preview (fastest)</option>
806
- <option value="gemini-2.5-flash-lite">gemini-2.5-flash-lite (fast)</option>
807
- <option value="gemini-2.5-flash">gemini-2.5-flash (balanced)</option>
808
- <option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
809
- <option value="__custom__">직접 입력...</option>
810
- </select>
811
- <input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
812
- class="mt-1" style="display:none" />
813
- </div>
814
- <!-- OpenAI Compatible -->
815
- <div class="settings-row sub-row stt-openai" style="display:none">
816
- <label data-i18n="stt.openaiBaseUrl">Base URL</label>
817
- <input type="text" id="sttOpenaiBaseUrl" placeholder="https://api.groq.com/openai" class="input-sm">
818
- </div>
819
- <div class="settings-row sub-row stt-openai" style="display:none">
820
- <label data-i18n="stt.openaiKey">API Key</label>
821
- <input type="password" id="sttOpenaiKey" placeholder="sk-..." class="input-sm">
822
- </div>
823
- <div class="settings-row sub-row stt-openai" style="display:none">
824
- <label data-i18n="stt.openaiModel">Model</label>
825
- <input type="text" id="sttOpenaiModel" placeholder="whisper-large-v3" class="input-sm">
826
- </div>
827
- <!-- Vertex AI -->
828
- <div class="settings-row sub-row stt-vertex" style="display:none">
829
- <label data-i18n="stt.vertexConfig">Vertex AI Config (JSON)</label>
830
- <textarea id="sttVertexJson" rows="4"
831
- placeholder='{"project_id":"...","location":"us-central1","credentials":{...}}' class="input-sm mono"></textarea>
832
- </div>
833
- <div class="settings-row sub-row stt-whisper">
834
- <label data-i18n="stt.whisperModel">Whisper 모델</label>
835
- <input type="text" id="sttWhisperModel" placeholder="mlx-community/..." class="input-sm">
836
- </div>
837
- <small class="text-shortcut-hint" data-i18n="stt.shortcutHint">
838
- Ctrl+Shift+Space (⌘+Shift+Space on Mac) · Alt/Option+M</small>
839
- </div>
840
867
 
841
868
 
842
869
  </div>
@@ -26,21 +26,22 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
26
26
  'ai-e': {
27
27
  label: 'AI-E',
28
28
  defaultProvider: 'claude',
29
- providers: ['claude', 'codex', 'gemini', 'grok', 'copilot'],
29
+ providers: ['claude', 'codex', 'gemini', 'grok', 'copilot', 'kiro'],
30
30
  efforts: ['low', 'medium', 'high', 'xhigh', 'max'],
31
31
  models: [
32
32
  'opus', 'sonnet', 'haiku',
33
- 'gpt-5.4', 'gpt-5.4-mini',
33
+ 'gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini',
34
34
  'gemini-3-flash-preview',
35
35
  'grok-build',
36
36
  'gpt-5-mini',
37
37
  ],
38
38
  modelsByProvider: {
39
- claude: ['opus', 'sonnet', 'haiku'],
40
- codex: ['gpt-5.4', 'gpt-5.4-mini'],
39
+ claude: ['claude-opus-4-8', 'opus', 'sonnet', 'haiku'],
40
+ codex: ['gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini'],
41
41
  gemini: ['gemini-3-flash-preview'],
42
42
  grok: ['grok-build'],
43
43
  copilot: ['gpt-5-mini'],
44
+ kiro: ['auto', 'claude-sonnet-4.6', 'deepseek-3.2', 'minimax-m2.5', 'glm-5', 'qwen3-coder-next'],
44
45
  },
45
46
  effortsByProvider: {
46
47
  claude: ['low', 'medium', 'high', 'xhigh', 'max'],
@@ -48,6 +49,7 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
48
49
  gemini: [],
49
50
  grok: [],
50
51
  copilot: ['low', 'medium', 'high'],
52
+ kiro: [],
51
53
  },
52
54
  },
53
55
  claude: {
@@ -55,8 +57,8 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
55
57
  efforts: ['low', 'medium', 'high', 'xhigh', 'max'],
56
58
  // Mirrors getDefaultClaudeChoices() in src/cli/claude-models.ts —
57
59
  // aliases first, then verified pinned full IDs (hyphen form). The
58
- // [1m] suffix activates Claude Code's 1M-context window (Opus 4.7,
59
- // Opus 4.6, Sonnet 4.6 only).
60
+ // [1m] suffix activates Claude Code's 1M-context window (Opus 4.8,
61
+ // Opus 4.7, Opus 4.6, Sonnet 4.6).
60
62
  models: [
61
63
  'opus',
62
64
  'sonnet',
@@ -113,6 +115,27 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
113
115
  'grok-4.3', 'grok-build-0.1', 'gpt-5-mini', 'kimi-k2.5',
114
116
  ],
115
117
  },
118
+ 'kiro-code': {
119
+ label: 'Kiro',
120
+ efforts: [],
121
+ effortNote: 'Kiro CLI has no separate effort flag',
122
+ models: [
123
+ 'auto',
124
+ 'claude-opus-4.8',
125
+ 'claude-opus-4.7',
126
+ 'claude-opus-4.6',
127
+ 'claude-sonnet-4.6',
128
+ 'claude-opus-4.5',
129
+ 'claude-sonnet-4.5',
130
+ 'claude-sonnet-4',
131
+ 'claude-haiku-4.5',
132
+ 'deepseek-3.2',
133
+ 'minimax-m2.5',
134
+ 'minimax-m2.1',
135
+ 'glm-5',
136
+ 'qwen3-coder-next',
137
+ ],
138
+ },
116
139
  gemini: {
117
140
  label: 'Gemini',
118
141
  efforts: [],
@@ -237,7 +260,7 @@ export function getCliMeta(cli: string): CliEntry | null {
237
260
  return CLI_REGISTRY[cli] || null;
238
261
  }
239
262
 
240
- export const PRIMARY_CLIS: readonly string[] = ['claude', 'claude-e', 'agy', 'codex', 'cursor', 'gemini'];
263
+ export const PRIMARY_CLIS: readonly string[] = ['claude', 'claude-e', 'agy', 'codex', 'cursor', 'kiro-code', 'gemini'];
241
264
 
242
265
  export interface RolePreset {
243
266
  value: string;