@nextclaw/ui 0.5.43 → 0.5.45

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 (37) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/assets/ChannelsList-CGlQJOKR.js +1 -0
  3. package/dist/assets/{ChatPage-BDOAFhwZ.js → ChatPage-DNQw6cPm.js} +1 -1
  4. package/dist/assets/{CronConfig-BZ5BLWnK.js → CronConfig-CZE4jEWp.js} +1 -1
  5. package/dist/assets/DocBrowser-BCqnlevu.js +1 -0
  6. package/dist/assets/{MarketplacePage-DSeYw-SZ.js → MarketplacePage-_bRwL8Je.js} +1 -1
  7. package/dist/assets/ModelConfig-DHLdWlPT.js +1 -0
  8. package/dist/assets/ProvidersList-BS-3jQfk.js +1 -0
  9. package/dist/assets/RuntimeConfig-C0kVY3Y0.js +1 -0
  10. package/dist/assets/{SecretsConfig-DV_eZgHa.js → SecretsConfig-CBpnJpdi.js} +2 -2
  11. package/dist/assets/SessionsConfig-FmbzF3JO.js +2 -0
  12. package/dist/assets/{card-AxFsy7YF.js → card-D79QtyfR.js} +1 -1
  13. package/dist/assets/index-C5cdRzpO.css +1 -0
  14. package/dist/assets/index-nfl5TEOq.js +2 -0
  15. package/dist/assets/{label-Chdg0Pzh.js → label-C0lAPrBs.js} +1 -1
  16. package/dist/assets/{logos-csBmIIFU.js → logos-DdLfIYd-.js} +1 -1
  17. package/dist/assets/{page-layout-COKsFqhi.js → page-layout-BuP_1ihv.js} +1 -1
  18. package/dist/assets/{switch-BVQzjvsB.js → switch-Dmt2u3GV.js} +1 -1
  19. package/dist/assets/{tabs-custom-BYQWSGw3.js → tabs-custom-s1WUaOad.js} +1 -1
  20. package/dist/assets/{useConfig-C9yQu_4f.js → useConfig-BGr-ekoe.js} +1 -1
  21. package/dist/assets/{useConfirmDialog-8zI-gypg.js → useConfirmDialog-D_YoV8_w.js} +2 -2
  22. package/dist/assets/{vendor-CHxMoJ93.js → vendor-DfLizrKM.js} +61 -66
  23. package/dist/index.html +3 -3
  24. package/package.json +1 -1
  25. package/src/api/config.ts +2 -3
  26. package/src/api/types.ts +0 -2
  27. package/src/components/config/ModelConfig.tsx +5 -44
  28. package/src/components/config/RuntimeConfig.tsx +1 -17
  29. package/src/lib/i18n.ts +5 -4
  30. package/dist/assets/ChannelsList-DhDnNnNj.js +0 -1
  31. package/dist/assets/DocBrowser-Cx6JqAqa.js +0 -1
  32. package/dist/assets/ModelConfig-CG7bFj_f.js +0 -1
  33. package/dist/assets/ProvidersList-Dk95S5TU.js +0 -1
  34. package/dist/assets/RuntimeConfig-Bc8HKXWd.js +0 -1
  35. package/dist/assets/SessionsConfig-V9wA7zfR.js +0 -2
  36. package/dist/assets/index-CT15pXtn.js +0 -2
  37. package/dist/assets/index-c0vY8dDm.css +0 -1
package/dist/index.html CHANGED
@@ -6,9 +6,9 @@
6
6
  <link rel="icon" type="image/svg+xml" href="/logo.svg" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
8
  <title>NextClaw - 系统配置</title>
9
- <script type="module" crossorigin src="/assets/index-CT15pXtn.js"></script>
10
- <link rel="modulepreload" crossorigin href="/assets/vendor-CHxMoJ93.js">
11
- <link rel="stylesheet" crossorigin href="/assets/index-c0vY8dDm.css">
9
+ <script type="module" crossorigin src="/assets/index-nfl5TEOq.js"></script>
10
+ <link rel="modulepreload" crossorigin href="/assets/vendor-DfLizrKM.js">
11
+ <link rel="stylesheet" crossorigin href="/assets/index-C5cdRzpO.css">
12
12
  </head>
13
13
 
