cli-jaw 2.17.61 → 2.17.62

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 (100) hide show
  1. package/README.ja.md +376 -339
  2. package/README.ko.md +338 -393
  3. package/README.md +163 -508
  4. package/README.zh-CN.md +365 -376
  5. package/dist/server.js +3 -0
  6. package/dist/server.js.map +1 -1
  7. package/dist/src/agent/pi-runtime.js +37 -18
  8. package/dist/src/agent/pi-runtime.js.map +1 -1
  9. package/dist/src/agent/runtime/acp/permissions.js +2 -3
  10. package/dist/src/agent/runtime/acp/permissions.js.map +1 -1
  11. package/dist/src/agent/runtime/pi-turn.js +7 -0
  12. package/dist/src/agent/runtime/pi-turn.js.map +1 -1
  13. package/dist/src/agent/spawn/line-buffer.js +84 -13
  14. package/dist/src/agent/spawn/line-buffer.js.map +1 -1
  15. package/dist/src/agent/spawn.js +26 -15
  16. package/dist/src/agent/spawn.js.map +1 -1
  17. package/dist/src/code-mode/host.js +34 -5
  18. package/dist/src/code-mode/host.js.map +1 -1
  19. package/dist/src/code-mode/manager.js +24 -7
  20. package/dist/src/code-mode/manager.js.map +1 -1
  21. package/dist/src/code-mode/providers/provider-live-models.js +3 -1
  22. package/dist/src/code-mode/providers/provider-live-models.js.map +1 -1
  23. package/dist/src/code-mode/store.js +31 -6
  24. package/dist/src/code-mode/store.js.map +1 -1
  25. package/dist/src/core/config.js +119 -17
  26. package/dist/src/core/config.js.map +1 -1
  27. package/dist/src/core/runtime-settings.js +7 -1
  28. package/dist/src/core/runtime-settings.js.map +1 -1
  29. package/dist/src/core/settings-merge.js +9 -0
  30. package/dist/src/core/settings-merge.js.map +1 -1
  31. package/dist/src/core/settings-watch.js +19 -1
  32. package/dist/src/core/settings-watch.js.map +1 -1
  33. package/dist/src/discord/bot.js +6 -4
  34. package/dist/src/discord/bot.js.map +1 -1
  35. package/dist/src/discord/send-only-client.js +37 -3
  36. package/dist/src/discord/send-only-client.js.map +1 -1
  37. package/dist/src/manager/memory/embedding/sync.js +6 -0
  38. package/dist/src/manager/memory/embedding/sync.js.map +1 -1
  39. package/dist/src/manager/routes/dashboard-memory.js +20 -7
  40. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  41. package/dist/src/manager/server.js +8 -0
  42. package/dist/src/manager/server.js.map +1 -1
  43. package/dist/src/manager/shutdown.js +29 -3
  44. package/dist/src/manager/shutdown.js.map +1 -1
  45. package/dist/src/manager/worker-events.js +70 -8
  46. package/dist/src/manager/worker-events.js.map +1 -1
  47. package/dist/src/routes/code-native.js +23 -3
  48. package/dist/src/routes/code-native.js.map +1 -1
  49. package/dist/src/routes/events.js +4 -0
  50. package/dist/src/routes/events.js.map +1 -1
  51. package/dist/src/routes/settings.js +45 -1
  52. package/dist/src/routes/settings.js.map +1 -1
  53. package/dist/src/routes/sse-connections.js +31 -0
  54. package/dist/src/routes/sse-connections.js.map +1 -0
  55. package/dist/src/shared/permissions.js +47 -0
  56. package/dist/src/shared/permissions.js.map +1 -0
  57. package/package.json +1 -1
  58. package/public/dist/.vite/manifest.json +31 -31
  59. package/public/dist/assets/AdvancedExport-B7h_ZvBu.js +1 -0
  60. package/public/dist/assets/Agent-DnbZJP7b.js +1 -0
  61. package/public/dist/assets/{ChannelEnablementControl-B2tq8Ji4.js → ChannelEnablementControl-Dl0uYx38.js} +5 -5
  62. package/public/dist/assets/ChannelSetupEntry-DxtOrN01.js +1 -0
  63. package/public/dist/assets/ChannelsDiscord-BEGGwd_3.js +1 -0
  64. package/public/dist/assets/{ChannelsSlack-B9FV0ftr.js → ChannelsSlack-BryC2Ahr.js} +1 -1
  65. package/public/dist/assets/ChannelsTelegram-CGSpaImJ.js +1 -0
  66. package/public/dist/assets/CodeCanvas-DpkFi5Au.js +2 -0
  67. package/public/dist/assets/Permissions-BwiMEoTV.js +1 -0
  68. package/public/dist/assets/Permissions-CodIW-Yd.js +1 -0
  69. package/public/dist/assets/{manager-C5cU1joU.js → manager-Bi_xw7TW.js} +2 -2
  70. package/public/dist/assets/{settings-CA2LQDGh.js → settings-W4KG9ivu.js} +1 -1
  71. package/public/dist/assets/{settings-embedding-oGvFayh-.js → settings-embedding-BfWzWKMM.js} +1 -1
  72. package/public/dist/manager/index.html +1 -1
  73. package/public/dist/settings/index.html +1 -1
  74. package/public/js/features/settings-discord.ts +39 -5
  75. package/public/js/features/settings-telegram.ts +38 -4
  76. package/public/js/features/settings-types.ts +2 -0
  77. package/public/locales/en.json +2 -0
  78. package/public/locales/ja.json +2 -0
  79. package/public/locales/ko.json +2 -0
  80. package/public/locales/zh.json +2 -0
  81. package/public/manager/src/App.tsx +4 -1
  82. package/public/manager/src/code/code-controller-runtime.ts +13 -6
  83. package/public/manager/src/code/code-session-client.ts +1 -1
  84. package/public/manager/src/code/session-order.ts +6 -7
  85. package/public/manager/src/dashboard-url-state.ts +8 -0
  86. package/public/manager/src/settings/pages/AdvancedExport.tsx +2 -0
  87. package/public/manager/src/settings/pages/Agent.tsx +13 -5
  88. package/public/manager/src/settings/pages/ChannelsDiscord.tsx +27 -4
  89. package/public/manager/src/settings/pages/ChannelsTelegram.tsx +26 -4
  90. package/public/manager/src/settings/pages/Permissions.tsx +50 -27
  91. package/public/manager/src/settings/pages/components/ChannelSetupEntry.tsx +4 -3
  92. package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +10 -2
  93. package/public/dist/assets/AdvancedExport-BNMjYkw6.js +0 -1
  94. package/public/dist/assets/Agent-D4g8TPjm.js +0 -1
  95. package/public/dist/assets/ChannelSetupEntry-zKYImWXx.js +0 -1
  96. package/public/dist/assets/ChannelsDiscord-CWRKV-Zl.js +0 -1
  97. package/public/dist/assets/ChannelsTelegram-BdK-fTPI.js +0 -1
  98. package/public/dist/assets/CodeCanvas-D5jp8-t5.js +0 -2
  99. package/public/dist/assets/Permissions-Bh947tUG.js +0 -1
  100. package/public/dist/assets/Permissions-DzNJCt8K.js +0 -1
