synabun 2.0.5 → 2.0.7

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 (233) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +2 -1
  3. package/THIRD-PARTY-LICENSES.md +13 -0
  4. package/docs/whatsapp.md +151 -16
  5. package/hooks/claude-code/shared.mjs +6 -3
  6. package/lib/child-path.js +303 -0
  7. package/lib/claude-hooks.js +2 -1
  8. package/lib/data-home-migration.js +2 -0
  9. package/lib/desktop-app.js +265 -0
  10. package/lib/external-tools.js +7 -3
  11. package/lib/log-redact.js +102 -0
  12. package/lib/packaged-runtime.js +138 -11
  13. package/mcp-server/dist/http.d.ts +3 -1
  14. package/mcp-server/dist/http.d.ts.map +1 -1
  15. package/mcp-server/dist/http.js +15 -4
  16. package/mcp-server/dist/http.js.map +1 -1
  17. package/mcp-server/dist/index.d.ts.map +1 -1
  18. package/mcp-server/dist/index.js +9 -6
  19. package/mcp-server/dist/index.js.map +1 -1
  20. package/mcp-server/dist/services/budget-judgments.d.ts +108 -0
  21. package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -0
  22. package/mcp-server/dist/services/budget-judgments.js +153 -0
  23. package/mcp-server/dist/services/budget-judgments.js.map +1 -0
  24. package/mcp-server/dist/services/codex-config-heal.d.ts +5 -1
  25. package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
  26. package/mcp-server/dist/services/codex-config-heal.js +41 -4
  27. package/mcp-server/dist/services/codex-config-heal.js.map +1 -1
  28. package/mcp-server/dist/services/identity.d.ts +11 -0
  29. package/mcp-server/dist/services/identity.d.ts.map +1 -1
  30. package/mcp-server/dist/services/identity.js +24 -0
  31. package/mcp-server/dist/services/identity.js.map +1 -1
  32. package/mcp-server/dist/services/neural-interface.d.ts +13 -0
  33. package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
  34. package/mcp-server/dist/services/neural-interface.js +34 -2
  35. package/mcp-server/dist/services/neural-interface.js.map +1 -1
  36. package/mcp-server/dist/services/typesafe-config.d.ts +1 -1
  37. package/mcp-server/dist/services/typesafe-config.d.ts.map +1 -1
  38. package/mcp-server/dist/services/typesafe-config.js +4 -1
  39. package/mcp-server/dist/services/typesafe-config.js.map +1 -1
  40. package/mcp-server/dist/tools/agents.d.ts +10 -7
  41. package/mcp-server/dist/tools/agents.d.ts.map +1 -1
  42. package/mcp-server/dist/tools/agents.js +34 -13
  43. package/mcp-server/dist/tools/agents.js.map +1 -1
  44. package/mcp-server/dist/tools/whatsapp-send-file.d.ts +17 -0
  45. package/mcp-server/dist/tools/whatsapp-send-file.d.ts.map +1 -0
  46. package/mcp-server/dist/tools/whatsapp-send-file.js +44 -0
  47. package/mcp-server/dist/tools/whatsapp-send-file.js.map +1 -0
  48. package/mcp-server/dist/tui.js +2 -1
  49. package/mcp-server/dist/tui.js.map +1 -1
  50. package/mcp-server/dist/version.d.ts +5 -0
  51. package/mcp-server/dist/version.d.ts.map +1 -0
  52. package/mcp-server/dist/version.js +21 -0
  53. package/mcp-server/dist/version.js.map +1 -0
  54. package/mcp-server/package-lock.json +2 -2
  55. package/mcp-server/package.json +1 -1
  56. package/mcp-server/run.mjs +15 -9
  57. package/mcp-server/src/http.ts +18 -3
  58. package/mcp-server/src/index.ts +9 -6
  59. package/mcp-server/src/services/budget-judgments.ts +183 -0
  60. package/mcp-server/src/services/codex-config-heal.ts +35 -4
  61. package/mcp-server/src/services/identity.ts +27 -0
  62. package/mcp-server/src/services/neural-interface.ts +34 -2
  63. package/mcp-server/src/services/typesafe-config.ts +4 -1
  64. package/mcp-server/src/tools/agents.ts +33 -14
  65. package/mcp-server/src/tools/whatsapp-send-file.ts +51 -0
  66. package/mcp-server/src/tui.ts +2 -1
  67. package/mcp-server/src/version.ts +22 -0
  68. package/neural-interface/i18n/en.json +627 -57
  69. package/neural-interface/i18n/pt-BR.json +626 -56
  70. package/neural-interface/lib/account-usage.js +163 -0
  71. package/neural-interface/lib/assistant-api.js +255 -52
  72. package/neural-interface/lib/assistant-brains/claude.js +15 -2
  73. package/neural-interface/lib/assistant-brains/codex.js +3 -0
  74. package/neural-interface/lib/assistant-brains/opencode.js +17 -4
  75. package/neural-interface/lib/assistant-budget-planner.js +390 -0
  76. package/neural-interface/lib/assistant-budget-split.js +408 -0
  77. package/neural-interface/lib/assistant-budget.js +94 -95
  78. package/neural-interface/lib/assistant-config.js +62 -14
  79. package/neural-interface/lib/assistant-dispatch.js +432 -125
  80. package/neural-interface/lib/assistant-jev.js +26 -3
  81. package/neural-interface/lib/assistant-persona.js +68 -11
  82. package/neural-interface/lib/assistant-plan-permissions.js +8 -1
  83. package/neural-interface/lib/assistant-route-accounts.js +14 -0
  84. package/neural-interface/lib/assistant-route-gate.js +19 -3
  85. package/neural-interface/lib/assistant-router.js +373 -42
  86. package/neural-interface/lib/assistant-runtime.js +307 -47
  87. package/neural-interface/lib/assistant-user-writer.js +4 -2
  88. package/neural-interface/lib/augmented-path.js +317 -53
  89. package/neural-interface/lib/claude-accounts.js +342 -31
  90. package/neural-interface/lib/claude-agent-bridge.js +90 -3
  91. package/neural-interface/lib/claude-executable.js +6 -1
  92. package/neural-interface/lib/claude-model-catalog.js +3 -3
  93. package/neural-interface/lib/claude-panel-auth.js +221 -0
  94. package/neural-interface/lib/claude-profile-api-key.js +62 -0
  95. package/neural-interface/lib/cli-install-api.js +137 -0
  96. package/neural-interface/lib/cli-install.js +797 -0
  97. package/neural-interface/lib/cli-path.js +130 -0
  98. package/neural-interface/lib/cli-resolver.js +744 -0
  99. package/neural-interface/lib/cli-update-planner.js +143 -7
  100. package/neural-interface/lib/codex-account-auth.js +178 -0
  101. package/neural-interface/lib/codex-accounts.js +489 -0
  102. package/neural-interface/lib/codex-capabilities.js +2 -1
  103. package/neural-interface/lib/codex-compat-rpc.js +8 -2
  104. package/neural-interface/lib/codex-mcp-approvals.js +5 -1
  105. package/neural-interface/lib/codex-panel-auth.js +62 -0
  106. package/neural-interface/lib/codex-session-settings.js +1 -1
  107. package/neural-interface/lib/codex-settings-schema.js +120 -0
  108. package/neural-interface/lib/desktop/config.js +3 -0
  109. package/neural-interface/lib/git-bash/bzip2.js +339 -0
  110. package/neural-interface/lib/git-bash/claude-settings.js +73 -0
  111. package/neural-interface/lib/git-bash/extract-worker.js +34 -0
  112. package/neural-interface/lib/git-bash/install.js +529 -0
  113. package/neural-interface/lib/git-bash/licenses/COPYING +360 -0
  114. package/neural-interface/lib/git-bash/licenses/LGPL-2.1 +511 -0
  115. package/neural-interface/lib/git-bash/manager.js +268 -0
  116. package/neural-interface/lib/git-bash/pins.js +206 -0
  117. package/neural-interface/lib/git-bash/pins.json +34 -0
  118. package/neural-interface/lib/git-bash/resolver.js +194 -0
  119. package/neural-interface/lib/git-read.js +34 -2
  120. package/neural-interface/lib/install-details.js +145 -0
  121. package/neural-interface/lib/mcp-installer.js +14 -2
  122. package/neural-interface/lib/native-loop-providers.js +16 -3
  123. package/neural-interface/lib/native-loop-runtime.js +9 -4
  124. package/neural-interface/lib/os-path.js +319 -0
  125. package/neural-interface/lib/provider-panel-api-key-auth.js +92 -0
  126. package/neural-interface/lib/provider-panel-terminal-auth.js +95 -0
  127. package/neural-interface/lib/pty-host/core.js +2 -1
  128. package/neural-interface/lib/pty-host/manager.js +27 -2
  129. package/neural-interface/lib/remote-policy.js +20 -11
  130. package/neural-interface/lib/session-title-generator.js +4 -3
  131. package/neural-interface/lib/system-about.js +340 -0
  132. package/neural-interface/lib/system-activity.js +66 -0
  133. package/neural-interface/lib/terminal-env.js +11 -3
  134. package/neural-interface/lib/terminal-path.js +55 -0
  135. package/neural-interface/lib/virtual-socket.js +12 -1
  136. package/neural-interface/lib/whatsapp/baileys-adapter.js +165 -45
  137. package/neural-interface/lib/whatsapp/bridge.js +78 -34
  138. package/neural-interface/lib/whatsapp/commands.js +13 -14
  139. package/neural-interface/lib/whatsapp/config.js +134 -20
  140. package/neural-interface/lib/whatsapp/fake-baileys.js +99 -14
  141. package/neural-interface/lib/whatsapp/host-core.js +168 -35
  142. package/neural-interface/lib/whatsapp/inbound.js +5 -3
  143. package/neural-interface/lib/whatsapp/local-file.js +524 -0
  144. package/neural-interface/lib/whatsapp/manager.js +92 -32
  145. package/neural-interface/lib/whatsapp/paths.js +11 -1
  146. package/neural-interface/lib/whatsapp/protocol.js +65 -5
  147. package/neural-interface/lib/whatsapp/redact.js +63 -0
  148. package/neural-interface/lib/whatsapp/service.js +343 -91
  149. package/neural-interface/lib/whatsapp/transcription.js +463 -0
  150. package/neural-interface/package-lock.json +2 -2
  151. package/neural-interface/package.json +1 -1
  152. package/neural-interface/public/index.html +2 -0
  153. package/neural-interface/public/index2d.html +2 -0
  154. package/neural-interface/public/offline.html +16 -1
  155. package/neural-interface/public/onboarding.html +96 -2
  156. package/neural-interface/public/shared/account-i18n.js +7 -0
  157. package/neural-interface/public/shared/account-menu.js +539 -0
  158. package/neural-interface/public/shared/account-usage.js +19 -0
  159. package/neural-interface/public/shared/account-view.js +335 -0
  160. package/neural-interface/public/shared/agent-runtime-options.js +28 -8
  161. package/neural-interface/public/shared/assistant/asst-accounts.js +182 -184
  162. package/neural-interface/public/shared/assistant/asst-api.js +32 -2
  163. package/neural-interface/public/shared/assistant/asst-brain-picker.js +124 -25
  164. package/neural-interface/public/shared/assistant/asst-budget.js +259 -303
  165. package/neural-interface/public/shared/assistant/asst-mascot.js +126 -7
  166. package/neural-interface/public/shared/assistant/asst-menu.js +15 -3
  167. package/neural-interface/public/shared/assistant/asst-panel.js +48 -14
  168. package/neural-interface/public/shared/assistant/asst-render.js +38 -7
  169. package/neural-interface/public/shared/assistant/asst-route.js +72 -14
  170. package/neural-interface/public/shared/assistant/asst-routes-editor.js +45 -6
  171. package/neural-interface/public/shared/assistant/asst-slash.js +1 -1
  172. package/neural-interface/public/shared/assistant/asst-state.js +1 -1
  173. package/neural-interface/public/shared/assistant/asst-styles.js +99 -17
  174. package/neural-interface/public/shared/cdx/cdx-commands.js +4 -1
  175. package/neural-interface/public/shared/cdx/cdx-features.js +22 -14
  176. package/neural-interface/public/shared/cdx/cdx-icons.js +2 -0
  177. package/neural-interface/public/shared/cdx/cdx-panel.js +48 -107
  178. package/neural-interface/public/shared/cdx/cdx-settings.js +231 -0
  179. package/neural-interface/public/shared/cdx/cdx-styles.js +128 -107
  180. package/neural-interface/public/shared/cdx/cdx-tabs.js +261 -664
  181. package/neural-interface/public/shared/cdx/cdx-ws.js +2 -0
  182. package/neural-interface/public/shared/claude-account-view.js +3 -0
  183. package/neural-interface/public/shared/cli-install-view.js +392 -0
  184. package/neural-interface/public/shared/cli-status.js +282 -22
  185. package/neural-interface/public/shared/cp/cp-events.js +2 -1
  186. package/neural-interface/public/shared/cp/cp-styles.js +46 -0
  187. package/neural-interface/public/shared/desktop-bridge.js +39 -0
  188. package/neural-interface/public/shared/desktop-titlebar-page.js +59 -0
  189. package/neural-interface/public/shared/desktop-titlebar-view.js +122 -0
  190. package/neural-interface/public/shared/desktop-titlebar.js +153 -0
  191. package/neural-interface/public/shared/desktop-update-view.js +462 -0
  192. package/neural-interface/public/shared/editor/editor-panel.js +1 -1
  193. package/neural-interface/public/shared/explorer/fx-main.js +1 -1
  194. package/neural-interface/public/shared/git-bash-view.js +145 -0
  195. package/neural-interface/public/shared/html-shell.js +1 -0
  196. package/neural-interface/public/shared/i18n.js +19 -1
  197. package/neural-interface/public/shared/install-details-view.js +86 -0
  198. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +32 -0
  199. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +17 -0
  200. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +118 -0
  201. package/neural-interface/public/shared/pwa-install-page.js +3 -1
  202. package/neural-interface/public/shared/settings/settings-about-pane.js +271 -0
  203. package/neural-interface/public/shared/settings/settings-about.js +254 -0
  204. package/neural-interface/public/shared/settings/settings-ia.js +15 -0
  205. package/neural-interface/public/shared/showcase-privacy.js +489 -0
  206. package/neural-interface/public/shared/storage.js +30 -3
  207. package/neural-interface/public/shared/styles.css +278 -31
  208. package/neural-interface/public/shared/synabun-mascot.js +48 -2
  209. package/neural-interface/public/shared/ui-claude-panel.js +212 -213
  210. package/neural-interface/public/shared/ui-cli-banner.js +355 -0
  211. package/neural-interface/public/shared/ui-git-bash.js +124 -0
  212. package/neural-interface/public/shared/ui-judgments.js +10 -1
  213. package/neural-interface/public/shared/ui-loading.js +30 -6
  214. package/neural-interface/public/shared/ui-menubar.js +13 -3
  215. package/neural-interface/public/shared/ui-navbar.js +3 -1
  216. package/neural-interface/public/shared/ui-provider-auth.js +104 -0
  217. package/neural-interface/public/shared/ui-provider-terminal-auth.js +223 -0
  218. package/neural-interface/public/shared/ui-sessions.js +9 -3
  219. package/neural-interface/public/shared/ui-settings.js +55 -3
  220. package/neural-interface/public/shared/ui-sidepanel-sessions.js +3 -1
  221. package/neural-interface/public/shared/ui-sync.js +6 -0
  222. package/neural-interface/public/shared/ui-terminal.js +17 -0
  223. package/neural-interface/public/shared/ui-tool-updates.js +5 -0
  224. package/neural-interface/public/shared/ui-update.js +594 -5
  225. package/neural-interface/public/shared/ui-whatsapp.js +21 -6
  226. package/neural-interface/public/shared/whatsapp/wa-view.js +51 -8
  227. package/neural-interface/public/shared/worker-end.js +2 -0
  228. package/neural-interface/public/sw.js +1 -1
  229. package/neural-interface/public/variant/2d/main.js +10 -1
  230. package/neural-interface/public/variant/3d/main.js +10 -1
  231. package/neural-interface/server.js +1219 -608
  232. package/package.json +4 -1
  233. package/setup.js +9 -8