14
14
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/ui",
3
- "version": "0.5.43",
3
+ "version": "0.5.45",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/api/config.ts CHANGED
@@ -60,9 +60,8 @@ export async function fetchConfigSchema(): Promise<ConfigSchemaResponse> {
60
60
  // PUT /api/config/model
61
61
  export async function updateModel(data: {
62
62
  model: string;
63
- maxTokens?: number;
64
- }): Promise<{ model: string; maxTokens?: number }> {
65
- const response = await api.put<{ model: string; maxTokens?: number }>('/api/config/model', data);
63
+ }): Promise<{ model: string }> {
64
+ const response = await api.put<{ model: string }>('/api/config/model', data);
66
65
  if (!response.ok) {
67
66
  throw new Error(response.error.message);
68
67
  }
package/src/api/types.ts CHANGED
@@ -74,7 +74,6 @@ export type AgentProfileView = {
74
74
  default?: boolean;
75
75
  workspace?: string;
76
76
  model?: string;
77
- maxTokens?: number;
78
77
  contextTokens?: number;
79
78
  maxToolIterations?: number;
80
79
  };
@@ -308,7 +307,6 @@ export type ConfigView = {
308
307
  defaults: {
309
308
  model: string;
310
309
  workspace?: string;
311
- maxTokens?: number;
312
310
  contextTokens?: number;
313
311
  maxToolIterations?: number;
314
312
  };
@@ -7,10 +7,10 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
7
7
  import { SearchableModelInput } from '@/components/common/SearchableModelInput';
8
8
  import { useConfig, useConfigMeta, useConfigSchema, useUpdateModel } from '@/hooks/useConfig';
9
9
  import { hintForPath } from '@/lib/config-hints';
10
- import { formatNumber, t } from '@/lib/i18n';
10
+ import { t } from '@/lib/i18n';
11
11
  import { PageLayout, PageHeader } from '@/components/layout/page-layout';
12
12
  import { DOCS_DEFAULT_BASE_URL } from '@/components/doc-browser/DocBrowserContext';
13
- import { BookOpen, Folder, Loader2, Sliders, Sparkles } from 'lucide-react';
13
+ import { BookOpen, Folder, Loader2, Sparkles } from 'lucide-react';
14
14
  import { useEffect, useMemo, useState } from 'react';
15
15
 
16
16
  function normalizeStringList(input: string[] | null | undefined): string[] {
@@ -85,11 +85,9 @@ export function ModelConfig() {
85
85
  const [providerName, setProviderName] = useState('');
86
86
  const [modelId, setModelId] = useState('');
87
87
  const [workspace, setWorkspace] = useState('');
88
- const [maxTokens, setMaxTokens] = useState(8192);
89
88
  const uiHints = schema?.uiHints;
90
89
  const modelHint = hintForPath('agents.defaults.model', uiHints);
91
90
  const workspaceHint = hintForPath('agents.defaults.workspace', uiHints);
92
- const maxTokensHint = hintForPath('agents.defaults.maxTokens', uiHints);
93
91
 
94
92
  const providerCatalog = useMemo(() => {
95
93
  return (meta?.providers ?? []).map((provider) => {
@@ -135,7 +133,6 @@ export function ModelConfig() {
135
133
  setProviderName(effectiveProvider);
136
134
  setModelId(toProviderLocalModel(currentModel, aliases));
137
135
  setWorkspace(config.agents.defaults.workspace || '');
138
- setMaxTokens(config.agents.defaults.maxTokens || 8192);
139
136
  }, [config, providerCatalog, providerMap]);
140
137
 
141
138
  const modelOptions = useMemo(() => {
@@ -163,7 +160,7 @@ export function ModelConfig() {
163
160
  return `${selectedProvider.prefix}/${normalizedModelId}`;
164
161
  }, [modelId, selectedProvider, selectedProviderAliases]);
165
162
 
166
- const modelHelpText = modelHint?.help ?? '';
163
+ const modelHelpText = t('modelIdentifierHelp') || modelHint?.help || '';
167
164
 
168
165
  const handleProviderChange = (nextProvider: string) => {
169
166
  setProviderName(nextProvider);
@@ -176,7 +173,7 @@ export function ModelConfig() {
176
173
 
177
174
  const handleSubmit = (e: React.FormEvent) => {
178
175
  e.preventDefault();
179
- updateModel.mutate({ model: composedModel, maxTokens });
176
+ updateModel.mutate({ model: composedModel });
180
177
  };
181
178
 
182
179
  if (isLoading) {
@@ -199,13 +196,7 @@ export function ModelConfig() {
199
196
  </Card>
200
197
  <Card className="rounded-2xl border-gray-200 p-6">
201
198
  <Skeleton className="h-5 w-24 mb-2" />
202
- <Skeleton className="h-3 w-40 mb-6" />
203
- <div className="space-y-6">
204
- <div>
205
- <Skeleton className="h-4 w-28 mb-3" />
206
- <Skeleton className="h-2 w-full rounded-full" />
207
- </div>
208
- </div>
199
+ <Skeleton className="h-10 w-full rounded-xl" />
209
200
  </Card>
210
201
  </div>
211
202
  );
@@ -295,36 +286,6 @@ export function ModelConfig() {
295
286
  </div>
296
287
  </div>
297
288
 
298
- {/* Parameters Section */}
299
- <div className="p-8 rounded-2xl bg-white border border-gray-200 shadow-card">
300
- <div className="flex items-center gap-4 mb-10">
301
- <div className="h-10 w-10 rounded-xl bg-primary flex items-center justify-center text-white">
302
- <Sliders className="h-5 w-5" />
303
- </div>
304
- <h3 className="text-lg font-bold text-gray-900">{t('generationParameters')}</h3>
305
- </div>
306
-
307
- <div className="grid grid-cols-1 gap-12">
308
- <div className="space-y-4">
309
- <div className="flex justify-between items-center mb-2">
310
- <Label className="text-xs font-semibold text-gray-500 uppercase tracking-wider">
311
- {maxTokensHint?.label ?? t('maxTokens')}
312
- </Label>
313
- <span className="text-sm font-semibold text-gray-900">{formatNumber(maxTokens)}</span>
314
- </div>
315
- <input
316
- type="range"
317
- min="1000"
318
- max="32000"
319
- step="1000"
320
- value={maxTokens}
321
- onChange={(e) => setMaxTokens(parseInt(e.target.value))}
322
- className="w-full h-1 bg-gray-200 rounded-full appearance-none cursor-pointer accent-primary"
323
- />
324
- </div>
325
- </div>
326
- </div>
327
-
328
289
  <div className="flex justify-end pt-4">
329
290
  <Button
330
291
  type="submit"
@@ -28,7 +28,6 @@ function createEmptyAgent(): AgentProfileView {
28
28
  default: false,
29
29
  workspace: '',
30
30
  model: '',
31
- maxTokens: undefined,
32
31
  contextTokens: undefined,
33
32
  maxToolIterations: undefined
34
33
  };
@@ -74,7 +73,6 @@ export function RuntimeConfig() {
74
73
  default: Boolean(agent.default),
75
74
  workspace: agent.workspace ?? '',
76
75
  model: agent.model ?? '',
77
- maxTokens: agent.maxTokens,
78
76
  contextTokens: agent.contextTokens,
79
77
  maxToolIterations: agent.maxToolIterations
80
78
  }))
@@ -143,9 +141,6 @@ export function RuntimeConfig() {
143
141
  if (agent.model?.trim()) {
144
142
  normalized.model = agent.model.trim();
145
143
  }
146
- if (typeof agent.maxTokens === 'number') {
147
- normalized.maxTokens = agent.maxTokens;
148
- }
149
144
  if (typeof agent.contextTokens === 'number') {
150
145
  normalized.contextTokens = Math.max(1000, agent.contextTokens);
151
146
  }
@@ -313,18 +308,7 @@ export function RuntimeConfig() {
313
308
  onChange={(event) => updateAgent(index, { model: event.target.value })}
314
309
  placeholder={t('modelOverridePlaceholder')}
315
310
  />
316
- <div className="grid grid-cols-1 md:grid-cols-3 gap-2">
317
- <Input
318
- type="number"
319
- min={1}
320
- value={agent.maxTokens ?? ''}
321
- onChange={(event) =>
322
- updateAgent(index, {
323
- maxTokens: parseOptionalInt(event.target.value)
324
- })
325
- }
326
- placeholder={t('maxTokensPlaceholder')}
327
- />
311
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-2">
328
312
  <Input
329
313
  type="number"
330
314
  min={1000}
package/src/lib/i18n.ts CHANGED
@@ -161,10 +161,9 @@ export const LABELS: Record<string, { zh: string; en: string }> = {
161
161
 
162
162
  // Model
163
163
  modelPageTitle: { zh: '模型配置', en: 'Model Configuration' },
164
- modelPageDescription: { zh: '配置默认 AI 模型和运行参数限制', en: 'Configure default AI model and runtime limits' },
164
+ modelPageDescription: { zh: '配置默认 AI 模型选择', en: 'Configure default AI model selection' },
165
165
  defaultModel: { zh: '默认模型', en: 'Default Model' },
166
166
  workspace: { zh: '工作空间', en: 'Workspace' },
167
- generationParameters: { zh: '生成参数', en: 'Generation Parameters' },
168
167
  modelName: { zh: '模型', en: 'Model' },
169
168
  modelPickerNoOptions: { zh: '暂无可选模型', en: 'No model options available' },
170
169
  modelPickerUseCustom: { zh: '使用自定义模型:{value}', en: 'Use custom model: {value}' },
@@ -172,7 +171,10 @@ export const LABELS: Record<string, { zh: string; en: string }> = {
172
171
  zh: '如果列表里没有目标模型,可直接输入自定义模型 ID。',
173
172
  en: 'If the model is not listed, type a custom model ID directly.'
174
173
  },
175
- maxTokens: { zh: '最大 Token 数', en: 'Max Tokens' },
174
+ modelIdentifierHelp: {
175
+ zh: 'Agent 默认模型标识,使用带 provider 前缀的格式。例如:openai/gpt-5.1、anthropic/claude-opus-4-1、deepseek/deepseek-chat、minimax/MiniMax-M2.5、openrouter/openai/gpt-5.3-codex。',
176
+ en: 'Default model identifier used by the agent. Use provider-prefixed format. Examples: openai/gpt-5.1 · anthropic/claude-opus-4-1 · deepseek/deepseek-chat · minimax/MiniMax-M2.5 · openrouter/openai/gpt-5.3-codex.'
177
+ },
176
178
  maxToolIterations: { zh: '最大工具迭代次数', en: 'Max Tool Iterations' },
177
179
  saveChanges: { zh: '保存变更', en: 'Save Changes' },
178
180
 
@@ -372,7 +374,6 @@ export const LABELS: Record<string, { zh: string; en: string }> = {
372
374
  agentIdPlaceholder: { zh: 'Agent ID(例如 engineer)', en: 'Agent ID (e.g. engineer)' },
373
375
  workspaceOverridePlaceholder: { zh: '工作空间覆盖(可选)', en: 'Workspace override (optional)' },
374
376
  modelOverridePlaceholder: { zh: '模型覆盖(可选)', en: 'Model override (optional)' },
375
- maxTokensPlaceholder: { zh: '最大 tokens', en: 'Max tokens' },
376
377
  contextTokensPlaceholder: { zh: '上下文 tokens', en: 'Context tokens' },
377
378
  maxToolsPlaceholder: { zh: '最大工具次数', en: 'Max tools' },
378
379
  defaultAgent: { zh: '默认 Agent', en: 'Default agent' },
@@ -1 +0,0 @@
1
- import{r as j,j as a,ac as Z,s as ee,af as F,K as ae,a1 as te,ag as se,ah as ne,ai as le,aj as re,a0 as oe,ak as ce,n as ie}from"./vendor-CHxMoJ93.js";import{u as $,a as q,b as K,k as me,l as pe,I as T}from"./useConfig-C9yQu_4f.js";import{B as E,P as de,a as be}from"./page-layout-COKsFqhi.js";import{L as ue}from"./label-Chdg0Pzh.js";import{S as xe}from"./switch-BVQzjvsB.js";import{t as e,c as D,h as ye,S as ge,a as he,b as fe,d as we,e as je}from"./index-CT15pXtn.js";import{C as ve,a as ke,L as H,d as J,S as z,b as Se,c as Ce}from"./logos-csBmIIFU.js";import{h as _}from"./config-hints-CApS3K_7.js";import{T as Ne}from"./tabs-custom-BYQWSGw3.js";function Pe({value:t,onChange:p,className:i,placeholder:c=""}){const[r,u]=j.useState(""),d=x=>{x.key==="Enter"&&r.trim()?(x.preventDefault(),p([...t,r.trim()]),u("")):x.key==="Backspace"&&!r&&t.length>0&&p(t.slice(0,-1))},g=x=>{p(t.filter((v,h)=>h!==x))};return a.jsxs("div",{className:D("flex flex-wrap gap-2 p-2 border rounded-md min-h-[42px]",i),children:[t.map((x,v)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-primary text-primary-foreground rounded text-sm",children:[x,a.jsx("button",{type:"button",onClick:()=>g(v),className:"hover:text-red-300 transition-colors",children:a.jsx(Z,{className:"h-3 w-3"})})]},v)),a.jsx("input",{type:"text",value:r,onChange:x=>u(x.target.value),onKeyDown:d,className:"flex-1 outline-none min-w-[100px] bg-transparent text-sm",placeholder:c||e("enterTag")})]})}function Y(t){var c,r;const p=ye();return((c=t.tutorialUrls)==null?void 0:c[p])||((r=t.tutorialUrls)==null?void 0:r.default)||t.tutorialUrl}const B=[{value:"pairing",label:"pairing"},{value:"allowlist",label:"allowlist"},{value:"open",label:"open"},{value:"disabled",label:"disabled"}],R=[{value:"open",label:"open"},{value:"allowlist",label:"allowlist"},{value:"disabled",label:"disabled"}],Ie=[{value:"off",label:"off"},{value:"partial",label:"partial"},{value:"block",label:"block"},{value:"progress",label:"progress"}],Fe=t=>t.includes("token")||t.includes("secret")||t.includes("password")?a.jsx(ae,{className:"h-3.5 w-3.5 text-gray-500"}):t.includes("url")||t.includes("host")?a.jsx(te,{className:"h-3.5 w-3.5 text-gray-500"}):t.includes("email")||t.includes("mail")?a.jsx(se,{className:"h-3.5 w-3.5 text-gray-500"}):t.includes("id")||t.includes("from")?a.jsx(ne,{className:"h-3.5 w-3.5 text-gray-500"}):t==="enabled"||t==="consentGranted"?a.jsx(le,{className:"h-3.5 w-3.5 text-gray-500"}):a.jsx(re,{className:"h-3.5 w-3.5 text-gray-500"});function G(){return{telegram:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"token",type:"password",label:e("botToken")},{name:"allowFrom",type:"tags",label:e("allowFrom")},{name:"proxy",type:"text",label:e("proxy")},{name:"accountId",type:"text",label:e("accountId")},{name:"dmPolicy",type:"select",label:e("dmPolicy"),options:B},{name:"groupPolicy",type:"select",label:e("groupPolicy"),options:R},{name:"groupAllowFrom",type:"tags",label:e("groupAllowFrom")},{name:"requireMention",type:"boolean",label:e("requireMention")},{name:"mentionPatterns",type:"tags",label:e("mentionPatterns")},{name:"groups",type:"json",label:e("groupRulesJson")}],discord:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"token",type:"password",label:e("botToken")},{name:"allowBots",type:"boolean",label:e("allowBotMessages")},{name:"allowFrom",type:"tags",label:e("allowFrom")},{name:"gatewayUrl",type:"text",label:e("gatewayUrl")},{name:"intents",type:"number",label:e("intents")},{name:"proxy",type:"text",label:e("proxy")},{name:"mediaMaxMb",type:"number",label:e("attachmentMaxSizeMb")},{name:"streaming",type:"select",label:e("streamingMode"),options:Ie},{name:"draftChunk",type:"json",label:e("draftChunkingJson")},{name:"textChunkLimit",type:"number",label:e("textChunkLimit")},{name:"accountId",type:"text",label:e("accountId")},{name:"dmPolicy",type:"select",label:e("dmPolicy"),options:B},{name:"groupPolicy",type:"select",label:e("groupPolicy"),options:R},{name:"groupAllowFrom",type:"tags",label:e("groupAllowFrom")},{name:"requireMention",type:"boolean",label:e("requireMention")},{name:"mentionPatterns",type:"tags",label:e("mentionPatterns")},{name:"groups",type:"json",label:e("groupRulesJson")}],whatsapp:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"bridgeUrl",type:"text",label:e("bridgeUrl")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],feishu:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"appId",type:"text",label:e("appId")},{name:"appSecret",type:"password",label:e("appSecret")},{name:"encryptKey",type:"password",label:e("encryptKey")},{name:"verificationToken",type:"password",label:e("verificationToken")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],dingtalk:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"clientId",type:"text",label:e("clientId")},{name:"clientSecret",type:"password",label:e("clientSecret")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],wecom:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"corpId",type:"text",label:e("corpId")},{name:"agentId",type:"text",label:e("agentId")},{name:"secret",type:"password",label:e("secret")},{name:"token",type:"password",label:e("token")},{name:"callbackPort",type:"number",label:e("callbackPort")},{name:"callbackPath",type:"text",label:e("callbackPath")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],slack:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"mode",type:"text",label:e("mode")},{name:"webhookPath",type:"text",label:e("webhookPath")},{name:"allowBots",type:"boolean",label:e("allowBotMessages")},{name:"botToken",type:"password",label:e("botToken")},{name:"appToken",type:"password",label:e("appToken")}],email:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"consentGranted",type:"boolean",label:e("consentGranted")},{name:"imapHost",type:"text",label:e("imapHost")},{name:"imapPort",type:"number",label:e("imapPort")},{name:"imapUsername",type:"text",label:e("imapUsername")},{name:"imapPassword",type:"password",label:e("imapPassword")},{name:"fromAddress",type:"email",label:e("fromAddress")}],mochat:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"baseUrl",type:"text",label:e("baseUrl")},{name:"clawToken",type:"password",label:e("clawToken")},{name:"agentUserId",type:"text",label:e("agentUserId")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],qq:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"appId",type:"text",label:e("appId")},{name:"secret",type:"password",label:e("appSecret")},{name:"markdownSupport",type:"boolean",label:e("markdownSupport")},{name:"allowFrom",type:"tags",label:e("allowFrom")}]}}function A(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function V(t,p){const i={...t};for(const[c,r]of Object.entries(p)){const u=i[c];if(A(u)&&A(r)){i[c]=V(u,r);continue}i[c]=r}return i}function Te(t,p){const i=t.split("."),c={};let r=c;for(let u=0;u<i.length-1;u+=1){const d=i[u];r[d]={},r=r[d]}return r[i[i.length-1]]=p,c}function De({channelName:t}){var U,O;const{data:p}=$(),{data:i}=q(),{data:c}=K(),r=me(),u=pe(),[d,g]=j.useState({}),[x,v]=j.useState({}),[h,f]=j.useState(null),k=t?p==null?void 0:p.channels[t]:null,w=t?G()[t]??[]:[],o=c==null?void 0:c.uiHints,m=t?`channels.${t}`:null,S=((U=c==null?void 0:c.actions)==null?void 0:U.filter(s=>s.scope===m))??[],C=t&&(((O=_(`channels.${t}`,o))==null?void 0:O.label)??t),P=i==null?void 0:i.channels.find(s=>s.name===t),I=P?Y(P):void 0;j.useEffect(()=>{if(k){g({...k});const s={};(t?G()[t]??[]:[]).filter(l=>l.type==="json").forEach(l=>{const y=k[l.name];s[l.name]=JSON.stringify(y??{},null,2)}),v(s)}else g({}),v({})},[k,t]);const N=(s,n)=>{g(l=>({...l,[s]:n}))},L=s=>{if(s.preventDefault(),!t)return;const n={...d};for(const l of w){if(l.type!=="password")continue;const y=n[l.name];(typeof y!="string"||y.length===0)&&delete n[l.name]}for(const l of w){if(l.type!=="json")continue;const y=x[l.name]??"";try{n[l.name]=y.trim()?JSON.parse(y):{}}catch{F.error(`${e("invalidJson")}: ${l.name}`);return}}r.mutate({channel:t,data:n})},Q=s=>{if(!s||!t)return;const n=s.channels;if(!A(n))return;const l=n[t];A(l)&&g(y=>V(y,l))},W=async s=>{if(!(!t||!m)){f(s.id);try{let n={...d};s.saveBeforeRun&&(n={...n,...s.savePatch??{}},g(n),await r.mutateAsync({channel:t,data:n}));const l=await u.mutateAsync({actionId:s.id,data:{scope:m,draftConfig:Te(m,n)}});Q(l.patch),l.ok?F.success(l.message||e("success")):F.error(l.message||e("error"))}catch(n){const l=n instanceof Error?n.message:String(n);F.error(`${e("error")}: ${l}`)}finally{f(null)}}};if(!t||!P||!k)return a.jsx("div",{className:ve,children:a.jsxs("div",{children:[a.jsx("h3",{className:"text-base font-semibold text-gray-900",children:e("channelsSelectTitle")}),a.jsx("p",{className:"mt-2 text-sm text-gray-500",children:e("channelsSelectDescription")})]})});const M=!!k.enabled;return a.jsxs("div",{className:ke,children:[a.jsx("div",{className:"border-b border-gray-100 px-6 py-5",children:a.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(H,{name:t,src:J(t),className:D("h-9 w-9 rounded-lg border",M?"border-primary/30 bg-white":"border-gray-200/70 bg-white"),imgClassName:"h-5 w-5 object-contain",fallback:a.jsx("span",{className:"text-sm font-semibold uppercase text-gray-500",children:t[0]})}),a.jsx("h3",{className:"truncate text-lg font-semibold text-gray-900 capitalize",children:C})]}),a.jsx("p",{className:"mt-2 text-sm text-gray-500",children:e("channelsFormDescription")}),I&&a.jsxs("a",{href:I,className:"mt-2 inline-flex items-center gap-1.5 text-xs text-primary transition-colors hover:text-primary-hover",children:[a.jsx(ee,{className:"h-3.5 w-3.5"}),e("channelsGuideTitle")]})]}),a.jsx(z,{status:M?"active":"inactive",label:M?e("statusActive"):e("statusInactive")})]})}),a.jsxs("form",{onSubmit:L,className:"flex min-h-0 flex-1 flex-col",children:[a.jsx("div",{className:"min-h-0 flex-1 space-y-6 overflow-y-auto px-6 py-5",children:w.map(s=>{const n=t?_(`channels.${t}.${s.name}`,o):void 0,l=(n==null?void 0:n.label)??s.label,y=n==null?void 0:n.placeholder;return a.jsxs("div",{className:"space-y-2.5",children:[a.jsxs(ue,{htmlFor:s.name,className:"flex items-center gap-2 text-sm font-medium text-gray-900",children:[Fe(s.name),l]}),s.type==="boolean"&&a.jsxs("div",{className:"flex items-center justify-between rounded-xl bg-gray-50 p-3",children:[a.jsx("span",{className:"text-sm text-gray-500",children:d[s.name]?e("enabled"):e("disabled")}),a.jsx(xe,{id:s.name,checked:d[s.name]||!1,onCheckedChange:b=>N(s.name,b),className:"data-[state=checked]:bg-emerald-500"})]}),(s.type==="text"||s.type==="email")&&a.jsx(T,{id:s.name,type:s.type,value:d[s.name]||"",onChange:b=>N(s.name,b.target.value),placeholder:y,className:"rounded-xl"}),s.type==="password"&&a.jsx(T,{id:s.name,type:"password",value:d[s.name]||"",onChange:b=>N(s.name,b.target.value),placeholder:y??e("leaveBlankToKeepUnchanged"),className:"rounded-xl"}),s.type==="number"&&a.jsx(T,{id:s.name,type:"number",value:d[s.name]||0,onChange:b=>N(s.name,parseInt(b.target.value,10)||0),placeholder:y,className:"rounded-xl"}),s.type==="tags"&&a.jsx(Pe,{value:d[s.name]||[],onChange:b=>N(s.name,b)}),s.type==="select"&&a.jsxs(ge,{value:d[s.name]||"",onValueChange:b=>N(s.name,b),children:[a.jsx(he,{className:"rounded-xl",children:a.jsx(fe,{})}),a.jsx(we,{children:(s.options??[]).map(b=>a.jsx(je,{value:b.value,children:b.label},b.value))})]}),s.type==="json"&&a.jsx("textarea",{id:s.name,value:x[s.name]??"{}",onChange:b=>v(X=>({...X,[s.name]:b.target.value})),className:"min-h-[120px] w-full resize-none rounded-lg border border-gray-200 bg-white px-3 py-2 text-xs font-mono"})]},s.name)})}),a.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 border-t border-gray-100 px-6 py-4",children:[a.jsx("div",{className:"flex flex-wrap items-center gap-2",children:S.filter(s=>s.trigger==="manual").map(s=>a.jsx(E,{type:"button",onClick:()=>W(s),disabled:r.isPending||!!h,variant:"secondary",children:h===s.id?e("connecting"):s.title},s.id))}),a.jsx(E,{type:"submit",disabled:r.isPending||!!h,children:r.isPending?e("saving"):e("save")})]})]})]})}const Ae={telegram:"channelDescTelegram",slack:"channelDescSlack",email:"channelDescEmail",webhook:"channelDescWebhook",discord:"channelDescDiscord",feishu:"channelDescFeishu"};function $e(){const{data:t}=$(),{data:p}=q(),{data:i}=K(),[c,r]=j.useState("enabled"),[u,d]=j.useState(),[g,x]=j.useState(""),v=i==null?void 0:i.uiHints,h=p==null?void 0:p.channels,f=t==null?void 0:t.channels,k=[{id:"enabled",label:e("channelsTabEnabled"),count:(h??[]).filter(o=>{var m;return(m=f==null?void 0:f[o.name])==null?void 0:m.enabled}).length},{id:"all",label:e("channelsTabAll"),count:(h??[]).length}],w=j.useMemo(()=>{const o=g.trim().toLowerCase();return(h??[]).filter(m=>{var C;const S=((C=f==null?void 0:f[m.name])==null?void 0:C.enabled)||!1;return c==="enabled"?S:!0}).filter(m=>o?(m.displayName||m.name).toLowerCase().includes(o)||m.name.toLowerCase().includes(o):!0)},[c,f,h,g]);return j.useEffect(()=>{if(w.length===0){d(void 0);return}w.some(m=>m.name===u)||d(w[0].name)},[w,u]),!t||!p?a.jsx("div",{className:"p-8 text-gray-400",children:e("channelsLoading")}):a.jsxs(de,{children:[a.jsx(be,{title:e("channelsPageTitle"),description:e("channelsPageDescription")}),a.jsxs("div",{className:Se,children:[a.jsxs("section",{className:Ce,children:[a.jsx("div",{className:"border-b border-gray-100 px-4 pt-4",children:a.jsx(Ne,{tabs:k,activeTab:c,onChange:r,className:"mb-0"})}),a.jsx("div",{className:"border-b border-gray-100 px-4 py-3",children:a.jsxs("div",{className:"relative",children:[a.jsx(oe,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400"}),a.jsx(T,{value:g,onChange:o=>x(o.target.value),placeholder:e("channelsFilterPlaceholder"),className:"h-10 rounded-xl pl-9"})]})}),a.jsxs("div",{className:"min-h-0 flex-1 space-y-2 overflow-y-auto p-3",children:[w.map(o=>{const m=t.channels[o.name],S=(m==null?void 0:m.enabled)||!1,C=_(`channels.${o.name}`,v),P=Y(o),I=(C==null?void 0:C.help)||e(Ae[o.name]||"channelDescriptionDefault"),N=u===o.name;return a.jsx("button",{type:"button",onClick:()=>d(o.name),className:D("w-full rounded-xl border p-2.5 text-left transition-all",N?"border-primary/30 bg-primary-50/40 shadow-sm":"border-gray-200/70 bg-white hover:border-gray-300 hover:bg-gray-50/70"),children:a.jsxs("div",{className:"flex items-start justify-between gap-3",children:[a.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[a.jsx(H,{name:o.name,src:J(o.name),className:D("h-10 w-10 rounded-lg border",S?"border-primary/30 bg-white":"border-gray-200/70 bg-white"),imgClassName:"h-5 w-5 object-contain",fallback:a.jsx("span",{className:"text-sm font-semibold uppercase text-gray-500",children:o.name[0]})}),a.jsxs("div",{className:"min-w-0",children:[a.jsx("p",{className:"truncate text-sm font-semibold text-gray-900",children:o.displayName||o.name}),a.jsx("p",{className:"line-clamp-1 text-[11px] text-gray-500",children:I})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[P&&a.jsx("a",{href:P,onClick:L=>L.stopPropagation(),className:"inline-flex h-7 w-7 items-center justify-center rounded-md text-gray-300 transition-colors hover:bg-gray-100/70 hover:text-gray-500",title:e("channelsGuideTitle"),children:a.jsx(ce,{className:"h-3.5 w-3.5"})}),a.jsx(z,{status:S?"active":"inactive",label:S?e("statusActive"):e("statusInactive"),className:"min-w-[56px] justify-center"})]})]})},o.name)}),w.length===0&&a.jsxs("div",{className:"flex h-full min-h-[220px] flex-col items-center justify-center rounded-xl border border-dashed border-gray-200 bg-gray-50/70 py-10 text-center",children:[a.jsx("div",{className:"mb-3 flex h-10 w-10 items-center justify-center rounded-lg bg-white",children:a.jsx(ie,{className:"h-5 w-5 text-gray-300"})}),a.jsx("p",{className:"text-sm font-medium text-gray-700",children:e("channelsNoMatch")})]})]})]}),a.jsx(De,{channelName:u})]})]})}export{$e as ChannelsList};
@@ -1 +0,0 @@
1
- import{r as s,j as t,s as oe,aS as ae,aT as ne,ac as P,a6 as ie,aU as le,aV as ce,a0 as de,ak as ue,aW as me}from"./vendor-CHxMoJ93.js";import{k as we,D as Y,t as i,c as S,l as xe}from"./index-CT15pXtn.js";function pe(){const{isOpen:T,mode:g,tabs:F,activeTabId:N,currentTab:x,currentUrl:l,navVersion:p,close:A,toggleMode:I,goBack:$,goForward:O,canGoBack:V,canGoForward:_,navigate:y,syncUrl:X,setActiveTab:G,closeTab:H,openNewTab:q}=we(),[k,j]=s.useState(""),[E,C]=s.useState(!1),[J,h]=s.useState(!1),[d,D]=s.useState(()=>({x:Math.max(40,window.innerWidth-520),y:80})),[n,B]=s.useState({w:480,h:600}),[L,K]=s.useState(420),u=s.useRef(null),m=s.useRef(null),b=s.useRef(null),z=s.useRef(null),U=s.useRef(p),a=(x==null?void 0:x.kind)==="docs";s.useEffect(()=>{if(!a){j("");return}try{const e=new URL(l);j(e.pathname)}catch{j(l)}},[l,N,a]),s.useEffect(()=>{var e;if(a){if(p!==U.current){U.current=p;return}if((e=z.current)!=null&&e.contentWindow)try{const r=new URL(l).pathname;z.current.contentWindow.postMessage({type:"docs-navigate",path:r},"*")}catch{}}},[l,p,a]),s.useEffect(()=>{g==="floating"&&D(e=>({x:Math.max(40,window.innerWidth-n.w-40),y:e.y}))},[g,n.w]),s.useEffect(()=>{const e=r=>{var o;a&&((o=r.data)==null?void 0:o.type)==="docs-route-change"&&typeof r.data.url=="string"&&X(r.data.url)};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[X,a]);const Q=s.useCallback(e=>{if(e.preventDefault(),!a)return;const r=k.trim();r&&(r.startsWith("/")?y(`${Y}${r}`):r.startsWith("http")?y(r):y(`${Y}/${r}`))},[k,y,a]),Z=s.useCallback(e=>{g==="floating"&&(C(!0),u.current={startX:e.clientX,startY:e.clientY,startPosX:d.x,startPosY:d.y})},[g,d]);s.useEffect(()=>{if(!E)return;const e=o=>{u.current&&D({x:u.current.startPosX+(o.clientX-u.current.startX),y:u.current.startPosY+(o.clientY-u.current.startY)})},r=()=>{C(!1),u.current=null};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",r),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",r)}},[E]);const M=s.useCallback(e=>{e.preventDefault(),e.stopPropagation(),h(!0);const r=e.currentTarget.dataset.axis;m.current={startX:e.clientX,startY:e.clientY,startW:n.w,startH:n.h};const o=w=>{m.current&&B(v=>({w:r==="y"?v.w:Math.max(360,m.current.startW+(w.clientX-m.current.startX)),h:r==="x"?v.h:Math.max(400,m.current.startH+(w.clientY-m.current.startY))}))},f=()=>{h(!1),m.current=null,window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",f)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",f)},[n]),ee=s.useCallback(e=>{e.preventDefault(),e.stopPropagation(),h(!0),b.current={startX:e.clientX,startW:L};const r=f=>{if(!b.current)return;const w=b.current.startX-f.clientX;K(Math.max(320,Math.min(860,b.current.startW+w)))},o=()=>{h(!1),b.current=null,window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",r),window.addEventListener("mouseup",o)},[L]),te=s.useCallback(e=>{e.preventDefault(),e.stopPropagation(),h(!0);const r=e.clientX,o=n.w,f=d.x,w=re=>{const se=r-re.clientX,W=Math.max(360,o+se);B(R=>({...R,w:W})),D(R=>({...R,x:f-(W-o)}))},v=()=>{h(!1),window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",v)};window.addEventListener("mousemove",w),window.addEventListener("mouseup",v)},[n.w,d.x]);if(!T)return null;const c=g==="docked";return t.jsxs("div",{className:S("flex flex-col bg-white overflow-hidden relative",c?"h-full border-l border-gray-200 shrink-0":"rounded-2xl shadow-2xl border border-gray-200"),style:c?{width:L}:{position:"fixed",left:d.x,top:d.y,width:n.w,height:n.h,zIndex:9999},children:[c&&t.jsx("div",{className:"absolute top-0 left-0 w-1.5 h-full cursor-ew-resize z-20 hover:bg-primary/10 transition-colors",onMouseDown:ee}),t.jsxs("div",{className:S("flex items-center justify-between px-4 py-2.5 bg-gray-50 border-b border-gray-200 shrink-0 select-none",!c&&"cursor-grab active:cursor-grabbing"),onMouseDown:c?void 0:Z,children:[t.jsxs("div",{className:"flex items-center gap-2.5 min-w-0",children:[t.jsx(oe,{className:"w-4 h-4 text-primary shrink-0"}),t.jsx("span",{className:"text-sm font-semibold text-gray-900 truncate",children:i("docBrowserTitle")})]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("button",{onClick:I,className:"hover:bg-gray-200 rounded-md p-1.5 text-gray-500 hover:text-gray-700 transition-colors",title:c?i("docBrowserFloatMode"):i("docBrowserDockMode"),children:c?t.jsx(ae,{className:"w-3.5 h-3.5"}):t.jsx(ne,{className:"w-3.5 h-3.5"})}),t.jsx("button",{onClick:A,className:"hover:bg-gray-200 rounded-md p-1.5 text-gray-500 hover:text-gray-700 transition-colors",title:i("docBrowserClose"),children:t.jsx(P,{className:"w-3.5 h-3.5"})})]})]}),t.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-2 bg-white border-b border-gray-100 overflow-x-auto custom-scrollbar",children:[F.map(e=>{const r=e.id===N;return t.jsxs("div",{className:S("inline-flex items-center gap-1 h-7 px-1.5 rounded-lg text-xs border max-w-[220px] shrink-0 transition-colors",r?"bg-blue-50 border-blue-300 text-blue-700":"bg-gray-50 border-gray-200 text-gray-600 hover:bg-gray-100"),children:[t.jsx("button",{type:"button",onClick:()=>G(e.id),className:"truncate text-left px-1",title:e.title,children:e.title||i("docBrowserTabUntitled")}),t.jsx("button",{type:"button",onClick:o=>{o.stopPropagation(),H(e.id)},className:"rounded p-0.5 hover:bg-black/10","aria-label":i("docBrowserCloseTab"),children:t.jsx(P,{className:"w-3 h-3"})})]},e.id)}),t.jsx("button",{onClick:()=>q(void 0,{kind:"docs",title:"Docs"}),className:"inline-flex items-center justify-center w-7 h-7 rounded-lg border border-gray-200 bg-white text-gray-600 hover:bg-gray-100 shrink-0",title:i("docBrowserNewTab"),children:t.jsx(ie,{className:"w-3.5 h-3.5"})})]}),a&&t.jsxs("div",{className:"flex items-center gap-2 px-3.5 py-2 bg-white border-b border-gray-100 shrink-0",children:[t.jsx("button",{onClick:$,disabled:!V,className:"p-1.5 rounded-md hover:bg-gray-100 disabled:opacity-30 disabled:cursor-not-allowed text-gray-600 transition-colors",children:t.jsx(le,{className:"w-4 h-4"})}),t.jsx("button",{onClick:O,disabled:!_,className:"p-1.5 rounded-md hover:bg-gray-100 disabled:opacity-30 disabled:cursor-not-allowed text-gray-600 transition-colors",children:t.jsx(ce,{className:"w-4 h-4"})}),t.jsxs("form",{onSubmit:Q,className:"flex-1 relative",children:[t.jsx(de,{className:"w-3.5 h-3.5 absolute left-3 top-1/2 -translate-y-1/2 text-gray-400"}),t.jsx("input",{type:"text",value:k,onChange:e=>j(e.target.value),placeholder:i("docBrowserSearchPlaceholder"),className:"w-full h-8 pl-8 pr-3 rounded-lg bg-gray-50 border border-gray-200 text-xs text-gray-700 focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/40 transition-colors placeholder:text-gray-400"})]})]}),t.jsxs("div",{className:"flex-1 relative overflow-hidden",children:[t.jsx("iframe",{ref:z,src:l,className:"absolute inset-0 w-full h-full border-0",title:(x==null?void 0:x.title)||"NextClaw Docs",sandbox:"allow-same-origin allow-scripts allow-popups allow-forms",allow:"clipboard-read; clipboard-write"},`${N}:${p}`),(J||E)&&t.jsx("div",{className:"absolute inset-0 z-10"})]}),a&&xe(l)&&t.jsx("div",{className:"flex items-center justify-between px-4 py-2 bg-gray-50 border-t border-gray-200 shrink-0",children:t.jsxs("a",{href:l,target:"_blank",rel:"noopener noreferrer","data-doc-external":!0,className:"flex items-center gap-1.5 text-xs text-primary hover:text-primary-hover font-medium transition-colors",children:[i("docBrowserOpenExternal"),t.jsx(ue,{className:"w-3 h-3"})]})}),!c&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"absolute top-0 left-0 w-1.5 h-full cursor-ew-resize z-20 hover:bg-primary/10 transition-colors",onMouseDown:te}),t.jsx("div",{className:"absolute top-0 right-0 w-1.5 h-full cursor-ew-resize z-20 hover:bg-primary/10 transition-colors",onMouseDown:M,"data-axis":"x"}),t.jsx("div",{className:"absolute bottom-0 left-0 h-1.5 w-full cursor-ns-resize z-20 hover:bg-primary/10 transition-colors",onMouseDown:M,"data-axis":"y"}),t.jsx("div",{className:"absolute bottom-0 right-0 w-4 h-4 cursor-se-resize z-30 flex items-center justify-center text-gray-300 hover:text-gray-500 transition-colors",onMouseDown:M,children:t.jsx(me,{className:"w-3 h-3 rotate-[-45deg]"})})]})]})}export{pe as DocBrowser};
@@ -1 +0,0 @@
1
- import{j as e,r as c,F as ee,g as J,m as se,s as te,J as ae,O as re,U as ne}from"./vendor-CHxMoJ93.js";import{P as le,a as oe,B as ie}from"./page-layout-COKsFqhi.js";import{C as K}from"./card-AxFsy7YF.js";import{I as Y,u as ce,a as de,b as me,c as xe}from"./useConfig-C9yQu_4f.js";import{L as $}from"./label-Chdg0Pzh.js";import{c as B,t as d,S as ue,a as he,b as fe,d as pe,e as ge,D as Ne,f as je}from"./index-CT15pXtn.js";import{h as A}from"./config-hints-CApS3K_7.js";function u({className:a,...n}){return e.jsx("div",{className:B("animate-pulse rounded-md bg-slate-200",a),...n})}function ye(a){const n=new Set;for(const r of a){const l=r.trim();l.length>0&&n.add(l)}return[...n]}function we({id:a,value:n,onChange:r,options:l,placeholder:m,className:N,inputClassName:x,emptyText:C,createText:b,maxItems:S=Number.POSITIVE_INFINITY,onEnter:k}){const[v,h]=c.useState(!1),j=c.useMemo(()=>ye(l),[l]),i=n.trim().toLowerCase(),f=c.useMemo(()=>{const t=j.map((o,y)=>({option:o,index:y}));i.length>0&&t.sort((o,y)=>{const w=o.option.toLowerCase(),M=y.option.toLowerCase(),T=w===i?0:w.startsWith(i)?1:w.includes(i)?2:3,I=M===i?0:M.startsWith(i)?1:M.includes(i)?2:3;return T!==I?T-I:o.index-y.index});const g=t.map(o=>o.option);return Number.isFinite(S)?g.slice(0,Math.max(1,S)):g},[j,i,S]),P=n.trim().length>0&&j.some(t=>t===n.trim());return e.jsxs("div",{className:B("relative",N),onBlur:()=>{setTimeout(()=>h(!1),120)},children:[e.jsx(Y,{id:a,value:n,onFocus:()=>h(!0),onChange:t=>{r(t.target.value),v||h(!0)},onKeyDown:t=>{t.key==="Enter"&&(k&&(t.preventDefault(),k()),h(!1))},placeholder:m,className:B("pr-10",x)}),e.jsx("button",{type:"button",onMouseDown:t=>t.preventDefault(),onClick:()=>h(t=>!t),className:"absolute inset-y-0 right-0 inline-flex w-10 items-center justify-center text-gray-400 hover:text-gray-600","aria-label":"toggle model options",children:e.jsx(ee,{className:"h-4 w-4"})}),v&&e.jsx("div",{className:"absolute z-20 mt-1 w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-lg",children:e.jsxs("div",{className:"max-h-60 overflow-y-auto py-1",children:[!P&&n.trim().length>0&&e.jsxs("button",{type:"button",onMouseDown:t=>t.preventDefault(),onClick:()=>{r(n.trim()),h(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-gray-50",children:[e.jsx(J,{className:"h-4 w-4 text-transparent"}),e.jsx("span",{className:"truncate text-gray-700",children:b?b.replace("{value}",n.trim()):n.trim()})]}),f.map(t=>e.jsxs("button",{type:"button",onMouseDown:g=>g.preventDefault(),onClick:()=>{r(t),h(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-gray-50",children:[e.jsx(J,{className:B("h-4 w-4",t===n.trim()?"text-primary":"text-transparent")}),e.jsx("span",{className:"truncate text-gray-700",children:t})]},t)),f.length===0&&n.trim().length===0&&e.jsx("div",{className:"px-3 py-2 text-sm text-gray-500",children:C??"No models available"})]})})]})}function z(a){if(!a||a.length===0)return[];const n=new Set;for(const r of a){const l=r.trim();l&&n.add(l)}return[...n]}function be(a,n){const r=a.trim(),l=n.trim();if(!r||!l)return r;const m=`${l}/`;return r.startsWith(m)?r.slice(m.length):r}function D(a,n){let r=a.trim();if(!r)return"";for(const l of n)r=be(r,l);return r.trim()}function ve(a,n){const r=a.trim();if(!r)return null;let l=null;for(const m of n)for(const N of m.aliases){const x=N.trim();x&&(r===x||r.startsWith(`${x}/`))&&(!l||x.length>l.score)&&(l={name:m.name,score:x.length})}return(l==null?void 0:l.name)??null}function Ie(){const{data:a,isLoading:n}=ce(),{data:r}=de(),{data:l}=me(),m=xe(),[N,x]=c.useState(""),[C,b]=c.useState(""),[S,k]=c.useState(""),[v,h]=c.useState(8192),j=l==null?void 0:l.uiHints,i=A("agents.defaults.model",j),f=A("agents.defaults.workspace",j),P=A("agents.defaults.maxTokens",j),t=c.useMemo(()=>((r==null?void 0:r.providers)??[]).map(s=>{var R,V,_,q,G;const L=(s.modelPrefix||s.name||"").trim(),p=z([s.modelPrefix||"",s.name||""]),U=z((s.defaultModels??[]).map(W=>D(W,p))),O=z((((V=(R=a==null?void 0:a.providers)==null?void 0:R[s.name])==null?void 0:V.models)??[]).map(W=>D(W,p))),F=z([...U,...O]),E=(G=(q=(_=a==null?void 0:a.providers)==null?void 0:_[s.name])==null?void 0:q.displayName)==null?void 0:G.trim();return{name:s.name,displayName:E||s.displayName||s.name,prefix:L,aliases:p,models:F}}),[r,a]),g=c.useMemo(()=>new Map(t.map(s=>[s.name,s])),[t]),o=g.get(N)??t[0],y=(o==null?void 0:o.name)??"",w=c.useMemo(()=>(o==null?void 0:o.aliases)??[],[o]),M=c.useMemo(()=>(o==null?void 0:o.models)??[],[o]);c.useEffect(()=>{N||t.length===0||x(t[0].name)},[N,t]),c.useEffect(()=>{var O,F,E;if(!((O=a==null?void 0:a.agents)!=null&&O.defaults))return;const s=(a.agents.defaults.model||"").trim(),p=ve(s,t)??((F=t[0])==null?void 0:F.name)??"",U=((E=g.get(p))==null?void 0:E.aliases)??[];x(p),b(D(s,U)),k(a.agents.defaults.workspace||""),h(a.agents.defaults.maxTokens||8192)},[a,t,g]);const T=c.useMemo(()=>{const s=new Set;for(const L of M){const p=L.trim();p&&s.add(p)}return[...s]},[M]),I=c.useMemo(()=>{const s=D(C,w);return s?!o||!o.prefix?s:`${o.prefix}/${s}`:""},[C,o,w]),Q=(i==null?void 0:i.help)??"",X=s=>{x(s),b("")},Z=s=>{b(D(s,w))},H=s=>{s.preventDefault(),m.mutate({model:I,maxTokens:v})};return n?e.jsxs("div",{className:"max-w-2xl space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{className:"h-8 w-32"}),e.jsx(u,{className:"h-4 w-48"})]}),e.jsxs(K,{className:"rounded-2xl border-gray-200 p-6",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[e.jsx(u,{className:"h-12 w-12 rounded-xl"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{className:"h-5 w-24"}),e.jsx(u,{className:"h-3 w-32"})]})]}),e.jsx(u,{className:"h-4 w-20 mb-2"}),e.jsx(u,{className:"h-10 w-full rounded-xl"})]}),e.jsxs(K,{className:"rounded-2xl border-gray-200 p-6",children:[e.jsx(u,{className:"h-5 w-24 mb-2"}),e.jsx(u,{className:"h-3 w-40 mb-6"}),e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{children:[e.jsx(u,{className:"h-4 w-28 mb-3"}),e.jsx(u,{className:"h-2 w-full rounded-full"})]})})]})]}):e.jsxs(le,{children:[e.jsx(oe,{title:d("modelPageTitle"),description:d("modelPageDescription")}),e.jsxs("form",{onSubmit:H,className:"space-y-8",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"p-8 rounded-2xl bg-white border border-gray-200 shadow-card",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-8",children:[e.jsx("div",{className:"h-10 w-10 rounded-xl bg-primary flex items-center justify-center text-white",children:e.jsx(se,{className:"h-5 w-5"})}),e.jsx("h3",{className:"text-lg font-bold text-gray-900",children:d("defaultModel")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx($,{htmlFor:"model",className:"text-xs font-semibold text-gray-500 uppercase tracking-wider",children:(i==null?void 0:i.label)??"Model Name"}),e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[e.jsx("div",{className:"sm:w-[38%] sm:min-w-[170px]",children:e.jsxs(ue,{value:y,onValueChange:X,children:[e.jsx(he,{className:"h-10 w-full rounded-xl",children:e.jsx(fe,{placeholder:d("providersSelectPlaceholder")})}),e.jsx(pe,{children:t.map(s=>e.jsx(ge,{value:s.name,children:s.displayName},s.name))})]})}),e.jsx("span",{className:"hidden h-10 items-center justify-center leading-none text-lg font-semibold text-gray-300 sm:inline-flex",children:"/"}),e.jsx(we,{id:"model",value:C,onChange:Z,options:T,placeholder:(i==null?void 0:i.placeholder)??"gpt-5.1",className:"sm:flex-1",inputClassName:"h-10 rounded-xl",emptyText:d("modelPickerNoOptions"),createText:d("modelPickerUseCustom")},y)]}),e.jsx("p",{className:"text-xs text-gray-400",children:Q}),e.jsx("p",{className:"text-xs text-gray-500",children:d("modelInputCustomHint")}),e.jsxs("a",{href:`${Ne}/guide/model-selection`,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:text-primary-hover transition-colors",children:[e.jsx(te,{className:"h-3.5 w-3.5"}),d("channelsGuideTitle")]})]})]}),e.jsxs("div",{className:"p-8 rounded-2xl bg-white border border-gray-200 shadow-card",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-8",children:[e.jsx("div",{className:"h-10 w-10 rounded-xl bg-primary flex items-center justify-center text-white",children:e.jsx(ae,{className:"h-5 w-5"})}),e.jsx("h3",{className:"text-lg font-bold text-gray-900",children:d("workspace")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx($,{htmlFor:"workspace",className:"text-xs font-semibold text-gray-500 uppercase tracking-wider",children:(f==null?void 0:f.label)??"Default Path"}),e.jsx(Y,{id:"workspace",value:S,onChange:s=>k(s.target.value),placeholder:(f==null?void 0:f.placeholder)??"/path/to/workspace",className:"rounded-xl"})]})]})]}),e.jsxs("div",{className:"p-8 rounded-2xl bg-white border border-gray-200 shadow-card",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-10",children:[e.jsx("div",{className:"h-10 w-10 rounded-xl bg-primary flex items-center justify-center text-white",children:e.jsx(re,{className:"h-5 w-5"})}),e.jsx("h3",{className:"text-lg font-bold text-gray-900",children:d("generationParameters")})]}),e.jsx("div",{className:"grid grid-cols-1 gap-12",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsx($,{className:"text-xs font-semibold text-gray-500 uppercase tracking-wider",children:(P==null?void 0:P.label)??d("maxTokens")}),e.jsx("span",{className:"text-sm font-semibold text-gray-900",children:je(v)})]}),e.jsx("input",{type:"range",min:"1000",max:"32000",step:"1000",value:v,onChange:s=>h(parseInt(s.target.value)),className:"w-full h-1 bg-gray-200 rounded-full appearance-none cursor-pointer accent-primary"})]})})]}),e.jsx("div",{className:"flex justify-end pt-4",children:e.jsx(ie,{type:"submit",disabled:m.isPending,size:"lg",children:m.isPending?e.jsx(ne,{className:"h-5 w-5 animate-spin"}):d("saveChanges")})})]})]})}export{Ie as ModelConfig};
@@ -1 +0,0 @@
1
- import{r as x,j as e,aa as Ce,ab as Pe,a8 as pe,a6 as ie,ac as xe,ad as Se,C as De,ae as Ee,af as re,a0 as Me,K as Le}from"./vendor-CHxMoJ93.js";import{I as K,u as ye,a as fe,b as ge,g as ke,h as Be,i as Te,j as Ke}from"./useConfig-C9yQu_4f.js";import{B as T,P as Ie,a as $e}from"./page-layout-COKsFqhi.js";import{L as z}from"./label-Chdg0Pzh.js";import{c as X,t,S as Fe,a as _e,b as Oe,d as Re,e as ze}from"./index-CT15pXtn.js";import{C as He,a as We,S as je,b as Ge,c as Ve,L as Ue,g as qe}from"./logos-csBmIIFU.js";import{h as q}from"./config-hints-CApS3K_7.js";import{T as Qe}from"./tabs-custom-BYQWSGw3.js";function Xe({maskedValue:s,isSet:a,className:r,value:i,onChange:y,placeholder:b,...f}){const[c,u]=x.useState(!1),[g,p]=x.useState(!1),A=typeof i=="string"&&i.length>0,S=a&&!A&&!g;return e.jsxs("div",{className:"relative",children:[S?e.jsx("div",{onClick:()=>p(!0),className:X("flex h-9 w-full rounded-xl border border-gray-200/80 bg-white px-3.5 py-2 text-sm text-gray-500 cursor-text items-center pr-12",r),children:"••••••••••••"}):e.jsx(K,{type:c?"text":"password",className:X("pr-12",r),value:i,onChange:y,onBlur:()=>{A||p(!1)},placeholder:b,autoFocus:g,...f}),e.jsx("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 flex gap-1",children:(a||A)&&e.jsx(T,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>u(!c),children:c?e.jsx(Ce,{className:"h-4 w-4"}):e.jsx(Pe,{className:"h-4 w-4"})})})]})}function Ye({value:s,onChange:a,className:r}){const i=s?Object.entries(s):[],y=(c,u,g)=>{const p=[...i];p[c]=[u,g],a(Object.fromEntries(p))},b=()=>{a({...s,"":""})},f=c=>{const u=i.filter((g,p)=>p!==c);a(Object.fromEntries(u))};return e.jsxs("div",{className:X("space-y-2",r),children:[i.map(([c,u],g)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(K,{type:"text",value:c,onChange:p=>y(g,p.target.value,u),placeholder:t("headerName"),className:"flex-1"}),e.jsx(K,{type:"text",value:u,onChange:p=>y(g,c,p.target.value),placeholder:t("headerValue"),className:"flex-1"}),e.jsx(T,{type:"button",variant:"ghost",size:"icon",onClick:()=>f(g),children:e.jsx(pe,{className:"h-4 w-4 text-red-500"})})]},g)),e.jsxs(T,{type:"button",variant:"outline",size:"sm",onClick:b,children:[e.jsx(ie,{className:"h-4 w-4 mr-2"}),t("add")]})]})}function Q(s){if(!s)return null;const a=Object.entries(s).map(([r,i])=>[r.trim(),i]).filter(([r])=>r.length>0);return a.length===0?null:Object.fromEntries(a)}function he(s,a){const r=Q(s),i=Q(a);if(r===null&&i===null)return!0;if(!r||!i)return!1;const y=Object.entries(r).sort(([f],[c])=>f.localeCompare(c)),b=Object.entries(i).sort(([f],[c])=>f.localeCompare(c));return y.length!==b.length?!1:y.every(([f,c],u)=>f===b[u][0]&&c===b[u][1])}function ne(s){if(!s||s.length===0)return[];const a=new Set;for(const r of s){const i=r.trim();i&&a.add(i)}return[...a]}function Je(s,a){const r=s.trim();if(!r||!a.trim())return r;const i=`${a.trim()}/`;return r.startsWith(i)?r.slice(i.length):r}function J(s,a){let r=s.trim();if(!r)return"";for(const i of a){const y=i.trim();y&&(r=Je(r,y))}return r.trim()}function le(s,a){return s.length!==a.length?!1:s.every((r,i)=>r===a[i])}function Ze(s,a){const r=[...s];for(const i of a)r.includes(i)||r.push(i);return r}function es(s,a){return a.length===0?s:a.every(i=>!s.includes(i))?Ze(s,a):a}function ss(s,a){return le(s,a)?[]:s}function ts({providerName:s,onProviderDeleted:a}){const{data:r}=ye(),{data:i}=fe(),{data:y}=ge(),b=ke(),f=Be(),c=Te(),[u,g]=x.useState(""),[p,A]=x.useState(""),[S,H]=x.useState(null),[L,C]=x.useState("auto"),[w,I]=x.useState([]),[d,m]=x.useState(""),[N,v]=x.useState(""),[D,$]=x.useState(!1),[k,B]=x.useState(!1),l=i==null?void 0:i.providers.find(n=>n.name===s),o=s?r==null?void 0:r.providers[s]:null,Y=y==null?void 0:y.uiHints,F=!!(l!=null&&l.isCustom),_=s?q(`providers.${s}.apiKey`,Y):void 0,E=s?q(`providers.${s}.apiBase`,Y):void 0,Z=s?q(`providers.${s}.extraHeaders`,Y):void 0,ee=s?q(`providers.${s}.wireApi`,Y):void 0,oe=(l==null?void 0:l.displayName)||s||"",O=((o==null?void 0:o.displayName)||"").trim()||oe,be=N.trim()||O||s||t("providersSelectPlaceholder"),ce=(l==null?void 0:l.modelPrefix)||s||"",R=x.useMemo(()=>ne([ce,s||""]),[ce,s]),se=(l==null?void 0:l.defaultApiBase)||"",W=(o==null?void 0:o.apiBase)||se,te=Q((o==null?void 0:o.extraHeaders)||null),G=(o==null?void 0:o.wireApi)||(l==null?void 0:l.defaultWireApi)||"auto",ae=x.useMemo(()=>ne(((l==null?void 0:l.defaultModels)??[]).map(n=>J(n,R))),[l==null?void 0:l.defaultModels,R]),de=x.useMemo(()=>ne(((o==null?void 0:o.models)??[]).map(n=>J(n,R))),[o==null?void 0:o.models,R]),V=x.useMemo(()=>es(ae,de),[ae,de]);s==="minimax"?t("providerApiBaseHelpMinimax"):E!=null&&E.help||t("providerApiBaseHelp"),x.useEffect(()=>{if(!s){g(""),A(""),H(null),C("auto"),I([]),m(""),v("");return}g(""),A(W),H((o==null?void 0:o.extraHeaders)||null),C(G),I(V),m(""),v(O)},[s,W,o==null?void 0:o.extraHeaders,G,V,O]);const me=x.useMemo(()=>{if(!s)return!1;const n=u.trim().length>0,j=p.trim()!==W.trim(),P=!he(S,te),h=l!=null&&l.supportsWireApi?L!==G:!1,M=!le(w,V),U=F?N.trim()!==O:!1;return n||j||P||h||M||U},[s,F,N,O,u,p,W,S,te,l==null?void 0:l.supportsWireApi,L,G,w,V]),ue=()=>{const n=J(d,R);if(n){if(w.includes(n)){m("");return}I(j=>[...j,n]),m("")}},Ne=n=>{if(n.preventDefault(),!s)return;const j={},P=u.trim(),h=p.trim(),M=Q(S),U=N.trim();F&&U!==O&&(j.displayName=U.length>0?U:null),P.length>0&&(j.apiKey=P),h!==W.trim()&&(j.apiBase=h.length>0&&h!==se?h:null),he(M,te)||(j.extraHeaders=M),l!=null&&l.supportsWireApi&&L!==G&&(j.wireApi=L),le(w,V)||(j.models=ss(w,ae)),b.mutate({provider:s,data:j})},ve=async()=>{if(!s)return;const n=w.find(h=>h.trim().length>0)??"",j=J(n,R),P={apiBase:p.trim(),extraHeaders:Q(S),model:j||null};u.trim().length>0&&(P.apiKey=u.trim()),l!=null&&l.supportsWireApi&&(P.wireApi=L);try{const h=await c.mutateAsync({provider:s,data:P});if(h.success){re.success(`${t("providerTestConnectionSuccess")} (${h.latencyMs}ms)`);return}const M=[`provider=${h.provider}`,`latency=${h.latencyMs}ms`];h.model&&M.push(`model=${h.model}`),re.error(`${t("providerTestConnectionFailed")}: ${h.message} | ${M.join(" | ")}`)}catch(h){const M=h instanceof Error?h.message:String(h);re.error(`${t("providerTestConnectionFailed")}: ${M}`)}},we=async()=>{if(!(!s||!F||!window.confirm(t("providerDeleteConfirm"))))try{await f.mutateAsync({provider:s}),a==null||a(s)}catch{}};if(!s||!l||!o)return e.jsx("div",{className:He,children:e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-gray-900",children:t("providersSelectTitle")}),e.jsx("p",{className:"mt-2 text-sm text-gray-500",children:t("providersSelectDescription")})]})});const Ae=o.apiKeySet?t("statusReady"):t("statusSetup");return e.jsxs("div",{className:We,children:[e.jsx("div",{className:"border-b border-gray-100 px-6 py-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"truncate text-lg font-semibold text-gray-900",children:be}),e.jsxs("div",{className:"flex items-center gap-3",children:[F&&e.jsx("button",{type:"button",onClick:we,disabled:f.isPending,className:"text-gray-400 hover:text-red-500 transition-colors",title:t("providerDelete"),children:e.jsx(pe,{className:"h-4 w-4"})}),e.jsx(je,{status:o.apiKeySet?"ready":"setup",label:Ae})]})]})}),e.jsxs("form",{onSubmit:Ne,className:"flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto px-6 py-5",children:[F&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{htmlFor:"providerDisplayName",className:"text-sm font-medium text-gray-900",children:t("providerDisplayName")}),e.jsx(K,{id:"providerDisplayName",type:"text",value:N,onChange:n=>v(n.target.value),placeholder:oe||t("providerDisplayNamePlaceholder"),className:"rounded-xl"}),e.jsx("p",{className:"text-xs text-gray-500",children:t("providerDisplayNameHelpShort")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{htmlFor:"apiKey",className:"text-sm font-medium text-gray-900",children:(_==null?void 0:_.label)??t("apiKey")}),e.jsx(Xe,{id:"apiKey",value:u,isSet:o.apiKeySet,onChange:n=>g(n.target.value),placeholder:(_==null?void 0:_.placeholder)??t("enterApiKey"),className:"rounded-xl"}),e.jsx("p",{className:"text-xs text-gray-500",children:t("leaveBlankToKeepUnchanged")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{htmlFor:"apiBase",className:"text-sm font-medium text-gray-900",children:(E==null?void 0:E.label)??t("apiBase")}),e.jsx(K,{id:"apiBase",type:"text",value:p,onChange:n=>A(n.target.value),placeholder:se||(E==null?void 0:E.placeholder)||"https://api.example.com",className:"rounded-xl"}),e.jsx("p",{className:"text-xs text-gray-500",children:t("providerApiBaseHelpShort")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(z,{className:"text-sm font-medium text-gray-900",children:t("providerModelsTitle")}),!k&&e.jsxs("button",{type:"button",onClick:()=>B(!0),className:"text-xs text-primary hover:text-primary/80 font-medium flex items-center gap-1",children:[e.jsx(ie,{className:"h-3 w-3"}),t("providerAddModel")]})]}),k&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{value:d,onChange:n=>m(n.target.value),onKeyDown:n=>{n.key==="Enter"&&(n.preventDefault(),ue()),n.key==="Escape"&&(B(!1),m(""))},placeholder:t("providerModelInputPlaceholder"),className:"flex-1 rounded-xl",autoFocus:!0}),e.jsx(T,{type:"button",size:"sm",onClick:ue,disabled:d.trim().length===0,children:t("add")}),e.jsx(T,{type:"button",size:"sm",variant:"ghost",onClick:()=>{B(!1),m("")},children:e.jsx(xe,{className:"h-4 w-4"})})]}),w.length===0?e.jsxs("div",{className:"rounded-xl border border-dashed border-gray-200 bg-gray-50 px-4 py-6 text-center",children:[e.jsx("p",{className:"text-sm text-gray-500",children:t("providerModelsEmptyShort")}),!k&&e.jsx("button",{type:"button",onClick:()=>B(!0),className:"mt-2 text-sm text-primary hover:text-primary/80 font-medium",children:t("providerAddFirstModel")})]}):e.jsx("div",{className:"flex flex-wrap gap-2",children:w.map(n=>e.jsxs("div",{className:"group inline-flex max-w-full items-center gap-1 rounded-full border border-gray-200 bg-white px-3 py-1.5",children:[e.jsx("span",{className:"max-w-[180px] truncate text-sm text-gray-800 sm:max-w-[240px]",children:n}),e.jsx("button",{type:"button",onClick:()=>I(j=>j.filter(P=>P!==n)),className:"inline-flex h-5 w-5 items-center justify-center rounded-full text-gray-400 transition-opacity hover:bg-gray-100 hover:text-gray-600 opacity-100 md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100","aria-label":t("remove"),children:e.jsx(xe,{className:"h-3 w-3"})})]},n))})]}),e.jsxs("div",{className:"border-t border-gray-100 pt-4",children:[e.jsxs("button",{type:"button",onClick:()=>$(!D),className:"flex w-full items-center justify-between text-sm text-gray-600 hover:text-gray-900 transition-colors",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(Se,{className:"h-3.5 w-3.5"}),t("providerAdvancedSettings")]}),e.jsx(De,{className:`h-4 w-4 transition-transform ${D?"rotate-180":""}`})]}),D&&e.jsxs("div",{className:"mt-4 space-y-5",children:[l.supportsWireApi&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{htmlFor:"wireApi",className:"text-sm font-medium text-gray-900",children:(ee==null?void 0:ee.label)??t("wireApi")}),e.jsxs(Fe,{value:L,onValueChange:n=>C(n),children:[e.jsx(_e,{className:"rounded-xl",children:e.jsx(Oe,{})}),e.jsx(Re,{children:(l.wireApiOptions||["auto","chat","responses"]).map(n=>e.jsx(ze,{value:n,children:n==="chat"?t("wireApiChat"):n==="responses"?t("wireApiResponses"):t("wireApiAuto")},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{className:"text-sm font-medium text-gray-900",children:(Z==null?void 0:Z.label)??t("extraHeaders")}),e.jsx(Ye,{value:S,onChange:H}),e.jsx("p",{className:"text-xs text-gray-500",children:t("providerExtraHeadersHelpShort")})]})]})]})]}),e.jsxs("div",{className:"flex items-center justify-between border-t border-gray-100 px-6 py-4",children:[e.jsxs(T,{type:"button",variant:"outline",size:"sm",onClick:ve,disabled:c.isPending,children:[e.jsx(Ee,{className:"mr-1.5 h-4 w-4"}),c.isPending?t("providerTestingConnection"):t("providerTestConnection")]}),e.jsx(T,{type:"submit",disabled:b.isPending||!me,children:b.isPending?t("saving"):me?t("save"):t("unchanged")})]})]})]})}function as(s){if(!s)return null;try{const a=new URL(s),r=a.pathname&&a.pathname!=="/"?a.pathname:"";return`${a.host}${r}`}catch{return s.replace(/^https?:\/\//,"")}}function xs(){const{data:s}=ye(),{data:a}=fe(),{data:r}=ge(),i=Ke(),[y,b]=x.useState("installed"),[f,c]=x.useState(),[u,g]=x.useState(""),p=r==null?void 0:r.uiHints,A=(a==null?void 0:a.providers)??[],S=(s==null?void 0:s.providers)??{},H=A.filter(d=>{var m;return(m=S[d.name])==null?void 0:m.apiKeySet}).length,L=[{id:"installed",label:t("providersTabConfigured"),count:H},{id:"all",label:t("providersTabAll"),count:A.length}],C=x.useMemo(()=>{const d=(a==null?void 0:a.providers)??[],m=(s==null?void 0:s.providers)??{},N=u.trim().toLowerCase();return d.filter(v=>{var D;return y==="installed"?!!((D=m[v.name])!=null&&D.apiKeySet):!0}).filter(v=>{var k,B;return N?(((B=(k=m[v.name])==null?void 0:k.displayName)==null?void 0:B.trim())||v.displayName||v.name).toLowerCase().includes(N)||v.name.toLowerCase().includes(N):!0})},[a,s,y,u]);x.useEffect(()=>{if(C.length===0){c(void 0);return}C.some(m=>m.name===f)||c(C[0].name)},[C,f]);const w=f,I=async()=>{try{const d=await i.mutateAsync({data:{}});b("all"),g(""),c(d.name)}catch{}};return!s||!a?e.jsx("div",{className:"p-8",children:t("providersLoading")}):e.jsxs(Ie,{children:[e.jsx($e,{title:t("providersPageTitle"),description:t("providersPageDescription")}),e.jsxs("div",{className:Ge,children:[e.jsxs("section",{className:Ve,children:[e.jsxs("div",{className:"border-b border-gray-100 px-4 pt-4 pb-3 space-y-3",children:[e.jsx(Qe,{tabs:L,activeTab:y,onChange:b,className:"mb-0"}),e.jsxs(T,{type:"button",variant:"outline",className:"w-full justify-center",onClick:I,disabled:i.isPending,children:[e.jsx(ie,{className:"mr-2 h-4 w-4"}),i.isPending?t("saving"):t("providerAddCustom")]})]}),e.jsx("div",{className:"border-b border-gray-100 px-4 py-3",children:e.jsxs("div",{className:"relative",children:[e.jsx(Me,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400"}),e.jsx(K,{value:u,onChange:d=>g(d.target.value),placeholder:t("providersFilterPlaceholder"),className:"h-10 rounded-xl pl-9"})]})}),e.jsxs("div",{className:"min-h-0 flex-1 space-y-2 overflow-y-auto p-3",children:[C.map(d=>{var o;const m=s.providers[d.name],N=!!(m!=null&&m.apiKeySet),v=w===d.name,D=((o=m==null?void 0:m.displayName)==null?void 0:o.trim())||d.displayName||d.name,$=q(`providers.${d.name}`,p),k=(m==null?void 0:m.apiBase)||d.defaultApiBase||"",l=as(k)||($==null?void 0:$.help)||t("providersDefaultDescription");return e.jsx("button",{type:"button",onClick:()=>c(d.name),className:X("w-full rounded-xl border p-2.5 text-left transition-all",v?"border-primary/30 bg-primary-50/40 shadow-sm":"border-gray-200/70 bg-white hover:border-gray-300 hover:bg-gray-50/70"),children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(Ue,{name:d.name,src:qe(d.name),className:X("h-10 w-10 rounded-lg border",N?"border-primary/30 bg-white":"border-gray-200/70 bg-white"),imgClassName:"h-5 w-5 object-contain",fallback:e.jsx("span",{className:"text-sm font-semibold uppercase text-gray-500",children:d.name[0]})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-semibold text-gray-900",children:D}),e.jsx("p",{className:"line-clamp-1 text-[11px] text-gray-500",children:l})]})]}),e.jsx(je,{status:N?"ready":"setup",label:N?t("statusReady"):t("statusSetup"),className:"min-w-[56px] justify-center"})]})},d.name)}),C.length===0&&e.jsxs("div",{className:"flex h-full min-h-[220px] flex-col items-center justify-center rounded-xl border border-dashed border-gray-200 bg-gray-50/70 py-10 text-center",children:[e.jsx("div",{className:"mb-3 flex h-10 w-10 items-center justify-center rounded-lg bg-white",children:e.jsx(Le,{className:"h-5 w-5 text-gray-300"})}),e.jsx("p",{className:"text-sm font-medium text-gray-700",children:t("providersNoMatch")})]})]})]}),e.jsx(ts,{providerName:w,onProviderDeleted:d=>{d===f&&c(void 0)}})]})]})}export{xs as ProvidersList};
@@ -1 +0,0 @@
1
- import{r as p,j as e,a8 as Y,a6 as Z,al as le,af as H}from"./vendor-CHxMoJ93.js";import{u as oe,b as ce,m as de,I as d}from"./useConfig-C9yQu_4f.js";import{P as ie,a as me,B as N}from"./page-layout-COKsFqhi.js";import{C as B,a as M,b as O,c as R,d as $}from"./card-AxFsy7YF.js";import{S as he}from"./switch-BVQzjvsB.js";import{t,S as ee,a as ae,b as se,d as te,e as P}from"./index-CT15pXtn.js";import{h as I}from"./config-hints-CApS3K_7.js";const ue=[{value:"main",label:"main"},{value:"per-peer",label:"per-peer"},{value:"per-channel-peer",label:"per-channel-peer"},{value:"per-account-channel-peer",label:"per-account-channel-peer"}];function pe(){return{id:"",default:!1,workspace:"",model:"",maxTokens:void 0,contextTokens:void 0,maxToolIterations:void 0}}function xe(){return{agentId:"",match:{channel:"",accountId:""}}}function z(i){const w=i.trim();if(!w)return;const x=Number.parseInt(w,10);return Number.isFinite(x)?x:void 0}function ye(){const{data:i,isLoading:w}=oe(),{data:x}=ce(),_=de(),[S,y]=p.useState([]),[D,b]=p.useState([]),[L,q]=p.useState("per-channel-peer"),[K,F]=p.useState(0),[V,U]=p.useState(2e5);p.useEffect(()=>{var a,r,n;i&&(y((i.agents.list??[]).map(s=>({id:s.id??"",default:!!s.default,workspace:s.workspace??"",model:s.model??"",maxTokens:s.maxTokens,contextTokens:s.contextTokens,maxToolIterations:s.maxToolIterations}))),b((i.bindings??[]).map(s=>{var o,l,c;return{agentId:s.agentId??"",match:{channel:((o=s.match)==null?void 0:o.channel)??"",accountId:((l=s.match)==null?void 0:l.accountId)??"",peer:(c=s.match)!=null&&c.peer?{kind:s.match.peer.kind,id:s.match.peer.id}:void 0}}})),q(((a=i.session)==null?void 0:a.dmScope)??"per-channel-peer"),F(((n=(r=i.session)==null?void 0:r.agentToAgent)==null?void 0:n.maxPingPongTurns)??0),U(i.agents.defaults.contextTokens??2e5))},[i]);const g=x==null?void 0:x.uiHints,h=I("session.dmScope",g),j=I("session.agentToAgent.maxPingPongTurns",g),f=I("agents.defaults.contextTokens",g),A=I("agents.list.*.contextTokens",g),v=I("agents.list",g),k=I("bindings",g),re=p.useMemo(()=>{const a=new Set(["main"]);return S.forEach(r=>{const n=r.id.trim();n&&a.add(n)}),a},[S]),u=(a,r)=>{y(n=>n.map((s,o)=>o===a?{...s,...r}:s))},T=(a,r)=>{b(n=>n.map((s,o)=>o===a?r:s))},ne=()=>{try{const a=S.map((s,o)=>{var m,C;const l=s.id.trim();if(!l)throw new Error(t("agentIdRequiredError").replace("{index}",String(o)));const c={id:l};return s.default&&(c.default=!0),(m=s.workspace)!=null&&m.trim()&&(c.workspace=s.workspace.trim()),(C=s.model)!=null&&C.trim()&&(c.model=s.model.trim()),typeof s.maxTokens=="number"&&(c.maxTokens=s.maxTokens),typeof s.contextTokens=="number"&&(c.contextTokens=Math.max(1e3,s.contextTokens)),typeof s.maxToolIterations=="number"&&(c.maxToolIterations=s.maxToolIterations),c}),r=a.map(s=>s.id).filter((s,o,l)=>l.indexOf(s)!==o);if(r.length>0){H.error(`${t("duplicateAgentId")}: ${r[0]}`);return}const n=D.map((s,o)=>{var J,Q,W,X;const l=s.agentId.trim(),c=s.match.channel.trim(),m=((J=s.match.accountId)==null?void 0:J.trim())??"",C=(Q=s.match.peer)==null?void 0:Q.kind,G=((X=(W=s.match.peer)==null?void 0:W.id)==null?void 0:X.trim())??"";if(!l)throw new Error(t("bindingAgentIdRequired").replace("{index}",String(o)));if(!re.has(l))throw new Error(`${t("bindingAgentIdNotFound").replace("{index}",String(o))}: ${l}`);if(!c)throw new Error(t("bindingChannelRequired").replace("{index}",String(o)));const E={agentId:l,match:{channel:c}};if(m&&(E.match.accountId=m),C){if(!G)throw new Error(t("bindingPeerIdRequired").replace("{index}",String(o)));E.match.peer={kind:C,id:G}}return E});_.mutate({data:{agents:{defaults:{contextTokens:Math.max(1e3,V)},list:a},bindings:n,session:{dmScope:L,agentToAgent:{maxPingPongTurns:Math.min(5,Math.max(0,K))}}}})}catch(a){const r=a instanceof Error?a.message:String(a);H.error(r)}};return w||!i?e.jsx("div",{className:"p-8 text-gray-400",children:t("runtimeLoading")}):e.jsxs(ie,{className:"space-y-6",children:[e.jsx(me,{title:t("runtimePageTitle"),description:t("runtimePageDescription")}),e.jsxs(B,{children:[e.jsxs(M,{children:[e.jsx(O,{children:(h==null?void 0:h.label)??t("dmScope")}),e.jsx(R,{children:(h==null?void 0:h.help)??t("dmScopeHelp")})]}),e.jsxs($,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium text-gray-800",children:(f==null?void 0:f.label)??t("defaultContextTokens")}),e.jsx(d,{type:"number",min:1e3,step:1e3,value:V,onChange:a=>U(Math.max(1e3,Number.parseInt(a.target.value,10)||1e3))}),e.jsx("p",{className:"text-xs text-gray-500",children:(f==null?void 0:f.help)??t("defaultContextTokensHelp")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium text-gray-800",children:(h==null?void 0:h.label)??t("dmScope")}),e.jsxs(ee,{value:L,onValueChange:a=>q(a),children:[e.jsx(ae,{children:e.jsx(se,{})}),e.jsx(te,{children:ue.map(a=>e.jsx(P,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium text-gray-800",children:(j==null?void 0:j.label)??t("maxPingPongTurns")}),e.jsx(d,{type:"number",min:0,max:5,value:K,onChange:a=>F(Math.max(0,Number.parseInt(a.target.value,10)||0))}),e.jsx("p",{className:"text-xs text-gray-500",children:(j==null?void 0:j.help)??t("maxPingPongTurnsHelp")})]})]})]}),e.jsxs(B,{children:[e.jsxs(M,{children:[e.jsx(O,{children:(v==null?void 0:v.label)??t("agentList")}),e.jsx(R,{children:(v==null?void 0:v.help)??t("agentListHelp")})]}),e.jsxs($,{className:"space-y-3",children:[S.map((a,r)=>e.jsxs("div",{className:"rounded-xl border border-gray-200 p-3 space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsx(d,{value:a.id,onChange:n=>u(r,{id:n.target.value}),placeholder:t("agentIdPlaceholder")}),e.jsx(d,{value:a.workspace??"",onChange:n=>u(r,{workspace:n.target.value}),placeholder:t("workspaceOverridePlaceholder")}),e.jsx(d,{value:a.model??"",onChange:n=>u(r,{model:n.target.value}),placeholder:t("modelOverridePlaceholder")}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-2",children:[e.jsx(d,{type:"number",min:1,value:a.maxTokens??"",onChange:n=>u(r,{maxTokens:z(n.target.value)}),placeholder:t("maxTokensPlaceholder")}),e.jsx(d,{type:"number",min:1e3,step:1e3,value:a.contextTokens??"",onChange:n=>u(r,{contextTokens:z(n.target.value)}),placeholder:(A==null?void 0:A.label)??t("contextTokensPlaceholder")}),e.jsx(d,{type:"number",min:1,value:a.maxToolIterations??"",onChange:n=>u(r,{maxToolIterations:z(n.target.value)}),placeholder:t("maxToolsPlaceholder")})]})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-600",children:[e.jsx(he,{checked:!!a.default,onCheckedChange:n=>{if(!n){u(r,{default:!1});return}y(s=>s.map((o,l)=>({...o,default:l===r})))}}),e.jsx("span",{children:t("defaultAgent")})]}),e.jsxs(N,{type:"button",variant:"outline",size:"sm",onClick:()=>y(n=>n.filter((s,o)=>o!==r)),children:[e.jsx(Y,{className:"h-4 w-4 mr-1"}),t("remove")]})]})]},`${r}-${a.id}`)),e.jsxs(N,{type:"button",variant:"outline",onClick:()=>y(a=>[...a,pe()]),children:[e.jsx(Z,{className:"h-4 w-4 mr-2"}),t("addAgent")]})]})]}),e.jsxs(B,{children:[e.jsxs(M,{children:[e.jsx(O,{children:(k==null?void 0:k.label)??t("bindings")}),e.jsx(R,{children:(k==null?void 0:k.help)??t("bindingsHelp")})]}),e.jsxs($,{className:"space-y-3",children:[D.map((a,r)=>{var s,o;const n=((s=a.match.peer)==null?void 0:s.kind)??"";return e.jsxs("div",{className:"rounded-xl border border-gray-200 p-3 space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",children:[e.jsx(d,{value:a.agentId,onChange:l=>T(r,{...a,agentId:l.target.value}),placeholder:t("targetAgentIdPlaceholder")}),e.jsx(d,{value:a.match.channel,onChange:l=>T(r,{...a,match:{...a.match,channel:l.target.value}}),placeholder:t("channelPlaceholder")}),e.jsx(d,{value:a.match.accountId??"",onChange:l=>T(r,{...a,match:{...a.match,accountId:l.target.value}}),placeholder:t("accountIdOptionalPlaceholder")}),e.jsxs(ee,{value:n||"__none__",onValueChange:l=>{var m;const c=l==="__none__"?"":l;if(!c){T(r,{...a,match:{...a.match,peer:void 0}});return}T(r,{...a,match:{...a.match,peer:{kind:c,id:((m=a.match.peer)==null?void 0:m.id)??""}}})},children:[e.jsx(ae,{children:e.jsx(se,{})}),e.jsxs(te,{children:[e.jsx(P,{value:"__none__",children:t("peerKindOptional")}),e.jsx(P,{value:"direct",children:"direct"}),e.jsx(P,{value:"group",children:"group"}),e.jsx(P,{value:"channel",children:"channel"})]})]}),e.jsx(d,{value:((o=a.match.peer)==null?void 0:o.id)??"",onChange:l=>T(r,{...a,match:{...a.match,peer:n?{kind:n,id:l.target.value}:void 0}}),placeholder:t("peerIdPlaceholder")})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(N,{type:"button",variant:"outline",size:"sm",onClick:()=>b(l=>l.filter((c,m)=>m!==r)),children:[e.jsx(Y,{className:"h-4 w-4 mr-1"}),t("remove")]})})]},`${r}-${a.agentId}`)}),e.jsxs(N,{type:"button",variant:"outline",onClick:()=>b(a=>[...a,xe()]),children:[e.jsx(Z,{className:"h-4 w-4 mr-2"}),t("addBinding")]})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(N,{type:"button",onClick:ne,disabled:_.isPending,children:[e.jsx(le,{className:"h-4 w-4 mr-2"}),_.isPending?t("saving"):t("saveRuntimeSettings")]})})]})}export{ye as RuntimeConfig};
@@ -1,2 +0,0 @@
1
- import{r as l,j as e,a5 as T,a0 as Y,am as A,ah as $,aj as W,M as U,an as X,X as G,Y as J}from"./vendor-CHxMoJ93.js";import{u as Z}from"./useConfirmDialog-8zI-gypg.js";import{d as ee,e as se,n as te,f as ae,I as S}from"./useConfig-C9yQu_4f.js";import{P as re,a as le,B as g}from"./page-layout-COKsFqhi.js";import{t,c as o,S as ne,a as ie,b as oe,d as de,e as K,i as ce,g as xe}from"./index-CT15pXtn.js";import{e as me}from"./chat-message-D0s61C4e.js";const u="__unknown_channel__";function he(a){return xe(a)}function j(a){const n=a.indexOf(":");return n<=0?u:a.slice(0,n).trim()||u}function C(a){return a===u?t("sessionsUnknownChannel"):a}function ge({session:a,channel:n,isSelected:i,onSelect:f}){const r=C(n),p=a.label||a.key.split(":").pop()||a.key;return e.jsxs("button",{onClick:f,className:o("w-full text-left p-3.5 rounded-xl transition-all duration-200 outline-none focus:outline-none focus:ring-0 group",i?"bg-brand-50 border border-brand-100/50":"bg-transparent border border-transparent hover:bg-gray-50/80"),children:[e.jsxs("div",{className:"flex items-start justify-between mb-1.5",children:[e.jsx("div",{className:o("font-semibold truncate pr-2 flex-1 text-sm",i?"text-brand-800":"text-gray-900"),children:p}),e.jsx("div",{className:o("text-[10px] font-bold px-2 py-0.5 rounded-full shrink-0 capitalize",i?"bg-white text-brand-600 shadow-[0_1px_2px_rgba(0,0,0,0.02)]":"bg-gray-100 text-gray-500"),children:r})]}),e.jsxs("div",{className:o("flex items-center text-xs justify-between mt-2 font-medium",i?"text-brand-600/80":"text-gray-400"),children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(X,{className:"w-3.5 h-3.5 opacity-70"}),e.jsx("span",{className:"truncate max-w-[100px]",children:ce(a.updatedAt)})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(U,{className:"w-3.5 h-3.5 opacity-70"}),e.jsx("span",{children:a.messageCount})]})]})]})}function ue({message:a}){const n=a.role.toLowerCase()==="user",i=me(a.content).trim();return e.jsx("div",{className:o("flex w-full mb-6",n?"justify-end":"justify-start"),children:e.jsxs("div",{className:o("max-w-[85%] rounded-[1.25rem] p-5 flex gap-3 text-sm",n?"bg-primary text-white rounded-tr-sm":"bg-gray-50 text-gray-800 rounded-tl-sm border border-gray-100/50"),children:[e.jsx("div",{className:"shrink-0 pt-0.5",children:n?e.jsx(G,{className:"w-4 h-4 text-primary-100"}):e.jsx(J,{className:"w-4 h-4 text-gray-400"})}),e.jsxs("div",{className:"flex-1 space-y-1 overflow-x-hidden",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-4 mb-2",children:[e.jsx("span",{className:o("font-semibold text-xs",n?"text-primary-50":"text-gray-900 capitalize"),children:a.role}),e.jsx("span",{className:o("text-[10px]",n?"text-primary-200":"text-gray-400"),children:he(a.timestamp)})]}),e.jsx("div",{className:"whitespace-pre-wrap break-words leading-relaxed text-[15px]",children:i||"-"})]})]})})}function Ne(){var z,H,E;const[a,n]=l.useState(""),[i]=l.useState(100),[f]=l.useState(0),[r,p]=l.useState(null),[y,B]=l.useState("all"),[M,v]=l.useState(""),[L,N]=l.useState(""),[w,k]=l.useState(!1),F=l.useMemo(()=>({q:a.trim()||void 0,limit:i,activeMinutes:f}),[a,i,f]),h=ee(F),x=se(r,200),b=te(),D=ae(),{confirm:_,ConfirmDialog:Q}=Z(),c=l.useMemo(()=>{var s;return((s=h.data)==null?void 0:s.sessions)??[]},[(z=h.data)==null?void 0:z.sessions]),d=l.useMemo(()=>c.find(s=>s.key===r),[c,r]),q=l.useMemo(()=>{const s=new Set;for(const m of c)s.add(j(m.key));return Array.from(s).sort((m,I)=>m===u?1:I===u?-1:m.localeCompare(I))},[c]),P=l.useMemo(()=>y==="all"?c:c.filter(s=>j(s.key)===y),[c,y]);l.useEffect(()=>{d?(v(d.label||""),N(d.preferredModel||"")):(v(""),N("")),k(!1)},[d]);const O=()=>{r&&(b.mutate({key:r,data:{label:M.trim()||null,preferredModel:L.trim()||null}}),k(!1))},R=async()=>{if(!r)return;await _({title:t("sessionsClearHistory")+"?",variant:"destructive",confirmLabel:t("sessionsClearHistory")})&&b.mutate({key:r,data:{clearHistory:!0}})},V=async()=>{if(!r)return;await _({title:t("sessionsDeleteConfirm")+"?",variant:"destructive",confirmLabel:t("sessionsDeleteConfirm")})&&D.mutate({key:r},{onSuccess:()=>p(null)})};return e.jsxs(re,{fullHeight:!0,children:[e.jsx(le,{title:t("sessionsPageTitle"),description:t("sessionsPageDescription")}),e.jsxs("div",{className:"flex-1 flex gap-6 min-h-0 relative",children:[e.jsxs("div",{className:"w-[320px] flex flex-col shrink-0 bg-white rounded-2xl shadow-sm border border-gray-200 overflow-hidden",children:[e.jsxs("div",{className:"px-4 py-4 border-b border-gray-100 bg-white z-10 shrink-0 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-[11px] font-semibold text-gray-400 uppercase tracking-wider",children:[c.length," ",t("sessionsListTitle")]}),e.jsx(g,{variant:"ghost",size:"icon",className:"h-7 w-7 rounded-lg text-gray-400 hover:text-gray-700 hover:bg-gray-100",onClick:()=>h.refetch(),children:e.jsx(T,{className:o("h-3.5 w-3.5",h.isFetching&&"animate-spin")})})]}),e.jsxs(ne,{value:y,onValueChange:B,children:[e.jsx(ie,{className:"w-full h-8.5 rounded-lg bg-gray-50/50 hover:bg-gray-100 border-gray-200 focus:ring-0 shadow-none text-xs font-medium text-gray-700",children:e.jsx(oe,{placeholder:t("sessionsAllChannels")})}),e.jsxs(de,{className:"rounded-xl shadow-lg border-gray-100 max-w-[280px]",children:[e.jsx(K,{value:"all",className:"rounded-lg text-xs",children:t("sessionsAllChannels")}),q.map(s=>e.jsx(K,{value:s,className:"rounded-lg text-xs truncate pr-6",children:C(s)},s))]})]}),e.jsxs("div",{className:"relative w-full",children:[e.jsx(Y,{className:"h-3.5 w-3.5 absolute left-3 top-2.5 text-gray-400"}),e.jsx(S,{value:a,onChange:s=>n(s.target.value),placeholder:t("sessionsSearchPlaceholder"),className:"pl-8 h-8.5 rounded-lg bg-gray-50/50 border-gray-200 focus-visible:bg-white text-xs"})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-3 space-y-1 pb-10 custom-scrollbar relative",children:h.isLoading?e.jsx("div",{className:"text-sm text-gray-400 p-4 text-center",children:t("sessionsLoading")}):P.length===0?e.jsxs("div",{className:"text-sm text-gray-400 p-4 text-center border-2 border-dashed border-gray-100 rounded-xl mt-4",children:[e.jsx(A,{className:"w-8 h-8 mx-auto mb-2 text-gray-300"}),t("sessionsEmpty")]}):P.map(s=>e.jsx(ge,{session:s,channel:j(s.key),isSelected:r===s.key,onSelect:()=>p(s.key)},s.key))})]}),e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col overflow-hidden relative bg-white rounded-2xl shadow-sm border border-gray-200",children:[(b.isPending||D.isPending)&&e.jsx("div",{className:"absolute top-0 left-0 w-full h-1 bg-primary/20 overflow-hidden z-20",children:e.jsx("div",{className:"h-full bg-primary animate-pulse w-1/3 rounded-r-full"})}),r&&d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"shrink-0 border-b border-gray-100 bg-white px-8 py-5 z-10 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:"h-12 w-12 rounded-[14px] bg-gray-50 border border-gray-100 flex items-center justify-center text-gray-400 shrink-0",children:e.jsx($,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2.5 mb-1.5",children:[e.jsx("h3",{className:"text-lg font-bold text-gray-900 tracking-tight",children:d.label||d.key.split(":").pop()||d.key}),e.jsx("span",{className:"text-[10px] font-bold px-2 py-0.5 rounded-full bg-gray-100 text-gray-500 uppercase tracking-widest",children:C(j(d.key))})]}),e.jsx("div",{className:"text-xs text-gray-500 font-mono break-all line-clamp-1 opacity-70",title:r,children:r})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs(g,{variant:"outline",size:"sm",onClick:()=>k(!w),className:o("h-8.5 rounded-lg shadow-none border-gray-200 transition-all text-xs font-semibold",w?"bg-gray-100 text-gray-900":"hover:bg-gray-50 hover:text-gray-900"),children:[e.jsx(W,{className:"w-3.5 h-3.5 mr-1.5"}),t("sessionsMetadata")]}),e.jsx(g,{variant:"outline",size:"sm",onClick:R,className:"h-8.5 rounded-lg shadow-none hover:bg-gray-50 hover:text-gray-900 border-gray-200 text-xs font-semibold text-gray-500",children:t("sessionsClearHistory")}),e.jsx(g,{variant:"outline",size:"sm",onClick:V,className:"h-8.5 rounded-lg shadow-none hover:bg-red-50 hover:text-red-600 hover:border-red-200 border-gray-200 text-xs font-semibold text-red-500",children:t("delete")})]})]}),w&&e.jsxs("div",{className:"flex items-center gap-3 bg-gray-50/50 p-3 rounded-lg border border-gray-100 animate-slide-in",children:[e.jsx(S,{placeholder:t("sessionsLabelPlaceholder"),value:M,onChange:s=>v(s.target.value),className:"h-8 text-sm bg-white"}),e.jsx(S,{placeholder:t("sessionsModelPlaceholder"),value:L,onChange:s=>N(s.target.value),className:"h-8 text-sm bg-white"}),e.jsx(g,{size:"sm",onClick:O,className:"h-8 px-4 shrink-0 shadow-none",disabled:b.isPending,children:t("sessionsSaveMeta")})]})]}),e.jsxs("div",{className:`flex-1 overflow-y-auto p-6 relative
2
- [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:bg-gray-300/80 [&::-webkit-scrollbar-thumb]:rounded-full`,children:[x.isLoading&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-gray-50/50 backdrop-blur-sm z-10",children:e.jsxs("div",{className:"flex flex-col items-center gap-3 animate-pulse",children:[e.jsx(T,{className:"w-6 h-6 text-primary animate-spin"}),e.jsx("span",{className:"text-sm font-medium text-gray-500",children:t("sessionsHistoryLoading")})]})}),x.error&&e.jsx("div",{className:"text-center p-6 bg-red-50 rounded-xl text-red-600 border border-red-100 text-sm",children:x.error.message}),!x.isLoading&&((H=x.data)==null?void 0:H.messages.length)===0&&e.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-gray-400",children:[e.jsx(U,{className:"w-12 h-12 mb-3 text-gray-300"}),e.jsx("p",{className:"text-sm",children:t("sessionsEmpty")})]}),e.jsx("div",{className:"max-w-3xl mx-auto",children:(((E=x.data)==null?void 0:E.messages)??[]).map((s,m)=>e.jsx(ue,{message:s},`${s.timestamp}-${m}`))})]})]}):e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-gray-400 p-8 h-full bg-white",children:[e.jsx("div",{className:"w-20 h-20 bg-gray-50 rounded-3xl flex items-center justify-center mb-6 border border-gray-100 shadow-[0_2px_8px_-2px_rgba(0,0,0,0.02)] rotate-3",children:e.jsx(A,{className:"h-8 w-8 text-gray-300 -rotate-3"})}),e.jsx("h3",{className:"text-lg font-bold text-gray-900 mb-2",children:t("sessionsNoSelectionTitle")}),e.jsx("p",{className:"text-sm text-center max-w-sm leading-relaxed",children:t("sessionsNoSelectionDescription")})]})]})]}),e.jsx(Q,{})]})}export{Ne as SessionsConfig};