@@ -1921,8 +1921,8 @@
1921
1921
  "_chunk-H2I77ZZE-ytBKuGMS.js"
1922
1922
  ]
1923
1923
  },
1924
- "_ChannelEnablementControl-B2tq8Ji4.js": {
1925
- "file": "assets/ChannelEnablementControl-B2tq8Ji4.js",
1924
+ "_ChannelEnablementControl-Dl0uYx38.js": {
1925
+ "file": "assets/ChannelEnablementControl-Dl0uYx38.js",
1926
1926
  "name": "ChannelEnablementControl",
1927
1927
  "imports": [
1928
1928
  "_rolldown-runtime-hePW80VL.js",
@@ -1933,15 +1933,15 @@
1933
1933
  "_fields-mlGpofqQ.js"
1934
1934
  ]
1935
1935
  },
1936
- "_ChannelSetupEntry-zKYImWXx.js": {
1937
- "file": "assets/ChannelSetupEntry-zKYImWXx.js",
1936
+ "_ChannelSetupEntry-DxtOrN01.js": {
1937
+ "file": "assets/ChannelSetupEntry-DxtOrN01.js",
1938
1938
  "name": "ChannelSetupEntry",
1939
1939
  "imports": [
1940
1940
  "_rolldown-runtime-hePW80VL.js",
1941
1941
  "_react-C_pPTFsM.js",
1942
1942
  "_jsx-runtime-NZYk81nU.js",
1943
1943
  "_settings-client-CmwRsVd1.js",
1944
- "_ChannelEnablementControl-B2tq8Ji4.js"
1944
+ "_ChannelEnablementControl-Dl0uYx38.js"
1945
1945
  ]
1946
1946
  },
1947
1947
  "_InlineWarn-DIMbcbzk.js": {
@@ -1978,8 +1978,8 @@
1978
1978
  "_terminal-shortcut-queue-B_AyW1hN.js"
1979
1979
  ]
1980
1980
  },
1981
- "_Permissions-DzNJCt8K.js": {
1982
- "file": "assets/Permissions-DzNJCt8K.js",
1981
+ "_Permissions-CodIW-Yd.js": {
1982
+ "file": "assets/Permissions-CodIW-Yd.js",
1983
1983
  "name": "Permissions",
1984
1984
  "imports": [
1985
1985
  "_rolldown-runtime-hePW80VL.js",
@@ -2860,12 +2860,8 @@
2860
2860
  "_presentation-preference-D9u6LD07.js"
2861
2861
  ]
2862
2862
  },
2863
- "_settings-embedding-DhEdT86W.css": {
2864
- "file": "assets/settings-embedding-DhEdT86W.css",
2865
- "src": "_settings-embedding-DhEdT86W.css"
2866
- },
2867
- "_settings-embedding-oGvFayh-.js": {
2868
- "file": "assets/settings-embedding-oGvFayh-.js",
2863
+ "_settings-embedding-BfWzWKMM.js": {
2864
+ "file": "assets/settings-embedding-BfWzWKMM.js",
2869
2865
  "name": "settings-embedding",
2870
2866
  "imports": [
2871
2867
  "_rolldown-runtime-hePW80VL.js",
@@ -2907,6 +2903,10 @@
2907
2903
  "assets/settings-embedding-DhEdT86W.css"
2908
2904
  ]
2909
2905
  },
2906
+ "_settings-embedding-DhEdT86W.css": {
2907
+ "file": "assets/settings-embedding-DhEdT86W.css",
2908
+ "src": "_settings-embedding-DhEdT86W.css"
2909
+ },
2910
2910
  "_settings-jlI4X-zt.js": {
2911
2911
  "file": "assets/settings-jlI4X-zt.js",
2912
2912
  "name": "settings",
@@ -3330,7 +3330,7 @@
3330
3330
  ]
3331
3331
  },
3332
3332
  "manager/index.html": {
3333
- "file": "assets/manager-C5cU1joU.js",
3333
+ "file": "assets/manager-Bi_xw7TW.js",
3334
3334
  "name": "manager",
3335
3335
  "src": "manager/index.html",
3336
3336
  "isEntry": true,
@@ -3339,7 +3339,7 @@
3339
3339
  "_vendor-render-Cmfl_oW8.js",
3340
3340
  "_preload-helper-CfbQpVni.js",
3341
3341
  "_esm-Q6VOkDbn.js",
3342
- "_settings-embedding-oGvFayh-.js",
3342
+ "_settings-embedding-BfWzWKMM.js",
3343
3343
  "_react-C_pPTFsM.js",
3344
3344
  "_react-dom-DyUOYpVL.js",
3345
3345
  "_api-B9RiiOMM.js",
@@ -3508,7 +3508,7 @@
3508
3508
  ]
3509
3509
  },
3510
3510
  "manager/src/code/CodeCanvas.tsx": {
3511
- "file": "assets/CodeCanvas-D5jp8-t5.js",
3511
+ "file": "assets/CodeCanvas-DpkFi5Au.js",
3512
3512
  "name": "CodeCanvas",
3513
3513
  "src": "manager/src/code/CodeCanvas.tsx",
3514
3514
  "isDynamicEntry": true,
@@ -3632,7 +3632,7 @@
3632
3632
  ]
3633
3633
  },
