nextclaw 0.9.8 → 0.9.9
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.
- package/dist/cli/index.js +14 -11
- package/package.json +4 -3
- package/ui-dist/assets/ChannelsList-CrQ3OXby.js +1 -0
- package/ui-dist/assets/ChatPage-Def8_fbf.js +34 -0
- package/ui-dist/assets/{DocBrowser-DvU-iUeB.js → DocBrowser-Dg-b4Atq.js} +1 -1
- package/ui-dist/assets/LogoBadge-uiBOKAEe.js +1 -0
- package/ui-dist/assets/{MarketplacePage--wFfsNH0.js → MarketplacePage-BwMsA6VY.js} +1 -1
- package/ui-dist/assets/{ModelConfig-cY5UsbfA.js → ModelConfig-DVsQVvIt.js} +1 -1
- package/ui-dist/assets/ProvidersList-BSJGEhJe.js +1 -0
- package/ui-dist/assets/{RuntimeConfig-BY2Axlte.js → RuntimeConfig-CZpxTqCn.js} +1 -1
- package/ui-dist/assets/{SecretsConfig-B25P3J7V.js → SecretsConfig-BLZW7-5k.js} +2 -2
- package/ui-dist/assets/SessionsConfig-H_gq5Wtk.js +2 -0
- package/ui-dist/assets/{card-CCSDsedj.js → card-BoxPL3fs.js} +1 -1
- package/ui-dist/assets/index-Cwtv_w6q.js +2 -0
- package/ui-dist/assets/index-DcxYzrFm.css +1 -0
- package/ui-dist/assets/{label-BxzAKPzU.js → label-BdIFsV9G.js} +1 -1
- package/ui-dist/assets/{page-layout-DaLNSFKw.js → page-layout-BdhEwv_X.js} +1 -1
- package/ui-dist/assets/session-run-status-DJ7s-TnE.js +5 -0
- package/ui-dist/assets/{switch-DHOCEi5L.js → switch-DD9iXp2E.js} +1 -1
- package/ui-dist/assets/{tabs-custom-zdFy3fnK.js → tabs-custom-DPMQcAvE.js} +1 -1
- package/ui-dist/assets/useConfig-BiE7PGOv.js +6 -0
- package/ui-dist/assets/{useConfirmDialog-D3ZVa92J.js → useConfirmDialog-D0WoeDcH.js} +1 -1
- package/ui-dist/assets/{vendor-Dj2ULvht.js → vendor-CzIVZvq9.js} +1 -1
- package/ui-dist/index.html +3 -3
- package/ui-dist/assets/ChannelsList-VqzbAMCc.js +0 -1
- package/ui-dist/assets/ChatPage-CjZqsBmn.js +0 -34
- package/ui-dist/assets/ProvidersList-qZwaFoFt.js +0 -1
- package/ui-dist/assets/SessionsConfig-CxA9gIBw.js +0 -2
- package/ui-dist/assets/chat-message-pw9oafI4.js +0 -5
- package/ui-dist/assets/index-CD8a2KMH.js +0 -2
- package/ui-dist/assets/index-DKOXGZc8.css +0 -1
- package/ui-dist/assets/logos-C3oHQ9kv.js +0 -1
- package/ui-dist/assets/useConfig-CDl9UK5m.js +0 -6
package/dist/cli/index.js
CHANGED
|
@@ -567,12 +567,13 @@ import {
|
|
|
567
567
|
loadConfig,
|
|
568
568
|
saveConfig,
|
|
569
569
|
getWorkspacePath,
|
|
570
|
-
PROVIDERS,
|
|
571
570
|
expandHome
|
|
572
571
|
} from "@nextclaw/core";
|
|
572
|
+
import { builtinProviderIds } from "@nextclaw/runtime";
|
|
573
573
|
import { createInterface } from "readline";
|
|
574
574
|
import { existsSync as existsSync4 } from "fs";
|
|
575
575
|
import { resolve as resolve5 } from "path";
|
|
576
|
+
var RESERVED_PROVIDER_IDS = builtinProviderIds();
|
|
576
577
|
function loadPluginRegistry(config2, workspaceDir) {
|
|
577
578
|
return loadOpenClawPlugins({
|
|
578
579
|
config: config2,
|
|
@@ -597,7 +598,7 @@ function loadPluginRegistry(config2, workspaceDir) {
|
|
|
597
598
|
"cron"
|
|
598
599
|
],
|
|
599
600
|
reservedChannelIds: [],
|
|
600
|
-
reservedProviderIds:
|
|
601
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS,
|
|
601
602
|
reservedEngineKinds: ["native"],
|
|
602
603
|
logger: {
|
|
603
604
|
info: (message) => console.log(message),
|
|
@@ -692,7 +693,7 @@ var PluginCommands = class {
|
|
|
692
693
|
config: config2,
|
|
693
694
|
workspaceDir,
|
|
694
695
|
reservedChannelIds: [],
|
|
695
|
-
reservedProviderIds:
|
|
696
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS,
|
|
696
697
|
reservedEngineKinds: ["native"]
|
|
697
698
|
});
|
|
698
699
|
const list = opts.enabled ? report.plugins.filter((plugin) => plugin.status === "loaded") : report.plugins;
|
|
@@ -753,7 +754,7 @@ var PluginCommands = class {
|
|
|
753
754
|
config: config2,
|
|
754
755
|
workspaceDir,
|
|
755
756
|
reservedChannelIds: [],
|
|
756
|
-
reservedProviderIds:
|
|
757
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS,
|
|
757
758
|
reservedEngineKinds: ["native"]
|
|
758
759
|
});
|
|
759
760
|
const plugin = report.plugins.find((entry) => entry.id === id || entry.name === id);
|
|
@@ -838,7 +839,7 @@ var PluginCommands = class {
|
|
|
838
839
|
config: config2,
|
|
839
840
|
workspaceDir,
|
|
840
841
|
reservedChannelIds: [],
|
|
841
|
-
reservedProviderIds:
|
|
842
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS,
|
|
842
843
|
reservedEngineKinds: ["native"]
|
|
843
844
|
});
|
|
844
845
|
const keepFiles = Boolean(opts.keepFiles || opts.keepConfig);
|
|
@@ -1021,7 +1022,7 @@ var PluginCommands = class {
|
|
|
1021
1022
|
config: config2,
|
|
1022
1023
|
workspaceDir,
|
|
1023
1024
|
reservedChannelIds: [],
|
|
1024
|
-
reservedProviderIds:
|
|
1025
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS,
|
|
1025
1026
|
reservedEngineKinds: ["native"]
|
|
1026
1027
|
});
|
|
1027
1028
|
const pluginErrors = report.plugins.filter((plugin) => plugin.status === "error");
|
|
@@ -1712,7 +1713,8 @@ var SecretsCommands = class {
|
|
|
1712
1713
|
|
|
1713
1714
|
// src/cli/commands/channels.ts
|
|
1714
1715
|
import { spawnSync as spawnSync3 } from "child_process";
|
|
1715
|
-
import {
|
|
1716
|
+
import { getWorkspacePath as getWorkspacePath2, loadConfig as loadConfig4, saveConfig as saveConfig4 } from "@nextclaw/core";
|
|
1717
|
+
import { BUILTIN_CHANNEL_PLUGIN_IDS, builtinProviderIds as builtinProviderIds2 } from "@nextclaw/runtime";
|
|
1716
1718
|
import { buildPluginStatusReport as buildPluginStatusReport2, enablePluginInConfig as enablePluginInConfig2, getPluginChannelBindings } from "@nextclaw/openclaw-compat";
|
|
1717
1719
|
var CHANNEL_LABELS = {
|
|
1718
1720
|
telegram: "Telegram",
|
|
@@ -1726,6 +1728,7 @@ var CHANNEL_LABELS = {
|
|
|
1726
1728
|
slack: "Slack",
|
|
1727
1729
|
qq: "QQ"
|
|
1728
1730
|
};
|
|
1731
|
+
var RESERVED_PROVIDER_IDS2 = builtinProviderIds2();
|
|
1729
1732
|
var ChannelCommands = class {
|
|
1730
1733
|
constructor(deps) {
|
|
1731
1734
|
this.deps = deps;
|
|
@@ -1744,7 +1747,7 @@ var ChannelCommands = class {
|
|
|
1744
1747
|
config: config2,
|
|
1745
1748
|
workspaceDir,
|
|
1746
1749
|
reservedChannelIds: [],
|
|
1747
|
-
reservedProviderIds:
|
|
1750
|
+
reservedProviderIds: RESERVED_PROVIDER_IDS2
|
|
1748
1751
|
});
|
|
1749
1752
|
const pluginChannels = report.plugins.filter((plugin) => plugin.status === "loaded" && plugin.channelIds.length > 0);
|
|
1750
1753
|
if (pluginChannels.length > 0) {
|
|
@@ -1908,9 +1911,9 @@ import {
|
|
|
1908
1911
|
getDataDir as getDataDir4,
|
|
1909
1912
|
getWorkspacePath as getWorkspacePath3,
|
|
1910
1913
|
hasSecretRef,
|
|
1911
|
-
loadConfig as loadConfig5
|
|
1912
|
-
PROVIDERS as PROVIDERS3
|
|
1914
|
+
loadConfig as loadConfig5
|
|
1913
1915
|
} from "@nextclaw/core";
|
|
1916
|
+
import { listBuiltinProviders } from "@nextclaw/runtime";
|
|
1914
1917
|
var DiagnosticsCommands = class {
|
|
1915
1918
|
constructor(deps) {
|
|
1916
1919
|
this.deps = deps;
|
|
@@ -2091,7 +2094,7 @@ var DiagnosticsCommands = class {
|
|
|
2091
2094
|
const managedHealth = running && managedApiUrl ? await this.probeApiHealth(`${managedApiUrl}/health`) : { state: "unreachable", detail: "service not running" };
|
|
2092
2095
|
const configuredHealth = await this.probeApiHealth(`${configuredApiUrl}/health`, 900);
|
|
2093
2096
|
const orphanSuspected = !running && configuredHealth.state === "ok";
|
|
2094
|
-
const providers =
|
|
2097
|
+
const providers = listBuiltinProviders().map((spec) => {
|
|
2095
2098
|
const provider = config2.providers[spec.name];
|
|
2096
2099
|
const apiKeyRefSet = hasSecretRef(config2, `providers.${spec.name}.apiKey`);
|
|
2097
2100
|
if (!provider) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nextclaw",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "Lightweight personal AI assistant with CLI, multi-provider routing, and channel integrations.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -38,8 +38,9 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"chokidar": "^3.6.0",
|
|
40
40
|
"commander": "^12.1.0",
|
|
41
|
-
"@nextclaw/core": "^0.7.
|
|
42
|
-
"@nextclaw/
|
|
41
|
+
"@nextclaw/core": "^0.7.1",
|
|
42
|
+
"@nextclaw/runtime": "^0.1.1",
|
|
43
|
+
"@nextclaw/server": "^0.6.3",
|
|
43
44
|
"@nextclaw/openclaw-compat": "^0.2.0"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as v,j as a,at as Z,v as ee,aG as T,K as ae,a5 as te,aJ as se,aK as ne,aL as le,q as re,Y as oe,as as ce,n as ie}from"./vendor-CzIVZvq9.js";import{u as q,a as $,b as K,x as me,y as pe,I as D}from"./useConfig-BiE7PGOv.js";import{B as E,P as de,a as be}from"./page-layout-BdhEwv_X.js";import{L as ue}from"./label-BdIFsV9G.js";import{S as xe}from"./switch-DD9iXp2E.js";import{t as e,c as I,h as ye,S as ge,a as he,b as fe,d as we,e as ve}from"./index-Cwtv_w6q.js";import{C as je,a as ke,L as H,S as J,c as Se,b as Ce}from"./LogoBadge-uiBOKAEe.js";import{h as _}from"./config-hints-CApS3K_7.js";import{T as Ne}from"./tabs-custom-DPMQcAvE.js";function Pe({value:t,onChange:m,className:i,placeholder:r=""}){const[o,u]=v.useState(""),d=x=>{x.key==="Enter"&&o.trim()?(x.preventDefault(),m([...t,o.trim()]),u("")):x.key==="Backspace"&&!o&&t.length>0&&m(t.slice(0,-1))},g=x=>{m(t.filter((j,h)=>h!==x))};return a.jsxs("div",{className:I("flex flex-wrap gap-2 p-2 border rounded-md min-h-[42px]",i),children:[t.map((x,j)=>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(j),className:"hover:text-red-300 transition-colors",children:a.jsx(Z,{className:"h-3 w-3"})})]},j)),a.jsx("input",{type:"text",value:o,onChange:x=>u(x.target.value),onKeyDown:d,className:"flex-1 outline-none min-w-[100px] bg-transparent text-sm",placeholder:r||e("enterTag")})]})}function z(t){var r,o;const m=ye();return((r=t.tutorialUrls)==null?void 0:r[m])||((o=t.tutorialUrls)==null?void 0:o.default)||t.tutorialUrl}const Ie={telegram:"telegram.svg",slack:"slack.svg",discord:"discord.svg",whatsapp:"whatsapp.svg",qq:"qq.svg",feishu:"feishu.svg",dingtalk:"dingtalk.svg",wecom:"wecom.svg",mochat:"mochat.svg",email:"email.svg"};function Fe(t,m){const i=m.toLowerCase(),r=t[i];return r?`/logos/${r}`:null}function Y(t){return Fe(Ie,t)}const B=[{value:"pairing",label:"pairing"},{value:"allowlist",label:"allowlist"},{value:"open",label:"open"},{value:"disabled",label:"disabled"}],G=[{value:"open",label:"open"},{value:"allowlist",label:"allowlist"},{value:"disabled",label:"disabled"}],Te=[{value:"off",label:"off"},{value:"partial",label:"partial"},{value:"block",label:"block"},{value:"progress",label:"progress"}],De=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 R(){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:G},{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:Te},{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:G},{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,m){const i={...t};for(const[r,o]of Object.entries(m)){const u=i[r];if(A(u)&&A(o)){i[r]=V(u,o);continue}i[r]=o}return i}function Ae(t,m){const i=t.split("."),r={};let o=r;for(let u=0;u<i.length-1;u+=1){const d=i[u];o[d]={},o=o[d]}return o[i[i.length-1]]=m,r}function Le({channelName:t}){var O,U;const{data:m}=q(),{data:i}=$(),{data:r}=K(),o=me(),u=pe(),[d,g]=v.useState({}),[x,j]=v.useState({}),[h,f]=v.useState(null),k=t?m==null?void 0:m.channels[t]:null,w=t?R()[t]??[]:[],c=r==null?void 0:r.uiHints,p=t?`channels.${t}`:null,S=((O=r==null?void 0:r.actions)==null?void 0:O.filter(s=>s.scope===p))??[],C=t&&(((U=_(`channels.${t}`,c))==null?void 0:U.label)??t),P=i==null?void 0:i.channels.find(s=>s.name===t),F=P?z(P):void 0;v.useEffect(()=>{if(k){g({...k});const s={};(t?R()[t]??[]:[]).filter(l=>l.type==="json").forEach(l=>{const y=k[l.name];s[l.name]=JSON.stringify(y??{},null,2)}),j(s)}else g({}),j({})},[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{T.error(`${e("invalidJson")}: ${l.name}`);return}}o.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||!p)){f(s.id);try{let n={...d};s.saveBeforeRun&&(n={...n,...s.savePatch??{}},g(n),await o.mutateAsync({channel:t,data:n}));const l=await u.mutateAsync({actionId:s.id,data:{scope:p,draftConfig:Ae(p,n)}});Q(l.patch),l.ok?T.success(l.message||e("success")):T.error(l.message||e("error"))}catch(n){const l=n instanceof Error?n.message:String(n);T.error(`${e("error")}: ${l}`)}finally{f(null)}}};if(!t||!P||!k)return a.jsx("div",{className:je,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:Y(t),className:I("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")}),F&&a.jsxs("a",{href:F,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(J,{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 overscroll-contain px-6 py-5",children:w.map(s=>{const n=t?_(`channels.${t}.${s.name}`,c):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:[De(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(D,{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(D,{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(D,{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(ve,{value:b.value,children:b.label},b.value))})]}),s.type==="json"&&a.jsx("textarea",{id:s.name,value:x[s.name]??"{}",onChange:b=>j(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:o.isPending||!!h,variant:"secondary",children:h===s.id?e("connecting"):s.title},s.id))}),a.jsx(E,{type:"submit",disabled:o.isPending||!!h,children:o.isPending?e("saving"):e("save")})]})]})]})}const Me={telegram:"channelDescTelegram",slack:"channelDescSlack",email:"channelDescEmail",webhook:"channelDescWebhook",discord:"channelDescDiscord",feishu:"channelDescFeishu"};function Ke(){const{data:t}=q(),{data:m}=$(),{data:i}=K(),[r,o]=v.useState("enabled"),[u,d]=v.useState(),[g,x]=v.useState(""),j=i==null?void 0:i.uiHints,h=m==null?void 0:m.channels,f=t==null?void 0:t.channels,k=[{id:"enabled",label:e("channelsTabEnabled"),count:(h??[]).filter(c=>{var p;return(p=f==null?void 0:f[c.name])==null?void 0:p.enabled}).length},{id:"all",label:e("channelsTabAll"),count:(h??[]).length}],w=v.useMemo(()=>{const c=g.trim().toLowerCase();return(h??[]).filter(p=>{var C;const S=((C=f==null?void 0:f[p.name])==null?void 0:C.enabled)||!1;return r==="enabled"?S:!0}).filter(p=>c?(p.displayName||p.name).toLowerCase().includes(c)||p.name.toLowerCase().includes(c):!0)},[r,f,h,g]);return v.useEffect(()=>{if(w.length===0){d(void 0);return}w.some(p=>p.name===u)||d(w[0].name)},[w,u]),!t||!m?a.jsx("div",{className:"p-8 text-gray-400",children:e("channelsLoading")}):a.jsxs(de,{className:"xl:flex xl:h-full xl:min-h-0 xl:flex-col xl:pb-0",children:[a.jsx(be,{title:e("channelsPageTitle"),description:e("channelsPageDescription")}),a.jsxs("div",{className:I(Ce,"xl:min-h-0 xl:flex-1"),children:[a.jsxs("section",{className:Se,children:[a.jsx("div",{className:"border-b border-gray-100 px-4 pt-4",children:a.jsx(Ne,{tabs:k,activeTab:r,onChange:o,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(D,{value:g,onChange:c=>x(c.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 overscroll-contain p-3",children:[w.map(c=>{const p=t.channels[c.name],S=(p==null?void 0:p.enabled)||!1,C=_(`channels.${c.name}`,j),P=z(c),F=(C==null?void 0:C.help)||e(Me[c.name]||"channelDescriptionDefault"),N=u===c.name;return a.jsx("button",{type:"button",onClick:()=>d(c.name),className:I("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:c.name,src:Y(c.name),className:I("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:c.name[0]})}),a.jsxs("div",{className:"min-w-0",children:[a.jsx("p",{className:"truncate text-sm font-semibold text-gray-900",children:c.displayName||c.name}),a.jsx("p",{className:"line-clamp-1 text-[11px] text-gray-500",children:F})]})]}),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(J,{status:S?"active":"inactive",label:S?e("statusActive"):e("statusInactive"),className:"min-w-[56px] justify-center"})]})]})},c.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(Le,{channelName:u})]})]})}export{Ke as ChannelsList};
|