@@ -10,11 +10,13 @@ export function injectStyles() {
10
10
  tokens (docs/codex-sidepanel.md → Visual language). Add a value here
11
11
  before using it anywhere else. The lightbox, the minimized pill and
12
12
  the Context settings popover live outside the panel, so they carry the
13
- tokens too. */
13
+ tokens too, as does the header account menu (account-menu.js), whose
14
+ --acct-* values read them. */
14
15
  .codex-panel,
15
16
  .cxp-lightbox,
16
17
  .cxp-session-pill,
17
- .cxp-ctxpop {
18
+ .cxp-ctxpop,
19
+ .acct-menu--codex {
18
20
  /* Surfaces: one treatment per level */
19
21
  --cxp-shell: rgba(16, 18, 22, 0.92);
20
22
  --cxp-shell-border: rgba(255,255,255,0.08);
@@ -135,7 +137,7 @@ export function injectStyles() {
135
137
  outline-offset: 2px;
136
138
  }
137
139
  /* Inside clipping containers the ring sits on the element instead of around it. */
138
- .codex-panel :is(.cxp-fold-summary, .cxp-reasoning summary, .cxp-effort-menu-item, .cxp-account-row-main, .cxp-account-row-remove, .cxp-image-chip-remove, .cxp-sess-rename, .cxp-sess-archive-btn, .cxp-sess-unarchive-btn, .cxp-sess-search-input, .cxp-session-btn, .cxp-header-rename):focus-visible {
140
+ .codex-panel :is(.cxp-fold-summary, .cxp-reasoning summary, .cxp-effort-menu-item, .cxp-image-chip-remove, .cxp-sess-rename, .cxp-sess-archive-btn, .cxp-sess-unarchive-btn, .cxp-sess-search-input, .cxp-session-btn, .cxp-header-rename):focus-visible {
139
141
  outline-offset: -2px;
140
142
  }
141
143
  .cxp-resize-handle {
@@ -254,6 +256,8 @@ export function injectStyles() {
254
256
  margin-left: auto;
255
257
  flex-shrink: 0;
256
258
  }
259
+ /* The header account menu's trigger (account-menu.js) gives way before the session name does. */
260
+ .cxp-actions:has(> .acct-menu-trigger) { flex-shrink: 1; min-width: 0; }
257
261
  .cxp-btn {
258
262
  width: 24px;
259
263
  height: 24px;
@@ -840,97 +844,6 @@ export function injectStyles() {
840
844
  color: var(--cxp-text-3);
841
845
  }
842
846
 
843
- /* ── Account menu (under the header; opened from the Context settings popover) ── */
844
- .cxp-account-menu {
845
- position: absolute;
846
- top: calc(100% + 6px);
847
- right: 8px;
848
- min-width: 230px;
849
- max-width: 300px;
850
- background: var(--cxp-pop);
851
- border: 1px solid var(--cxp-border);
852
- border-radius: var(--cxp-radius-md);
853
- box-shadow: var(--cxp-shadow-pop);
854
- padding: 6px;
855
- z-index: 50;
856
- display: none;
857
- flex-direction: column;
858
- gap: 2px;
859
- }
860
- .cxp-account-menu.open { display: flex; }
861
- .cxp-account-empty {
862
- padding: 8px 10px;
863
- font-size: var(--cxp-fs-sm);
864
- color: var(--cxp-text-3);
865
- }
866
- .cxp-account-row {
867
- display: flex;
868
- align-items: stretch;
869
- gap: 2px;
870
- border-radius: var(--cxp-radius-sm);
871
- overflow: hidden;
872
- }
873
- .cxp-account-row.active { background: var(--cxp-surface-2); }
874
- .cxp-account-row-main {
875
- display: flex;
876
- align-items: center;
877
- gap: 8px;
878
- flex: 1;
879
- min-width: 0;
880
- padding: 7px 9px;
881
- background: transparent;
882
- border: none;
883
- cursor: pointer;
884
- text-align: left;
885
- font-family: var(--cxp-font);
886
- color: var(--cxp-text);
887
- }
888
- .cxp-account-row-main:hover { background: var(--cxp-surface-1); }
889
- .cxp-account-check {
890
- width: 12px;
891
- flex-shrink: 0;
892
- color: var(--cxp-text);
893
- font-size: var(--cxp-fs-sm);
894
- }
895
- .cxp-account-row-text { display: flex; flex-direction: column; min-width: 0; }
896
- .cxp-account-row-label {
897
- font-size: var(--cxp-fs-md);
898
- overflow: hidden;
899
- text-overflow: ellipsis;
900
- white-space: nowrap;
901
- }
902
- .cxp-account-row-sub {
903
- font-size: var(--cxp-fs-xs);
904
- color: var(--cxp-text-3);
905
- overflow: hidden;
906
- text-overflow: ellipsis;
907
- white-space: nowrap;
908
- }
909
- .cxp-account-row-remove {
910
- flex-shrink: 0;
911
- width: 26px;
912
- background: transparent;
913
- border: none;
914
- color: var(--cxp-text-3);
915
- cursor: pointer;
916
- font-size: var(--cxp-fs-sm);
917
- transition: color var(--cxp-dur-fast), background var(--cxp-dur-fast);
918
- }
919
- .cxp-account-row-remove:hover { color: var(--cxp-danger); background: var(--cxp-surface-1); }
920
- .cxp-account-add {
921
- margin-top: 4px;
922
- padding: 8px 10px;
923
- background: transparent;
924
- border: 1px dashed var(--cxp-border-strong);
925
- border-radius: var(--cxp-radius-sm);
926
- color: var(--cxp-text-2);
927
- font-size: var(--cxp-fs-sm);
928
- font-family: var(--cxp-font);
929
- cursor: pointer;
930
- text-align: center;
931
- transition: color var(--cxp-dur-fast), background var(--cxp-dur-fast);
932
- }
933
- .cxp-account-add:hover { background: var(--cxp-surface-1); color: var(--cxp-text); }
934
847
 
935
848
  /* ── Context settings: the header cog and its popover (cdx-context-menu.js) ──
936
849
  One grammar: a 28px head (title, at most one action) and 28px rows (label
@@ -1133,12 +1046,16 @@ export function injectStyles() {
1133
1046
  .cxp-empty-logo svg { width: 32px; height: 32px; }
1134
1047
  .cxp-empty-name { font-size: var(--cxp-fs-lg); font-weight: 500; color: var(--cxp-text-3); }
1135
1048
  .cxp-empty-status { font-size: var(--cxp-fs-sm); color: var(--cxp-text-3); line-height: 1.5; min-height: 1em; }
1049
+ /* The CLI banner (ui-cli-banner.js): Codex not installed (with Install),
1050
+ being installed, failed to install, or found but failed to start. A
1051
+ left edge in the colour of what it says; the Install button is the
1052
+ panel's solid action. */
1136
1053
  .cxp-cli-banner {
1137
1054
  flex-shrink: 0;
1138
1055
  display: grid;
1139
- grid-template-columns: auto 1fr auto;
1056
+ grid-template-columns: auto minmax(0, 1fr);
1140
1057
  gap: 10px;
1141
- align-items: center;
1058
+ align-items: start;
1142
1059
  margin: 6px 8px 0;
1143
1060
  padding: 10px 12px;
1144
1061
  border: 1px solid var(--cxp-border);
@@ -1150,6 +1067,11 @@ export function injectStyles() {
1150
1067
  position: relative;
1151
1068
  z-index: 5;
1152
1069
  }
1070
+ .cxp-cli-banner [hidden] { display: none !important; }
1071
+ .cxp-cli-banner--broken,
1072
+ .cxp-cli-banner--failed { box-shadow: inset 2px 0 0 var(--cxp-danger); }
1073
+ .cxp-cli-banner--installing { box-shadow: inset 2px 0 0 var(--cxp-running); }
1074
+ .cxp-cli-banner--done { box-shadow: inset 2px 0 0 var(--cxp-success); }
1153
1075
  .cxp-cli-banner-icon {
1154
1076
  width: 22px; height: 22px;
1155
1077
  display: flex; align-items: center; justify-content: center;
@@ -1158,30 +1080,81 @@ export function injectStyles() {
1158
1080
  color: var(--cxp-warning);
1159
1081
  font-weight: 700;
1160
1082
  }
1161
- .cxp-cli-banner-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
1083
+ .cxp-cli-banner--broken .cxp-cli-banner-icon,
1084
+ .cxp-cli-banner--failed .cxp-cli-banner-icon { border-color: var(--cxp-danger); color: var(--cxp-danger); }
1085
+ .cxp-cli-banner--installing .cxp-cli-banner-icon { border-color: var(--cxp-running); color: var(--cxp-running); animation: cxp-working 1.2s ease-in-out infinite; }
1086
+ .cxp-cli-banner--done .cxp-cli-banner-icon { border-color: var(--cxp-success); color: var(--cxp-success); }
1087
+ .cxp-cli-banner--nudge { animation: cxp-cli-nudge 0.5s var(--cxp-ease); }
1088
+ @keyframes cxp-cli-nudge { 0%, 100% { transform: none; } 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }
1089
+ .cxp-cli-banner-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
1162
1090
  .cxp-cli-banner-title {
1163
1091
  font-size: var(--cxp-fs-md); font-weight: 600;
1164
1092
  color: var(--cxp-text);
1165
1093
  }
1166
- .cxp-cli-banner-body {
1094
+ .cxp-cli-banner-body,
1095
+ .cxp-cli-banner-note,
1096
+ .cxp-cli-banner-step {
1167
1097
  font-size: var(--cxp-fs-sm);
1168
1098
  color: var(--cxp-text-2);
1169
- word-break: break-word;
1099
+ overflow-wrap: anywhere;
1170
1100
  }
1171
- .cxp-cli-banner-body code {
1172
- padding: 1px 4px;
1101
+ .cxp-cli-banner-command { display: flex; align-items: flex-start; gap: 6px; }
1102
+ .cxp-cli-banner-command code,
1103
+ .cxp-cli-banner-error code {
1104
+ flex: 1;
1105
+ min-width: 0;
1106
+ padding: 3px 6px;
1173
1107
  background: var(--cxp-surface-2);
1174
1108
  border-radius: var(--cxp-radius-sm);
1175
1109
  font-family: var(--cxp-mono);
1176
1110
  font-size: var(--cxp-fs-sm);
1177
1111
  color: var(--cxp-text);
1112
+ white-space: pre-wrap;
1113
+ word-break: break-all;
1114
+ user-select: text;
1178
1115
  }
1179
- .cxp-cli-banner-actions { display: flex; gap: 6px; }
1180
- .cxp-cli-banner-link, .cxp-cli-banner-recheck {
1181
- display: inline-flex; align-items: center; gap: 4px;
1182
- padding: 4px 9px;
1116
+ .cxp-cli-banner-error code { display: block; max-height: 96px; overflow: auto; }
1117
+ .cxp-cli-banner-copy {
1118
+ flex-shrink: 0;
1119
+ height: 22px;
1120
+ padding: 0 8px;
1121
+ border: 1px solid var(--cxp-border-strong);
1122
+ border-radius: var(--cxp-radius-sm);
1123
+ background: transparent;
1124
+ color: var(--cxp-text-2);
1125
+ font-family: inherit;
1183
1126
  font-size: var(--cxp-fs-sm);
1127
+ cursor: pointer;
1128
+ }
1129
+ .cxp-cli-banner-copy:hover { color: var(--cxp-text); background: var(--cxp-surface-2); }
1130
+ .cxp-cli-banner-progress { display: flex; flex-direction: column; gap: 4px; }
1131
+ .cxp-cli-banner-bar { height: 3px; border-radius: 2px; background: var(--cxp-surface-2); overflow: hidden; }
1132
+ .cxp-cli-banner-bar > span { display: block; height: 100%; width: 0; background: var(--cxp-running); transition: width var(--cxp-dur-fast) var(--cxp-ease); }
1133
+ .cxp-cli-banner-log {
1134
+ margin: 0;
1135
+ max-height: 84px;
1136
+ overflow: auto;
1137
+ padding: 4px 6px;
1138
+ background: var(--cxp-surface-1);
1139
+ border-radius: var(--cxp-radius-sm);
1140
+ font-family: var(--cxp-mono);
1141
+ font-size: var(--cxp-fs-xs);
1142
+ line-height: 1.45;
1143
+ color: var(--cxp-text-3);
1144
+ white-space: pre-wrap;
1145
+ word-break: break-all;
1146
+ }
1147
+ .cxp-cli-banner-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 2px; }
1148
+ .cxp-cli-banner-install,
1149
+ .cxp-cli-banner-link,
1150
+ .cxp-cli-banner-path, .cxp-cli-banner-recheck,
1151
+ .cxp-cli-banner-dismiss {
1152
+ display: inline-flex; align-items: center; gap: 4px;
1153
+ height: 24px;
1154
+ padding: 0 10px;
1155
+ font-size: var(--cxp-fs-md);
1184
1156
  font-weight: 500;
1157
+ line-height: 1;
1185
1158
  border-radius: var(--cxp-radius-md);
1186
1159
  border: 1px solid var(--cxp-border-strong);
1187
1160
  background: transparent;
@@ -1192,10 +1165,27 @@ export function injectStyles() {
1192
1165
  font-family: inherit;
1193
1166
  transition: background var(--cxp-dur-fast);
1194
1167
  }
1195
- .cxp-cli-banner-link:hover, .cxp-cli-banner-recheck:hover {
1168
+ .cxp-cli-banner-install {
1169
+ background: var(--cxp-solid);
1170
+ border-color: var(--cxp-solid);
1171
+ color: var(--cxp-on-solid);
1172
+ }
1173
+ .cxp-cli-banner-install:hover:not(:disabled) { background: var(--cxp-solid-hover); border-color: var(--cxp-solid-hover); }
1174
+ .cxp-cli-banner-link:hover,
1175
+ .cxp-cli-banner-path:hover:not(:disabled), .cxp-cli-banner-recheck:hover:not(:disabled),
1176
+ .cxp-cli-banner-dismiss:hover {
1196
1177
  background: var(--cxp-surface-2);
1197
1178
  }
1198
- .cxp-cli-banner-recheck:disabled { opacity: 0.5; cursor: default; }
1179
+ .cxp-cli-banner-install:disabled,
1180
+ .cxp-cli-banner-path:disabled, .cxp-cli-banner-recheck:disabled { opacity: 0.5; cursor: default; }
1181
+ .cxp-cli-banner button:focus-visible,
1182
+ .cxp-cli-banner a:focus-visible { outline: 2px solid var(--cxp-focus); outline-offset: 2px; }
1183
+ @media (prefers-reduced-motion: reduce) {
1184
+ .cxp-cli-banner--installing .cxp-cli-banner-icon,
1185
+ .cxp-cli-banner--nudge { animation: none; }
1186
+ .cxp-cli-banner--nudge { box-shadow: inset 2px 0 0 var(--cxp-warning), 0 0 0 1px var(--cxp-warning); }
1187
+ .cxp-cli-banner-bar > span { transition: none; }
1188
+ }
1199
1189
  .codex-panel.cxp-cli-blocked .cxp-send { opacity: 0.4 !important; cursor: not-allowed !important; }
1200
1190
  .codex-panel.cxp-cli-blocked .cxp-input { opacity: 0.7; }
1201
1191
 
@@ -2947,6 +2937,37 @@ export function injectStyles() {
2947
2937
  opacity: 0.4;
2948
2938
  cursor: default;
2949
2939
  }
2940
+ /* Codex Settings: scoped compact groups and consistent native controls. */
2941
+ .cxp-settings-panel { display: flex; flex-direction: column; overflow: hidden; }
2942
+ .cxp-settings-body { overflow-y: auto; min-height: 0; }
2943
+ .cxp-settings-header { flex: none; font-size: var(--cxp-fs-md); padding: 12px 14px; }
2944
+ .cxp-settings-section { padding: 12px 0; margin: 0; }
2945
+ .cxp-settings-section .cxp-settings-section { border: 0; }
2946
+ .cxp-settings-section[hidden], .cxp-settings-features[hidden] { display: none; }
2947
+ .cxp-settings-section-title { font-size: var(--cxp-fs-sm); text-transform: none; letter-spacing: 0; color: var(--cxp-text-2); margin: 0 0 8px; }
2948
+ details.cxp-settings-section > summary, .cxp-settings-features > summary { cursor: pointer; }
2949
+ .cxp-settings-section:not([open]) > summary { margin-bottom: 0; }
2950
+ .cxp-settings-subtitle { font-size: var(--cxp-fs-xs); font-weight: 500; color: var(--cxp-text-3); margin: 10px 0 6px; }
2951
+ .cxp-config-row { border: 0; padding: 4px 0; min-width: 0; }
2952
+ .cxp-config-label { text-align: left; flex-basis: 42%; font-size: var(--cxp-fs-sm); color: var(--cxp-text-2); overflow-wrap: anywhere; }
2953
+ .cxp-settings-panel .cxp-config-input { min-height: 26px; padding: 3px 6px; border-radius: var(--cxp-radius-sm); background: var(--cxp-surface-1); }
2954
+ .cxp-settings-panel .cxp-config-input option { background: var(--cxp-pop); color: var(--cxp-text); }
2955
+ .cxp-settings-scope { gap: 12px; }
2956
+ .cxp-settings-scope-hint { margin-bottom: 8px; }
2957
+ .cxp-settings-footer { flex: none; border-top: 1px solid var(--cxp-border); padding: 10px 14px; background: var(--cxp-pop); }
2958
+ .cxp-settings-footer .cxp-config-save { margin: 0; width: 100%; text-transform: none; letter-spacing: 0; padding: 6px 10px; }
2959
+ .cxp-settings-result { font-size: var(--cxp-fs-xs); color: var(--cxp-text-3); overflow-wrap: anywhere; }
2960
+ .cxp-settings-result:not(:empty) { padding-top: 6px; }
2961
+ .cxp-settings-result[data-error=true] { color: var(--cxp-danger); }
2962
+ .cxp-settings-unit { font-size: var(--cxp-fs-xs); color: var(--cxp-text-3); }
2963
+ .cxp-settings-toggle { margin-left: auto; min-width: 70px; padding: 3px 8px; border: 1px solid var(--cxp-border-input); border-radius: var(--cxp-radius-sm); color: var(--cxp-text-3); background: var(--cxp-surface-1); font: inherit; cursor: pointer; }
2964
+ .cxp-settings-toggle[data-enabled=true] { color: var(--cxp-text); background: var(--cxp-surface-3); border-color: var(--cxp-text-3); }
2965
+ .cxp-settings-toggle:disabled { opacity: .45; cursor: default; }
2966
+ .cxp-settings-features { margin-top: 10px; }
2967
+ .cxp-settings-features .cxp-config-label { flex-basis: auto; }
2968
+ .cxp-settings-runtime { margin-top: 12px; }
2969
+ .cxp-settings-panel .cxp-mcp-row { flex-wrap: wrap; border: 0; padding: 4px 0; }
2970
+ .cxp-config-warning { padding: 8px 12px; color: var(--cxp-warning); font-size: var(--cxp-fs-xs); white-space: pre-wrap; }
2950
2971
  .cxp-config-layer {
2951
2972
  font-size: var(--cxp-fs-xs);
2952
2973
  color: var(--cxp-text-3);