3634
3634
  "manager/src/settings/pages/AdvancedExport.tsx": {
3635
- "file": "assets/AdvancedExport-BNMjYkw6.js",
3635
+ "file": "assets/AdvancedExport-B7h_ZvBu.js",
3636
3636
  "name": "AdvancedExport",
3637
3637
  "src": "manager/src/settings/pages/AdvancedExport.tsx",
3638
3638
  "isDynamicEntry": true,
@@ -3645,7 +3645,7 @@
3645
3645
  ]
3646
3646
  },
3647
3647
  "manager/src/settings/pages/Agent.tsx": {
3648
- "file": "assets/Agent-D4g8TPjm.js",
3648
+ "file": "assets/Agent-DnbZJP7b.js",
3649
3649
  "name": "Agent",
3650
3650
  "src": "manager/src/settings/pages/Agent.tsx",
3651
3651
  "isDynamicEntry": true,
@@ -3659,7 +3659,7 @@
3659
3659
  "_error-normalize-CL69Bl7z.js",
3660
3660
  "_page-shell-BeGD0rRQ.js",
3661
3661
  "_fields-mlGpofqQ.js",
3662
- "_Permissions-DzNJCt8K.js",
3662
+ "_Permissions-CodIW-Yd.js",
3663
3663
  "_agent-meta-94LMwZZK.js",
3664
3664
  "_path-utils-B6vBr0DD.js"
3665
3665
  ]
@@ -3679,7 +3679,7 @@
3679
3679
  ]
3680
3680
  },
3681
3681
  "manager/src/settings/pages/ChannelsDiscord.tsx": {
3682
- "file": "assets/ChannelsDiscord-CWRKV-Zl.js",
3682
+ "file": "assets/ChannelsDiscord-BEGGwd_3.js",
3683
3683
  "name": "ChannelsDiscord",
3684
3684
  "src": "manager/src/settings/pages/ChannelsDiscord.tsx",
3685
3685
  "isDynamicEntry": true,
@@ -3690,12 +3690,12 @@
3690
3690
  "_page-shell-BeGD0rRQ.js",
3691
3691
  "_fields-mlGpofqQ.js",
3692
3692
  "_path-utils-B6vBr0DD.js",
3693
- "_ChannelSetupEntry-zKYImWXx.js",
3694
- "_ChannelEnablementControl-B2tq8Ji4.js"
3693
+ "_ChannelEnablementControl-Dl0uYx38.js",
3694
+ "_ChannelSetupEntry-DxtOrN01.js"
3695
3695
  ]
3696
3696
  },
3697
3697
  "manager/src/settings/pages/ChannelsSlack.tsx": {
3698
- "file": "assets/ChannelsSlack-B9FV0ftr.js",
3698
+ "file": "assets/ChannelsSlack-BryC2Ahr.js",
3699
3699
  "name": "ChannelsSlack",
3700
3700
  "src": "manager/src/settings/pages/ChannelsSlack.tsx",
3701
3701
  "isDynamicEntry": true,
@@ -3707,11 +3707,11 @@
3707
3707
  "_page-shell-BeGD0rRQ.js",
3708
3708
  "_fields-mlGpofqQ.js",
3709
3709
  "_path-utils-B6vBr0DD.js",
3710
- "_ChannelEnablementControl-B2tq8Ji4.js"
3710
+ "_ChannelEnablementControl-Dl0uYx38.js"
3711
3711
  ]
3712
3712
  },
3713
3713
  "manager/src/settings/pages/ChannelsTelegram.tsx": {
3714
- "file": "assets/ChannelsTelegram-BdK-fTPI.js",
3714
+ "file": "assets/ChannelsTelegram-CGSpaImJ.js",
3715
3715
  "name": "ChannelsTelegram",
3716
3716
  "src": "manager/src/settings/pages/ChannelsTelegram.tsx",
3717
3717
  "isDynamicEntry": true,
@@ -3722,8 +3722,8 @@
3722
3722
  "_page-shell-BeGD0rRQ.js",
3723
3723
  "_fields-mlGpofqQ.js",
3724
3724
  "_path-utils-B6vBr0DD.js",
3725
- "_ChannelSetupEntry-zKYImWXx.js",
3726
- "_ChannelEnablementControl-B2tq8Ji4.js"
3725
+ "_ChannelEnablementControl-Dl0uYx38.js",
3726
+ "_ChannelSetupEntry-DxtOrN01.js"
3727
3727
  ]
3728
3728
  },
3729
3729
  "manager/src/settings/pages/DashboardMeta.tsx": {
@@ -3846,12 +3846,12 @@
3846
3846
  ]
3847
3847
  },
3848
3848
  "manager/src/settings/pages/Permissions.tsx": {
3849
- "file": "assets/Permissions-Bh947tUG.js",
3849
+ "file": "assets/Permissions-BwiMEoTV.js",
3850
3850
  "name": "Permissions",
3851
3851
  "src": "manager/src/settings/pages/Permissions.tsx",
3852
3852
  "isDynamicEntry": true,
3853
3853
  "imports": [
3854
- "_Permissions-DzNJCt8K.js"
3854
+ "_Permissions-CodIW-Yd.js"
3855
3855
  ]
3856
3856
  },
3857
3857
  "manager/src/settings/pages/Profile.tsx": {
@@ -3973,13 +3973,13 @@
3973
3973
  "src": "manifest.json"
3974
3974
  },
3975
3975
  "settings/index.html": {
3976
- "file": "assets/settings-CA2LQDGh.js",
3976
+ "file": "assets/settings-W4KG9ivu.js",
3977
3977
  "name": "settings",
3978
3978
  "src": "settings/index.html",
3979
3979
  "isEntry": true,
3980
3980
  "imports": [
3981
3981
  "_api-CUtiCd2-.js",
3982
- "_settings-embedding-oGvFayh-.js",
3982
+ "_settings-embedding-BfWzWKMM.js",
3983
3983
  "_jsx-runtime-NZYk81nU.js",
3984
3984
  "_settings-client-CmwRsVd1.js"
3985
3985
  ]
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-C_pPTFsM.js";import{t as n}from"./jsx-runtime-NZYk81nU.js";import{t as r}from"./error-normalize-CL69Bl7z.js";import{a as i,i as a,n as o,r as s,t as c}from"./page-shell-BeGD0rRQ.js";var l=e(t(),1),u=n();function d(e,t){let n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r)}function f(e){let t;try{t=JSON.parse(e)}catch(e){return{ok:!1,error:`Invalid JSON: ${e.message}`}}return!t||typeof t!=`object`||Array.isArray(t)?{ok:!1,error:`Import payload must be a JSON object.`}:{ok:!0,value:p(t)}}function p(e){let{settingsSchemaVersion:t,runtimeDefaultMigration:n,multiSessionDefaultMigration:r,nativeTransportMigration:i,maxConcurrentDefaultMigration:a,slackEnvironmentVariables:o,telegramEnvironmentVariables:s,discordEnvironmentVariables:c,...l}=e;return l}function m({port:e,client:t,triggerDownload:n}){let{state:m}=i(t,`/api/settings`),[h,g]=(0,l.useState)(!1),[_,v]=(0,l.useState)(``),[y,b]=(0,l.useState)(null),[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(null),T=n||d;(0,l.useEffect)(()=>{v(``),b(null),w(null)},[e]);let E=(0,l.useCallback)(()=>{if(m.kind!==`ready`)return;let t=`cli-jaw-settings-${e}.json`;T(t,JSON.stringify(p(m.data),null,2))},[m,e,T]),D=(0,l.useCallback)(async()=>{let e=f(_);if(!e.ok){b(e.error),w(null);return}b(null),w(null),S(!0);try{await t.put(`/api/settings`,e.value),w(`Imported. Reload the page to refresh other tabs.`)}catch(e){b(r(e))}finally{S(!1)}},[t,_]);return m.kind===`loading`?(0,u.jsx)(o,{}):m.kind===`offline`?(0,u.jsx)(s,{port:e}):m.kind===`error`?(0,u.jsx)(c,{message:m.message}):(0,u.jsxs)(`div`,{className:`settings-page-form`,children:[(0,u.jsx)(a,{title:`Export`,hint:`Download the resolved /i/${e}/api/settings document as JSON.`,children:(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:E,children:`Download settings JSON`})}),(0,u.jsxs)(a,{title:`Import (advanced)`,hint:`Replaces matching keys via PUT. Only enable when you understand the impact.`,children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-toggle`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Show import controls`}),(0,u.jsx)(`input`,{id:`advanced-toggle`,type:`checkbox`,checked:h,onChange:e=>g(e.target.checked)})]}),h?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-import`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Settings JSON`}),(0,u.jsx)(`textarea`,{id:`advanced-import`,rows:8,value:_,placeholder:`{"cli":"codex","tui":{"themeSeed":"jaw-dark"}}`,onChange:e=>v(e.target.value),"aria-invalid":!!y}),y?(0,u.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:y}):null,C?(0,u.jsx)(`span`,{className:`settings-field-description`,role:`status`,children:C}):null]}),(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void D(),disabled:x||_.trim()===``,children:x?`Importing…`:`Apply import`})]}):null]})]})}export{m as default,p as stripServerOwnedSettingsFields,f as validateImportPayload};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t,t as n}from"./cli-engine-NdU0lzs_.js";import{n as r}from"./settings-types-D3cd6SWy.js";import{t as i}from"./react-C_pPTFsM.js";import{t as a}from"./jsx-runtime-NZYk81nU.js";import{t as o}from"./settings-client-CmwRsVd1.js";import{t as s}from"./error-normalize-CL69Bl7z.js";import{a as c,i as l,n as u,r as d,t as f}from"./page-shell-BeGD0rRQ.js";import{i as p,s as m}from"./fields-mlGpofqQ.js";import{c as h,n as g,o as ee,r as _,s as v}from"./Permissions-CodIW-Yd.js";import{a as y,c as te,d as b,i as x,l as S,n as ne,o as re,r as ie,s as C,t as ae,u as w}from"./agent-meta-94LMwZZK.js";import{t as oe}from"./path-utils-B6vBr0DD.js";var T=e(i(),1),E=1e3,D=8e3,se=9e4;function ce(e,t){if(!e||!t)return!1;let n=e[t]?.probeState;return n?n===`checking`||n===`failing`:!1}function O(e){let t=E*2**Math.min(Number.isFinite(e)&&e>0?Math.floor(e):0,8);return Math.min(Math.max(t,E),D)}function le(e){let{snapshot:t,cli:n,attempts:r,now:i,deadline:a}=e;if(!ce(t,n))return{kind:`stop`};if(i>=a||r>=24)return{kind:`exhausted`};let o=t?.[n]?.nextRetryAt,s=typeof o==`number`&&o>i?o:i+O(r);return{kind:`wait`,delayMs:Math.max(Math.min(s,a)-i,0)}}var k=a();function ue({cli:e,cliOptions:r,provider:i=``,providerOptions:a=[],model:o,modelOptions:s,effort:c,effortOptions:u,workingDir:d,workingDirError:f,cliMeta:h,onCliChange:g,onProviderChange:ee,onModelChange:_,onEffortChange:v,onWorkingDirChange:b}){let x=te(r),S=n(e),re=x.filter(e=>ne.includes(e)).length;return(0,k.jsx)(l,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,k.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,k.jsx)(p,{id:`agent-cli`,label:`Active CLI`,value:e,missingValueLabel:n(e)?t(e):void 0,error:S?`This runtime is retired. Select an available runtime to continue.`:null,options:x.map(e=>({value:e,label:y(e,h).label||e})),collapsedAfter:re,onChange:g}),a.length>0?(0,k.jsx)(p,{id:`agent-${e}-provider`,label:`Provider`,value:i,options:a.map(e=>({value:e,label:e})),onChange:e=>ee?.(e)}):null,(0,k.jsx)(p,{id:`agent-model`,label:`Active model`,value:o,disabled:S,options:s.length>0?s:[{value:``,label:`(default)`}],onChange:_}),(0,k.jsx)(p,{id:`agent-effort`,label:`Effort`,value:c,options:[{value:``,label:`(default)`},...u.map(e=>({value:e,label:e}))],disabled:S||u.length===0,onChange:v}),(0,k.jsx)(m,{id:`agent-workingDir`,label:`Working directory`,value:d,error:f,placeholder:`/path/to/project`,onChange:b})]})})}var de=[{value:`auto`,label:`Auto (YOLO)`},{value:`safe`,label:`Safe`},{value:`custom`,label:`Custom allowlist`}];function fe({value:e,configuredValue:t,onChange:n}){let r=ee(e),i=v(e),a=r.mode===`custom`?r.tokens:[],o=r.mode===`custom`?`Editor draft: ${a.length} explicit token${a.length===1?``:`s`}`:null;return(0,k.jsxs)(l,{title:`Permissions`,hint:`Selecting a value changes the draft. Save applies it. Auto (YOLO) requests automatic approval or permission bypass. Behavior varies by runtime.`,children:[(0,k.jsx)(p,{id:`agent-permissions-mode`,label:`Change policy to`,value:i,options:de,missingValueLabel:i===`invalid`?`Unrecognized saved policy`:void 0,onChange:e=>{n(e===`auto`?`auto`:e===`safe`?`safe`:a.length>0&&_(a)?a:h(null))}}),i===`invalid`?(0,k.jsx)(`p`,{className:`settings-agent-note`,role:`alert`,children:`The saved permissions value is not a recognized policy. Choose a policy to replace it.`}):null,o?(0,k.jsx)(`p`,{className:`settings-agent-note`,children:o}):null,(0,k.jsxs)(`p`,{className:`settings-agent-note`,id:`agent-configured-policy`,children:[`Configured policy: `,g(t)]})]})}function pe({activeCli:e,flushCli:r,flushModel:i,cliOptions:a,modelOptions:o,cliMeta:s,loading:c,error:u,onFlushCliChange:d,onFlushModelChange:f}){let m=r||e,h=m?y(m,s).label||m:`active`;return(0,k.jsx)(l,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,k.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,k.jsxs)(`summary`,{children:[(0,k.jsx)(`span`,{children:`Flush runtime`}),(0,k.jsxs)(`code`,{children:[h,i&&i!=="default"?` / ${i}`:``]})]}),c?(0,k.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,u?(0,k.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:u}):null,(0,k.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,k.jsx)(p,{id:`agent-flush-cli`,label:`Flush CLI`,value:r,missingValueLabel:n(r)?t(r):void 0,error:n(m)?`The saved flush runtime is retired. Choose an available runtime.`:null,options:[{value:``,label:`(active CLI)`},...b(a).map(e=>({value:e,label:y(e,s).label||e}))],onChange:d}),(0,k.jsx)(p,{id:`agent-flush-model`,label:`Flush model`,value:i,disabled:n(m),options:[{value:``,label:`(default)`},...o],onChange:f})]})]})})}function A(e){return e.source===`static`||e.id.startsWith(`static:`)}function me(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function he(e,t){let n=b(e)[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:me(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function ge(e){return Array.isArray(e)?e.map(j).filter(Boolean):e.data.map(j).filter(Boolean)}function j(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function M(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function N(e){return e.some(e=>M(e)!==null)}function _e(e,t){return JSON.stringify(e.map(R))===JSON.stringify(t.map(R))}function P(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=I(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!A(t)&&o.push(t);return{added:i,updated:a,removed:o}}function ve(e,t){let n=P(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function F(e,t,n){let r=P(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,L(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function I(e,t){if(A(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function L(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function R(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function z({employee:e,index:r,cliOptions:i,cliMeta:a,onChange:o,onRemove:s}){let c=A(e),l=y(e.cli,a),u=C(l.models,e.model),d=M(e),f=n(e.cli),h=b(Array.from(new Set([...i,e.cli,`claude`])).filter(Boolean));return(0,k.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,k.jsxs)(`legend`,{children:[e.name||`Employee ${r+1}`,c?(0,k.jsx)(`span`,{children:`static`}):null]}),(0,k.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,k.jsx)(m,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:c,error:d===`Name is required`?d:null,onChange:e=>o({name:e})}),(0,k.jsx)(p,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,missingValueLabel:n(e.cli)?t(e.cli):void 0,error:f?`This saved runtime cannot execute. Choose an available runtime.`:null,disabled:c,options:h.map(e=>({value:e,label:y(e,a).label||e})),onChange:e=>{o({cli:e,model:y(e,a).models[0]||`default`})}}),(0,k.jsx)(p,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,disabled:f,options:u.length>0?u:[{value:`default`,label:`default`}],onChange:e=>o({model:e})}),(0,k.jsx)(m,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:c,onChange:e=>o({role:e})})]}),(0,k.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,k.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:c,onClick:s,"aria-label":`Remove employee ${e.name||r+1}`,children:`Remove`})]})]})}function ye({roster:e,original:t,cliOptions:n,cliMeta:r,loading:i,error:a,onRosterChange:o}){let s=ve(t,e),c=N(e);function u(t,n){o(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){o(e.filter((e,n)=>n!==t))}return(0,k.jsxs)(l,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,k.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,k.jsxs)(`span`,{children:[`+`,s.added]}),(0,k.jsxs)(`span`,{children:[`~`,s.updated]}),(0,k.jsxs)(`span`,{children:[`-`,s.removed]}),c?(0,k.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),i?(0,k.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,a?(0,k.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:a}):null,e.length===0?(0,k.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,k.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,k.jsx)(z,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,k.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>o([...e,he(n,r)]),children:`+ Add employee`})})]})}var be=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function B(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):be.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function xe(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(N(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=B(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,oe(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{if(s){let e=i;try{let n=ge(await t.get(`/api/employees`)),r=new Set(i.map(e=>e.id)),a=new Set(s.map(e=>e.id));e=n.filter(e=>r.has(e.id)||a.has(e.id))}catch{}await F(t,e,s)}}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function Se({status:e,exhausted:t=!1}){if(t)return(0,k.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:`상태 확인이 끝나지 않았습니다. 새로고침하거나 잠시 후 다시 확인하세요.`});if(!e)return null;let n=r(e);return n.kind===`checking`?(0,k.jsx)(`div`,{className:`settings-inline-notice`,role:`status`,"aria-live":`polite`,children:`상태 확인 중`}):n.kind===`unknown`?(0,k.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:n.message}):n.kind===`failing`?(0,k.jsxs)(`div`,{className:`settings-inline-notice`,role:`alert`,children:[`상태 확인 실패 (재시도 중)`,e.probeError?`: ${e.probeError}`:``]}):null}function Ce(e){if(!(e instanceof o)||e.status!==409)return null;try{return JSON.parse(e.detail).settings??null}catch{return null}}function we({port:e,client:t,dirty:n,registerSave:r}){let{state:i,refresh:a,setData:o}=c(t,`/api/settings`),[l,p]=(0,T.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[m,h]=(0,T.useState)({}),[g,_]=(0,T.useState)({}),[te,ne]=(0,T.useState)(!0),[oe,E]=(0,T.useState)(null),[D,ce]=(0,T.useState)([]),[O,de]=(0,T.useState)([]),[A,me]=(0,T.useState)(!0),[he,j]=(0,T.useState)(null),[M,P]=(0,T.useState)(null),[ve,F]=(0,T.useState)({}),[I,L]=(0,T.useState)(!1),[R,z]=(0,T.useState)(null),[be,B]=(0,T.useState)(!1),[we,Te]=(0,T.useState)(null),V=(0,T.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`),n=e&&typeof e==`object`&&`data`in e?e.data:e;P(re(n))}catch{P(null)}},[t]),H=(0,T.useRef)(0),Ee=(0,T.useRef)({}),[De,Oe]=(0,T.useState)(!1),U=(0,T.useCallback)(async e=>{try{let n=await t.get(`/api/cli-status`);if(e!==void 0&&e!==H.current)return;Ee.current=n,F(n)}catch{if(e!==void 0&&e!==H.current)return;Ee.current={},F({})}},[t]),W=(0,T.useCallback)(async()=>{ne(!0),E(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};h(n),_(n)}catch(e){E(e instanceof Error?e.message:String(e))}finally{ne(!1)}},[t]),G=(0,T.useCallback)(async()=>{me(!0),j(null);try{let e=ge(await t.get(`/api/employees`));ce(e),de(e)}catch(e){j(e instanceof Error?e.message:String(e))}finally{me(!1)}},[t]);(0,T.useEffect)(()=>{V(),U(),W(),G()},[V,U,G,W]),(0,T.useEffect)(()=>{if(!l.cli)return;let e=H.current+1;H.current=e,Oe(!1);let t=Date.now()+se,n=0,r,i=()=>{if(e!==H.current)return;let a=le({snapshot:Ee.current,cli:l.cli,attempts:n,now:Date.now(),deadline:t});if(a.kind!==`stop`){if(a.kind===`exhausted`){Oe(!0);return}r=setTimeout(()=>{e===H.current&&(n+=1,U(e).then(()=>{e===H.current&&i()}))},a.delayMs)}};return i(),()=>{H.current=e+1,r!==void 0&&clearTimeout(r)}},[l.cli,U]),(0,T.useEffect)(()=>{if(i.kind!==`ready`)return;let e=Object.keys(i.data.perCli||{}),t=i.data.cli||e[0]||``,n=ee(i.data.permissions),r=v(i.data.permissions),a=y(t,M);p({cli:t,provider:i.data.perCli?.[t]?.provider||a.defaultProvider||``,model:w(t,i.data.perCli,i.data.activeOverrides),effort:S(t,i.data.perCli,i.data.activeOverrides),workingDir:i.data.workingDir||``,permissions:r===`invalid`?i.data.permissions:n.mode===`custom`?n.tokens:n.mode===`safe`?`safe`:`auto`})},[M,i]),(0,T.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let K=(0,T.useCallback)((e,t)=>n.set(e,t),[n]),ke=(0,T.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await xe({client:t,bundle:e,employeeDraft:O,employeeOriginal:D});n.clear(),r&&o(r),await a(),await V(),await W(),await G()},[t,n,O,D,V,G,W,a,o]);(0,T.useEffect)(()=>{if(r)return r(ke),()=>r(null)},[r,ke]);let q=i.kind===`ready`?i.data:{},J=q.perCli||{},Y=q.activeOverrides||{},Ae=(0,T.useMemo)(()=>{let e=b(Object.keys(J));return e.length?e:b(Object.keys(M||ae))},[J,M]),X=y(l.cli,M),Z=l.provider||X.defaultProvider||X.providers?.[0]||``,je=l.cli===`pi`,Q=!je&&(X.providers?.length??0)>0,Me=C(Q&&X.modelsByProvider?.[Z]||X.models,l.model),Ne=Q?x(X,l.model,X.effortsByProvider?.[Z]||X.efforts,Z):x(X,l.model),Pe=l.workingDir.trim()?null:`Required`,Fe=(0,T.useCallback)(async e=>{L(!0),z(null);try{let n=await t.post(`/api/settings/runtime-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,o(r)}catch(e){let t=Ce(e);if(t){o(t);return}z(s(e))}finally{L(!1)}},[t,o]),Ie=(0,T.useCallback)(async e=>{B(!0),Te(null);try{let n=await t.post(`/api/settings/multi-session-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,o(r)}catch(e){let t=Ce(e);if(t){o(t);return}Te(s(e))}finally{B(!1)}},[t,o]);if(i.kind===`loading`)return(0,k.jsx)(u,{});if(i.kind===`offline`)return(0,k.jsx)(d,{port:e});if(i.kind===`error`)return(0,k.jsx)(f,{message:i.message});function Le(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){p(e)}return(0,k.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),ke()},children:[q.runtimeDefaultMigration?.state===`pending`?(0,k.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,k.jsx)(`strong`,{children:`기본 런타임 변경 안내`}),(0,k.jsx)(`p`,{children:`기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.`}),(0,k.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:I,onClick:()=>void Fe(`accept`),children:`Codex App 사용`}),(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:I,onClick:()=>void Fe(`keep`),children:`현재 런타임 유지`})]}),R?(0,k.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:R}):null]}):null,q.multiSessionDefaultMigration?.state===`pending`?(0,k.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,k.jsx)(`strong`,{children:`다중 세션 안내`}),(0,k.jsx)(`p`,{children:`대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 20으로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.`}),(0,k.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:be,onClick:()=>void Ie(`accept`),children:`다중 세션 켜기`}),(0,k.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:be,onClick:()=>void Ie(`keep`),children:`지금 설정 유지`})]}),we?(0,k.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:we}):null]}):null,(0,k.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`midrun-policy-select`,children:[(0,k.jsx)(`span`,{className:`settings-field-label`,children:`실행 중 메시지 처리 (mid-run policy)`}),(0,k.jsxs)(`select`,{id:`midrun-policy-select`,value:String(q.multiSession?.midRunPolicy||`steer`),onChange:e=>{let t=e.target.value;K(`multiSession.midRunPolicy`,{value:t,original:String(q.multiSession?.midRunPolicy||`steer`),valid:!0})},children:[(0,k.jsx)(`option`,{value:`steer`,children:`steer (기본) — 실행 중 지시 변경`}),(0,k.jsx)(`option`,{value:`followup`,children:`followup — 끝나면 순서대로 실행`}),(0,k.jsx)(`option`,{value:`collect`,children:`collect — 모아서 한 번에 실행`}),(0,k.jsx)(`option`,{value:`interrupt`,children:`interrupt — 현재 실행을 중단하고 즉시 실행`})]}),(0,k.jsx)(`span`,{className:`settings-field-hint`,children:`다중 세션이 켜져 있을 때 적용됩니다. codex-app은 같은 턴에 입력을 전달합니다. Cursor·Grok의 native 모드는 현재 요청의 취소와 정리가 끝난 뒤 같은 세션에 다시 요청합니다(cancel-reprompt). 그 외 런타임은 중단 후 새 실행으로 이어갑니다(kill-steer). 보존되는 맥락은 런타임에 따라 다릅니다. 끝난 뒤 실행하려면 followup을 선택하세요.`})]}),(0,k.jsx)(Se,{status:ve[l.cli],exhausted:De}),(0,k.jsx)(ue,{cli:l.cli,cliOptions:Ae,provider:Z,providerOptions:je?[]:X.providers||[],model:l.model,modelOptions:Me,effort:l.effort,effortOptions:Ne,workingDir:l.workingDir,workingDirError:Pe,cliMeta:M,onCliChange:e=>{let t=y(e,M),n={...l,cli:e,provider:J[e]?.provider||t.defaultProvider||``,model:w(e,J,Y),effort:S(e,J,Y)};Le(),$(n),K(`cli`,{value:e,original:q.cli||``,valid:!0})},onProviderChange:e=>{let t=X.modelsByProvider?.[e]||[],n=X.effortsByProvider?.[e]||[],r=t.includes(l.model)?l.model:t[0]||``,i=ie(X,r,l.effort,n,e);$({...l,provider:e,model:r,effort:i}),K(`perCli.${l.cli}.provider`,{value:e,original:J[l.cli]?.provider||X.defaultProvider||``,valid:!0}),K(`activeOverrides.${l.cli}.model`,{value:r,original:w(l.cli,J,Y),valid:r.trim().length>0}),K(`activeOverrides.${l.cli}.effort`,{value:i,original:S(l.cli,J,Y),valid:!0})},onModelChange:e=>{let t=ie(X,e,l.effort,Q?X.effortsByProvider?.[Z]||X.efforts:void 0,Q?Z:void 0);$({...l,model:e,effort:t}),K(`activeOverrides.${l.cli}.model`,{value:e,original:w(l.cli,J,Y),valid:e.trim().length>0}),t!==l.effort&&K(`activeOverrides.${l.cli}.effort`,{value:t,original:S(l.cli,J,Y),valid:!0})},onEffortChange:e=>{$({...l,effort:e}),K(`activeOverrides.${l.cli}.effort`,{value:e,original:S(l.cli,J,Y),valid:!0})},onWorkingDirChange:e=>{$({...l,workingDir:e}),K(`workingDir`,{value:e,original:q.workingDir||``,valid:e.trim().length>0})}}),(0,k.jsx)(fe,{value:l.permissions,configuredValue:q.permissions,onChange:e=>{$({...l,permissions:e}),K(`permissions`,{value:e,original:q.permissions??`auto`,valid:e===`auto`||e===`safe`||e.length>0})}}),(0,k.jsx)(pe,{activeCli:l.cli,flushCli:g.cli||``,flushModel:g.model||``,cliOptions:Ae,cliMeta:M,modelOptions:C(y(g.cli||l.cli,M).models,g.model||``),loading:te,error:oe,onFlushCliChange:e=>{let t=e&&y(e,M).models[0]||``;_({cli:e,model:t}),K(`flushCli`,{value:e,original:m.cli||``,valid:!0}),K(`flushModel`,{value:t,original:m.model||``,valid:!0})},onFlushModelChange:e=>{_({...g,model:e}),K(`flushModel`,{value:e,original:m.model||``,valid:!0})}}),(0,k.jsx)(ye,{roster:O,original:D,cliOptions:Ae,cliMeta:M,loading:A,error:he,onRosterChange:e=>{if(de(e),_e(e,D)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:D,valid:!N(e)})}})]})}export{Se as CliProbeNotice,Ce as conflictSettingsFromError,we as default,B as splitAgentSaveBundle};